Lwm2m: backEnd: refactoring after update dependencies: <californium.version>2.6.0</californium.version>
<leshan-server.version>1.3.0</leshan-server.version>
<leshan-core.version>1.3.0</leshan-core.version>
<leshan-client.version>1.3.0</leshan-client.version>
This commit is contained in:
parent
be4475c2cc
commit
17700fe186
@ -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:
|
||||
|
||||
@ -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}"
|
||||
|
||||
@ -99,6 +99,14 @@
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.eclipse.californium</groupId>-->
|
||||
<!-- <artifactId>scandium</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>element-connector</artifactId>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ public interface LwM2MTransportService {
|
||||
|
||||
void updatedReg(LeshanServer lwServer, Registration registration);
|
||||
|
||||
void unReg(Registration registration, Collection<Observation> observations);
|
||||
void unReg(LeshanServer lwServer, Registration registration, Collection<Observation> observations);
|
||||
|
||||
void onSleepingDev(Registration registration);
|
||||
|
||||
|
||||
@ -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<Observation> 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<Observation> observations) {
|
||||
public void unReg(LeshanServer lwServer, Registration registration, Collection<Observation> 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<Integer, ?> values, String path) {
|
||||
private void onObservationSetResourcesValue(Registration registration, Object value, Map<Integer, ?> 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) {
|
||||
|
||||
@ -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<Observation> observations, boolean expired,
|
||||
Registration newReg) {
|
||||
log.info("unregistered");
|
||||
service.unReg(registration, observations);
|
||||
service.unReg(lhServer, registration, observations);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@ -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<>();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -21,7 +21,7 @@ import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class ResourceValue {
|
||||
Map<Integer, ?> values;
|
||||
Map<Integer, ?> values;
|
||||
Object value;
|
||||
boolean multiInstances;
|
||||
|
||||
|
||||
@ -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:}")
|
||||
|
||||
@ -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<ObjectModel> 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;
|
||||
|
||||
13
pom.xml
13
pom.xml
@ -62,10 +62,10 @@
|
||||
<jackson-annotations.version>2.11.3</jackson-annotations.version>
|
||||
<jackson-core.version>2.11.3</jackson-core.version>
|
||||
<json-schema-validator.version>2.2.6</json-schema-validator.version>
|
||||
<californium.version>2.2.3</californium.version>
|
||||
<leshan-server.version>1.0.1</leshan-server.version>
|
||||
<leshan-core.version>1.0.1</leshan-core.version>
|
||||
<leshan-client.version>1.0.0</leshan-client.version>
|
||||
<californium.version>2.6.0</californium.version>
|
||||
<leshan-server.version>1.3.0</leshan-server.version>
|
||||
<leshan-core.version>1.3.0</leshan-core.version>
|
||||
<leshan-client.version>1.3.0</leshan-client.version>
|
||||
<gson.version>2.6.2</gson.version>
|
||||
<freemarker.version>2.3.30</freemarker.version>
|
||||
<mail.version>1.6.2</mail.version>
|
||||
@ -1166,11 +1166,6 @@
|
||||
<artifactId>leshan-core</artifactId>
|
||||
<version>${leshan-core.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
<version>${californium.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
|
||||
@ -45,11 +45,38 @@
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>transport-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>log4j-over-slf4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.leshan</groupId>
|
||||
<artifactId>leshan-server-cf</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.leshan</groupId>
|
||||
<artifactId>leshan-client-cf</artifactId>
|
||||
@ -59,7 +86,6 @@
|
||||
<groupId>org.eclipse.leshan</groupId>
|
||||
<artifactId>leshan-server-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
@ -78,33 +104,23 @@
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.eclipse.californium</groupId>-->
|
||||
<!-- <artifactId>scandium</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>element-connector</artifactId>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>lwm2m</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>queue</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.winsw</groupId>
|
||||
<artifactId>winsw</artifactId>
|
||||
<classifier>bin</classifier>
|
||||
<type>exe</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -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}"
|
||||
|
||||
@ -247,6 +247,7 @@
|
||||
},
|
||||
"defaultProject": "thingsboard",
|
||||
"cli": {
|
||||
"packageManager": "yarn"
|
||||
"packageManager": "yarn",
|
||||
"analytics": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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";
|
||||
|
||||
@ -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<number>;
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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<number>();
|
||||
changeInstancesIds.del = new Set<number>();
|
||||
return changeInstancesIds;
|
||||
|
||||
}
|
||||
|
||||
export interface ChangeInstancesIds {
|
||||
add: Set<number>,
|
||||
del: Set<number>
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user