From 2869625896f0f18b4a1d2db75ba7a192534144c0 Mon Sep 17 00:00:00 2001 From: Simon Bernard Date: Fri, 28 Jun 2024 11:48:30 +0200 Subject: [PATCH] Refactoring add bsserver module - no file content changes [dont build] Move Bootstrap Server code in dedicated maven modules. This is part of : https://github.com/eclipse-leshan/leshan/issues/1295 Refactoring was done in 2 commits to try to keep git history : https://stackoverflow.com/questions/2314652/is-it-possible-to-move-rename-files-in-git-and-maintain-their-history This commit doesn't build. --- leshan-lwm2m-bsserver/logback-leshan-test.xml | 35 ++ leshan-lwm2m-bsserver/pom.xml | 56 +++ .../leshan/bsserver}/BootstrapConfig.java | 0 .../bsserver}/BootstrapConfigStore.java | 0 .../BootstrapConfigStoreTaskProvider.java | 0 .../bsserver}/BootstrapFailureCause.java | 0 .../leshan/bsserver}/BootstrapHandler.java | 0 .../bsserver}/BootstrapHandlerFactory.java | 0 .../leshan/bsserver}/BootstrapSession.java | 0 .../bsserver}/BootstrapSessionAdapter.java | 0 .../bsserver}/BootstrapSessionDispatcher.java | 0 .../bsserver}/BootstrapSessionListener.java | 0 .../bsserver}/BootstrapSessionManager.java | 0 .../bsserver}/BootstrapTaskProvider.java | 0 .../leshan/bsserver}/BootstrapUtil.java | 0 .../bsserver}/ConfigurationChecker.java | 0 .../bsserver}/DefaultBootstrapAuthorizer.java | 0 .../bsserver}/DefaultBootstrapHandler.java | 0 .../bsserver}/DefaultBootstrapSession.java | 0 .../DefaultBootstrapSessionManager.java | 0 .../EditableBootstrapConfigStore.java | 0 .../InMemoryBootstrapConfigStore.java | 0 .../InvalidConfigurationException.java | 0 .../bsserver}/LeshanBootstrapServer.java | 0 .../LeshanBootstrapServerBuilder.java | 0 .../LwM2mBootstrapRequestSender.java | 0 .../leshan/bsserver}/SmsSecurityMode.java | 0 .../BootstrapServerEndpointToolbox.java | 0 ...ositeBootstrapServerEndpointsProvider.java | 0 ...ositeBootstrapServerEndpointsProvider.java | 0 .../LwM2mBootstrapServerEndpoint.java | 0 ...LwM2mBootstrapServerEndpointsProvider.java | 0 .../model/LwM2mBootstrapModelProvider.java | 0 .../model/StandardBootstrapModelProvider.java | 0 .../VersionedBootstrapModelProvider.java | 0 .../BootstrapDownlinkRequestSender.java | 0 .../BootstrapUplinkRequestReceiver.java | 0 ...DefaultBootstrapDownlinkRequestSender.java | 0 ...DefaultBootstrapUplinkRequestReceiver.java | 0 .../security/BootstrapAuthorizer.java | 0 .../security/BootstrapSecurityStore.java | 0 .../BootstrapSecurityStoreAdapter.java | 0 .../leshan/bsserver}/BootstrapConfigTest.java | 0 .../bsserver}/BootstrapHandlerTest.java | 0 .../logback-leshan-test.xml | 35 ++ leshan-lwm2m-servers-shared/pom.xml | 56 +++ .../servers}/security/Authorization.java | 0 .../security/EditableSecurityStore.java | 0 .../servers}/security/FileSecurityStore.java | 0 .../security/InMemorySecurityStore.java | 0 .../NonUniqueSecurityInfoException.java | 0 .../servers}/security/SecurityChecker.java | 0 .../servers}/security/SecurityInfo.java | 0 .../servers}/security/SecurityStore.java | 0 .../security/SecurityStoreListener.java | 0 .../servers}/security/ServerSecurityInfo.java | 0 .../logback-leshan-test.xml | 35 ++ leshan-tl-cf-bsserver-coap/pom.xml | 76 ++++ .../BootstrapOscoreContextCleaner.java | 0 .../bsserver}/BootstrapResource.java | 0 .../bsserver/ConnectionCleaner.java | 79 ++++ .../bsserver}/LwM2mBootstrapOscoreStore.java | 0 .../bsserver}/LwM2mBootstrapPskStore.java | 0 .../bsserver/LwM2mOscoreStore.java | 98 +++++ .../californium/bsserver/LwM2mPskStore.java | 91 +++++ .../bsserver}/OscoreBootstrapListener.java | 0 .../bsserver/OscoreContextCleaner.java | 80 ++++ .../californium/bsserver/RootResource.java | 36 ++ .../BootstrapServerCoapMessageTranslator.java | 0 .../BootstrapServerProtocolProvider.java | 0 .../CaliforniumBootstrapServerEndpoint.java | 0 ...forniumBootstrapServerEndpointFactory.java | 0 ...rniumBootstrapServerEndpointsProvider.java | 0 .../CoapBootstrapServerEndpointFactory.java | 0 ...BootstrapServerEndpointFactoryBuilder.java | 0 .../CoapBootstrapServerProtocolProvider.java | 0 ...pOscoreBootstrapServerEndpointFactory.java | 0 .../CoapsBootstrapServerEndpointFactory.java | 0 ...BootstrapServerEndpointFactoryBuilder.java | 0 .../CoapsBootstrapServerProtocolProvider.java | 0 .../bsserver}/request/CoapRequestBuilder.java | 0 .../request/LwM2mResponseBuilder.java | 0 .../californium/bsserver/DummyDecoder.java | 78 ++++ .../LeshanBootstrapServerBuilderTest.java | 0 .../bsserver}/LeshanBootstrapServerTest.java | 0 .../request/CoapRequestBuilderTest.java | 356 ++++++++++++++++++ .../request/LwM2mResponseBuilderTest.java | 109 ++++++ 87 files changed, 1220 insertions(+) create mode 100644 leshan-lwm2m-bsserver/logback-leshan-test.xml create mode 100644 leshan-lwm2m-bsserver/pom.xml rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapConfig.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapConfigStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapConfigStoreTaskProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapFailureCause.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapHandler.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapHandlerFactory.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapSession.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapSessionAdapter.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapSessionDispatcher.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapSessionListener.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapSessionManager.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapTaskProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/BootstrapUtil.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/ConfigurationChecker.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/DefaultBootstrapAuthorizer.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/DefaultBootstrapHandler.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/DefaultBootstrapSession.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/DefaultBootstrapSessionManager.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/EditableBootstrapConfigStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/InMemoryBootstrapConfigStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/InvalidConfigurationException.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/LeshanBootstrapServer.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/LeshanBootstrapServerBuilder.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/LwM2mBootstrapRequestSender.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/SmsSecurityMode.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/endpoint/BootstrapServerEndpointToolbox.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/endpoint/CompositeBootstrapServerEndpointsProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/endpoint/DefaultCompositeBootstrapServerEndpointsProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/endpoint/LwM2mBootstrapServerEndpoint.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/endpoint/LwM2mBootstrapServerEndpointsProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/model/LwM2mBootstrapModelProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/model/StandardBootstrapModelProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/model/VersionedBootstrapModelProvider.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/request/BootstrapDownlinkRequestSender.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/request/BootstrapUplinkRequestReceiver.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/request/DefaultBootstrapDownlinkRequestSender.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/request/DefaultBootstrapUplinkRequestReceiver.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/security/BootstrapAuthorizer.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/security/BootstrapSecurityStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver}/security/BootstrapSecurityStoreAdapter.java (100%) rename {leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver}/BootstrapConfigTest.java (100%) rename {leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap => leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver}/BootstrapHandlerTest.java (100%) create mode 100644 leshan-lwm2m-servers-shared/logback-leshan-test.xml create mode 100644 leshan-lwm2m-servers-shared/pom.xml rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/Authorization.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/EditableSecurityStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/FileSecurityStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/InMemorySecurityStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/NonUniqueSecurityInfoException.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/SecurityChecker.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/SecurityInfo.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/SecurityStore.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/SecurityStoreListener.java (100%) rename {leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server => leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers}/security/ServerSecurityInfo.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/logback-leshan-test.xml create mode 100644 leshan-tl-cf-bsserver-coap/pom.xml rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/BootstrapOscoreContextCleaner.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/BootstrapResource.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/ConnectionCleaner.java rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/LwM2mBootstrapOscoreStore.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/LwM2mBootstrapPskStore.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mOscoreStore.java create mode 100644 leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mPskStore.java rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/OscoreBootstrapListener.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreContextCleaner.java create mode 100644 leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/RootResource.java rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/BootstrapServerCoapMessageTranslator.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/BootstrapServerProtocolProvider.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/CaliforniumBootstrapServerEndpoint.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/CaliforniumBootstrapServerEndpointFactory.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/CaliforniumBootstrapServerEndpointsProvider.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coap/CoapBootstrapServerEndpointFactory.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coap/CoapBootstrapServerEndpointFactoryBuilder.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coap/CoapBootstrapServerProtocolProvider.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coap/CoapOscoreBootstrapServerEndpointFactory.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coaps/CoapsBootstrapServerEndpointFactory.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coaps/CoapsBootstrapServerEndpointFactoryBuilder.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/endpoint/coaps/CoapsBootstrapServerProtocolProvider.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/request/CoapRequestBuilder.java (100%) rename {leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver}/request/LwM2mResponseBuilder.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/DummyDecoder.java rename {leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver}/LeshanBootstrapServerBuilderTest.java (100%) rename {leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap => leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver}/LeshanBootstrapServerTest.java (100%) create mode 100644 leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilderTest.java create mode 100644 leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilderTest.java diff --git a/leshan-lwm2m-bsserver/logback-leshan-test.xml b/leshan-lwm2m-bsserver/logback-leshan-test.xml new file mode 100644 index 0000000000..df0891d8fb --- /dev/null +++ b/leshan-lwm2m-bsserver/logback-leshan-test.xml @@ -0,0 +1,35 @@ + + + + + + + %d %p %C{1} [%t] %m%n + + + + + + + + diff --git a/leshan-lwm2m-bsserver/pom.xml b/leshan-lwm2m-bsserver/pom.xml new file mode 100644 index 0000000000..4568f50d89 --- /dev/null +++ b/leshan-lwm2m-bsserver/pom.xml @@ -0,0 +1,56 @@ + + + + 4.0.0 + + org.eclipse.leshan + lib-build-config + 2.0.0-SNAPSHOT + ../build-config/lib-build-config/pom.xml + + leshan-lwm2m-bsserver + bundle + leshan - bsserver + A LWM2M bootstrap server implementation which abstracts transport layer. A transport implementation like "leshan-tl-cf-bsserver-coap" is needed. + + + + org.eclipse.leshan + leshan-lwm2m-core + + + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + ch.qos.logback + logback-classic + test + + + diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfig.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfig.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigStore.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfigStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigStore.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfigStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigStoreTaskProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfigStoreTaskProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigStoreTaskProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapConfigStoreTaskProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapFailureCause.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapFailureCause.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapFailureCause.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapFailureCause.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapHandler.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapHandler.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapHandler.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapHandler.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerFactory.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapHandlerFactory.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerFactory.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapHandlerFactory.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSession.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSession.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSession.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSession.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionAdapter.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionAdapter.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionAdapter.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionAdapter.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionDispatcher.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionDispatcher.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionDispatcher.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionDispatcher.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionListener.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionListener.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionListener.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionListener.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionManager.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionManager.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapSessionManager.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapSessionManager.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapTaskProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapTaskProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapTaskProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapTaskProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapUtil.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapUtil.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapUtil.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/BootstrapUtil.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/ConfigurationChecker.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/ConfigurationChecker.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapAuthorizer.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapAuthorizer.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapAuthorizer.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapAuthorizer.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapHandler.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapHandler.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapHandler.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapHandler.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapSession.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapSession.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSessionManager.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapSessionManager.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSessionManager.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/DefaultBootstrapSessionManager.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/EditableBootstrapConfigStore.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/EditableBootstrapConfigStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/EditableBootstrapConfigStore.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/EditableBootstrapConfigStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/InMemoryBootstrapConfigStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/InMemoryBootstrapConfigStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/InvalidConfigurationException.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/InvalidConfigurationException.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/InvalidConfigurationException.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/InvalidConfigurationException.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LeshanBootstrapServer.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LeshanBootstrapServer.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LeshanBootstrapServer.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LeshanBootstrapServer.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LeshanBootstrapServerBuilder.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LeshanBootstrapServerBuilder.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LeshanBootstrapServerBuilder.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LeshanBootstrapServerBuilder.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LwM2mBootstrapRequestSender.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LwM2mBootstrapRequestSender.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/LwM2mBootstrapRequestSender.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/LwM2mBootstrapRequestSender.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/SmsSecurityMode.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/SmsSecurityMode.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/SmsSecurityMode.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/SmsSecurityMode.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/BootstrapServerEndpointToolbox.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/BootstrapServerEndpointToolbox.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/BootstrapServerEndpointToolbox.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/BootstrapServerEndpointToolbox.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/CompositeBootstrapServerEndpointsProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/CompositeBootstrapServerEndpointsProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/CompositeBootstrapServerEndpointsProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/CompositeBootstrapServerEndpointsProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/DefaultCompositeBootstrapServerEndpointsProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/DefaultCompositeBootstrapServerEndpointsProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/DefaultCompositeBootstrapServerEndpointsProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/DefaultCompositeBootstrapServerEndpointsProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/LwM2mBootstrapServerEndpoint.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/LwM2mBootstrapServerEndpoint.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/LwM2mBootstrapServerEndpoint.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/LwM2mBootstrapServerEndpoint.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/LwM2mBootstrapServerEndpointsProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/LwM2mBootstrapServerEndpointsProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/endpoint/LwM2mBootstrapServerEndpointsProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/endpoint/LwM2mBootstrapServerEndpointsProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/LwM2mBootstrapModelProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/LwM2mBootstrapModelProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/LwM2mBootstrapModelProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/LwM2mBootstrapModelProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/StandardBootstrapModelProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/StandardBootstrapModelProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/StandardBootstrapModelProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/StandardBootstrapModelProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/VersionedBootstrapModelProvider.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/VersionedBootstrapModelProvider.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/model/VersionedBootstrapModelProvider.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/model/VersionedBootstrapModelProvider.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/BootstrapDownlinkRequestSender.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/BootstrapDownlinkRequestSender.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/BootstrapDownlinkRequestSender.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/BootstrapDownlinkRequestSender.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/BootstrapUplinkRequestReceiver.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/BootstrapUplinkRequestReceiver.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/BootstrapUplinkRequestReceiver.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/BootstrapUplinkRequestReceiver.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/DefaultBootstrapDownlinkRequestSender.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/DefaultBootstrapDownlinkRequestSender.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/DefaultBootstrapDownlinkRequestSender.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/DefaultBootstrapDownlinkRequestSender.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/DefaultBootstrapUplinkRequestReceiver.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/DefaultBootstrapUplinkRequestReceiver.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/bootstrap/request/DefaultBootstrapUplinkRequestReceiver.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/request/DefaultBootstrapUplinkRequestReceiver.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapAuthorizer.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapAuthorizer.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapAuthorizer.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapAuthorizer.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapSecurityStore.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapSecurityStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapSecurityStore.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapSecurityStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapSecurityStoreAdapter.java b/leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapSecurityStoreAdapter.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/BootstrapSecurityStoreAdapter.java rename to leshan-lwm2m-bsserver/src/main/java/org/eclipse/leshan/bsserver/security/BootstrapSecurityStoreAdapter.java diff --git a/leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigTest.java b/leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver/BootstrapConfigTest.java similarity index 100% rename from leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapConfigTest.java rename to leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver/BootstrapConfigTest.java diff --git a/leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java b/leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver/BootstrapHandlerTest.java similarity index 100% rename from leshan-lwm2m-server/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java rename to leshan-lwm2m-bsserver/src/test/java/org/eclipse/leshan/bsserver/BootstrapHandlerTest.java diff --git a/leshan-lwm2m-servers-shared/logback-leshan-test.xml b/leshan-lwm2m-servers-shared/logback-leshan-test.xml new file mode 100644 index 0000000000..df0891d8fb --- /dev/null +++ b/leshan-lwm2m-servers-shared/logback-leshan-test.xml @@ -0,0 +1,35 @@ + + + + + + + %d %p %C{1} [%t] %m%n + + + + + + + + diff --git a/leshan-lwm2m-servers-shared/pom.xml b/leshan-lwm2m-servers-shared/pom.xml new file mode 100644 index 0000000000..36488dcb68 --- /dev/null +++ b/leshan-lwm2m-servers-shared/pom.xml @@ -0,0 +1,56 @@ + + + + 4.0.0 + + org.eclipse.leshan + lib-build-config + 2.0.0-SNAPSHOT + ../build-config/lib-build-config/pom.xml + + leshan-lwm2m-servers-shared + bundle + leshan - servers - shared + Shared classes between server and bsserver. + + + + org.eclipse.leshan + leshan-lwm2m-core + + + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + ch.qos.logback + logback-classic + test + + + diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/Authorization.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/Authorization.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/Authorization.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/Authorization.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/EditableSecurityStore.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/EditableSecurityStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/EditableSecurityStore.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/EditableSecurityStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/FileSecurityStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/FileSecurityStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/InMemorySecurityStore.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/InMemorySecurityStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/InMemorySecurityStore.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/InMemorySecurityStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/NonUniqueSecurityInfoException.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/NonUniqueSecurityInfoException.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/NonUniqueSecurityInfoException.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/NonUniqueSecurityInfoException.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityChecker.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityChecker.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityInfo.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityInfo.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityStore.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityStore.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityStore.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityStore.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityStoreListener.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityStoreListener.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/SecurityStoreListener.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/SecurityStoreListener.java diff --git a/leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/ServerSecurityInfo.java b/leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/ServerSecurityInfo.java similarity index 100% rename from leshan-lwm2m-server/src/main/java/org/eclipse/leshan/server/security/ServerSecurityInfo.java rename to leshan-lwm2m-servers-shared/src/main/java/org/eclipse/leshan/servers/security/ServerSecurityInfo.java diff --git a/leshan-tl-cf-bsserver-coap/logback-leshan-test.xml b/leshan-tl-cf-bsserver-coap/logback-leshan-test.xml new file mode 100644 index 0000000000..df0891d8fb --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/logback-leshan-test.xml @@ -0,0 +1,35 @@ + + + + + + + %d %p %C{1} [%t] %m%n + + + + + + + + diff --git a/leshan-tl-cf-bsserver-coap/pom.xml b/leshan-tl-cf-bsserver-coap/pom.xml new file mode 100644 index 0000000000..34d0c623fc --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/pom.xml @@ -0,0 +1,76 @@ + + + + 4.0.0 + + org.eclipse.leshan + lib-build-config + 2.0.0-SNAPSHOT + ../build-config/lib-build-config/pom.xml + + leshan-tl-cf-bsserver-coap + bundle + leshan - transport - californium - bsserver - coap + A transport implementation for leshan bootstrap server based on Californium for CoAP protocol + + + + org.eclipse.leshan + leshan-tl-cf-shared + + + org.eclipse.leshan + leshan-lwm2m-server + + + org.eclipse.californium + californium-core + + + org.eclipse.californium + scandium + + + + + org.junit.jupiter + junit-jupiter-engine + test + + + ch.qos.logback + logback-classic + test + + + + + + + maven-surefire-plugin + + + false + + + + + diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/BootstrapOscoreContextCleaner.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/BootstrapOscoreContextCleaner.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/BootstrapOscoreContextCleaner.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/BootstrapOscoreContextCleaner.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/BootstrapResource.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/BootstrapResource.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/BootstrapResource.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/BootstrapResource.java diff --git a/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/ConnectionCleaner.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/ConnectionCleaner.java new file mode 100644 index 0000000000..7f2e788f01 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/ConnectionCleaner.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2020 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import java.security.Principal; +import java.security.PublicKey; + +import javax.security.auth.x500.X500Principal; + +import org.eclipse.californium.elements.auth.PreSharedKeyIdentity; +import org.eclipse.californium.elements.auth.RawPublicKeyIdentity; +import org.eclipse.californium.elements.auth.X509CertPath; +import org.eclipse.californium.elements.util.Filter; +import org.eclipse.californium.scandium.DTLSConnector; +import org.eclipse.leshan.core.security.certificate.util.X509CertUtil; +import org.eclipse.leshan.server.security.SecurityInfo; + +/** + * This class is responsible to remove DTLS connection for a given SecurityInfo. + */ +public class ConnectionCleaner { + + private final DTLSConnector connector; + + public ConnectionCleaner(DTLSConnector connector) { + this.connector = connector; + } + + public void cleanConnectionFor(final SecurityInfo... infos) { + connector.startTerminateConnectionsForPrincipal(new Filter() { + @Override + public boolean accept(Principal principal) { + if (principal != null) { + for (SecurityInfo info : infos) { + if (info != null) { + // PSK + if (info.usePSK() && principal instanceof PreSharedKeyIdentity) { + String identity = ((PreSharedKeyIdentity) principal).getIdentity(); + if (info.getPskIdentity().equals(identity)) { + return true; + } + } + // RPK + else if (info.useRPK() && principal instanceof RawPublicKeyIdentity) { + PublicKey publicKey = ((RawPublicKeyIdentity) principal).getKey(); + if (info.getRawPublicKey().equals(publicKey)) { + return true; + } + } + // x509 + else if (info.useX509Cert() && principal instanceof X500Principal + || principal instanceof X509CertPath) { + // Extract common name + String x509CommonName = X509CertUtil.extractCN(principal.getName()); + if (x509CommonName.equals(info.getEndpoint())) { + return true; + } + } + } + } + } + return false; + } + }); + } +} diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/LwM2mBootstrapOscoreStore.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mBootstrapOscoreStore.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/LwM2mBootstrapOscoreStore.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mBootstrapOscoreStore.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/LwM2mBootstrapPskStore.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mBootstrapPskStore.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/LwM2mBootstrapPskStore.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mBootstrapPskStore.java diff --git a/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mOscoreStore.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mOscoreStore.java new file mode 100644 index 0000000000..188b034d45 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mOscoreStore.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2022 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import java.net.InetSocketAddress; +import java.net.URI; +import java.net.URISyntaxException; + +import org.eclipse.californium.cose.AlgorithmID; +import org.eclipse.californium.cose.CoseException; +import org.eclipse.leshan.core.peer.LwM2mIdentity; +import org.eclipse.leshan.core.peer.OscoreIdentity; +import org.eclipse.leshan.core.util.Validate; +import org.eclipse.leshan.server.registration.Registration; +import org.eclipse.leshan.server.registration.RegistrationStore; +import org.eclipse.leshan.server.security.SecurityInfo; +import org.eclipse.leshan.server.security.SecurityStore; +import org.eclipse.leshan.transport.californium.oscore.cf.OscoreParameters; +import org.eclipse.leshan.transport.californium.oscore.cf.OscoreStore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.upokecenter.cbor.CBORObject; + +/** + * An {@link OscoreStore} which search {@link OscoreParameters} in LWM2M {@link SecurityStore} + */ +public class LwM2mOscoreStore implements OscoreStore { + + private static final Logger LOG = LoggerFactory.getLogger(LwM2mOscoreStore.class); + + private final SecurityStore securityStore; + private final RegistrationStore registrationStore; + + public LwM2mOscoreStore(SecurityStore securityStore, RegistrationStore registrationStore) { + Validate.notNull(securityStore); + Validate.notNull(registrationStore); + this.securityStore = securityStore; + this.registrationStore = registrationStore; + } + + @Override + public OscoreParameters getOscoreParameters(byte[] recipientID) { + OscoreIdentity oscoreIdentity = new OscoreIdentity(recipientID); + SecurityInfo securityInfo = securityStore.getByOscoreIdentity(oscoreIdentity); + if (securityInfo == null || !securityInfo.useOSCORE()) + return null; + + try { + return new OscoreParameters(// + securityInfo.getOscoreSetting().getSenderId(), // + securityInfo.getOscoreSetting().getRecipientId(), // + securityInfo.getOscoreSetting().getMasterSecret(), // + // TODO OSCORE we maybe need an API without the need to create a CBOR Object + AlgorithmID.FromCBOR( + CBORObject.FromObject(securityInfo.getOscoreSetting().getAeadAlgorithm().getValue())), // + AlgorithmID.FromCBOR( + CBORObject.FromObject(securityInfo.getOscoreSetting().getHkdfAlgorithm().getValue())), // + // TODO OSCORE kind of hack because californium doesn't support an empty byte[] array for salt ? + securityInfo.getOscoreSetting().getMasterSalt().length == 0 ? null + : securityInfo.getOscoreSetting().getMasterSalt()); + } catch (CoseException e) { + LOG.error("Unable to create OscoreParameters from OoscoreSetting %s", securityInfo.getOscoreSetting(), e); + return null; + } + } + + @Override + public byte[] getRecipientId(String uri) { + try { + URI foreignPeerUri = new URI(uri); + InetSocketAddress foreignPeerAddress = new InetSocketAddress(foreignPeerUri.getHost(), + foreignPeerUri.getPort()); + Registration registration = registrationStore.getRegistrationByAdress(foreignPeerAddress); + LwM2mIdentity identity = registration.getClientTransportData().getIdentity(); + if (identity instanceof OscoreIdentity) { + return ((OscoreIdentity) identity).getRecipientId(); + } + } catch (URISyntaxException | SecurityException | IllegalArgumentException e) { + LOG.error("Unable to extract InetScocketAddress from uri %s", uri, e); + return null; + } + return null; + } +} diff --git a/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mPskStore.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mPskStore.java new file mode 100644 index 0000000000..a2bd5346f9 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/LwM2mPskStore.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2013-2015 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import java.net.InetSocketAddress; + +import javax.crypto.SecretKey; + +import org.eclipse.californium.scandium.dtls.ConnectionId; +import org.eclipse.californium.scandium.dtls.PskPublicInformation; +import org.eclipse.californium.scandium.dtls.PskSecretResult; +import org.eclipse.californium.scandium.dtls.pskstore.AdvancedPskStore; +import org.eclipse.californium.scandium.util.SecretUtil; +import org.eclipse.californium.scandium.util.ServerNames; +import org.eclipse.leshan.server.registration.Registration; +import org.eclipse.leshan.server.registration.RegistrationStore; +import org.eclipse.leshan.server.security.SecurityInfo; +import org.eclipse.leshan.server.security.SecurityStore; + +/** + * A {@link AdvancedPskStore} which retrieve PSK information from Leshan {@link SecurityStore}. + */ +public class LwM2mPskStore implements AdvancedPskStore { + + private SecurityStore securityStore; + private RegistrationStore registrationStore; + + public LwM2mPskStore(SecurityStore securityStore) { + this(securityStore, null); + } + + public LwM2mPskStore(SecurityStore securityStore, RegistrationStore registrationStore) { + this.securityStore = securityStore; + this.registrationStore = registrationStore; + } + + @Override + public boolean hasEcdhePskSupported() { + return true; + } + + @Override + public PskSecretResult requestPskSecretResult(ConnectionId cid, ServerNames serverName, + PskPublicInformation identity, String hmacAlgorithm, SecretKey otherSecret, byte[] seed, + boolean useExtendedMasterSecret) { + if (securityStore == null) + return null; + + SecurityInfo info = securityStore.getByIdentity(identity.getPublicInfoAsString()); + if (info == null || info.getPreSharedKey() == null) { + return new PskSecretResult(cid, identity, null); + } else { + // defensive copy + return new PskSecretResult(cid, identity, SecretUtil.create(info.getPreSharedKey(), "PSK")); + } + } + + @Override + public void setResultHandler(org.eclipse.californium.scandium.dtls.HandshakeResultHandler resultHandler) { + // we don't use async mode. + } + + @Override + public PskPublicInformation getIdentity(InetSocketAddress peerAddress, ServerNames virtualHost) { + if (registrationStore == null) + return null; + + Registration registration = registrationStore.getRegistrationByAdress(peerAddress); + if (registration != null) { + SecurityInfo securityInfo = securityStore.getByEndpoint(registration.getEndpoint()); + if (securityInfo != null) { + return new PskPublicInformation(securityInfo.getPskIdentity()); + } + return null; + } + return null; + } +} diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/OscoreBootstrapListener.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreBootstrapListener.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/OscoreBootstrapListener.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreBootstrapListener.java diff --git a/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreContextCleaner.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreContextCleaner.java new file mode 100644 index 0000000000..c11b77819a --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/OscoreContextCleaner.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2022 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import java.util.Collection; + +import org.eclipse.californium.oscore.OSCoreCtx; +import org.eclipse.californium.oscore.OSCoreCtxDB; +import org.eclipse.leshan.core.observation.Observation; +import org.eclipse.leshan.core.peer.OscoreIdentity; +import org.eclipse.leshan.server.registration.Registration; +import org.eclipse.leshan.server.registration.RegistrationListener; +import org.eclipse.leshan.server.registration.RegistrationUpdate; +import org.eclipse.leshan.server.security.EditableSecurityStore; +import org.eclipse.leshan.server.security.SecurityInfo; +import org.eclipse.leshan.server.security.SecurityStoreListener; + +/** + * This class is responsible to remove {@link OSCoreCtx} from {@link OSCoreCtxDB} on some events. + *

