Commit e83064ece73ec11726c131e56c47949f6d70e7e2

Authored by Andrii Shvaika
1 parent 3a82c227

Refactoring of the LwM2MTransport

Showing 14 changed files with 98 additions and 167 deletions
... ... @@ -14,7 +14,7 @@
14 14 <logger name="org.springframework.boot.test" level="WARN"/>
15 15 <logger name="org.apache.cassandra" level="WARN"/>
16 16 <logger name="org.cassandraunit" level="INFO"/>
17   - <logger name="org.eclipse.leshan" level="TRACE"/>
  17 + <logger name="org.eclipse.leshan" level="INFO"/>
18 18
19 19
20 20 <root level="WARN">
... ...
... ... @@ -42,14 +42,12 @@ public class OtaPackageTransportResource extends AbstractCoapTransportResource {
42 42 private static final int ACCESS_TOKEN_POSITION = 2;
43 43
44 44 private final OtaPackageType otaPackageType;
45   - private final ExecutorService sendOtaDataOutUriLarge;
46 45
47 46 public OtaPackageTransportResource(CoapTransportContext ctx, OtaPackageType otaPackageType) {
48 47 super(ctx, otaPackageType.getKeyPrefix());
49 48 this.otaPackageType = otaPackageType;
50 49
51 50 this.setObservable(true);
52   - this.sendOtaDataOutUriLarge = ThingsBoardExecutors.newWorkStealingPool(10, "LwM2M sendOtaDataOutUriLarge");
53 51 }
54 52
55 53 @Override
... ... @@ -140,46 +138,12 @@ public class OtaPackageTransportResource extends AbstractCoapTransportResource {
140 138 Response response = new Response(CoAP.ResponseCode.CONTENT);
141 139 if (data != null && data.length > 0) {
142 140 response.setPayload(data);
143   -// response.getOptions().setAccept(MediaTypeRegistry.APPLICATION_OCTET_STREAM);
144 141 if (exchange.getRequestOptions().getBlock2() != null) {
145 142 int chunkSize = exchange.getRequestOptions().getBlock2().getSzx();
146 143 boolean lastFlag = data.length <= chunkSize;
147   - this.sendOtaDataOutUriLarge.submit(() -> {
148   - response.getOptions().setBlock2(chunkSize, lastFlag, 0);
149   - }); }
150   - exchange.respond(response);
151   - }
152   - }
153   -
154   - public class CoapResourceObserver implements ResourceObserver {
155   - @Override
156   - public void changedName(String old) {
157   -
158   - }
159   -
160   - @Override
161   - public void changedPath(String old) {
162   -
163   - }
164   -
165   - @Override
166   - public void addedChild(Resource child) {
167   -
168   - }
169   -
170   - @Override
171   - public void removedChild(Resource child) {
172   -
173   - }
174   -
175   - @Override
176   - public void addedObserveRelation(ObserveRelation relation) {
177   -
178   - }
179   -
180   - @Override
181   - public void removedObserveRelation(ObserveRelation relation) {
182   -
  144 + response.getOptions().setBlock2(chunkSize, lastFlag, 0);
  145 + }
  146 + transportContext.getExecutor().submit(() -> exchange.respond(response));
183 147 }
184 148 }
185 149
... ...
... ... @@ -142,7 +142,7 @@ public class LwM2MTransportServerConfig implements LwM2MSecureServerConfig {
142 142 URI uri = null;
143 143 try {
144 144 uri = Resources.getResource(keyStorePathFile).toURI();
145   - log.error("URI: {}", uri);
  145 + log.info("URI: {}", uri);
146 146 File keyStoreFile = new File(uri);
147 147 InputStream inKeyStore = new FileInputStream(keyStoreFile);
148 148 keyStoreValue = KeyStore.getInstance(keyStoreType);
... ...
... ... @@ -59,12 +59,12 @@ public class LwM2mCredentialsSecurityInfoValidator {
59 59 public TbLwM2MSecurityInfo getEndpointSecurityInfoByCredentialsId(String credentialsId, LwM2mTypeServer keyValue) {
60 60 CountDownLatch latch = new CountDownLatch(1);
61 61 final TbLwM2MSecurityInfo[] resultSecurityStore = new TbLwM2MSecurityInfo[1];
62   - log.warn("001) [{}]", credentialsId);
  62 + log.trace("Validating credentials [{}]", credentialsId);
63 63 context.getTransportService().process(ValidateDeviceLwM2MCredentialsRequestMsg.newBuilder().setCredentialsId(credentialsId).build(),
64 64 new TransportServiceCallback<>() {
65 65 @Override
66 66 public void onSuccess(ValidateDeviceCredentialsResponse msg) {
67   - log.warn("002) [{}] [{}]", credentialsId, msg);
  67 + log.trace("Validated credentials: [{}] [{}]", credentialsId, msg);
68 68 String credentialsBody = msg.getCredentials();
69 69 resultSecurityStore[0] = createSecurityInfo(credentialsId, credentialsBody, keyValue);
70 70 resultSecurityStore[0].setMsg(msg);
... ... @@ -74,7 +74,6 @@ public class LwM2mCredentialsSecurityInfoValidator {
74 74
75 75 @Override
76 76 public void onError(Throwable e) {
77   - log.warn("003) [{}] [{}] Failed to process credentials ", credentialsId, e);
78 77 log.trace("[{}] [{}] Failed to process credentials ", credentialsId, e);
79 78 resultSecurityStore[0] = createSecurityInfo(credentialsId, null, null);
80 79 latch.countDown();
... ...
... ... @@ -46,10 +46,10 @@ import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTrans
46 46 import org.thingsboard.server.common.transport.TransportServiceCallback;
47 47 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
48 48 import org.thingsboard.server.transport.lwm2m.server.client.ResourceValue;
49   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateResultFw;
50   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateStateFw;
51   -import org.thingsboard.server.transport.lwm2m.server.ota.software.UpdateResultSw;
52   -import org.thingsboard.server.transport.lwm2m.server.ota.software.UpdateStateSw;
  49 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateResult;
  50 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateState;
  51 +import org.thingsboard.server.transport.lwm2m.server.ota.software.SoftwareUpdateResult;
  52 +import org.thingsboard.server.transport.lwm2m.server.ota.software.SoftwareUpdateState;
53 53 import org.thingsboard.server.transport.lwm2m.server.uplink.DefaultLwM2MUplinkMsgHandler;
54 54
55 55 import java.util.ArrayList;
... ... @@ -148,19 +148,19 @@ public class LwM2mTransportUtil {
148 148 if (path != null) {
149 149 if (FW_STATE_ID.equals(path)) {
150 150 lwM2mOtaConvert.setCurrentType(STRING);
151   - lwM2mOtaConvert.setValue(UpdateStateFw.fromStateFwByCode(((Long) value).intValue()).type);
  151 + lwM2mOtaConvert.setValue(FirmwareUpdateState.fromStateFwByCode(((Long) value).intValue()).type);
152 152 return lwM2mOtaConvert;
153 153 } else if (FW_RESULT_ID.equals(path)) {
154 154 lwM2mOtaConvert.setCurrentType(STRING);
155   - lwM2mOtaConvert.setValue(UpdateResultFw.fromUpdateResultFwByCode(((Long) value).intValue()).getType());
  155 + lwM2mOtaConvert.setValue(FirmwareUpdateResult.fromUpdateResultFwByCode(((Long) value).intValue()).getType());
156 156 return lwM2mOtaConvert;
157 157 } else if (SW_UPDATE_STATE_ID.equals(path)) {
158 158 lwM2mOtaConvert.setCurrentType(STRING);
159   - lwM2mOtaConvert.setValue(UpdateStateSw.fromUpdateStateSwByCode(((Long) value).intValue()).type);
  159 + lwM2mOtaConvert.setValue(SoftwareUpdateState.fromUpdateStateSwByCode(((Long) value).intValue()).type);
160 160 return lwM2mOtaConvert;
161 161 } else if (SW_RESULT_ID.equals(path)) {
162 162 lwM2mOtaConvert.setCurrentType(STRING);
163   - lwM2mOtaConvert.setValue(UpdateResultSw.fromUpdateResultSwByCode(((Long) value).intValue()).type);
  163 + lwM2mOtaConvert.setValue(SoftwareUpdateResult.fromUpdateResultSwByCode(((Long) value).intValue()).type);
164 164 return lwM2mOtaConvert;
165 165 }
166 166 }
... ... @@ -435,19 +435,6 @@ public class LwM2mTransportUtil {
435 435 }
436 436 }
437 437
438   -// public static boolean isFwSwWords(String pathName) {
439   -// return OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.VERSION).equals(pathName)
440   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.TITLE).equals(pathName)
441   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.CHECKSUM).equals(pathName)
442   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.CHECKSUM_ALGORITHM).equals(pathName)
443   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.SIZE).equals(pathName)
444   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.VERSION).equals(pathName)
445   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.TITLE).equals(pathName)
446   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.CHECKSUM).equals(pathName)
447   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.CHECKSUM_ALGORITHM).equals(pathName)
448   -// || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.SIZE).equals(pathName);
449   -// }
450   -
451 438 /**
452 439 * @param lwM2MClient -
453 440 * @param path -
... ...
... ... @@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
25 25 import org.thingsboard.common.util.DonAsynchron;
26 26 import org.thingsboard.server.cache.ota.OtaPackageDataCache;
27 27 import org.thingsboard.server.common.data.StringUtils;
  28 +import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
28 29 import org.thingsboard.server.common.data.ota.OtaPackageKey;
29 30 import org.thingsboard.server.common.data.ota.OtaPackageType;
30 31 import org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus;
... ... @@ -45,12 +46,12 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteReplac
45 46 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteResponseCallback;
46 47 import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogService;
47 48 import org.thingsboard.server.transport.lwm2m.server.ota.firmware.LwM2MFirmwareUpdateStrategy;
48   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateDeliveryFw;
49   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateResultFw;
50   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateStateFw;
  49 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareDeliveryMethod;
  50 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateResult;
  51 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateState;
51 52 import org.thingsboard.server.transport.lwm2m.server.ota.software.LwM2MSoftwareUpdateStrategy;
52   -import org.thingsboard.server.transport.lwm2m.server.ota.software.UpdateResultSw;
53   -import org.thingsboard.server.transport.lwm2m.server.ota.software.UpdateStateSw;
  53 +import org.thingsboard.server.transport.lwm2m.server.ota.software.SoftwareUpdateResult;
  54 +import org.thingsboard.server.transport.lwm2m.server.ota.software.SoftwareUpdateState;
54 55 import org.thingsboard.server.transport.lwm2m.server.uplink.LwM2mUplinkMsgHandler;
55 56
56 57 import javax.annotation.PostConstruct;
... ... @@ -201,20 +202,20 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
201 202 }
202 203
203 204 @Override
204   - public void onCurrentFirmwareStrategyUpdate(LwM2mClient client, Integer newStrategy, String newBaseUrl) {
205   - log.debug("[{}] Current fw strategy: {}", client.getEndpoint(), newStrategy);
  205 + public void onCurrentFirmwareStrategyUpdate(LwM2mClient client, OtherConfiguration configuration) {
  206 + log.debug("[{}] Current fw strategy: {}", client.getEndpoint(), configuration.getFwUpdateStrategy());
206 207 LwM2MClientOtaInfo fwInfo = getOrInitFwInfo(client);
207   - fwInfo.setFwStrategy(LwM2MFirmwareUpdateStrategy.fromStrategyFwByCode(newStrategy));
208   - fwInfo.setBaseUrl(newBaseUrl);
  208 + fwInfo.setFwStrategy(LwM2MFirmwareUpdateStrategy.fromStrategyFwByCode(configuration.getFwUpdateStrategy()));
  209 + fwInfo.setBaseUrl(configuration.getFwUpdateRecourse());
209 210 startFirmwareUpdateIfNeeded(client, fwInfo);
210 211 }
211 212
212 213 @Override
213   - public void onCurrentSoftwareStrategyUpdate(LwM2mClient client, Integer newStrategy, String newBaseUrl) {
214   - log.debug("[{}] Current sw strategy: {}", client.getEndpoint(), newStrategy);
  214 + public void onCurrentSoftwareStrategyUpdate(LwM2mClient client, OtherConfiguration configuration) {
  215 + log.debug("[{}] Current sw strategy: {}", client.getEndpoint(), configuration.getSwUpdateStrategy());
215 216 LwM2MClientOtaInfo swInfo = getOrInitSwInfo(client);
216   - swInfo.setSwStrategy(LwM2MSoftwareUpdateStrategy.fromStrategySwByCode(newStrategy));
217   - swInfo.setBaseUrl(newBaseUrl);
  217 + swInfo.setSwStrategy(LwM2MSoftwareUpdateStrategy.fromStrategySwByCode(configuration.getSwUpdateStrategy()));
  218 + swInfo.setBaseUrl(configuration.getSwUpdateRecourse());
218 219 startSoftwareUpdateIfNeeded(client, swInfo);
219 220 }
220 221
... ... @@ -236,8 +237,8 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
236 237 public void onCurrentFirmwareStateUpdate(LwM2mClient client, Long stateCode) {
237 238 log.debug("[{}] Current fw state: {}", client.getEndpoint(), stateCode);
238 239 LwM2MClientOtaInfo fwInfo = getOrInitFwInfo(client);
239   - UpdateStateFw state = UpdateStateFw.fromStateFwByCode(stateCode.intValue());
240   - if (UpdateStateFw.DOWNLOADED.equals(state)) {
  240 + FirmwareUpdateState state = FirmwareUpdateState.fromStateFwByCode(stateCode.intValue());
  241 + if (FirmwareUpdateState.DOWNLOADED.equals(state)) {
241 242 executeFwUpdate(client);
242 243 }
243 244 fwInfo.setUpdateState(state);
... ... @@ -250,7 +251,7 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
250 251 public void onCurrentFirmwareResultUpdate(LwM2mClient client, Long code) {
251 252 log.debug("[{}] Current fw result: {}", client.getEndpoint(), code);
252 253 LwM2MClientOtaInfo fwInfo = getOrInitFwInfo(client);
253   - UpdateResultFw result = UpdateResultFw.fromUpdateResultFwByCode(code.intValue());
  254 + FirmwareUpdateResult result = FirmwareUpdateResult.fromUpdateResultFwByCode(code.intValue());
254 255 Optional<OtaPackageUpdateStatus> status = this.toOtaPackageUpdateStatus(result);
255 256 status.ifPresent(otaStatus -> sendStateUpdateToTelemetry(client, fwInfo,
256 257 otaStatus, "Firmware Update Result: " + result.name()));
... ... @@ -324,10 +325,10 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
324 325 if (TransportProtos.ResponseStatus.SUCCESS.equals(response.getResponseStatus())) {
325 326 UUID otaPackageId = new UUID(response.getOtaPackageIdMSB(), response.getOtaPackageIdLSB());
326 327 LwM2MFirmwareUpdateStrategy strategy;
327   - if (fwInfo.getDeliveryMethod() == null || fwInfo.getDeliveryMethod() == UpdateDeliveryFw.BOTH.code) {
  328 + if (fwInfo.getDeliveryMethod() == null || fwInfo.getDeliveryMethod() == FirmwareDeliveryMethod.BOTH.code) {
328 329 strategy = fwInfo.getFwStrategy();
329 330 } else {
330   - strategy = fwInfo.getDeliveryMethod() == UpdateDeliveryFw.PULL.code ? LwM2MFirmwareUpdateStrategy.OBJ_5_TEMP_URL : LwM2MFirmwareUpdateStrategy.OBJ_5_BINARY;
  331 + strategy = fwInfo.getDeliveryMethod() == FirmwareDeliveryMethod.PULL.code ? LwM2MFirmwareUpdateStrategy.OBJ_5_TEMP_URL : LwM2MFirmwareUpdateStrategy.OBJ_5_BINARY;
331 332 }
332 333 switch (strategy) {
333 334 case OBJ_5_BINARY:
... ... @@ -405,8 +406,8 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
405 406 helper.sendParametersOnThingsboardTelemetry(result, client.getSession());
406 407 }
407 408
408   - private static Optional<OtaPackageUpdateStatus> toOtaPackageUpdateStatus(UpdateResultFw updateResultFw) {
409   - switch (updateResultFw) {
  409 + private static Optional<OtaPackageUpdateStatus> toOtaPackageUpdateStatus(FirmwareUpdateResult fwUpdateResult) {
  410 + switch (fwUpdateResult) {
410 411 case INITIAL:
411 412 return Optional.empty();
412 413 case UPDATE_SUCCESSFULLY:
... ... @@ -421,12 +422,12 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
421 422 case UNSUPPORTED_PROTOCOL:
422 423 return Optional.of(FAILED);
423 424 default:
424   - throw new CodecException("Invalid value stateFw %s for FirmwareUpdateStatus.", updateResultFw.name());
  425 + throw new CodecException("Invalid value stateFw %s for FirmwareUpdateStatus.", fwUpdateResult.name());
425 426 }
426 427 }
427 428
428   - private static Optional<OtaPackageUpdateStatus> toOtaPackageUpdateStatus(UpdateStateFw updateStateFw) {
429   - switch (updateStateFw) {
  429 + private static Optional<OtaPackageUpdateStatus> toOtaPackageUpdateStatus(FirmwareUpdateState firmwareUpdateState) {
  430 + switch (firmwareUpdateState) {
430 431 case IDLE:
431 432 return Optional.empty();
432 433 case DOWNLOADING:
... ... @@ -436,7 +437,7 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
436 437 case UPDATING:
437 438 return Optional.of(UPDATING);
438 439 default:
439   - throw new CodecException("Invalid value stateFw %d for FirmwareUpdateStatus.", updateStateFw);
  440 + throw new CodecException("Invalid value stateFw %d for FirmwareUpdateStatus.", firmwareUpdateState);
440 441 }
441 442 }
442 443
... ... @@ -444,10 +445,10 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
444 445 * FirmwareUpdateStatus {
445 446 * DOWNLOADING, DOWNLOADED, VERIFIED, UPDATING, UPDATED, FAILED
446 447 */
447   - public static Optional<OtaPackageUpdateStatus> toSwSateResultUpdateStatus(UpdateStateSw updateStateSw, UpdateResultSw updateResultSw) {
448   - switch (updateResultSw) {
  448 + public static Optional<OtaPackageUpdateStatus> toSwSateResultUpdateStatus(SoftwareUpdateState softwareUpdateState, SoftwareUpdateResult softwareUpdateResult) {
  449 + switch (softwareUpdateResult) {
449 450 case INITIAL:
450   - switch (updateStateSw) {
  451 + switch (softwareUpdateState) {
451 452 case INITIAL:
452 453 case DOWNLOAD_STARTED:
453 454 return Optional.of(DOWNLOADING);
... ... @@ -473,10 +474,8 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
473 474 case UN_INSTALL_FAILURE:
474 475 return Optional.of(FAILED);
475 476 default:
476   - throw new CodecException("Invalid value stateFw %s %s for FirmwareUpdateStatus.", updateStateSw.name(), updateResultSw.name());
  477 + throw new CodecException("Invalid value stateFw %s %s for FirmwareUpdateStatus.", softwareUpdateState.name(), softwareUpdateResult.name());
477 478 }
478 479 }
479 480
480   -
481   -
482 481 }
... ...
... ... @@ -19,8 +19,8 @@ import lombok.Data;
19 19 import org.thingsboard.server.common.data.StringUtils;
20 20 import org.thingsboard.server.common.data.ota.OtaPackageType;
21 21 import org.thingsboard.server.transport.lwm2m.server.ota.firmware.LwM2MFirmwareUpdateStrategy;
22   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateResultFw;
23   -import org.thingsboard.server.transport.lwm2m.server.ota.firmware.UpdateStateFw;
  22 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateResult;
  23 +import org.thingsboard.server.transport.lwm2m.server.ota.firmware.FirmwareUpdateState;
24 24 import org.thingsboard.server.transport.lwm2m.server.ota.software.LwM2MSoftwareUpdateStrategy;
25 25
26 26 import java.util.Optional;
... ... @@ -47,8 +47,8 @@ public class LwM2MClientOtaInfo {
47 47 //TODO: use value from device if applicable;
48 48 private LwM2MFirmwareUpdateStrategy fwStrategy;
49 49 private LwM2MSoftwareUpdateStrategy swStrategy;
50   - private UpdateStateFw updateState;
51   - private UpdateResultFw updateResult;
  50 + private FirmwareUpdateState updateState;
  51 + private FirmwareUpdateResult updateResult;
52 52
53 53 private String failedPackageId;
54 54 private int retryAttempts;
... ... @@ -90,7 +90,7 @@ public class LwM2MClientOtaInfo {
90 90 return StringUtils.isNotEmpty(currentName) || StringUtils.isNotEmpty(currentVersion5) || StringUtils.isNotEmpty(currentVersion3);
91 91 }
92 92
93   - public void setUpdateResult(UpdateResultFw updateResult) {
  93 + public void setUpdateResult(FirmwareUpdateResult updateResult) {
94 94 this.updateResult = updateResult;
95 95 switch (updateResult) {
96 96 case INITIAL:
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.transport.lwm2m.server.ota;
17 17
  18 +import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
18 19 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
19 20
20 21 import java.util.Optional;
... ... @@ -31,9 +32,9 @@ public interface LwM2MOtaUpdateService {
31 32
32 33 void onCurrentFirmwareNameUpdate(LwM2mClient client, String name);
33 34
34   - void onCurrentFirmwareStrategyUpdate(LwM2mClient client, Integer newStrategy, String newBaseUrl);
  35 + void onCurrentFirmwareStrategyUpdate(LwM2mClient client, OtherConfiguration configuration);
35 36
36   - void onCurrentSoftwareStrategyUpdate(LwM2mClient client, Integer newStrategy, String newBaseUrl);
  37 + void onCurrentSoftwareStrategyUpdate(LwM2mClient client, OtherConfiguration configuration);
37 38
38 39 void onCurrentFirmwareVersion3Update(LwM2mClient client, String version);
39 40
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/FirmwareDeliveryMethod.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/UpdateDeliveryFw.java
... ... @@ -15,14 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.transport.lwm2m.server.ota.firmware;
17 17
18   -/**
19   - * /** Delivery Method R
20   - * 0: Pull only
21   - * 1: Push only
22   - * 2: Both:
23   - * - In this case the LwM2M Server MAY choose the preferred mechanism for conveying the firmware image to the LwM2M Client.
24   - */
25   -public enum UpdateDeliveryFw {
  18 +public enum FirmwareDeliveryMethod {
26 19 PULL(0, "Pull only"),
27 20 PUSH(1, "Push only"),
28 21 BOTH(2, "Push or Push");
... ... @@ -30,13 +23,13 @@ public enum UpdateDeliveryFw {
30 23 public int code;
31 24 public String type;
32 25
33   - UpdateDeliveryFw(int code, String type) {
  26 + FirmwareDeliveryMethod(int code, String type) {
34 27 this.code = code;
35 28 this.type = type;
36 29 }
37 30
38   - public static UpdateDeliveryFw fromStateFwByType(String type) {
39   - for (UpdateDeliveryFw to : UpdateDeliveryFw.values()) {
  31 + public static FirmwareDeliveryMethod fromStateFwByType(String type) {
  32 + for (FirmwareDeliveryMethod to : FirmwareDeliveryMethod.values()) {
40 33 if (to.type.equals(type)) {
41 34 return to;
42 35 }
... ... @@ -44,8 +37,8 @@ public enum UpdateDeliveryFw {
44 37 throw new IllegalArgumentException(String.format("Unsupported FW delivery type : %s", type));
45 38 }
46 39
47   - public static UpdateDeliveryFw fromStateFwByCode(int code) {
48   - for (UpdateDeliveryFw to : UpdateDeliveryFw.values()) {
  40 + public static FirmwareDeliveryMethod fromStateFwByCode(int code) {
  41 + for (FirmwareDeliveryMethod to : FirmwareDeliveryMethod.values()) {
49 42 if (to.code == code) {
50 43 return to;
51 44 }
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/FirmwareUpdateResult.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/UpdateResultFw.java
... ... @@ -30,7 +30,7 @@ import lombok.Getter;
30 30 * 8: Firmware update failed.
31 31 * 9: Unsupported protocol.
32 32 */
33   -public enum UpdateResultFw {
  33 +public enum FirmwareUpdateResult {
34 34 INITIAL(0, "Initial value", false),
35 35 UPDATE_SUCCESSFULLY(1, "Firmware updated successfully", false),
36 36 NOT_ENOUGH(2, "Not enough flash memory for the new firmware package", false),
... ... @@ -49,14 +49,14 @@ public enum UpdateResultFw {
49 49 @Getter
50 50 private boolean again;
51 51
52   - UpdateResultFw(int code, String type, boolean isAgain) {
  52 + FirmwareUpdateResult(int code, String type, boolean isAgain) {
53 53 this.code = code;
54 54 this.type = type;
55 55 this.again = isAgain;
56 56 }
57 57
58   - public static UpdateResultFw fromUpdateResultFwByType(String type) {
59   - for (UpdateResultFw to : UpdateResultFw.values()) {
  58 + public static FirmwareUpdateResult fromUpdateResultFwByType(String type) {
  59 + for (FirmwareUpdateResult to : FirmwareUpdateResult.values()) {
60 60 if (to.type.equals(type)) {
61 61 return to;
62 62 }
... ... @@ -64,8 +64,8 @@ public enum UpdateResultFw {
64 64 throw new IllegalArgumentException(String.format("Unsupported FW Update Result type : %s", type));
65 65 }
66 66
67   - public static UpdateResultFw fromUpdateResultFwByCode(int code) {
68   - for (UpdateResultFw to : UpdateResultFw.values()) {
  67 + public static FirmwareUpdateResult fromUpdateResultFwByCode(int code) {
  68 + for (FirmwareUpdateResult to : FirmwareUpdateResult.values()) {
69 69 if (to.code == code) {
70 70 return to;
71 71 }
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/FirmwareUpdateState.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/firmware/UpdateStateFw.java
... ... @@ -22,7 +22,7 @@ package org.thingsboard.server.transport.lwm2m.server.ota.firmware;
22 22 * 2: Downloaded
23 23 * 3: Updating
24 24 */
25   -public enum UpdateStateFw {
  25 +public enum FirmwareUpdateState {
26 26 IDLE(0, "Idle"),
27 27 DOWNLOADING(1, "Downloading"),
28 28 DOWNLOADED(2, "Downloaded"),
... ... @@ -31,13 +31,13 @@ public enum UpdateStateFw {
31 31 public int code;
32 32 public String type;
33 33
34   - UpdateStateFw(int code, String type) {
  34 + FirmwareUpdateState(int code, String type) {
35 35 this.code = code;
36 36 this.type = type;
37 37 }
38 38
39   - public static UpdateStateFw fromStateFwByType(String type) {
40   - for (UpdateStateFw to : UpdateStateFw.values()) {
  39 + public static FirmwareUpdateState fromStateFwByType(String type) {
  40 + for (FirmwareUpdateState to : FirmwareUpdateState.values()) {
41 41 if (to.type.equals(type)) {
42 42 return to;
43 43 }
... ... @@ -45,8 +45,8 @@ public enum UpdateStateFw {
45 45 throw new IllegalArgumentException(String.format("Unsupported FW State type : %s", type));
46 46 }
47 47
48   - public static UpdateStateFw fromStateFwByCode(int code) {
49   - for (UpdateStateFw to : UpdateStateFw.values()) {
  48 + public static FirmwareUpdateState fromStateFwByCode(int code) {
  49 + for (FirmwareUpdateState to : FirmwareUpdateState.values()) {
50 50 if (to.code == code) {
51 51 return to;
52 52 }
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/software/SoftwareUpdateResult.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/software/UpdateResultSw.java
... ... @@ -39,7 +39,7 @@ package org.thingsboard.server.transport.lwm2m.server.ota.software;
39 39 * 60-200 : (for expansion, selection to be in blocks depending on new introduction of features)
40 40 * This Resource MAY be reported by sending Observe operation.
41 41 */
42   -public enum UpdateResultSw {
  42 +public enum SoftwareUpdateResult {
43 43 INITIAL(0, "Initial value", false),
44 44 DOWNLOADING(1, "Downloading", false),
45 45 SUCCESSFULLY_INSTALLED(2, "Software successfully installed", false),
... ... @@ -58,14 +58,14 @@ public enum UpdateResultSw {
58 58 public String type;
59 59 public boolean isAgain;
60 60
61   - UpdateResultSw(int code, String type, boolean isAgain) {
  61 + SoftwareUpdateResult(int code, String type, boolean isAgain) {
62 62 this.code = code;
63 63 this.type = type;
64 64 this.isAgain = isAgain;
65 65 }
66 66
67   - public static UpdateResultSw fromUpdateResultSwByType(String type) {
68   - for (UpdateResultSw to : UpdateResultSw.values()) {
  67 + public static SoftwareUpdateResult fromUpdateResultSwByType(String type) {
  68 + for (SoftwareUpdateResult to : SoftwareUpdateResult.values()) {
69 69 if (to.type.equals(type)) {
70 70 return to;
71 71 }
... ... @@ -73,8 +73,8 @@ public enum UpdateResultSw {
73 73 throw new IllegalArgumentException(String.format("Unsupported SW Update Result type : %s", type));
74 74 }
75 75
76   - public static UpdateResultSw fromUpdateResultSwByCode(int code) {
77   - for (UpdateResultSw to : UpdateResultSw.values()) {
  76 + public static SoftwareUpdateResult fromUpdateResultSwByCode(int code) {
  77 + for (SoftwareUpdateResult to : SoftwareUpdateResult.values()) {
78 78 if (to.code == code) {
79 79 return to;
80 80 }
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/software/SoftwareUpdateState.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/ota/software/UpdateStateSw.java
... ... @@ -26,7 +26,7 @@ package org.thingsboard.server.transport.lwm2m.server.ota.software;
26 26 * After executing the UnInstall Resource, the state changes to INITIAL.
27 27 * 4: INSTALLED
28 28 */
29   -public enum UpdateStateSw {
  29 +public enum SoftwareUpdateState {
30 30 INITIAL(0, "Initial"),
31 31 DOWNLOAD_STARTED(1, "DownloadStarted"),
32 32 DOWNLOADED(2, "Downloaded"),
... ... @@ -36,13 +36,13 @@ public enum UpdateStateSw {
36 36 public int code;
37 37 public String type;
38 38
39   - UpdateStateSw(int code, String type) {
  39 + SoftwareUpdateState(int code, String type) {
40 40 this.code = code;
41 41 this.type = type;
42 42 }
43 43
44   - public static UpdateStateSw fromUpdateStateSwByType(String type) {
45   - for (UpdateStateSw to : UpdateStateSw.values()) {
  44 + public static SoftwareUpdateState fromUpdateStateSwByType(String type) {
  45 + for (SoftwareUpdateState to : SoftwareUpdateState.values()) {
46 46 if (to.type.equals(type)) {
47 47 return to;
48 48 }
... ... @@ -50,8 +50,8 @@ public enum UpdateStateSw {
50 50 throw new IllegalArgumentException(String.format("Unsupported SW State type : %s", type));
51 51 }
52 52
53   - public static UpdateStateSw fromUpdateStateSwByCode(int code) {
54   - for (UpdateStateSw to : UpdateStateSw.values()) {
  53 + public static SoftwareUpdateState fromUpdateStateSwByCode(int code) {
  54 + for (SoftwareUpdateState to : SoftwareUpdateState.values()) {
55 55 if (to.code == code) {
56 56 return to;
57 57 }
... ...
... ... @@ -40,7 +40,9 @@ import org.thingsboard.common.util.DonAsynchron;
40 40 import org.thingsboard.server.cache.ota.OtaPackageDataCache;
41 41 import org.thingsboard.server.common.data.Device;
42 42 import org.thingsboard.server.common.data.DeviceProfile;
  43 +import org.thingsboard.server.common.data.StringUtils;
43 44 import org.thingsboard.server.common.data.device.data.lwm2m.ObjectAttributes;
  45 +import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
44 46 import org.thingsboard.server.common.data.device.data.lwm2m.TelemetryMappingConfiguration;
45 47 import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
46 48 import org.thingsboard.server.common.data.ota.OtaPackageUtil;
... ... @@ -130,16 +132,13 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
130 132 private final LwM2mTransportContext context;
131 133 private final LwM2MAttributesService attributesService;
132 134 private final LwM2MOtaUpdateService otaService;
133   - public final LwM2MTransportServerConfig config;
  135 + private final LwM2MTransportServerConfig config;
134 136 private final LwM2MTelemetryLogService logService;
135   - public final OtaPackageDataCache otaPackageDataCache;
136   - public final LwM2mTransportServerHelper helper;
  137 + private final LwM2mTransportServerHelper helper;
137 138 private final TbLwM2MDtlsSessionStore sessionStore;
138   - public final LwM2mClientContext clientContext;
  139 + private final LwM2mClientContext clientContext;
139 140 private final LwM2MRpcRequestHandler rpcHandler;
140   - public final LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler;
141   -
142   - public final Map<String, Integer> firmwareUpdateState;
  141 + private final LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler;
143 142
144 143 public DefaultLwM2MUplinkMsgHandler(TransportService transportService,
145 144 LwM2MTransportServerConfig config,
... ... @@ -150,7 +149,6 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
150 149 @Lazy LwM2MAttributesService attributesService,
151 150 @Lazy LwM2MRpcRequestHandler rpcHandler,
152 151 @Lazy LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler,
153   - OtaPackageDataCache otaPackageDataCache,
154 152 LwM2mTransportContext context, TbLwM2MDtlsSessionStore sessionStore) {
155 153 this.transportService = transportService;
156 154 this.attributesService = attributesService;
... ... @@ -161,9 +159,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
161 159 this.logService = logService;
162 160 this.rpcHandler = rpcHandler;
163 161 this.defaultLwM2MDownlinkMsgHandler = defaultLwM2MDownlinkMsgHandler;
164   - this.otaPackageDataCache = otaPackageDataCache;
165 162 this.context = context;
166   - this.firmwareUpdateState = new ConcurrentHashMap<>();
167 163 this.sessionStore = sessionStore;
168 164 }
169 165
... ... @@ -781,27 +777,19 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
781 777 }
782 778 }
783 779
784   - // # 7.1
785 780 // update value in fwInfo
786   - if (!newProfile.getClientLwM2mSettings().getFwUpdateStrategy().equals(oldProfile.getClientLwM2mSettings().getFwUpdateStrategy())
787   - || (LwM2MFirmwareUpdateStrategy.OBJ_5_TEMP_URL.code == newProfile.getClientLwM2mSettings().getFwUpdateStrategy() &&
788   - !newProfile.getClientLwM2mSettings().getFwUpdateRecourse().equals(oldProfile.getClientLwM2mSettings().getFwUpdateRecourse()))) {
789   - clients.forEach(lwM2MClient -> {
790   - otaService.onCurrentFirmwareStrategyUpdate(lwM2MClient,
791   - newProfile.getClientLwM2mSettings().getFwUpdateStrategy(),
792   - newProfile.getClientLwM2mSettings().getFwUpdateRecourse());
793   - });
  781 + OtherConfiguration newLwM2mSettings = newProfile.getClientLwM2mSettings();
  782 + OtherConfiguration oldLwM2mSettings = oldProfile.getClientLwM2mSettings();
  783 + if (!newLwM2mSettings.getFwUpdateStrategy().equals(oldLwM2mSettings.getFwUpdateStrategy())
  784 + || (StringUtils.isNotEmpty(newLwM2mSettings.getFwUpdateRecourse()) &&
  785 + !newLwM2mSettings.getFwUpdateRecourse().equals(oldLwM2mSettings.getFwUpdateRecourse()))) {
  786 + clients.forEach(lwM2MClient -> otaService.onCurrentFirmwareStrategyUpdate(lwM2MClient, newLwM2mSettings));
794 787 }
795 788
796   - //# 7.2 // update value in swInfo
797   - if (!newProfile.getClientLwM2mSettings().getSwUpdateStrategy().equals(oldProfile.getClientLwM2mSettings().getSwUpdateStrategy())
798   - || (LwM2MSoftwareUpdateStrategy.TEMP_URL.code == newProfile.getClientLwM2mSettings().getSwUpdateStrategy() &&
799   - !newProfile.getClientLwM2mSettings().getSwUpdateRecourse().equals(oldProfile.getClientLwM2mSettings().getSwUpdateRecourse()))) {
800   - clients.forEach(lwM2MClient -> {
801   - otaService.onCurrentSoftwareStrategyUpdate(lwM2MClient,
802   - newProfile.getClientLwM2mSettings().getFwUpdateStrategy(),
803   - newProfile.getClientLwM2mSettings().getFwUpdateRecourse());
804   - });
  789 + if (!newLwM2mSettings.getSwUpdateStrategy().equals(oldLwM2mSettings.getSwUpdateStrategy())
  790 + || (StringUtils.isNotEmpty(newLwM2mSettings.getSwUpdateRecourse()) &&
  791 + !newLwM2mSettings.getSwUpdateRecourse().equals(oldLwM2mSettings.getSwUpdateRecourse()))) {
  792 + clients.forEach(lwM2MClient -> otaService.onCurrentSoftwareStrategyUpdate(lwM2MClient, newLwM2mSettings));
805 793 }
806 794 }
807 795 }
... ...