Skip to content

Commit

Permalink
Refactor stack and transport layers (#1078)
Browse files Browse the repository at this point in the history
Deletes the stack-client and stack-server modules and corresponding UaStackClient and UaStackServer.

Introduces new transport abstractions and implementations, with HTTPS and WS implementations in their own modules to avoid the unnecessary dependencies they brought even when not being used.
  • Loading branch information
kevinherron committed Nov 4, 2022
1 parent a6d1ded commit b5af056
Show file tree
Hide file tree
Showing 385 changed files with 19,310 additions and 9,883 deletions.
Expand Up @@ -22,15 +22,13 @@
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.eclipse.milo.examples.server.ExampleServer;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.stack.client.security.DefaultClientCertificateValidator;
import org.eclipse.milo.opcua.stack.core.Stack;
import org.eclipse.milo.opcua.stack.core.security.DefaultClientCertificateValidator;
import org.eclipse.milo.opcua.stack.core.security.DefaultTrustListManager;
import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;

public class ClientExampleRunner {

static {
Expand Down Expand Up @@ -90,17 +88,16 @@ private OpcUaClient createClient() throws Exception {
endpoints.stream()
.filter(clientExample.endpointFilter())
.findFirst(),
configBuilder ->
configBuilder
transportConfigBuilder -> {},
clientConfigBuilder ->
clientConfigBuilder
.setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
.setApplicationUri("urn:eclipse:milo:examples:client")
.setKeyPair(loader.getClientKeyPair())
.setCertificate(loader.getClientCertificate())
.setCertificateChain(loader.getClientCertificateChain())
.setCertificateValidator(certificateValidator)
.setIdentityProvider(clientExample.getIdentityProvider())
.setRequestTimeout(uint(5000))
.build()
);
}

Expand Down
Expand Up @@ -26,6 +26,7 @@

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
import org.eclipse.milo.opcua.sdk.server.api.config.EndpointConfig;
import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig;
import org.eclipse.milo.opcua.sdk.server.identity.CompositeValidator;
import org.eclipse.milo.opcua.sdk.server.identity.UsernameIdentityValidator;
Expand All @@ -34,6 +35,7 @@
import org.eclipse.milo.opcua.stack.core.StatusCodes;
import org.eclipse.milo.opcua.stack.core.UaRuntimeException;
import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateManager;
import org.eclipse.milo.opcua.stack.core.security.DefaultServerCertificateValidator;
import org.eclipse.milo.opcua.stack.core.security.DefaultTrustListManager;
import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
import org.eclipse.milo.opcua.stack.core.transport.TransportProfile;
Expand All @@ -43,8 +45,8 @@
import org.eclipse.milo.opcua.stack.core.types.structured.BuildInfo;
import org.eclipse.milo.opcua.stack.core.util.CertificateUtil;
import org.eclipse.milo.opcua.stack.core.util.NonceUtil;
import org.eclipse.milo.opcua.stack.server.EndpointConfiguration;
import org.eclipse.milo.opcua.stack.server.security.DefaultServerCertificateValidator;
import org.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransport;
import org.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransportConfig;
import org.slf4j.LoggerFactory;

import static org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS;
Expand Down Expand Up @@ -142,7 +144,7 @@ public ExampleServer() throws Exception {
)
);

Set<EndpointConfiguration> endpointConfigurations = createEndpointConfigurations(certificate);
Set<EndpointConfig> endpointConfigurations = createEndpointConfigs(certificate);

OpcUaServerConfig serverConfig = OpcUaServerConfig.builder()
.setApplicationUri(applicationUri)
Expand All @@ -162,14 +164,21 @@ public ExampleServer() throws Exception {
.setProductUri("urn:eclipse:milo:example-server")
.build();

server = new OpcUaServer(serverConfig);
server = new OpcUaServer(serverConfig, transportProfile -> {
assert transportProfile == TransportProfile.TCP_UASC_UABINARY;

OpcTcpServerTransportConfig transportConfig =
OpcTcpServerTransportConfig.newBuilder().build();

return new OpcTcpServerTransport(transportConfig);
});

exampleNamespace = new ExampleNamespace(server);
exampleNamespace.startup();
}

private Set<EndpointConfiguration> createEndpointConfigurations(X509Certificate certificate) {
var endpointConfigurations = new LinkedHashSet<EndpointConfiguration>();
private Set<EndpointConfig> createEndpointConfigs(X509Certificate certificate) {
var endpointConfigs = new LinkedHashSet<EndpointConfig>();

List<String> bindAddresses = List.of("0.0.0.0");

Expand All @@ -179,7 +188,7 @@ private Set<EndpointConfiguration> createEndpointConfigurations(X509Certificate

for (String bindAddress : bindAddresses) {
for (String hostname : hostnames) {
EndpointConfiguration.Builder builder = EndpointConfiguration.newBuilder()
EndpointConfig.Builder builder = EndpointConfig.newBuilder()
.setBindAddress(bindAddress)
.setHostname(hostname)
.setPath("/milo")
Expand All @@ -191,14 +200,14 @@ private Set<EndpointConfiguration> createEndpointConfigurations(X509Certificate
);


EndpointConfiguration.Builder noSecurityBuilder = builder.copy()
EndpointConfig.Builder noSecurityBuilder = builder.copy()
.setSecurityPolicy(SecurityPolicy.None)
.setSecurityMode(MessageSecurityMode.None);

endpointConfigurations.add(buildTcpEndpoint(noSecurityBuilder));
endpointConfigs.add(buildTcpEndpoint(noSecurityBuilder));

// TCP Basic256Sha256 / SignAndEncrypt
endpointConfigurations.add(buildTcpEndpoint(
endpointConfigs.add(buildTcpEndpoint(
builder.copy()
.setSecurityPolicy(SecurityPolicy.Basic256Sha256)
.setSecurityMode(MessageSecurityMode.SignAndEncrypt))
Expand All @@ -215,19 +224,19 @@ private Set<EndpointConfiguration> createEndpointConfigurations(X509Certificate
* its base address.
*/

EndpointConfiguration.Builder discoveryBuilder = builder.copy()
EndpointConfig.Builder discoveryBuilder = builder.copy()
.setPath("/milo/discovery")
.setSecurityPolicy(SecurityPolicy.None)
.setSecurityMode(MessageSecurityMode.None);

endpointConfigurations.add(buildTcpEndpoint(discoveryBuilder));
endpointConfigs.add(buildTcpEndpoint(discoveryBuilder));
}
}

return endpointConfigurations;
return endpointConfigs;
}

private static EndpointConfiguration buildTcpEndpoint(EndpointConfiguration.Builder base) {
private static EndpointConfig buildTcpEndpoint(EndpointConfig.Builder base) {
return base.copy()
.setTransportProfile(TransportProfile.TCP_UASC_UABINARY)
.setBindPort(TCP_BIND_PORT)
Expand Down

0 comments on commit b5af056

Please sign in to comment.