diff --git a/application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java b/application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java
index e314cd8f51..cea898e7a1 100644
--- a/application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java
+++ b/application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java
@@ -150,53 +150,54 @@ public class LwM2MModelsRepository {
*/
private ServerSecurityConfig getBootstrapServer(boolean bootstrapServerIs, LwM2MSecurityMode mode) {
ServerSecurityConfig bsServ = new ServerSecurityConfig();
+ bsServ.setBootstrapServerIs(bootstrapServerIs);
if (bootstrapServerIs) {
+ bsServ.setServerId(contextBootStrap.getBootstrapServerId());
switch (mode) {
case NO_SEC:
bsServ.setHost(contextBootStrap.getBootstrapHost());
- bsServ.setPort(contextBootStrap.getBootstrapPort());
+ bsServ.setPort(contextBootStrap.getBootstrapPortNoSecPsk());
bsServ.setServerPublicKey("");
break;
case PSK:
bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
- bsServ.setPort(contextBootStrap.getBootstrapSecurePort());
+ bsServ.setPort(contextBootStrap.getBootstrapSecurePortPsk());
bsServ.setServerPublicKey("");
break;
case RPK:
bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
- bsServ.setPort(contextBootStrap.getBootstrapSecurePort());
+ bsServ.setPort(contextBootStrap.getBootstrapSecurePortRpk());
bsServ.setServerPublicKey(getRPKPublicKey(this.contextBootStrap.getBootstrapPublicX(), this.contextBootStrap.getBootstrapPublicY()));
break;
case X509:
bsServ.setHost(contextBootStrap.getBootstrapSecureHost());
- bsServ.setPort(contextBootStrap.getBootstrapSecurePortCert());
+ bsServ.setPort(contextBootStrap.getBootstrapSecurePortX509());
bsServ.setServerPublicKey(getServerPublicKeyX509(contextBootStrap.getBootstrapAlias()));
break;
default:
break;
}
} else {
- bsServ.setBootstrapServerIs(bootstrapServerIs);
- bsServ.setServerId(123);
+ bsServ.setServerId(contextServer.getServerId());
switch (mode) {
case NO_SEC:
bsServ.setHost(contextServer.getServerHost());
- bsServ.setPort(contextServer.getServerPort());
+ bsServ.setPort(contextServer.getServerPortNoSecPsk());
bsServ.setServerPublicKey("");
break;
case PSK:
bsServ.setHost(contextServer.getServerSecureHost());
- bsServ.setPort(contextServer.getServerSecurePort());
+ bsServ.setPort(contextServer.getServerPortPsk());
bsServ.setServerPublicKey("");
break;
case RPK:
bsServ.setHost(contextServer.getServerSecureHost());
- bsServ.setPort(contextServer.getServerSecurePort());
+ bsServ.setPort(contextServer.getServerPortRpk());
bsServ.setServerPublicKey(getRPKPublicKey(this.contextServer.getServerPublicX(), this.contextServer.getServerPublicY()));
break;
case X509:
bsServ.setHost(contextServer.getServerSecureHost());
- bsServ.setPort(contextServer.getServerSecurePortCert());
+ bsServ.setPort(contextServer.getServerPortX509());
bsServ.setServerPublicKey(getServerPublicKeyX509(contextServer.getServerAlias()));
break;
default:
diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml
index 065a0a4cb0..8c2d7e1702 100644
--- a/application/src/main/resources/thingsboard.yml
+++ b/application/src/main/resources/thingsboard.yml
@@ -575,7 +575,13 @@ transport:
timeout: "${LWM2M_TIMEOUT:120000}"
# model_path_file: "${LWM2M_MODEL_PATH_FILE:./common/transport/lwm2m/src/main/resources/models/}"
model_path_file: "${LWM2M_MODEL_PATH_FILE:}"
- support_deprecated_ciphers_enable: "${LWM2M_SUPPORT_DEPRECATED_CIPHERS_ENABLED:true}"
+ recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
+ recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:false}"
+ request_pool_size: "${LWM2M_REQUEST_POOL_SIZE:100}"
+ request_error_pool_size: "${LWM2M_REQUEST_ERROR_POOL_SIZE:10}"
+ registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}"
+ update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}"
+ un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}"
secure:
# Only Certificate_x509:
# To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
@@ -588,24 +594,19 @@ transport:
root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
enable_gen_psk_rpk: "${ENABLE_GEN_PSK_RPK:true}"
server:
+ id: "${LWM2M_SERVER_ID:123}"
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT:5685}"
- bind_port_cert: "${LWM2M_BIND_PORT_CERT:5687}"
+ bind_port_no_sec_psk: "${LWM2M_BIND_PORT_NO_SEC_PSK:5685}"
+ bind_port_no_sec_rpk: "${LWM2M_BIND_PORT_NO_SEC_RPK:5687}"
+ bind_port_no_sec_x509: "${LWM2M_BIND_PORT_NO_SEC_X509:5689}"
secure:
- start_all: "${START_SERVER_ALL:true}"
- #leshan.core (V1_1)
- #DTLS security modes:
- #0: Pre-Shared Key mode
- #1: Raw Public Key mode
- #2: Certificate mode X509
- #3: NoSec mode *
- #OMA-TS-LightweightM2M_Core-V1_1_1-20190617-A (add)
- #4: Certificate mode X509 with EST
- # If only startAll == false
- dtls_mode: "${LWM2M_SECURITY_MODE:1}"
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_SEC:5686}"
- bind_port_cert: "${LWM2M_BIND_PORT_SEC_CERT:5688}"
+ start_psk: "${START_SERVER_PSK:true}"
+ start_rpk: "${START_SERVER_RPK:true}"
+ start_x509: "${START_SERVER_X509:true}"
+ bind_port_psk: "${LWM2M_BIND_PORT_SEC_PSK:5686}"
+ bind_port_rpk: "${LWM2M_BIND_PORT_SEC_RPK:5688}"
+ bind_port_x509: "${LWM2M_BIND_PORT_SEC_X509:5690}"
# Only RPK: Public & Private Key
# create_rpk: "${CREATE_RPK:}"
public_x: "${LWM2M_SERVER_PUBLIC_X:405354ea8893471d9296afbc8b020a5c6201b0bb25812a53b849d4480fa5f069}"
@@ -615,16 +616,19 @@ transport:
alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}"
bootstrap:
enable: "${BOOTSTRAP:true}"
+ id: "${LWM2M_SERVER_ID:111}"
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_BS:5689}"
- bind_port_cert: "${LWM2M_BIND_PORT_SER_BS:5691}"
+ bind_port_no_sec_psk: "${LWM2M_BIND_PORT_NO_SEC_BS:5691}"
+ bind_port_no_sec_rpk: "${LWM2M_BIND_PORT_NO_SEC_BS:5693}"
+ bind_port_no_sec_x509: "${LWM2M_BIND_PORT_NO_SEC_BS:5695}"
secure:
- start_all: "${START_BOOTSTRAP_ALL:true}"
- # If only startAll == false
- dtls_mode: "${LWM2M_SECURITY_MODE_BS:1}"
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_SEC_BS:5690}"
- bind_port_cert: "${LWM2M_BIND_PORT_SEC_CERT_BS:5692}"
+ start_psk: "${START_SERVER_PSK_BS:true}"
+ start_rpk: "${START_SERVER_RPK_BS:true}"
+ start_x509: "${START_SERVER_X509_BS:true}"
+ bind_port_psk: "${LWM2M_BIND_PORT_SEC_PSK_BS:5692}"
+ bind_port_rpk: "${LWM2M_BIND_PORT_SER_RPK_BS:5694}"
+ bind_port_x509: "${LWM2M_BIND_PORT_SEC_X509_BS:5696}"
# Only RPK: Public & Private Key
public_x: "${LWM2M_SERVER_PUBLIC_X_BS:993ef2b698c6a9c0c1d8be78b13a9383c0854c7c7c7a504d289b403794648183}"
public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:267412d5fc4e5ceb2257cb7fd7f76ebdac2fa9aa100afb162e990074cc0bfaa2}"
diff --git a/common/transport/lwm2m/pom.xml b/common/transport/lwm2m/pom.xml
index d23f8dbc5d..44a764be2b 100644
--- a/common/transport/lwm2m/pom.xml
+++ b/common/transport/lwm2m/pom.xml
@@ -99,6 +99,14 @@
test-jar
test
+
+ org.eclipse.californium
+ californium-core
+
+
+
+
+
org.eclipse.californium
element-connector
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerConfiguration.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerConfiguration.java
index 588de9bba2..17999326d7 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerConfiguration.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerConfiguration.java
@@ -52,7 +52,9 @@ import java.security.spec.ECPublicKeySpec;
import java.security.spec.KeySpec;
import java.util.Arrays;
+import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256;
import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.NO_SEC;
+import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.PSK;
import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.RPK;
import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.X509;
import static org.thingsboard.server.transport.lwm2m.server.LwM2MTransportHandler.getCoapConfig;
@@ -76,27 +78,32 @@ public class LwM2MTransportBootstrapServerConfiguration {
@Autowired
private LwM2MInMemoryBootstrapConfigStore lwM2MInMemoryBootstrapConfigStore;
-
@Primary
- @Bean(name = "leshanBootstrapCert")
- public LeshanBootstrapServer getLeshanBootstrapServerCert() {
- log.info("Prepare and start BootstrapServerCert... PostConstruct");
- return getLeshanBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPortCert(), this.contextBs.getCtxBootStrap().getBootstrapSecurePortCert(), X509);
+ @Bean(name = "leshanBootstrapX509")
+ public LeshanBootstrapServer getLeshanBootstrapServerX509() {
+ log.info("Prepare and start BootstrapServerX509... PostConstruct");
+ return getLeshanBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPortNoSecX509(), this.contextBs.getCtxBootStrap().getBootstrapSecurePortX509(), X509);
}
- @Bean(name = "leshanBootstrapRPK")
- public LeshanBootstrapServer getLeshanBootstrapServerRPK() {
- log.info("Prepare and start BootstrapServerRPK... PostConstruct");
- return getLeshanBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPort(), this.contextBs.getCtxBootStrap().getBootstrapSecurePort(), RPK);
+ @Bean(name = "leshanBootstrapPsk")
+ public LeshanBootstrapServer getLeshanBootstrapServerPsk() {
+ log.info("Prepare and start BootstrapServerRsk... PostConstruct");
+ return getLeshanBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPortNoSecPsk(), this.contextBs.getCtxBootStrap().getBootstrapSecurePortPsk(), PSK);
}
- public LeshanBootstrapServer getLeshanBootstrapServer(Integer bootstrapPort, Integer bootstrapSecurePort, LwM2MSecurityMode dtlsMode) {
+ @Bean(name = "leshanBootstrapRpk")
+ public LeshanBootstrapServer getLeshanBootstrapServerRpk() {
+ log.info("Prepare and start BootstrapServerRpk... PostConstruct");
+ return getLeshanBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPortNoSecRpk(), this.contextBs.getCtxBootStrap().getBootstrapSecurePortRpk(), RPK);
+ }
+
+ public LeshanBootstrapServer getLeshanBootstrapServer(Integer bootstrapPortNoSec, Integer bootstrapSecurePort, LwM2MSecurityMode dtlsMode) {
LeshanBootstrapServerBuilder builder = new LeshanBootstrapServerBuilder();
- builder.setLocalAddress(this.contextBs.getCtxBootStrap().getBootstrapHost(), bootstrapPort);
+ builder.setLocalAddress(this.contextBs.getCtxBootStrap().getBootstrapHost(), bootstrapPortNoSec);
builder.setLocalSecureAddress(this.contextBs.getCtxBootStrap().getBootstrapSecureHost(), bootstrapSecurePort);
/** Create CoAP Config */
- builder.setCoapConfig(getCoapConfig ());
+ builder.setCoapConfig(getCoapConfig (bootstrapPortNoSec, bootstrapSecurePort));
/** ConfigStore */
builder.setConfigStore(lwM2MInMemoryBootstrapConfigStore);
@@ -107,14 +114,23 @@ public class LwM2MTransportBootstrapServerConfiguration {
/** Define model provider (Create Models )*/
builder.setModel(new StaticModel(contextS.getCtxServer().getModelsValue()));
- /** Create and Set DTLS Config */
- DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
- dtlsConfig.setRecommendedCipherSuitesOnly(contextS.getCtxServer().isSupportDeprecatedCiphersEnable());
- builder.setDtlsConfig(dtlsConfig);
-
/** Create credentials */
LwM2MSetSecurityStoreBootstrap(builder, dtlsMode);
+ /** Create and Set DTLS Config */
+ DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
+ if (dtlsMode==PSK) {
+ dtlsConfig.setRecommendedCipherSuitesOnly(this.contextS.getCtxServer().isRecommendedCiphers());
+ dtlsConfig.setRecommendedSupportedGroupsOnly(this.contextS.getCtxServer().isRecommendedSupportedGroups());
+ dtlsConfig.setSupportedCipherSuites(TLS_PSK_WITH_AES_128_CBC_SHA256);
+ }
+ else {
+ dtlsConfig.setRecommendedCipherSuitesOnly(this.contextS.getCtxServer().isRecommendedCiphers());
+// dtlsConfig.setRecommendedSupportedGroupsOnly(false);
+ }
+ builder.setDtlsConfig(dtlsConfig);
+
+
BootstrapSessionManager sessionManager = new LwM2mDefaultBootstrapSessionManager(lwM2MBootstrapSecurityStore);
builder.setSessionManager(sessionManager);
@@ -133,6 +149,7 @@ public class LwM2MTransportBootstrapServerConfiguration {
break;
/** Use PSK/RPK */
case PSK:
+ break;
case RPK:
setRPK(builder);
break;
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerInitializer.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerInitializer.java
index cb927a76b9..6ffa3e8bdf 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerInitializer.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/LwM2MTransportBootstrapServerInitializer.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
package org.thingsboard.server.transport.lwm2m.bootstrap;
+
import lombok.extern.slf4j.Slf4j;
import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Service;
-import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -31,40 +31,39 @@ import javax.annotation.PreDestroy;
public class LwM2MTransportBootstrapServerInitializer {
@Autowired
- @Qualifier("leshanBootstrapCert")
+ @Qualifier("leshanBootstrapX509")
private LeshanBootstrapServer lhBServerCert;
@Autowired
- @Qualifier("leshanBootstrapRPK")
- private LeshanBootstrapServer lhBServerRPK;
+ @Qualifier("leshanBootstrapPsk")
+ private LeshanBootstrapServer lhBServerPsk;
+
+ @Autowired
+ @Qualifier("leshanBootstrapRpk")
+ private LeshanBootstrapServer lhBServerRpk;
@Autowired
private LwM2MTransportContextBootstrap contextBS;
@PostConstruct
public void init() {
- if (this.contextBS.getCtxBootStrap().isBootstrapStartAll()) {
- this.lhBServerCert.start();
- this.lhBServerRPK.start();
+ if (this.contextBS.getCtxBootStrap().getBootstrapStartPsk()) {
+ this.lhBServerPsk.start();
}
- else {
- if (this.contextBS.getCtxBootStrap().getBootStrapDtlsMode() == LwM2MSecurityMode.X509.code) {
- this.lhBServerCert.start();
- }
- else {
- this.lhBServerRPK.start();
- }
+ if (this.contextBS.getCtxBootStrap().getBootstrapStartRpk()) {
+ this.lhBServerRpk.start();
+ }
+ if (this.contextBS.getCtxBootStrap().getBootstrapStartX509()) {
+ this.lhBServerCert.start();
}
}
@PreDestroy
public void shutdown() throws InterruptedException {
log.info("Stopping LwM2M transport Bootstrap Server!");
- try {
- lhBServerCert.destroy();
- lhBServerRPK.destroy();
- } finally {
- }
+ lhBServerPsk.destroy();
+ lhBServerRpk.destroy();
+ lhBServerCert.destroy();
log.info("LwM2M transport Bootstrap Server stopped!");
}
}
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/secure/LwM2mDefaultBootstrapSessionManager.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/secure/LwM2mDefaultBootstrapSessionManager.java
index db8a520266..6608635ee0 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/secure/LwM2mDefaultBootstrapSessionManager.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/bootstrap/secure/LwM2mDefaultBootstrapSessionManager.java
@@ -49,7 +49,6 @@ public class LwM2mDefaultBootstrapSessionManager extends DefaultBootstrapSession
this.securityChecker = securityChecker;
}
- @Override
public BootstrapSession begin(String endpoint, Identity clientIdentity) {
boolean authorized;
if (bsSecurityStore != null) {
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportHandler.java
index 76cc2a8015..dbca7a8f5b 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportHandler.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportHandler.java
@@ -141,7 +141,7 @@ public class LwM2MTransportHandler {
// }
// }
- public static NetworkConfig getCoapConfig() {
+ public static NetworkConfig getCoapConfig(Integer serverPortNoSec, Integer serverSecurePort) {
NetworkConfig coapConfig;
File configFile = new File(NetworkConfig.DEFAULT_FILE_NAME);
if (configFile.isFile()) {
@@ -151,6 +151,8 @@ public class LwM2MTransportHandler {
coapConfig = LeshanServerBuilder.createDefaultNetworkConfig();
coapConfig.store(configFile);
}
+ coapConfig.setString("COAP_PORT", Integer.toString(serverPortNoSec));
+ coapConfig.setString("COAP_SECURE_PORT", Integer.toString(serverSecurePort));
return coapConfig;
}
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportRequest.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportRequest.java
index de03e25767..d5884b5b86 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportRequest.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportRequest.java
@@ -88,12 +88,15 @@ public class LwM2MTransportRequest {
@Autowired
LwM2MTransportServiceImpl service;
+ @Autowired
+ public LwM2MTransportContextServer context;
+
@PostConstruct
public void init() {
this.converter = LwM2mValueConverterImpl.getInstance();
- executorResponse = Executors.newFixedThreadPool(10,
+ executorResponse = Executors.newFixedThreadPool(this.context.getCtxServer().getRequestPoolSize(),
new NamedThreadFactory(String.format("LwM2M %s channel response", RESPONSE_CHANNEL)));
- executorResponseError = Executors.newFixedThreadPool(10,
+ executorResponseError = Executors.newFixedThreadPool(this.context.getCtxServer().getRequestErrorPoolSize(),
new NamedThreadFactory(String.format("LwM2M %s channel response Error", RESPONSE_CHANNEL)));
}
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerConfiguration.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerConfiguration.java
index c809491803..71fc65967b 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerConfiguration.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerConfiguration.java
@@ -62,6 +62,8 @@ import java.security.spec.ECPublicKeySpec;
import java.security.spec.KeySpec;
import java.util.Arrays;
+import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256;
+import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.PSK;
import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.RPK;
import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.X509;
import static org.thingsboard.server.transport.lwm2m.server.LwM2MTransportHandler.getCoapConfig;
@@ -83,24 +85,27 @@ public class LwM2MTransportServerConfiguration {
private LwM2mInMemorySecurityStore lwM2mInMemorySecurityStore;
@Primary
- @Bean(name = "LeshanServerCert")
- public LeshanServer getLeshanServerCert() {
- log.info("Starting LwM2M transport ServerCert... PostConstruct");
- LeshanServer leshanServerCert = getLeshanServer(this.context.getCtxServer().getServerPortCert(), this.context.getCtxServer().getServerSecurePortCert(), X509);
-
- return leshanServerCert;
+ @Bean(name = "leshanServerX509")
+ public LeshanServer getLeshanServerX509() {
+ log.info("Starting LwM2M transport ServerX509... PostConstruct");
+ return getLeshanServer(this.context.getCtxServer().getServerPortNoSecX509(), this.context.getCtxServer().getServerPortX509(), X509);
}
- @Bean(name = "LeshanServerNoSecPskRpk")
- public LeshanServer getLeshanServerNoSecPskRpk() {
- log.info("Starting LwM2M transport ServerNoSecPskRpk... PostConstruct");
- return getLeshanServer(this.context.getCtxServer().getServerPort(), this.context.getCtxServer().getServerSecurePort(), RPK);
+ @Bean(name = "leshanServerPsk")
+ public LeshanServer getLeshanServerPsk() {
+ log.info("Starting LwM2M transport ServerPsk... PostConstruct");
+ return getLeshanServer(this.context.getCtxServer().getServerPortNoSecPsk(), this.context.getCtxServer().getServerPortPsk(), PSK);
}
- private LeshanServer getLeshanServer(Integer serverPort, Integer serverSecurePort, LwM2MSecurityMode dtlsMode) {
+ @Bean(name = "leshanServerRpk")
+ public LeshanServer getLeshanServerRpk() {
+ log.info("Starting LwM2M transport ServerRpk... PostConstruct");
+ return getLeshanServer(this.context.getCtxServer().getServerPortNoSecRpk(), this.context.getCtxServer().getServerPortRpk(), RPK);
+ }
+ private LeshanServer getLeshanServer(Integer serverPortNoSec, Integer serverSecurePort, LwM2MSecurityMode dtlsMode) {
LeshanServerBuilder builder = new LeshanServerBuilder();
- builder.setLocalAddress(this.context.getCtxServer().getServerHost(), serverPort);
+ builder.setLocalAddress(this.context.getCtxServer().getServerHost(), serverPortNoSec);
builder.setLocalSecureAddress(this.context.getCtxServer().getServerSecureHost(), serverSecurePort);
builder.setEncoder(new DefaultLwM2mNodeEncoder());
LwM2mNodeDecoder decoder = new DefaultLwM2mNodeDecoder();
@@ -108,43 +113,47 @@ public class LwM2MTransportServerConfiguration {
builder.setEncoder(new DefaultLwM2mNodeEncoder(LwM2mValueConverterImpl.getInstance()));
/** Create CoAP Config */
- builder.setCoapConfig(getCoapConfig());
+ builder.setCoapConfig(getCoapConfig(serverPortNoSec, serverSecurePort));
/** Define model provider (Create Models )*/
LwM2mModelProvider modelProvider = new VersionedModelProvider(this.context.getCtxServer().getModelsValue());
builder.setObjectModelProvider(modelProvider);
- /** Create DTLS Config */
- DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
- dtlsConfig.setRecommendedCipherSuitesOnly(this.context.getCtxServer().isSupportDeprecatedCiphersEnable());
- /** Set DTLS Config */
- builder.setDtlsConfig(dtlsConfig);
-
- /** Use a magic converter to support bad type send by the UI. */
- builder.setEncoder(new DefaultLwM2mNodeEncoder(LwM2mValueConverterImpl.getInstance()));
-
/** Create DTLS security mode
* There can be only one DTLS security mode
*/
this.LwM2MSetSecurityStoreServer(builder, dtlsMode);
+ /** Create DTLS Config */
+ DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
+ if (dtlsMode==PSK) {
+ dtlsConfig.setRecommendedCipherSuitesOnly(this.context.getCtxServer().isRecommendedCiphers());
+ dtlsConfig.setRecommendedSupportedGroupsOnly(this.context.getCtxServer().isRecommendedSupportedGroups());
+ dtlsConfig.setSupportedCipherSuites(TLS_PSK_WITH_AES_128_CBC_SHA256);
+ }
+ else {
+ dtlsConfig.setRecommendedSupportedGroupsOnly(!this.context.getCtxServer().isRecommendedSupportedGroups());
+ dtlsConfig.setRecommendedCipherSuitesOnly(!this.context.getCtxServer().isRecommendedCiphers());
+ }
+ /** Set DTLS Config */
+ builder.setDtlsConfig(dtlsConfig);
+
+ /** Use a magic converter to support bad type send by the UI. */
+ builder.setEncoder(new DefaultLwM2mNodeEncoder(LwM2mValueConverterImpl.getInstance()));
+
+
/** Create LWM2M server */
return builder.build();
}
- private void LwM2MSetSecurityStoreServer(LeshanServerBuilder builder, LwM2MSecurityMode dtlsMode) {
+ private void LwM2MSetSecurityStoreServer(LeshanServerBuilder builder, LwM2MSecurityMode dtlsMode) {
/** Set securityStore with new registrationStore */
EditableSecurityStore securityStore = lwM2mInMemorySecurityStore;
-
switch (dtlsMode) {
/** Use PSK only */
case PSK:
generatePSK_RPK();
- if (this.privateKey != null && this.privateKey.getEncoded().length > 0) {
- builder.setPrivateKey(this.privateKey);
- builder.setPublicKey(null);
- infoParamsPSK();
- }
+ infoParamsPSK();
break;
/** Use RPK only */
case RPK:
@@ -233,7 +242,7 @@ public class LwM2MTransportServerConfiguration {
private void infoParamsPSK() {
log.info("\nServer uses PSK -> private key : \n security key : [{}] \n serverSecureURI : [{}]",
Hex.encodeHexString(this.privateKey.getEncoded()),
- this.context.getCtxServer().getServerSecureHost() + ":" + Integer.toString(this.context.getCtxServer().getServerSecurePort()));
+ this.context.getCtxServer().getServerSecureHost() + ":" + Integer.toString(this.context.getCtxServer().getServerPortPsk()));
}
private void infoParamsRPK() {
@@ -298,6 +307,4 @@ public class LwM2MTransportServerConfiguration {
log.error("[{}] Unable to load KeyStore files server", ex.getMessage());
}
}
-
-
}
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerInitializer.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerInitializer.java
index da4cdbf634..6fbcb78f9c 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerInitializer.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServerInitializer.java
@@ -22,7 +22,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
import org.thingsboard.server.transport.lwm2m.secure.LWM2MGenerationPSkRPkECC;
-import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -37,12 +36,16 @@ public class LwM2MTransportServerInitializer {
private LwM2MTransportServiceImpl service;
@Autowired
- @Qualifier("LeshanServerCert")
- private LeshanServer lhServerCert;
+ @Qualifier("leshanServerX509")
+ private LeshanServer lhServerX509;
@Autowired
- @Qualifier("LeshanServerNoSecPskRpk")
- private LeshanServer lhServerNoSecPskRpk;
+ @Qualifier("leshanServerPsk")
+ private LeshanServer lhServerPsk;
+
+ @Autowired
+ @Qualifier("leshanServerRpk")
+ private LeshanServer lhServerRpk;
@Autowired
private LwM2MTransportContextServer context;
@@ -50,39 +53,47 @@ public class LwM2MTransportServerInitializer {
@PostConstruct
public void init() {
if (this.context.getCtxServer().getEnableGenPskRpk()) new LWM2MGenerationPSkRPkECC();
- if (this.context.getCtxServer().isServerStartAll()) {
- this.startLhServerCert();
- this.startLhServerNoSecPskRpk();
- } else {
- if (this.context.getCtxServer().getServerDtlsMode() == LwM2MSecurityMode.X509.code) {
- this.startLhServerCert();
- } else {
- this.startLhServerNoSecPskRpk();
- }
+ if (this.context.getCtxServer().isServerStartPsk()) {
+ this.startLhServerPsk();
+ }
+ if (this.context.getCtxServer().isServerStartRpk()) {
+ this.startLhServerRpk();
+ }
+ if (this.context.getCtxServer().isServerStartX509()) {
+ this.startLhServerX509();
}
}
- private void startLhServerCert() {
- this.lhServerCert.start();
- LwM2mServerListener lhServerCertListener = new LwM2mServerListener(this.lhServerCert, service);
- this.lhServerCert.getRegistrationService().addListener(lhServerCertListener.registrationListener);
- this.lhServerCert.getPresenceService().addListener(lhServerCertListener.presenceListener);
- this.lhServerCert.getObservationService().addListener(lhServerCertListener.observationListener);
+ private void startLhServerPsk() {
+ this.lhServerPsk.start();
+ LwM2mServerListener lhServerPskListener = new LwM2mServerListener(this.lhServerPsk, service);
+ this.lhServerPsk.getRegistrationService().addListener(lhServerPskListener.registrationListener);
+ this.lhServerPsk.getPresenceService().addListener(lhServerPskListener.presenceListener);
+ this.lhServerPsk.getObservationService().addListener(lhServerPskListener.observationListener);
}
- private void startLhServerNoSecPskRpk() {
- this.lhServerNoSecPskRpk.start();
- LwM2mServerListener lhServerNoSecPskRpkListener = new LwM2mServerListener(this.lhServerNoSecPskRpk, service);
- this.lhServerNoSecPskRpk.getRegistrationService().addListener(lhServerNoSecPskRpkListener.registrationListener);
- this.lhServerNoSecPskRpk.getPresenceService().addListener(lhServerNoSecPskRpkListener.presenceListener);
- this.lhServerNoSecPskRpk.getObservationService().addListener(lhServerNoSecPskRpkListener.observationListener);
+ private void startLhServerRpk() {
+ this.lhServerRpk.start();
+ LwM2mServerListener lhServerRpkListener = new LwM2mServerListener(this.lhServerRpk, service);
+ this.lhServerRpk.getRegistrationService().addListener(lhServerRpkListener.registrationListener);
+ this.lhServerRpk.getPresenceService().addListener(lhServerRpkListener.presenceListener);
+ this.lhServerRpk.getObservationService().addListener(lhServerRpkListener.observationListener);
+ }
+
+ private void startLhServerX509() {
+ this.lhServerX509.start();
+ LwM2mServerListener lhServerCertListener = new LwM2mServerListener(this.lhServerX509, service);
+ this.lhServerX509.getRegistrationService().addListener(lhServerCertListener.registrationListener);
+ this.lhServerX509.getPresenceService().addListener(lhServerCertListener.presenceListener);
+ this.lhServerX509.getObservationService().addListener(lhServerCertListener.observationListener);
}
@PreDestroy
public void shutdown() {
log.info("Stopping LwM2M transport Server!");
- lhServerCert.destroy();
- lhServerNoSecPskRpk.destroy();
+ lhServerPsk.destroy();
+ lhServerRpk.destroy();
+ lhServerX509.destroy();
log.info("LwM2M transport Server stopped!");
}
}
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportService.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportService.java
index a9fcbcb669..3b21e7003f 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportService.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportService.java
@@ -32,7 +32,7 @@ public interface LwM2MTransportService {
void updatedReg(LeshanServer lwServer, Registration registration);
- void unReg(Registration registration, Collection observations);
+ void unReg(LeshanServer lwServer, Registration registration, Collection observations);
void onSleepingDev(Registration registration);
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java
index c4575c1a8f..072c7bc402 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java
@@ -20,7 +20,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
-import org.eclipse.leshan.core.Link;
import org.eclipse.leshan.core.model.ResourceModel;
import org.eclipse.leshan.core.node.LwM2mMultipleResource;
import org.eclipse.leshan.core.node.LwM2mObject;
@@ -57,6 +56,7 @@ import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
@@ -120,11 +120,11 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
@PostConstruct
public void init() {
this.context.getScheduler().scheduleAtFixedRate(this::checkInactivityAndReportActivity, new Random().nextInt((int) context.getCtxServer().getSessionReportTimeout()), context.getCtxServer().getSessionReportTimeout(), TimeUnit.MILLISECONDS);
- this.executorRegistered = Executors.newFixedThreadPool(10,
+ this.executorRegistered = Executors.newFixedThreadPool(this.context.getCtxServer().getRegisteredPoolSize(),
new NamedThreadFactory(String.format("LwM2M %s channel registered", SERVICE_CHANNEL)));
- this.executorUpdateRegistered = Executors.newFixedThreadPool(10,
+ this.executorUpdateRegistered = Executors.newFixedThreadPool(this.context.getCtxServer().getUpdateRegisteredPoolSize(),
new NamedThreadFactory(String.format("LwM2M %s channel update registered", SERVICE_CHANNEL)));
- this.executorUnRegistered = Executors.newFixedThreadPool(10,
+ this.executorUnRegistered = Executors.newFixedThreadPool(this.context.getCtxServer().getUnRegisteredPoolSize(),
new NamedThreadFactory(String.format("LwM2M %s channel un registered", SERVICE_CHANNEL)));
this.converter = LwM2mValueConverterImpl.getInstance();
}
@@ -147,13 +147,13 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
public void onRegistered(LeshanServer lwServer, Registration registration, Collection previousObsersations) {
executorRegistered.submit(() -> {
try {
- log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId());
+// log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId());
LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.updateInSessionsLwM2MClient(lwServer, registration);
if (lwM2MClient != null) {
lwM2MClient.setLwM2MTransportServiceImpl(this);
lwM2MClient.setSessionUuid(UUID.randomUUID());
this.sentLogsToThingsboard(LOG_LW2M_INFO + ": Client Registered", registration);
- this.setLwM2MClient(lwServer, registration, lwM2MClient);
+// this.setLwM2MClient(lwServer, registration, lwM2MClient);
SessionInfoProto sessionInfo = this.getValidateSessionInfo(registration);
if (sessionInfo != null) {
lwM2MClient.setDeviceUuid(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB()));
@@ -204,9 +204,10 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
* @param observations - All paths observations before unReg
* !!! Warn: if have not finishing unReg, then this operation will be finished on next Client`s connect
*/
- public void unReg(Registration registration, Collection observations) {
+ public void unReg(LeshanServer lwServer, Registration registration, Collection observations) {
executorUnRegistered.submit(() -> {
try {
+ this.setCancelObservations(lwServer, registration);
this.sentLogsToThingsboard(LOG_LW2M_INFO + ": Client unRegistration", registration);
this.closeClientSession(registration);
} catch (Throwable t) {
@@ -279,38 +280,49 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
* @param lwM2MClient - object with All parameters off client
*/
private void setLwM2MClient(LeshanServer lwServer, Registration registration, LwM2MClient lwM2MClient) {
- // #1
- for (Link url : registration.getObjectLinks()) {
- LwM2mPath pathIds = new LwM2mPath(url.getUrl());
- if (pathIds.isObjectInstance() && !pathIds.isResource()) {
- lwM2MClient.getPendingRequests().add(url.getUrl());
- }
- }
- // #2
- for (Link url : registration.getObjectLinks()) {
- LwM2mPath pathIds = new LwM2mPath(url.getUrl());
- if (pathIds.isObjectInstance() && !pathIds.isResource()) {
- lwM2MTransportRequest.sendAllRequest(lwServer, registration, url.getUrl(), GET_TYPE_OPER_READ, ContentFormat.TLV.getName(),
- lwM2MClient, null, null, this.context.getCtxServer().getTimeout(), false);
- }
- }
-
- // #1
// Arrays.stream(registration.getObjectLinks()).forEach(url -> {
// LwM2mPath pathIds = new LwM2mPath(url.getUrl());
// if (pathIds.isObjectInstance() && !pathIds.isResource()) {
+// // #1
+// lwM2MClient.getPendingRequests().add(url.getUrl());
+// // #2
+// lwM2MTransportRequest.sendAllRequest(lwServer, registration, url.getUrl(), GET_TYPE_OPER_READ, ContentFormat.TLV.getName(),
+// lwM2MClient, null, null, this.context.getCtxServer().getTimeout(), false);
+// }
+// });
+
+// // #1
+// for (Link url : registration.getObjectLinks()) {
+// LwM2mPath pathIds = new LwM2mPath(url.getUrl());
+// if (pathIds.isObjectInstance() && !pathIds.isResource()) {
// lwM2MClient.getPendingRequests().add(url.getUrl());
// }
-// });
- // #2
-
-// Arrays.stream(registration.getObjectLinks()).forEach(url -> {
+// }
+// // #2
+// for (Link url : registration.getObjectLinks()) {
// LwM2mPath pathIds = new LwM2mPath(url.getUrl());
// if (pathIds.isObjectInstance() && !pathIds.isResource()) {
// lwM2MTransportRequest.sendAllRequest(lwServer, registration, url.getUrl(), GET_TYPE_OPER_READ, ContentFormat.TLV.getName(),
// lwM2MClient, null, null, this.context.getCtxServer().getTimeout(), false);
// }
-// });
+// }
+
+ // #1
+ Arrays.stream(registration.getObjectLinks()).forEach(url -> {
+ LwM2mPath pathIds = new LwM2mPath(url.getUrl());
+ if (pathIds.isObjectInstance() && !pathIds.isResource()) {
+ lwM2MClient.getPendingRequests().add(url.getUrl());
+ }
+ });
+
+ // #2
+ Arrays.stream(registration.getObjectLinks()).forEach(url -> {
+ LwM2mPath pathIds = new LwM2mPath(url.getUrl());
+ if (pathIds.isObjectInstance() && !pathIds.isResource()) {
+ lwM2MTransportRequest.sendAllRequest(lwServer, registration, url.getUrl(), GET_TYPE_OPER_READ, ContentFormat.TLV.getName(),
+ lwM2MClient, null, null, this.context.getCtxServer().getTimeout(), false);
+ }
+ });
}
/**
@@ -691,24 +703,29 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
* @param values - LwM2mSingleResource response.getContent()
* @param path - resource
*/
- private void onObservationSetResourcesValue(Registration registration, Object value, Map values, String path) {
+ private void onObservationSetResourcesValue(Registration registration, Object value, Map values, String path) {
boolean isChange = false;
try {
writeLock.lock();
// #1
LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.getLwM2MClientWithReg(registration, null);
LwM2mPath pathIds = new LwM2mPath(path);
- log.warn("#0 nameDevice: [{}] resultIds: [{}] value: [{}], values: [{}] ", lwM2MClient.getDeviceName(), pathIds, value, values);
+// log.warn("#0 nameDevice: [{}] resultIds: [{}] value: [{}], values: [{}] ", lwM2MClient.getDeviceName(), pathIds, value, values);
ResourceModel.Type resModelType = context.getCtxServer().getResourceModelType(registration, pathIds);
ResourceValue resValueOld = lwM2MClient.getResources().get(path);
// #2
if (resValueOld.isMultiInstances() && !values.toString().equals(resValueOld.getResourceValue().toString())) {
- ResourceValue resourceValue = new ResourceValue(values, null, true);
- lwM2MClient.getResources().put(path, resourceValue);
+ lwM2MClient.getResources().get(path).setValues(values);
+// ResourceValue resourceValue = new ResourceValue(values, null, true);
+// lwM2MClient.getResources().put(path, resourceValue);
isChange = true;
} else if (!LwM2MTransportHandler.equalsResourceValue(resValueOld.getValue(), value, resModelType, pathIds)) {
- ResourceValue resourceValue = new ResourceValue(null, value, false);
- lwM2MClient.getResources().put(path, resourceValue);
+ lwM2MClient.getResources().get(path).setValue(value);
+// ResourceValue resourceValueOld = lwM2MClient.getResources().get(path);
+// lwM2MClient.getResources().remove(resourceValueOld);
+// ResourceValue resourceValue = new ResourceValue(null, value, false);
+// lwM2MClient.getResources().put(path, resourceValue);
+ log.warn("upDateResize: [{}] [{}] [{}] [{}]", lwM2MClient.getEndPoint(), lwM2MClient.getResources().size(), value, path);
isChange = true;
}
} catch (Exception e) {
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mServerListener.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mServerListener.java
index 239a40658f..e7f82db0c4 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mServerListener.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mServerListener.java
@@ -54,7 +54,6 @@ public class LwM2mServerListener {
@Override
public void updated(RegistrationUpdate update, Registration updatedRegistration,
Registration previousRegistration) {
- log.info("updated");
service.updatedReg(lhServer, updatedRegistration);
}
@@ -64,8 +63,7 @@ public class LwM2mServerListener {
@Override
public void unregistered(Registration registration, Collection observations, boolean expired,
Registration newReg) {
- log.info("unregistered");
- service.unReg(registration, observations);
+ service.unReg(lhServer, registration, observations);
}
};
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2MClient.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2MClient.java
index 72cb052dc7..fdb2055500 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2MClient.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2MClient.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.transport.lwm2m.server.client;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.leshan.core.model.ObjectModel;
+import org.eclipse.leshan.core.node.LwM2mMultipleResource;
import org.eclipse.leshan.core.node.LwM2mObjectInstance;
import org.eclipse.leshan.core.node.LwM2mPath;
import org.eclipse.leshan.core.response.LwM2mResponse;
@@ -104,8 +105,8 @@ public class LwM2MClient implements Cloneable {
if (objectModel != null) {
((LwM2mObjectInstance)((ReadResponse)resp).getContent()).getResources().forEach((k, v) -> {
String rez = pathIds.toString() + "/" + k;
- if (objectModel.resources.get(k).multiple){
- this.resources.put(rez, new ResourceValue(v.getValues(), null, true));
+ if (((LwM2mObjectInstance) ((ReadResponse) resp).getContent()).getResource(k) instanceof LwM2mMultipleResource){
+// this.resources.put(rez, new ResourceValue(v.getInstances().values(), null, true));
}
else {
this.resources.put(rez, new ResourceValue(null, v.getValue(), false));
@@ -114,6 +115,7 @@ public class LwM2MClient implements Cloneable {
}
}
});
+ if (this.responses.size() == 0) this.responses = new ConcurrentHashMap<>();
}
/**
diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/ResourceValue.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/ResourceValue.java
index 2c962a4395..a4a9d54ada 100644
--- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/ResourceValue.java
+++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/ResourceValue.java
@@ -21,7 +21,7 @@ import java.util.Map;
@Data
public class ResourceValue {
- Map values;
+ Map values;
Object value;
boolean multiInstances;
diff --git a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigBootstrap.java b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigBootstrap.java
index 2e8a00bc5e..c8215b7ef3 100644
--- a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigBootstrap.java
+++ b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigBootstrap.java
@@ -32,39 +32,57 @@ import java.util.Map;
@ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'")
public class LwM2MTransportConfigBootstrap {
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.enable:}")
+ private Boolean bootstrapEnable;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.id:}")
+ private Integer bootstrapServerId;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.start_psk:}")
+ private Boolean bootstrapStartPsk;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.start_rpk:}")
+ private Boolean bootstrapStartRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.start_x509:}")
+ private Boolean bootstrapStartX509;
@Getter
@Value("${transport.lwm2m.bootstrap.bind_address:}")
private String bootstrapHost;
- @Getter
- @Value("${transport.lwm2m.bootstrap.bind_port:}")
- private Integer bootstrapPort;
-
- @Getter
- @Value("${transport.lwm2m.bootstrap.bind_port_cert:}")
- private Integer bootstrapPortCert;
-
-
- @Getter
- @Value("${transport.lwm2m.bootstrap.secure.start_all:}")
- private boolean bootstrapStartAll;
-
- @Getter
- @Value("${transport.lwm2m.bootstrap.secure.dtls_mode:}")
- private Integer bootStrapDtlsMode;
-
@Getter
@Value("${transport.lwm2m.bootstrap.secure.bind_address:}")
private String bootstrapSecureHost;
@Getter
- @Value("${transport.lwm2m.bootstrap.secure.bind_port:}")
- private Integer bootstrapSecurePort;
+ @Value("${transport.lwm2m.bootstrap.bind_port_no_sec_psk:}")
+ private Integer bootstrapPortNoSecPsk;
@Getter
- @Value("${transport.lwm2m.bootstrap.secure.bind_port_cert:}")
- private Integer bootstrapSecurePortCert;
+ @Value("${transport.lwm2m.bootstrap.bind_port_no_sec_rpk:}")
+ private Integer bootstrapPortNoSecRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.bind_port_no_sec_x509:}")
+ private Integer bootstrapPortNoSecX509;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.bind_port_psk:}")
+ private Integer bootstrapSecurePortPsk;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.bind_port_rpk:}")
+ private Integer bootstrapSecurePortRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.bootstrap.secure.bind_port_x509:}")
+ private Integer bootstrapSecurePortX509;
@Getter
@Value("${transport.lwm2m.bootstrap.secure.public_x:}")
diff --git a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigServer.java b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigServer.java
index f2e398f063..e5643a90f2 100644
--- a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigServer.java
+++ b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigServer.java
@@ -47,13 +47,6 @@ import java.util.stream.Collectors;
@ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'")
public class LwM2MTransportConfigServer {
- @Getter
- @Value("${transport.lwm2m.timeout:}")
- private Long timeout;
-
- @Getter
- @Value("${transport.sessions.report_timeout}")
- private long sessionReportTimeout;
@Getter
private String MODEL_PATH_DEFAULT = "models";
@@ -85,10 +78,6 @@ public class LwM2MTransportConfigServer {
@Getter
private String BASE_DIR_PATH = System.getProperty("user.dir");
- @Getter
- @Value("${transport.lwm2m.model_path_file:}")
- private String modelPathFile;
-
@Getter
// private String PATH_DATA_MICROSERVICE = "/usr/share/tb-lwm2m-transport/data$";
private String PATH_DATA = "data";
@@ -98,8 +87,44 @@ public class LwM2MTransportConfigServer {
private List modelsValue;
@Getter
- @Value("${transport.lwm2m.support_deprecated_ciphers_enable:}")
- private boolean supportDeprecatedCiphersEnable;
+ @Value("${transport.lwm2m.timeout:}")
+ private Long timeout;
+
+ @Getter
+ @Value("${transport.sessions.report_timeout}")
+ private long sessionReportTimeout;
+
+ @Getter
+ @Value("${transport.lwm2m.model_path_file:}")
+ private String modelPathFile;
+
+ @Getter
+ @Value("${transport.lwm2m.recommended_ciphers:}")
+ private boolean recommendedCiphers;
+
+ @Getter
+ @Value("${transport.lwm2m.recommended_supported_groups:}")
+ private boolean recommendedSupportedGroups;
+
+ @Getter
+ @Value("${transport.lwm2m.request_pool_size:}")
+ private int requestPoolSize;
+
+ @Getter
+ @Value("${transport.lwm2m.request_error_pool_size:}")
+ private int requestErrorPoolSize;
+
+ @Getter
+ @Value("${transport.lwm2m.registered_pool_size:}")
+ private int registeredPoolSize;
+
+ @Getter
+ @Value("${transport.lwm2m.update_registered_pool_size:}")
+ private int updateRegisteredPoolSize;
+
+ @Getter
+ @Value("${transport.lwm2m.un_registered_pool_size:}")
+ private int unRegisteredPoolSize;
@Getter
@Value("${transport.lwm2m.secure.key_store_type:}")
@@ -121,6 +146,18 @@ public class LwM2MTransportConfigServer {
@Value("${transport.lwm2m.secure.root_alias:}")
private String rootAlias;
+ @Getter
+ @Value("${transport.lwm2m.server.secure.start_psk:}")
+ private boolean serverStartPsk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.secure.start_rpk:}")
+ private boolean serverStartRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.secure.start_x509:}")
+ private boolean serverStartX509;
+
@Getter
@Value("${transport.lwm2m.secure.enable_gen_psk_rpk:}")
private Boolean enableGenPskRpk;
@@ -130,32 +167,37 @@ public class LwM2MTransportConfigServer {
private String serverHost;
@Getter
- @Value("${transport.lwm2m.server.bind_port:}")
- private Integer serverPort;
-
- @Getter
- @Value("${transport.lwm2m.server.bind_port_cert:}")
- private Integer serverPortCert;
-
- @Getter
- @Value("${transport.lwm2m.server.secure.start_all:}")
- private boolean serverStartAll;
-
- @Getter
- @Value("${transport.lwm2m.server.secure.dtls_mode:}")
- private Integer serverDtlsMode;
+ @Value("${transport.lwm2m.server.id:}")
+ private Integer serverId;
@Getter
@Value("${transport.lwm2m.server.secure.bind_address:}")
private String serverSecureHost;
- @Getter
- @Value("${transport.lwm2m.server.secure.bind_port:}")
- private Integer serverSecurePort;
@Getter
- @Value("${transport.lwm2m.server.secure.bind_port_cert:}")
- private Integer serverSecurePortCert;
+ @Value("${transport.lwm2m.server.bind_port_no_sec_psk:}")
+ private Integer serverPortNoSecPsk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.bind_port_no_sec_rpk:}")
+ private Integer serverPortNoSecRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.bind_port_no_sec_x509:}")
+ private Integer serverPortNoSecX509;
+
+ @Getter
+ @Value("${transport.lwm2m.server.secure.bind_port_psk:}")
+ private Integer serverPortPsk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.secure.bind_port_rpk:}")
+ private Integer serverPortRpk;
+
+ @Getter
+ @Value("${transport.lwm2m.server.secure.bind_port_x509:}")
+ private Integer serverPortX509;
@Getter
@Value("${transport.lwm2m.server.secure.public_x:}")
@@ -173,10 +215,6 @@ public class LwM2MTransportConfigServer {
@Value("${transport.lwm2m.server.secure.alias:}")
private String serverAlias;
- @Getter
- @Value("${transport.lwm2m.bootstrap.enable:}")
- private Boolean bootstrapEnable;
-
@Getter
@Value("${transport.lwm2m.secure.redis_url:}")
private String redisUrl;
diff --git a/pom.xml b/pom.xml
index 3cbd57e508..6fc9e94051 100755
--- a/pom.xml
+++ b/pom.xml
@@ -62,10 +62,10 @@
2.11.3
2.11.3
2.2.6
- 2.2.3
- 1.0.1
- 1.0.1
- 1.0.0
+ 2.6.0
+ 1.3.0
+ 1.3.0
+ 1.3.0
2.6.2
2.3.30
1.6.2
@@ -1166,11 +1166,6 @@
leshan-core
${leshan-core.version}
-
- org.eclipse.californium
- californium-core
- ${californium.version}
-
org.eclipse.californium
californium-core
diff --git a/transport/lwm2m/pom.xml b/transport/lwm2m/pom.xml
index 1d7619a2ad..addbeb9d7b 100644
--- a/transport/lwm2m/pom.xml
+++ b/transport/lwm2m/pom.xml
@@ -45,11 +45,38 @@
+
+ org.thingsboard.common.transport
+ transport-api
+
+
+ org.springframework
+ spring-context-support
+
+
+ org.springframework
+ spring-context
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ log4j-over-slf4j
+
+
+ ch.qos.logback
+ logback-core
+
+
+ ch.qos.logback
+ logback-classic
+
org.eclipse.leshan
leshan-server-cf
-
org.eclipse.leshan
leshan-client-cf
@@ -59,7 +86,6 @@
org.eclipse.leshan
leshan-server-redis
-
org.springframework.boot
spring-boot-starter-test
@@ -78,33 +104,23 @@
org.eclipse.californium
californium-core
+ test-jar
+ test
+
+ org.eclipse.californium
+ californium-core
+
+
+
+
+
org.eclipse.californium
element-connector
test-jar
test
-
-
- org.thingsboard.common.transport
- lwm2m
-
-
- org.thingsboard.common
- queue
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- com.sun.winsw
- winsw
- bin
- exe
- provided
-
diff --git a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml
index d6fe7b5b1f..f25dd2bb59 100644
--- a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml
+++ b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml
@@ -42,6 +42,7 @@ zk:
# LWM2M server parameters
transport:
+ # Local LwM2M transport parameters
lwm2m:
# Enable/disable lvm2m transport protocol.
enabled: "${LWM2M_ENABLED:true}"
@@ -51,7 +52,13 @@ transport:
timeout: "${LWM2M_TIMEOUT:120000}"
# model_path_file: "${LWM2M_MODEL_PATH_FILE:./common/transport/lwm2m/src/main/resources/models/}"
model_path_file: "${LWM2M_MODEL_PATH_FILE:}"
- support_deprecated_ciphers_enable: "${LWM2M_SUPPORT_DEPRECATED_CIPHERS_ENABLED:true}"
+ recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
+ recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:false}"
+ request_pool_size: "${LWM2M_REQUEST_POOL_SIZE:100}"
+ request_error_pool_size: "${LWM2M_REQUEST_ERROR_POOL_SIZE:10}"
+ registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}"
+ update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}"
+ un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}"
secure:
# Only Certificate_x509:
# To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
@@ -64,24 +71,19 @@ transport:
root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
enable_gen_psk_rpk: "${ENABLE_GEN_PSK_RPK:true}"
server:
+ id: "${LWM2M_SERVER_ID:123}"
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT:5685}"
- bind_port_cert: "${LWM2M_BIND_PORT_CERT:5687}"
+ bind_port_no_sec_psk: "${LWM2M_BIND_PORT_NO_SEC_PSK:5685}"
+ bind_port_no_sec_rpk: "${LWM2M_BIND_PORT_NO_SEC_RPK:5687}"
+ bind_port_no_sec_x509: "${LWM2M_BIND_PORT_NO_SEC_X509:5689}"
secure:
- start_all: "${START_SERVER_ALL:true}"
- #leshan.core (V1_1)
- #DTLS security modes:
- #0: Pre-Shared Key mode
- #1: Raw Public Key mode
- #2: Certificate mode X509
- #3: NoSec mode *
- #OMA-TS-LightweightM2M_Core-V1_1_1-20190617-A (add)
- #4: Certificate mode X509 with EST
- # If only startAll == false
- dtls_mode: "${LWM2M_SECURITY_MODE:1}"
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_SEC:5686}"
- bind_port_cert: "${LWM2M_BIND_PORT_SEC_CERT:5688}"
+ start_psk: "${START_SERVER_PSK:true}"
+ start_rpk: "${START_SERVER_RPK:true}"
+ start_x509: "${START_SERVER_X509:true}"
+ bind_port_psk: "${LWM2M_BIND_PORT_SEC_PSK:5686}"
+ bind_port_rpk: "${LWM2M_BIND_PORT_SEC_RPK:5688}"
+ bind_port_x509: "${LWM2M_BIND_PORT_SEC_X509:5690}"
# Only RPK: Public & Private Key
# create_rpk: "${CREATE_RPK:}"
public_x: "${LWM2M_SERVER_PUBLIC_X:405354ea8893471d9296afbc8b020a5c6201b0bb25812a53b849d4480fa5f069}"
@@ -91,16 +93,19 @@ transport:
alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}"
bootstrap:
enable: "${BOOTSTRAP:true}"
+ id: "${LWM2M_SERVER_ID:111}"
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_BS:5689}"
- bind_port_cert: "${LWM2M_BIND_PORT_SER_BS:5691}"
+ bind_port_no_sec_psk: "${LWM2M_BIND_PORT_NO_SEC_BS:5691}"
+ bind_port_no_sec_rpk: "${LWM2M_BIND_PORT_NO_SEC_BS:5693}"
+ bind_port_no_sec_x509: "${LWM2M_BIND_PORT_NO_SEC_BS:5695}"
secure:
- start_all: "${START_BOOTSTRAP_ALL:true}"
- # If only startAll == false
- dtls_mode: "${LWM2M_SECURITY_MODE_BS:1}"
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
- bind_port: "${LWM2M_BIND_PORT_SEC_BS:5690}"
- bind_port_cert: "${LWM2M_BIND_PORT_SEC_CERT_BS:5692}"
+ start_psk: "${START_SERVER_PSK_BS:true}"
+ start_rpk: "${START_SERVER_RPK_BS:true}"
+ start_x509: "${START_SERVER_X509_BS:true}"
+ bind_port_psk: "${LWM2M_BIND_PORT_SEC_PSK_BS:5692}"
+ bind_port_rpk: "${LWM2M_BIND_PORT_SER_RPK_BS:5694}"
+ bind_port_x509: "${LWM2M_BIND_PORT_SEC_X509_BS:5696}"
# Only RPK: Public & Private Key
public_x: "${LWM2M_SERVER_PUBLIC_X_BS:993ef2b698c6a9c0c1d8be78b13a9383c0854c7c7c7a504d289b403794648183}"
public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:267412d5fc4e5ceb2257cb7fd7f76ebdac2fa9aa100afb162e990074cc0bfaa2}"
diff --git a/ui-ngx/angular.json b/ui-ngx/angular.json
index 3cad30304a..3cc2d92d57 100644
--- a/ui-ngx/angular.json
+++ b/ui-ngx/angular.json
@@ -247,6 +247,7 @@
},
"defaultProject": "thingsboard",
"cli": {
- "packageManager": "yarn"
+ "packageManager": "yarn",
+ "analytics": false
}
-}
+}
\ No newline at end of file
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts
index 20a72d8dcd..31ab078485 100644
--- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts
+++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts
@@ -25,7 +25,7 @@ import {
import {
ControlValueAccessor,
FormBuilder,
- FormGroup, NG_VALIDATORS,
+ FormGroup,
NG_VALUE_ACCESSOR, Validators
} from "@angular/forms";
import { coerceBooleanProperty } from "@angular/cdk/coercion";
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts
index 62f516b660..9c62b02b49 100644
--- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts
+++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts
@@ -16,12 +16,11 @@
import { Component, Inject, OnInit } from '@angular/core';
import { DialogComponent } from '@shared/components/dialog.component';
-import { ControlValueAccessor, FormBuilder, FormGroup } from '@angular/forms';
+import { FormBuilder, FormGroup } from '@angular/forms';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { Router } from '@angular/router';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
-import { TranslateService } from '@ngx-translate/core';
export interface Lwm2mObjectAddInstancesData {
instancesIds: Set;
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts
index f94cd589ae..9a909a41af 100644
--- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts
+++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts
@@ -14,7 +14,7 @@
/// limitations under the License.
///
-import { Component, EventEmitter, forwardRef, Input, OnInit, Output, ViewChild } from "@angular/core";
+import { Component, forwardRef, Input, OnInit } from "@angular/core";
import {
ControlValueAccessor,
FormArray, FormBuilder,
@@ -27,7 +27,7 @@ import {
} from '@home/components/profile/device/lwm2m/profile-config.models';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
-import { deepClone, isUndefined } from '@core/utils';
+import { deepClone } from '@core/utils';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
@Component({
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts
index 8482fde97a..e506510663 100644
--- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts
+++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts
@@ -44,7 +44,6 @@ import {
Lwm2mObjectAddInstancesComponent,
Lwm2mObjectAddInstancesData
} from '@home/components/profile/device/lwm2m/lwm2m-object-add-instances.component';
-import { Control } from 'leaflet';
@Component({
selector: 'tb-profile-lwm2m-observe-attr-telemetry',
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts
index c626138828..20a68765a9 100644
--- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts
+++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts
@@ -25,11 +25,7 @@ export const DEFAULT_ID_SERVER = 123;
export const DEFAULT_ID_BOOTSTRAP = 111;
export const DEFAULT_HOST_NAME = "localhost";
export const DEFAULT_PORT_SERVER_NO_SEC = 5685;
-export const DEFAULT_PORT_SERVER_SEC = 5686;
-export const DEFAULT_PORT_SERVER_SEC_CERT = 5688;
-export const DEFAULT_PORT_BOOTSTRAP_NO_SEC = 5689;
-export const DEFAULT_PORT_BOOTSTRAP_SEC = 5690;
-export const DEFAULT_PORT_BOOTSTRAP_SEC_CERT = 5692;
+export const DEFAULT_PORT_BOOTSTRAP_NO_SEC = 5691;
export const DEFAULT_CLIENT_HOLD_OFF_TIME = 1;
export const DEFAULT_LIFE_TIME = 300;
export const DEFAULT_DEFAULT_MIN_PERIOD = 1;
@@ -118,7 +114,7 @@ export function getDefaultBootstrapServersSecurityConfig(): BootstrapServersSecu
export function getDefaultBootstrapServerSecurityConfig(hostname: any): ServerSecurityConfig {
return {
host: hostname,
- port: getDefaultPortBootstrap(),
+ port: DEFAULT_PORT_BOOTSTRAP_NO_SEC,
bootstrapServerIs: true,
securityMode: SECURITY_CONFIG_MODE.NO_SEC.toString(),
serverPublicKey: '',
@@ -131,20 +127,10 @@ export function getDefaultBootstrapServerSecurityConfig(hostname: any): ServerSe
export function getDefaultLwM2MServerSecurityConfig(hostname): ServerSecurityConfig {
const DefaultLwM2MServerSecurityConfig = getDefaultBootstrapServerSecurityConfig(hostname);
DefaultLwM2MServerSecurityConfig.bootstrapServerIs = false;
- DefaultLwM2MServerSecurityConfig.port = getDefaultPortServer();
+ DefaultLwM2MServerSecurityConfig.port = DEFAULT_PORT_SERVER_NO_SEC;
DefaultLwM2MServerSecurityConfig.serverId = DEFAULT_ID_SERVER;
return DefaultLwM2MServerSecurityConfig;
}
-//ok
-export function getDefaultPortBootstrap(securityMode?: string): number {
- return (!securityMode || securityMode === SECURITY_CONFIG_MODE.NO_SEC.toString()) ? DEFAULT_PORT_BOOTSTRAP_NO_SEC :
- (securityMode === SECURITY_CONFIG_MODE.X509.toString()) ? DEFAULT_PORT_BOOTSTRAP_SEC_CERT : DEFAULT_PORT_BOOTSTRAP_SEC;
-}
-//ok
-export function getDefaultPortServer(securityMode?: string): number {
- return (!securityMode || securityMode === SECURITY_CONFIG_MODE.NO_SEC.toString()) ? DEFAULT_PORT_SERVER_NO_SEC :
- (securityMode === SECURITY_CONFIG_MODE.X509.toString()) ? DEFAULT_PORT_SERVER_SEC_CERT : DEFAULT_PORT_SERVER_SEC;
-}
//ok
function getDefaultProfileBootstrapSecurityConfig(hostname: any): BootstrapSecurityConfig {
@@ -197,16 +183,3 @@ export interface ObjectLwM2M {
instances?: Instance []
}
-export function getChangeInstancesIds (): ChangeInstancesIds {
- let changeInstancesIds: ChangeInstancesIds;
- changeInstancesIds.add = new Set();
- changeInstancesIds.del = new Set();
- return changeInstancesIds;
-
-}
-
-export interface ChangeInstancesIds {
- add: Set,
- del: Set
-}
-