External service integration support for TLS transport
[netconf.git] / transport / transport-tls / src / main / java / org / opendaylight / netconf / transport / tls / TLSTransportStack.java
index 2fd483a386bfa8897cd88d8c221f4d3d23d35b45..53565546d4d7055585ee15e81ba3099dcf093891 100644 (file)
@@ -97,17 +97,21 @@ public abstract sealed class TLSTransportStack extends AbstractOverlayTransportS
                     .put(TlsEcdheRsaWithChacha20Poly1305Sha256.VALUE, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256")
                     .build();
 
-    private volatile @NonNull SslContext sslContext;
+    private final SslHandlerFactory factory;
 
     TLSTransportStack(final TransportChannelListener listener, final SslContext sslContext) {
+        this(listener, channel -> sslContext.newHandler(channel.alloc()));
+    }
+
+    TLSTransportStack(final TransportChannelListener listener, final SslHandlerFactory factory) {
         super(listener);
-        this.sslContext = requireNonNull(sslContext);
+        this.factory = requireNonNull(factory);
     }
 
     @Override
     protected final void onUnderlayChannelEstablished(final TransportChannel underlayChannel) {
         final var channel = underlayChannel.channel();
-        final var sslHandler = sslContext.newHandler(channel.alloc());
+        final var sslHandler = factory.createSslHandler(channel);
 
         channel.pipeline().addLast(sslHandler);
         sslHandler.handshakeFuture().addListener(future -> {
@@ -121,10 +125,6 @@ public abstract sealed class TLSTransportStack extends AbstractOverlayTransportS
         });
     }
 
-    final void setSslContext(final SslContext sslContext) {
-        this.sslContext = requireNonNull(sslContext);
-    }
-
     static KeyManagerFactory newKeyManager(
             final @NonNull InlineOrKeystoreEndEntityCertWithKeyGrouping endEntityCert
     ) throws UnsupportedConfigurationException {