public static byte[] encode(LwM2mNode node, LwM2mPath path, LwM2mModel model) { Validate.notNull(node); Validate.notNull(path); Validate.notNull(model); InternalEncoder internalEncoder = new InternalEncoder(); internalEncoder.objectId = path.getObjectId(); internalEncoder.model = model; node.accept(internalEncoder); return internalEncoder.out.toByteArray(); }
/** @param file the file path to persist the registry */ public SecurityRegistryImpl(String file, PrivateKey serverPrivateKey, PublicKey serverPublicKey) { Validate.notEmpty(file); filename = file; this.serverPrivateKey = serverPrivateKey; this.serverPublicKey = serverPublicKey; loadFromFile(); }
/** @param file the file path to persist the registry */ public SecurityRegistryImpl( String file, PrivateKey serverPrivateKey, X509Certificate[] serverX509CertChain, Certificate[] trustedCertificates) { Validate.notEmpty(file); Validate.notEmpty(serverX509CertChain); Validate.notEmpty(trustedCertificates); filename = file; this.serverPrivateKey = serverPrivateKey; this.serverX509CertChain = serverX509CertChain; // extract the raw public key from the first certificate in the chain this.serverPublicKey = serverX509CertChain[0].getPublicKey(); this.trustedCertificates = trustedCertificates; loadFromFile(); }
public RegisterRequest( String endpointName, Long lifetime, String lwVersion, BindingMode bindingMode, String smsNumber, LinkObject[] objectLinks, Map<String, String> additionalAttributes) { Validate.notNull(endpointName); Validate.noNullElements(objectLinks); this.endpointName = endpointName; this.lifetime = lifetime; this.lwVersion = lwVersion; this.bindingMode = bindingMode; this.smsNumber = smsNumber; this.objectLinks = objectLinks; if (additionalAttributes == null) this.additionalAttributes = Collections.unmodifiableMap(new HashMap<String, String>()); else this.additionalAttributes = Collections.unmodifiableMap(additionalAttributes); }
/** * Initialize a server which will bind to the specified address and port. * * @param localAddress the address to bind the CoAP server. * @param localAddressSecure the address to bind the CoAP server for DTLS connection. * @param privateKey for RPK authentication mode * @param publicKey for RPK authentication mode */ public LeshanServer( InetSocketAddress localAddress, InetSocketAddress localAddressSecure, final ClientRegistry clientRegistry, final SecurityRegistry securityRegistry, final ObservationRegistry observationRegistry, final LwM2mModelProvider modelProvider) { Validate.notNull(localAddress, "IP address cannot be null"); Validate.notNull(localAddressSecure, "Secure IP address cannot be null"); Validate.notNull(clientRegistry, "clientRegistry cannot be null"); Validate.notNull(securityRegistry, "securityRegistry cannot be null"); Validate.notNull(observationRegistry, "observationRegistry cannot be null"); Validate.notNull(modelProvider, "modelProvider cannot be null"); // Init registries this.clientRegistry = clientRegistry; this.securityRegistry = securityRegistry; this.observationRegistry = observationRegistry; this.modelProvider = modelProvider; // Cancel observations on client unregistering this.clientRegistry.addListener( new ClientRegistryListener() { @Override public void updated(final Client clientUpdated) {} @Override public void unregistered(final Client client) { LeshanServer.this.observationRegistry.cancelObservations(client); } @Override public void registered(final Client client) {} }); // default endpoint coapServer = new CoapServer(); final Endpoint endpoint = new CoAPEndpoint(localAddress); coapServer.addEndpoint(endpoint); // secure endpoint DTLSConnector connector = new DTLSConnector(localAddressSecure); connector .getConfig() .setPskStore(new LwM2mPskStore(this.securityRegistry, this.clientRegistry)); PrivateKey privateKey = this.securityRegistry.getServerPrivateKey(); PublicKey publicKey = this.securityRegistry.getServerPublicKey(); if (privateKey != null && publicKey != null) { connector.getConfig().setPrivateKey(privateKey, publicKey); // TODO this should be automatically done by scandium connector.getConfig().setPreferredCipherSuite(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8); } else { // TODO this should be automatically done by scandium connector.getConfig().setPreferredCipherSuite(CipherSuite.TLS_PSK_WITH_AES_128_CCM_8); } final Endpoint secureEndpoint = new SecureEndpoint(connector); coapServer.addEndpoint(secureEndpoint); // define /rd resource final RegisterResource rdResource = new RegisterResource(new RegistrationHandler(this.clientRegistry, this.securityRegistry)); coapServer.add(rdResource); // create sender final Set<Endpoint> endpoints = new HashSet<>(); endpoints.add(endpoint); endpoints.add(secureEndpoint); requestSender = new CaliforniumLwM2mRequestSender( endpoints, this.clientRegistry, this.observationRegistry, modelProvider); }