Monitoring COAP Leshan Dependency Upgrade
This commit is contained in:
parent
7e49730be6
commit
99d2d1e033
@ -42,8 +42,6 @@
|
|||||||
<pkg.implementationTitle>ThingsBoard Monitoring Service</pkg.implementationTitle>
|
<pkg.implementationTitle>ThingsBoard Monitoring Service</pkg.implementationTitle>
|
||||||
<pkg.mainClass>org.thingsboard.monitoring.ThingsboardMonitoringApplication</pkg.mainClass>
|
<pkg.mainClass>org.thingsboard.monitoring.ThingsboardMonitoringApplication</pkg.mainClass>
|
||||||
|
|
||||||
<californium.version>2.6.1</californium.version>
|
|
||||||
<leshan.version>2.0.0-M4</leshan.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|||||||
@ -20,13 +20,16 @@ import lombok.Setter;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.eclipse.californium.core.network.CoapEndpoint;
|
import org.eclipse.californium.core.config.CoapConfig;
|
||||||
import org.eclipse.californium.core.network.config.NetworkConfig;
|
import org.eclipse.californium.elements.config.Configuration;
|
||||||
import org.eclipse.californium.core.observe.ObservationStore;
|
import org.eclipse.californium.scandium.config.DtlsConfig;
|
||||||
import org.eclipse.californium.scandium.DTLSConnector;
|
import org.eclipse.leshan.client.LeshanClient;
|
||||||
import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
|
import org.eclipse.leshan.client.LeshanClientBuilder;
|
||||||
import org.eclipse.leshan.client.californium.LeshanClient;
|
import org.eclipse.leshan.client.californium.endpoint.CaliforniumClientEndpointsProvider;
|
||||||
import org.eclipse.leshan.client.californium.LeshanClientBuilder;
|
import org.eclipse.leshan.client.californium.endpoint.ClientProtocolProvider;
|
||||||
|
import org.eclipse.leshan.client.californium.endpoint.coap.CoapOscoreProtocolProvider;
|
||||||
|
import org.eclipse.leshan.client.californium.endpoint.coaps.CoapsClientProtocolProvider;
|
||||||
|
import org.eclipse.leshan.client.endpoint.LwM2mClientEndpointsProvider;
|
||||||
import org.eclipse.leshan.client.engine.DefaultRegistrationEngineFactory;
|
import org.eclipse.leshan.client.engine.DefaultRegistrationEngineFactory;
|
||||||
import org.eclipse.leshan.client.object.Security;
|
import org.eclipse.leshan.client.object.Security;
|
||||||
import org.eclipse.leshan.client.object.Server;
|
import org.eclipse.leshan.client.object.Server;
|
||||||
@ -34,9 +37,8 @@ import org.eclipse.leshan.client.observer.LwM2mClientObserver;
|
|||||||
import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
|
import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
|
||||||
import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
|
import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
|
||||||
import org.eclipse.leshan.client.resource.ObjectsInitializer;
|
import org.eclipse.leshan.client.resource.ObjectsInitializer;
|
||||||
import org.eclipse.leshan.client.servers.ServerIdentity;
|
import org.eclipse.leshan.client.servers.LwM2mServer;
|
||||||
import org.eclipse.leshan.core.ResponseCode;
|
import org.eclipse.leshan.core.ResponseCode;
|
||||||
import org.eclipse.leshan.core.californium.EndpointFactory;
|
|
||||||
import org.eclipse.leshan.core.model.InvalidDDFFileException;
|
import org.eclipse.leshan.core.model.InvalidDDFFileException;
|
||||||
import org.eclipse.leshan.core.model.LwM2mModel;
|
import org.eclipse.leshan.core.model.LwM2mModel;
|
||||||
import org.eclipse.leshan.core.model.ObjectLoader;
|
import org.eclipse.leshan.core.model.ObjectLoader;
|
||||||
@ -53,7 +55,6 @@ import org.thingsboard.monitoring.util.ResourceUtils;
|
|||||||
|
|
||||||
import javax.security.auth.Destroyable;
|
import javax.security.auth.Destroyable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -95,9 +96,11 @@ public class Lwm2mClient extends BaseInstanceEnabler implements Destroyable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Security security = noSec(serverUri, 123);
|
Security security = noSec(serverUri, 123);
|
||||||
NetworkConfig coapConfig = new NetworkConfig().setString(NetworkConfig.Keys.COAP_PORT, StringUtils.substringAfterLast(serverUri, ":"));
|
Configuration coapConfig = new Configuration();
|
||||||
|
String portStr = StringUtils.substringAfterLast(serverUri, ":");
|
||||||
LeshanClient leshanClient;
|
if (StringUtils.isNotEmpty(portStr)) {
|
||||||
|
coapConfig.set(CoapConfig.COAP_PORT, Integer.parseInt(portStr));
|
||||||
|
}
|
||||||
|
|
||||||
LwM2mModel model = new StaticModel(models);
|
LwM2mModel model = new StaticModel(models);
|
||||||
ObjectsInitializer initializer = new ObjectsInitializer(model);
|
ObjectsInitializer initializer = new ObjectsInitializer(model);
|
||||||
@ -105,118 +108,121 @@ public class Lwm2mClient extends BaseInstanceEnabler implements Destroyable {
|
|||||||
initializer.setInstancesForObject(SERVER, new Server(123, TimeUnit.MINUTES.toSeconds(5)));
|
initializer.setInstancesForObject(SERVER, new Server(123, TimeUnit.MINUTES.toSeconds(5)));
|
||||||
initializer.setInstancesForObject(DEVICE, this);
|
initializer.setInstancesForObject(DEVICE, this);
|
||||||
initializer.setClassForObject(ACCESS_CONTROL, DummyInstanceEnabler.class);
|
initializer.setClassForObject(ACCESS_CONTROL, DummyInstanceEnabler.class);
|
||||||
DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
|
|
||||||
dtlsConfig.setRecommendedCipherSuitesOnly(true);
|
|
||||||
dtlsConfig.setClientOnly();
|
|
||||||
|
|
||||||
|
// Create client endpoints Provider
|
||||||
|
List<ClientProtocolProvider> protocolProvider = new ArrayList<>();
|
||||||
|
protocolProvider.add(new CoapOscoreProtocolProvider());
|
||||||
|
protocolProvider.add(new CoapsClientProtocolProvider());
|
||||||
|
CaliforniumClientEndpointsProvider.Builder endpointsBuilder = new CaliforniumClientEndpointsProvider.Builder(
|
||||||
|
protocolProvider.toArray(new ClientProtocolProvider[protocolProvider.size()]));
|
||||||
|
|
||||||
|
// Create Californium Configuration
|
||||||
|
Configuration clientCoapConfig = endpointsBuilder.createDefaultConfiguration();
|
||||||
|
|
||||||
|
// Set some DTLS stuff
|
||||||
|
clientCoapConfig.setTransient(DtlsConfig.DTLS_RECOMMENDED_CIPHER_SUITES_ONLY);
|
||||||
|
clientCoapConfig.set(DtlsConfig.DTLS_RECOMMENDED_CIPHER_SUITES_ONLY, true);
|
||||||
|
|
||||||
|
// Set Californium Configuration
|
||||||
|
endpointsBuilder.setConfiguration(clientCoapConfig);
|
||||||
|
|
||||||
|
// creates EndpointsProvider
|
||||||
|
List<LwM2mClientEndpointsProvider> endpointsProvider = new ArrayList<>();
|
||||||
|
endpointsProvider.add(endpointsBuilder.build());
|
||||||
|
|
||||||
|
// Configure registration engine
|
||||||
DefaultRegistrationEngineFactory engineFactory = new DefaultRegistrationEngineFactory();
|
DefaultRegistrationEngineFactory engineFactory = new DefaultRegistrationEngineFactory();
|
||||||
engineFactory.setReconnectOnUpdate(false);
|
engineFactory.setReconnectOnUpdate(false);
|
||||||
engineFactory.setResumeOnConnect(true);
|
engineFactory.setResumeOnConnect(true);
|
||||||
|
|
||||||
EndpointFactory endpointFactory = new EndpointFactory() {
|
// Build the client
|
||||||
|
|
||||||
@Override
|
|
||||||
public CoapEndpoint createUnsecuredEndpoint(InetSocketAddress address, NetworkConfig coapConfig,
|
|
||||||
ObservationStore store) {
|
|
||||||
CoapEndpoint.Builder builder = new CoapEndpoint.Builder();
|
|
||||||
builder.setInetSocketAddress(address);
|
|
||||||
builder.setNetworkConfig(coapConfig);
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CoapEndpoint createSecuredEndpoint(DtlsConnectorConfig dtlsConfig, NetworkConfig coapConfig,
|
|
||||||
ObservationStore store) {
|
|
||||||
CoapEndpoint.Builder builder = new CoapEndpoint.Builder();
|
|
||||||
DtlsConnectorConfig.Builder dtlsConfigBuilder = new DtlsConnectorConfig.Builder(dtlsConfig);
|
|
||||||
builder.setConnector(new DTLSConnector(dtlsConfigBuilder.build()));
|
|
||||||
builder.setNetworkConfig(coapConfig);
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
LeshanClientBuilder builder = new LeshanClientBuilder(endpoint);
|
LeshanClientBuilder builder = new LeshanClientBuilder(endpoint);
|
||||||
builder.setObjects(initializer.createAll());
|
builder.setObjects(initializer.createAll());
|
||||||
builder.setCoapConfig(coapConfig);
|
builder.setEndpointsProviders(endpointsProvider.toArray(new LwM2mClientEndpointsProvider[endpointsProvider.size()]));
|
||||||
builder.setDtlsConfig(dtlsConfig);
|
|
||||||
builder.setRegistrationEngineFactory(engineFactory);
|
builder.setRegistrationEngineFactory(engineFactory);
|
||||||
builder.setEndpointFactory(endpointFactory);
|
|
||||||
builder.setDecoder(new DefaultLwM2mDecoder(false));
|
builder.setDecoder(new DefaultLwM2mDecoder(false));
|
||||||
builder.setEncoder(new DefaultLwM2mEncoder(false));
|
builder.setEncoder(new DefaultLwM2mEncoder(false));
|
||||||
leshanClient = builder.build();
|
leshanClient = builder.build();
|
||||||
|
|
||||||
|
// Add observer
|
||||||
LwM2mClientObserver observer = new LwM2mClientObserver() {
|
LwM2mClientObserver observer = new LwM2mClientObserver() {
|
||||||
|
@Override
|
||||||
|
public void onBootstrapStarted(LwM2mServer bsserver, BootstrapRequest request) {
|
||||||
|
// No implementation needed
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBootstrapStarted(ServerIdentity bsserver, BootstrapRequest request) {}
|
public void onBootstrapSuccess(LwM2mServer bsserver, BootstrapRequest request) {
|
||||||
|
// No implementation needed
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBootstrapSuccess(ServerIdentity bsserver, BootstrapRequest request) {}
|
public void onBootstrapFailure(LwM2mServer bsserver, BootstrapRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
||||||
|
// No implementation needed
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBootstrapFailure(ServerIdentity bsserver, BootstrapRequest request,
|
public void onBootstrapTimeout(LwM2mServer bsserver, BootstrapRequest request) {
|
||||||
ResponseCode responseCode, String errorMessage, Exception cause) {}
|
// No implementation needed
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBootstrapTimeout(ServerIdentity bsserver, BootstrapRequest request) {}
|
public void onRegistrationStarted(LwM2mServer server, RegisterRequest request) {
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRegistrationStarted(ServerIdentity server, RegisterRequest request) {
|
|
||||||
log.debug("onRegistrationStarted [{}]", request.getEndpointName());
|
log.debug("onRegistrationStarted [{}]", request.getEndpointName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRegistrationSuccess(ServerIdentity server, RegisterRequest request, String registrationID) {
|
public void onRegistrationSuccess(LwM2mServer server, RegisterRequest request, String registrationID) {
|
||||||
log.debug("onRegistrationSuccess [{}] [{}]", request.getEndpointName(), registrationID);
|
log.debug("onRegistrationSuccess [{}] [{}]", request.getEndpointName(), registrationID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRegistrationFailure(ServerIdentity server, RegisterRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
public void onRegistrationFailure(LwM2mServer server, RegisterRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
||||||
log.debug("onRegistrationFailure [{}] [{}] [{}]", request.getEndpointName(), responseCode, errorMessage);
|
log.debug("onRegistrationFailure [{}] [{}] [{}]", request.getEndpointName(), responseCode, errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRegistrationTimeout(ServerIdentity server, RegisterRequest request) {
|
public void onRegistrationTimeout(LwM2mServer server, RegisterRequest request) {
|
||||||
log.debug("onRegistrationTimeout [{}]", request.getEndpointName());
|
log.debug("onRegistrationTimeout [{}]", request.getEndpointName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateStarted(ServerIdentity server, UpdateRequest request) {
|
public void onUpdateStarted(LwM2mServer server, UpdateRequest request) {
|
||||||
log.debug("onUpdateStarted [{}]", request.getRegistrationId());
|
log.debug("onUpdateStarted [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateSuccess(ServerIdentity server, UpdateRequest request) {
|
public void onUpdateSuccess(LwM2mServer server, UpdateRequest request) {
|
||||||
log.debug("onUpdateSuccess [{}]", request.getRegistrationId());
|
log.debug("onUpdateSuccess [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateFailure(ServerIdentity server, UpdateRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
public void onUpdateFailure(LwM2mServer server, UpdateRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
||||||
log.debug("onUpdateFailure [{}]", request.getRegistrationId());
|
log.debug("onUpdateFailure [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateTimeout(ServerIdentity server, UpdateRequest request) {
|
public void onUpdateTimeout(LwM2mServer server, UpdateRequest request) {
|
||||||
log.debug("onUpdateTimeout [{}]", request.getRegistrationId());
|
log.debug("onUpdateTimeout [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeregistrationStarted(ServerIdentity server, DeregisterRequest request) {
|
public void onDeregistrationStarted(LwM2mServer server, DeregisterRequest request) {
|
||||||
log.debug("onDeregistrationStarted [{}]", request.getRegistrationId());
|
log.debug("onDeregistrationStarted [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeregistrationSuccess(ServerIdentity server, DeregisterRequest request) {
|
public void onDeregistrationSuccess(LwM2mServer server, DeregisterRequest request) {
|
||||||
log.debug("onDeregistrationStarted [{}]", request.getRegistrationId());
|
log.debug("onDeregistrationSuccess [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeregistrationFailure(ServerIdentity server, DeregisterRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
public void onDeregistrationFailure(LwM2mServer server, DeregisterRequest request, ResponseCode responseCode, String errorMessage, Exception cause) {
|
||||||
log.debug("onDeregistrationFailure [{}] [{}] [{}]", request.getRegistrationId(), responseCode, errorMessage);
|
log.debug("onDeregistrationFailure [{}] [{}] [{}]", request.getRegistrationId(), responseCode, errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeregistrationTimeout(ServerIdentity server, DeregisterRequest request) {
|
public void onDeregistrationTimeout(LwM2mServer server, DeregisterRequest request) {
|
||||||
log.debug("onDeregistrationTimeout [{}]", request.getRegistrationId());
|
log.debug("onDeregistrationTimeout [{}]", request.getRegistrationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +230,6 @@ public class Lwm2mClient extends BaseInstanceEnabler implements Destroyable {
|
|||||||
public void onUnexpectedError(Throwable unexpectedError) {
|
public void onUnexpectedError(Throwable unexpectedError) {
|
||||||
log.debug("onUnexpectedError [{}]", unexpectedError.toString());
|
log.debug("onUnexpectedError [{}]", unexpectedError.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
leshanClient.addObserver(observer);
|
leshanClient.addObserver(observer);
|
||||||
|
|
||||||
@ -239,17 +244,17 @@ public class Lwm2mClient extends BaseInstanceEnabler implements Destroyable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ReadResponse read(ServerIdentity identity, int resourceId) {
|
public ReadResponse read(LwM2mServer server, int resourceId) {
|
||||||
if (supportedResources.contains(resourceId)) {
|
if (supportedResources.contains(resourceId)) {
|
||||||
return ReadResponse.success(resourceId, data);
|
return ReadResponse.success(resourceId, data);
|
||||||
}
|
}
|
||||||
return super.read(identity, resourceId);
|
return super.read(server, resourceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void send(String data, int resource) {
|
public void send(String data, int resource) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
fireResourcesChange(resource);
|
fireResourceChange(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user