Search in sources :

Example 26 with Request

use of org.eclipse.californium.core.coap.Request in project thingsboard by thingsboard.

the class CoapTransportResource method processRequest.

private Optional<SessionId> processRequest(CoapExchange exchange, MsgType type) {
    log.trace("Processing {}", exchange.advanced().getRequest());
    exchange.accept();
    Exchange advanced = exchange.advanced();
    Request request = advanced.getRequest();
    Optional<DeviceCredentialsFilter> credentials = decodeCredentials(request);
    if (!credentials.isPresent()) {
        exchange.respond(ResponseCode.BAD_REQUEST);
        return Optional.empty();
    }
    CoapSessionCtx ctx = new CoapSessionCtx(exchange, adaptor, processor, authService, timeout);
    if (!ctx.login(credentials.get())) {
        exchange.respond(ResponseCode.UNAUTHORIZED);
        return Optional.empty();
    }
    AdaptorToSessionActorMsg msg;
    try {
        switch(type) {
            case GET_ATTRIBUTES_REQUEST:
            case POST_ATTRIBUTES_REQUEST:
            case POST_TELEMETRY_REQUEST:
            case TO_DEVICE_RPC_RESPONSE:
            case TO_SERVER_RPC_REQUEST:
                ctx.setSessionType(SessionType.SYNC);
                msg = adaptor.convertToActorMsg(ctx, type, request);
                break;
            case SUBSCRIBE_ATTRIBUTES_REQUEST:
            case SUBSCRIBE_RPC_COMMANDS_REQUEST:
                ExchangeObserver systemObserver = (ExchangeObserver) observerField.get(advanced);
                advanced.setObserver(new CoapExchangeObserverProxy(systemObserver, ctx));
                ctx.setSessionType(SessionType.ASYNC);
                msg = adaptor.convertToActorMsg(ctx, type, request);
                break;
            case UNSUBSCRIBE_ATTRIBUTES_REQUEST:
            case UNSUBSCRIBE_RPC_COMMANDS_REQUEST:
                ctx.setSessionType(SessionType.ASYNC);
                msg = adaptor.convertToActorMsg(ctx, type, request);
                break;
            default:
                log.trace("[{}] Unsupported msg type: {}", ctx.getSessionId(), type);
                throw new IllegalArgumentException("Unsupported msg type: " + type);
        }
        log.trace("Processing msg: {}", msg);
        processor.process(new BasicToDeviceActorSessionMsg(ctx.getDevice(), msg));
    } catch (AdaptorException e) {
        log.debug("Failed to decode payload {}", e);
        exchange.respond(ResponseCode.BAD_REQUEST, e.getMessage());
        return Optional.empty();
    } catch (IllegalArgumentException | IllegalAccessException e) {
        log.debug("Failed to process payload {}", e);
        exchange.respond(ResponseCode.INTERNAL_SERVER_ERROR, e.getMessage());
    }
    return Optional.of(ctx.getSessionId());
}
Also used : Request(org.eclipse.californium.core.coap.Request) CoapExchangeObserverProxy(org.thingsboard.server.transport.coap.session.CoapExchangeObserverProxy) CoapExchange(org.eclipse.californium.core.server.resources.CoapExchange) Exchange(org.eclipse.californium.core.network.Exchange) DeviceCredentialsFilter(org.thingsboard.server.common.data.security.DeviceCredentialsFilter) AdaptorException(org.thingsboard.server.common.transport.adaptor.AdaptorException) CoapSessionCtx(org.thingsboard.server.transport.coap.session.CoapSessionCtx) ExchangeObserver(org.eclipse.californium.core.network.ExchangeObserver)

Aggregations

Request (org.eclipse.californium.core.coap.Request)26 Registration (org.eclipse.leshan.server.registration.Registration)14 ObserveRequest (org.eclipse.leshan.core.request.ObserveRequest)13 ReadRequest (org.eclipse.leshan.core.request.ReadRequest)13 Test (org.junit.Test)13 CreateRequest (org.eclipse.leshan.core.request.CreateRequest)12 DeleteRequest (org.eclipse.leshan.core.request.DeleteRequest)12 DiscoverRequest (org.eclipse.leshan.core.request.DiscoverRequest)12 ExecuteRequest (org.eclipse.leshan.core.request.ExecuteRequest)12 WriteAttributesRequest (org.eclipse.leshan.core.request.WriteAttributesRequest)12 WriteRequest (org.eclipse.leshan.core.request.WriteRequest)12 Response (org.eclipse.californium.core.coap.Response)7 LwM2mResponse (org.eclipse.leshan.core.response.LwM2mResponse)6 DownlinkRequest (org.eclipse.leshan.core.request.DownlinkRequest)5 MessageObserver (org.eclipse.californium.core.coap.MessageObserver)3 AsyncRequestObserver (org.eclipse.leshan.core.californium.AsyncRequestObserver)3 SyncRequestObserver (org.eclipse.leshan.core.californium.SyncRequestObserver)3 DeregisterRequest (org.eclipse.leshan.core.request.DeregisterRequest)3 RegisterRequest (org.eclipse.leshan.core.request.RegisterRequest)3 UplinkRequest (org.eclipse.leshan.core.request.UplinkRequest)3