+ * {@link OSCoreCtx} is removed when : + *

+ * + */ +public class OscoreContextCleaner implements RegistrationListener, SecurityStoreListener { + + private final OSCoreCtxDB oscoreCtxDB; + + public OscoreContextCleaner(OSCoreCtxDB oscoreCtxDB) { + this.oscoreCtxDB = oscoreCtxDB; + } + + @Override + public void registered(Registration registration, Registration previousReg, + Collection previousObsersations) { + } + + @Override + public void updated(RegistrationUpdate update, Registration updatedReg, Registration previousReg) { + } + + @Override + public void unregistered(Registration registration, Collection observations, boolean expired, + Registration newReg) { + if (registration.getClientTransportData().getIdentity() instanceof OscoreIdentity) { + removeContext(((OscoreIdentity) registration.getClientTransportData().getIdentity()).getRecipientId()); + } + } + + @Override + public void securityInfoRemoved(boolean infosAreCompromised, SecurityInfo... infos) { + for (SecurityInfo securityInfo : infos) { + if (securityInfo.useOSCORE()) { + removeContext(securityInfo.getOscoreSetting().getRecipientId()); + } + } + } + + private void removeContext(byte[] rid) { + OSCoreCtx context = oscoreCtxDB.getContext(rid); + if (context != null) + oscoreCtxDB.removeContext(context); + } +} diff --git a/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/RootResource.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/RootResource.java new file mode 100644 index 0000000000..a3ea746cb1 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/RootResource.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2019 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import org.eclipse.californium.core.CoapResource; +import org.eclipse.californium.core.coap.CoAP.ResponseCode; +import org.eclipse.californium.core.server.resources.CoapExchange; + +/** + * A default root resource. + */ +public class RootResource extends CoapResource { + + public RootResource() { + super(""); + setVisible(false); + } + + @Override + public void handleGET(CoapExchange exchange) { + exchange.respond(ResponseCode.NOT_FOUND); + } +} diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/BootstrapServerCoapMessageTranslator.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/BootstrapServerCoapMessageTranslator.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/BootstrapServerCoapMessageTranslator.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/BootstrapServerCoapMessageTranslator.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/BootstrapServerProtocolProvider.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/BootstrapServerProtocolProvider.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/BootstrapServerProtocolProvider.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/BootstrapServerProtocolProvider.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpoint.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpoint.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpoint.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpoint.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpointFactory.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpointFactory.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpointFactory.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpointFactory.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpointsProvider.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpointsProvider.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/CaliforniumBootstrapServerEndpointsProvider.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/CaliforniumBootstrapServerEndpointsProvider.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerEndpointFactory.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerEndpointFactory.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerEndpointFactory.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerEndpointFactory.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerEndpointFactoryBuilder.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerEndpointFactoryBuilder.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerEndpointFactoryBuilder.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerEndpointFactoryBuilder.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerProtocolProvider.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerProtocolProvider.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapBootstrapServerProtocolProvider.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapBootstrapServerProtocolProvider.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapOscoreBootstrapServerEndpointFactory.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapOscoreBootstrapServerEndpointFactory.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coap/CoapOscoreBootstrapServerEndpointFactory.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coap/CoapOscoreBootstrapServerEndpointFactory.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerEndpointFactory.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerEndpointFactory.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerEndpointFactory.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerEndpointFactory.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerEndpointFactoryBuilder.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerEndpointFactoryBuilder.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerEndpointFactoryBuilder.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerEndpointFactoryBuilder.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerProtocolProvider.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerProtocolProvider.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/endpoint/coaps/CoapsBootstrapServerProtocolProvider.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/endpoint/coaps/CoapsBootstrapServerProtocolProvider.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/request/CoapRequestBuilder.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilder.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/request/CoapRequestBuilder.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilder.java diff --git a/leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/request/LwM2mResponseBuilder.java b/leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilder.java similarity index 100% rename from leshan-tl-cf-server-coap/src/main/java/org/eclipse/leshan/transport/californium/server/bootstrap/request/LwM2mResponseBuilder.java rename to leshan-tl-cf-bsserver-coap/src/main/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilder.java diff --git a/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/DummyDecoder.java b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/DummyDecoder.java new file mode 100644 index 0000000000..7e68e57512 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/DummyDecoder.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2021 Orange. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Michał Wadowski (Orange) - Add Observe-Composite feature. + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.leshan.core.model.LwM2mModel; +import org.eclipse.leshan.core.node.LwM2mNode; +import org.eclipse.leshan.core.node.LwM2mPath; +import org.eclipse.leshan.core.node.LwM2mSingleResource; +import org.eclipse.leshan.core.node.TimestampedLwM2mNode; +import org.eclipse.leshan.core.node.TimestampedLwM2mNodes; +import org.eclipse.leshan.core.node.codec.CodecException; +import org.eclipse.leshan.core.node.codec.LwM2mDecoder; +import org.eclipse.leshan.core.request.ContentFormat; + +public class DummyDecoder implements LwM2mDecoder { + @Override + public LwM2mNode decode(byte[] content, ContentFormat format, LwM2mPath path, LwM2mModel model) + throws CodecException { + return LwM2mSingleResource.newResource(15, "Example"); + } + + @Override + public T decode(byte[] content, ContentFormat format, LwM2mPath path, LwM2mModel model, + Class nodeClass) throws CodecException { + return null; + } + + @Override + public Map decodeNodes(byte[] content, ContentFormat format, List paths, + LwM2mModel model) throws CodecException { + return null; + } + + @Override + public List decodeTimestampedData(byte[] content, ContentFormat format, LwM2mPath path, + LwM2mModel model) throws CodecException { + return Collections.singletonList(new TimestampedLwM2mNode(null, decode(null, null, null, null))); + } + + @Override + public TimestampedLwM2mNodes decodeTimestampedNodes(byte[] content, ContentFormat format, List paths, + LwM2mModel model) throws CodecException { + return null; + } + + @Override + public List decodePaths(byte[] content, ContentFormat format) throws CodecException { + return null; + } + + @Override + public boolean isSupported(ContentFormat format) { + return false; + } + + @Override + public Set getSupportedContentFormat() { + return null; + } +} diff --git a/leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap/LeshanBootstrapServerBuilderTest.java b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/LeshanBootstrapServerBuilderTest.java similarity index 100% rename from leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap/LeshanBootstrapServerBuilderTest.java rename to leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/LeshanBootstrapServerBuilderTest.java diff --git a/leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap/LeshanBootstrapServerTest.java b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/LeshanBootstrapServerTest.java similarity index 100% rename from leshan-tl-cf-server-coap/src/test/java/org/eclipse/leshan/transport/californium/server/bootstrap/LeshanBootstrapServerTest.java rename to leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/LeshanBootstrapServerTest.java diff --git a/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilderTest.java b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilderTest.java new file mode 100644 index 0000000000..8fc8e6c0f2 --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/CoapRequestBuilderTest.java @@ -0,0 +1,356 @@ +/******************************************************************************* + * Copyright (c) 2013-2015 Sierra Wireless and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Sierra Wireless - initial API and implementation + * Michał Wadowski (Orange) - Improved compliance with rfc6690. + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server.request; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.net.Inet4Address; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +import org.eclipse.californium.core.coap.CoAP; +import org.eclipse.californium.core.coap.MediaTypeRegistry; +import org.eclipse.californium.core.coap.Request; +import org.eclipse.leshan.core.LwM2m.LwM2mVersion; +import org.eclipse.leshan.core.endpoint.EndpointUriUtil; +import org.eclipse.leshan.core.link.Link; +import org.eclipse.leshan.core.link.attributes.ResourceTypeAttribute; +import org.eclipse.leshan.core.link.lwm2m.attributes.LwM2mAttribute; +import org.eclipse.leshan.core.link.lwm2m.attributes.LwM2mAttributeSet; +import org.eclipse.leshan.core.link.lwm2m.attributes.LwM2mAttributes; +import org.eclipse.leshan.core.model.LwM2mModel; +import org.eclipse.leshan.core.model.ObjectLoader; +import org.eclipse.leshan.core.model.StaticModel; +import org.eclipse.leshan.core.node.LwM2mObjectInstance; +import org.eclipse.leshan.core.node.LwM2mSingleResource; +import org.eclipse.leshan.core.node.codec.DefaultLwM2mEncoder; +import org.eclipse.leshan.core.node.codec.LwM2mEncoder; +import org.eclipse.leshan.core.peer.IpPeer; +import org.eclipse.leshan.core.request.ContentFormat; +import org.eclipse.leshan.core.request.CreateRequest; +import org.eclipse.leshan.core.request.DeleteRequest; +import org.eclipse.leshan.core.request.DiscoverRequest; +import org.eclipse.leshan.core.request.ExecuteRequest; +import org.eclipse.leshan.core.request.ObserveRequest; +import org.eclipse.leshan.core.request.ReadRequest; +import org.eclipse.leshan.core.request.WriteAttributesRequest; +import org.eclipse.leshan.core.request.WriteRequest; +import org.eclipse.leshan.core.request.WriteRequest.Mode; +import org.eclipse.leshan.core.tlv.Tlv; +import org.eclipse.leshan.core.tlv.Tlv.TlvType; +import org.eclipse.leshan.core.tlv.TlvDecoder; +import org.eclipse.leshan.server.registration.DefaultRegistrationDataExtractor; +import org.eclipse.leshan.server.registration.Registration; +import org.eclipse.leshan.server.registration.Registration.Builder; +import org.eclipse.leshan.server.registration.RegistrationDataExtractor.RegistrationData; +import org.eclipse.leshan.transport.californium.identity.DefaultCoapIdentityHandler; +import org.eclipse.leshan.transport.californium.identity.IdentityHandler; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Unit tests for {@link CoapRequestBuilder} + */ +public class CoapRequestBuilderTest { + + private static LwM2mModel model; + private static LwM2mEncoder encoder; + private static IdentityHandler identityHandler; + + @BeforeAll + public static void loadModel() { + model = new StaticModel(ObjectLoader.loadDefault()); + encoder = new DefaultLwM2mEncoder(); + identityHandler = new DefaultCoapIdentityHandler(); + } + + private Registration newRegistration() throws UnknownHostException { + return newRegistration(null); + } + + private Registration newRegistration(String rootpath) throws UnknownHostException { + Builder b = new Registration.Builder("regid", "endpoint", + new IpPeer(new InetSocketAddress(Inet4Address.getLoopbackAddress(), 12354)), + EndpointUriUtil.createUri("coap://localhost:5683")); + + if (rootpath != null) { + Link[] links = new Link[] { new Link(rootpath, new ResourceTypeAttribute("oma.lwm2m")) }; + b.objectLinks(links); + + RegistrationData dataFromObjectLinks = new DefaultRegistrationDataExtractor() + .extractDataFromObjectLinks(links, LwM2mVersion.V1_0); + b.rootPath(dataFromObjectLinks.getAlternatePath()); + b.supportedContentFormats(dataFromObjectLinks.getSupportedContentFormats()); + b.supportedObjects(dataFromObjectLinks.getSupportedObjects()); + b.availableInstances(dataFromObjectLinks.getAvailableInstances()); + } + return b.build(); + } + + @Test + public void build_read_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + ReadRequest request = new ReadRequest(3, 0); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.GET, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/3/0", coapRequest.getURI()); + } + + @Test + public void build_read_request_with_non_default_object_path() throws Exception { + Registration reg = newRegistration("/lwm2m"); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + ReadRequest request = new ReadRequest(3, 0, 1); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals("coap://127.0.0.1:12354/lwm2m/3/0/1", coapRequest.getURI()); + } + + @Test + public void build_read_request_with_root_path() throws Exception { + Registration reg = newRegistration("/"); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + ReadRequest request = new ReadRequest(3); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals("coap://127.0.0.1:12354/3", coapRequest.getURI()); + } + + @Test + public void build_discover_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + DiscoverRequest request = new DiscoverRequest(3, 0); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.GET, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals(MediaTypeRegistry.APPLICATION_LINK_FORMAT, coapRequest.getOptions().getAccept()); + assertEquals("coap://127.0.0.1:12354/3/0", coapRequest.getURI()); + } + + @Test + public void build_write_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + WriteRequest request = new WriteRequest(Mode.UPDATE, 3, 0, LwM2mSingleResource.newStringResource(15, "value")); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.POST, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals(ContentFormat.TLV.getCode(), coapRequest.getOptions().getContentFormat()); + assertNotNull(coapRequest.getPayload()); + // assert it is encoded as array of resources TLV + Tlv[] tlvs = TlvDecoder.decode(ByteBuffer.wrap(coapRequest.getPayload())); + assertEquals(TlvType.RESOURCE_VALUE, tlvs[0].getType()); + assertEquals("value", TlvDecoder.decodeString(tlvs[0].getValue())); + assertEquals("coap://127.0.0.1:12354/3/0", coapRequest.getURI()); + } + + @Test + public void build_write_request_replace() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + WriteRequest request = new WriteRequest(3, 0, 14, "value"); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.PUT, coapRequest.getCode()); + } + + @Test + public void build_write_attribute_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + LwM2mAttributeSet attributes = new LwM2mAttributeSet( + new LwM2mAttribute(LwM2mAttributes.MINIMUM_PERIOD, 10L), + new LwM2mAttribute(LwM2mAttributes.MAXIMUM_PERIOD, 100L)); + WriteAttributesRequest request = new WriteAttributesRequest(3, 0, 14, attributes); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.PUT, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/3/0/14?pmin=10&pmax=100", coapRequest.getURI()); + } + + @Test + public void build_unset_write_attribute_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + LwM2mAttributeSet attributes = new LwM2mAttributeSet(new LwM2mAttribute(LwM2mAttributes.MINIMUM_PERIOD), + new LwM2mAttribute(LwM2mAttributes.MAXIMUM_PERIOD)); + WriteAttributesRequest request = new WriteAttributesRequest(3, 0, 14, attributes); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.PUT, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/3/0/14?pmin&pmax", coapRequest.getURI()); + } + + @Test + public void build_execute_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + ExecuteRequest request = new ExecuteRequest(3, 0, 12, "0='params'"); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.POST, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/3/0/12", coapRequest.getURI()); + assertEquals("0='params'", coapRequest.getPayloadString()); + } + + @Test + public void build_create_request__without_instance_id() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + CreateRequest request = new CreateRequest(12, LwM2mSingleResource.newStringResource(0, "value")); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.POST, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/12", coapRequest.getURI()); + assertEquals(ContentFormat.TLV.getCode(), coapRequest.getOptions().getContentFormat()); + assertNotNull(coapRequest.getPayload()); + // assert it is encoded as array of resources TLV + Tlv[] tlvs = TlvDecoder.decode(ByteBuffer.wrap(coapRequest.getPayload())); + assertEquals(TlvType.RESOURCE_VALUE, tlvs[0].getType()); + } + + @Test + public void build_create_request__with_instance_id() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + CreateRequest request = new CreateRequest(12, + new LwM2mObjectInstance(26, LwM2mSingleResource.newStringResource(0, "value"))); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.POST, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/12", coapRequest.getURI()); + assertEquals(ContentFormat.TLV.getCode(), coapRequest.getOptions().getContentFormat()); + assertNotNull(coapRequest.getPayload()); + // assert it is encoded as array of instance TLV + Tlv[] tlvs = TlvDecoder.decode(ByteBuffer.wrap(coapRequest.getPayload())); + assertEquals(TlvType.OBJECT_INSTANCE, tlvs[0].getType()); + assertEquals(26, tlvs[0].getIdentifier()); + } + + @Test + public void build_delete_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + DeleteRequest request = new DeleteRequest(12, 0); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.DELETE, coapRequest.getCode()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/12/0", coapRequest.getURI()); + } + + @Test + public void build_observe_request() throws Exception { + Registration reg = newRegistration(); + + // test + CoapRequestBuilder builder = new CoapRequestBuilder(reg.getClientTransportData(), reg.getRootPath(), + reg.getId(), reg.getEndpoint(), model, encoder, false, null, identityHandler); + ObserveRequest request = new ObserveRequest(12, 0); + builder.visit(request); + + // verify + Request coapRequest = builder.getRequest(); + assertEquals(CoAP.Code.GET, coapRequest.getCode()); + assertEquals(0, coapRequest.getOptions().getObserve().intValue()); + assertEquals("127.0.0.1", coapRequest.getDestinationContext().getPeerAddress().getAddress().getHostAddress()); + assertEquals(12354, coapRequest.getDestinationContext().getPeerAddress().getPort()); + assertEquals("coap://127.0.0.1:12354/12/0", coapRequest.getURI()); + } +} diff --git a/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilderTest.java b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilderTest.java new file mode 100644 index 0000000000..5502e11c9a --- /dev/null +++ b/leshan-tl-cf-bsserver-coap/src/test/java/org/eclipse/leshan/transport/californium/bsserver/request/LwM2mResponseBuilderTest.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2021 Orange. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v20.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.html. + * + * Contributors: + * Michał Wadowski (Orange) - Add Observe-Composite feature. + * Michał Wadowski (Orange) - Improved compliance with rfc6690. + *******************************************************************************/ +package org.eclipse.leshan.transport.californium.server.request; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.eclipse.californium.core.coap.CoAP; +import org.eclipse.californium.core.coap.Request; +import org.eclipse.californium.core.coap.Response; +import org.eclipse.californium.core.coap.Token; +import org.eclipse.leshan.core.link.lwm2m.DefaultLwM2mLinkParser; +import org.eclipse.leshan.core.link.lwm2m.LwM2mLinkParser; +import org.eclipse.leshan.core.node.LwM2mPath; +import org.eclipse.leshan.core.observation.CompositeObservation; +import org.eclipse.leshan.core.observation.SingleObservation; +import org.eclipse.leshan.core.request.ObserveCompositeRequest; +import org.eclipse.leshan.core.request.ObserveRequest; +import org.eclipse.leshan.core.response.ObserveCompositeResponse; +import org.eclipse.leshan.core.response.ObserveResponse; +import org.eclipse.leshan.transport.californium.ObserveUtil; +import org.eclipse.leshan.transport.californium.server.DummyDecoder; +import org.junit.jupiter.api.Test; + +public class LwM2mResponseBuilderTest { + + private final DummyDecoder decoder = new DummyDecoder(); + private final LwM2mLinkParser linkParser = new DefaultLwM2mLinkParser(); + + @Test + public void visit_observe_request() { + // given + String examplePath = "/1/2/3"; + + ObserveRequest observeRequest = new ObserveRequest(null, examplePath); + + Map userContext = ObserveUtil.createCoapObserveRequestContext(null, null, observeRequest); + + Request coapRequest = new Request(null); + coapRequest.setToken(Token.EMPTY); + coapRequest.setUserContext(userContext); + + Response coapResponse = new Response(CoAP.ResponseCode.CONTENT); + coapResponse.getOptions().setObserve(1); + + LwM2mResponseBuilder responseBuilder = new LwM2mResponseBuilder<>(coapRequest, coapResponse, + null, null, decoder, linkParser); + // when + responseBuilder.visit(observeRequest); + + // then + ObserveResponse response = responseBuilder.getResponse(); + assertNotNull(response); + assertNotNull(response.getObservation()); + + SingleObservation observation = response.getObservation(); + assertEquals(examplePath, observation.getPath().toString()); + } + + @Test + public void visit_observe_composite_request() { + // given + List examplePaths = Arrays.asList(new LwM2mPath("/1/2/3"), new LwM2mPath("/4/5/6")); + + ObserveCompositeRequest observeRequest = new ObserveCompositeRequest(null, null, examplePaths); + + Map userContext = ObserveUtil.createCoapObserveCompositeRequestContext(null, null, + observeRequest); + + Request coapRequest = new Request(null); + coapRequest.setToken(Token.EMPTY); + coapRequest.setUserContext(userContext); + + Response coapResponse = new Response(CoAP.ResponseCode.CONTENT); + coapResponse.getOptions().setObserve(1); + + LwM2mResponseBuilder responseBuilder = new LwM2mResponseBuilder<>(coapRequest, + coapResponse, null, null, decoder, linkParser); + // when + responseBuilder.visit(observeRequest); + + // then + ObserveCompositeResponse response = responseBuilder.getResponse(); + assertNotNull(response); + assertNotNull(response.getObservation()); + + CompositeObservation observation = response.getObservation(); + assertEquals(examplePaths, observation.getPaths()); + } + +}