diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/AbstractLwm2mTransportResource.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/AbstractLwm2mTransportResource.java index 07821abc0c..28c10df718 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/AbstractLwm2mTransportResource.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/AbstractLwm2mTransportResource.java @@ -89,4 +89,6 @@ public abstract class AbstractLwm2mTransportResource extends LwM2mCoapResource { exchange.respond(CoAP.ResponseCode.INTERNAL_SERVER_ERROR); } } + + } diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/DefaultLwM2MTransportMsgHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/DefaultLwM2MTransportMsgHandler.java index e3c4fd4646..0fe5df844f 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/DefaultLwM2MTransportMsgHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/DefaultLwM2MTransportMsgHandler.java @@ -139,6 +139,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler public final LwM2mClientContext clientContext; public final LwM2mTransportRequest lwM2mTransportRequest; private final Map rpcSubscriptions; + private final Map getCoapResource; public DefaultLwM2MTransportMsgHandler(TransportService transportService, LwM2MTransportServerConfig config, LwM2mTransportServerHelper helper, LwM2mClientContext clientContext, @@ -154,6 +155,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler this.context = context; this.adaptor = adaptor; this.rpcSubscriptions = new ConcurrentHashMap<>(); + this.getCoapResource = new ConcurrentHashMap<>(); this.sessionStore = sessionStore; } @@ -199,7 +201,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler .setSessionType(TransportProtos.SessionType.ASYNC).build()) .build(), null); this.getInfoFirmwareUpdate(lwM2MClient, null); - this.getInfoSoftwareUpdate(lwM2MClient, null); +// this.getInfoSoftwareUpdate(lwM2MClient, null); this.initLwM2mFromClientValue(registration, lwM2MClient); this.sendLogsToThingsboard(LOG_LW2M_INFO + ": Client create after Registration", registration.getId()); } else { diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportCoapResource.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportCoapResource.java index d2449c4634..0f2e885274 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportCoapResource.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportCoapResource.java @@ -30,6 +30,9 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.FW_COAP_RESOURCE; +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.SW_COAP_RESOURCE; + @Slf4j public class LwM2mTransportCoapResource extends AbstractLwm2mTransportResource { private final ConcurrentMap tokenToObserveRelationMap = new ConcurrentHashMap<>(); @@ -64,9 +67,9 @@ public class LwM2mTransportCoapResource extends AbstractLwm2mTransportResource { @Override protected void processHandleGet(CoapExchange exchange) { log.warn("1) processHandleGet [{}]", exchange); -// exchange.respond(CoAP.ResponseCode.BAD_REQUEST); -// int ver = 10; - int ver = 9; + // exchange.respond(CoAP.ResponseCode.BAD_REQUEST); + int ver = 10; +// int ver = 9; UUID currentId; if (ver == 10) { long mSB = 4951557297924280811L; @@ -77,10 +80,37 @@ public class LwM2mTransportCoapResource extends AbstractLwm2mTransportResource { long lSb = -9086716326447629319L; currentId = new UUID(mSB, lSb); } - String resource = exchange.getRequestOptions().getUriPath().get(0); - String token = exchange.getRequestOptions().getUriPath().get(1); - exchange.respond(CoAP.ResponseCode.CONTENT, this.getFwData(currentId)); + String coapResource = exchange.getRequestOptions().getUriPath().get(0); + String token = exchange.getRequestOptions().getUriPath().get(1); + if (exchange.getRequestOptions().getBlock2() != null) { + int chunkSize = exchange.getRequestOptions().getBlock2().getSzx(); + int chunk = 0; + Response response = new Response(CoAP.ResponseCode.CONTENT); + byte[] fwData = this.getFwData(currentId); + if (fwData != null && fwData.length > 0) { + response.setPayload(fwData); + boolean moreFlag = fwData.length > chunkSize; + response.getOptions().setBlock2(chunkSize, moreFlag, chunk); + exchange.respond(response); + } + + } +// List options = exchange.advanced().getRequest().getOptions().getUriPath(); +// options.stream() +// .filter(o -> FW_COAP_RESOURCE.equals(o)) +// .findFirst() +// .ifPresent(o -> System.err.println(o.getNumber() + " " + o.getStringValue())); + + if (FW_COAP_RESOURCE.equals(coapResource)) { + + } + else if (SW_COAP_RESOURCE.equals(coapResource)) { + + } + + + } @@ -138,9 +168,7 @@ public class LwM2mTransportCoapResource extends AbstractLwm2mTransportResource { } private byte[] getFwData(UUID currentId) { - int chunkSize = 0; - int chunk = 0; - return ((DefaultLwM2MTransportMsgHandler) handler).otaPackageDataCache.get(currentId.toString(), chunkSize, chunk); + return ((DefaultLwM2MTransportMsgHandler) handler).otaPackageDataCache.get(currentId.toString()); } }