Ext service integration support for Netconf SSH client
[netconf.git] / protocol / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfiguration.java
index 0ceba3c00569ce8692e2b1f121b403fa0cf3da8e..24b7a75cfde21ea206909e76dad1965c08100336 100644 (file)
@@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
+import com.google.common.base.Preconditions;
 import java.net.InetSocketAddress;
 import java.util.List;
 import java.util.Optional;
@@ -20,7 +21,11 @@ import org.opendaylight.netconf.client.NetconfClientSessionListener;
 import org.opendaylight.netconf.client.SslHandlerFactory;
 import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
 import org.opendaylight.netconf.nettyutil.handler.ssh.client.NetconfSshClient;
+import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev230417.SshClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev230417.TcpClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev230417.TlsClientGrouping;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,14 +47,20 @@ public class NetconfClientConfiguration {
     private final @NonNegative int maximumIncomingChunkSize;
     private final String name;
 
+    private final TcpClientGrouping tcpParameters;
+    private final TlsClientGrouping tlsParameters;
+    private final org.opendaylight.netconf.transport.tls.SslHandlerFactory transportSslHandlerFactory;
+    private final SshClientGrouping sshParameters;
+    private final ClientFactoryManagerConfigurator sshConfigurator;
+
     NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address,
-                               final Long connectionTimeoutMillis,
-                               final NetconfHelloMessageAdditionalHeader additionalHeader,
-                               final NetconfClientSessionListener sessionListener,
-                               final AuthenticationHandler authHandler,
-                               final SslHandlerFactory sslHandlerFactory, final NetconfSshClient sshClient,
-                               final List<Uri> odlHelloCapabilities, final @NonNegative int maximumIncomingChunkSize,
-                               final String name) {
+            final Long connectionTimeoutMillis,
+            final NetconfHelloMessageAdditionalHeader additionalHeader,
+            final NetconfClientSessionListener sessionListener,
+            final AuthenticationHandler authHandler,
+            final SslHandlerFactory sslHandlerFactory, final NetconfSshClient sshClient,
+            final List<Uri> odlHelloCapabilities, final @NonNegative int maximumIncomingChunkSize,
+            final String name) {
         this.address = address;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
         this.additionalHeader = additionalHeader;
@@ -61,9 +72,51 @@ public class NetconfClientConfiguration {
         this.odlHelloCapabilities = odlHelloCapabilities;
         this.maximumIncomingChunkSize = maximumIncomingChunkSize;
         this.name = name;
+        this.tcpParameters = null;
+        this.tlsParameters = null;
+        this.transportSslHandlerFactory = null;
+        this.sshParameters = null;
+        this.sshConfigurator = null;
         validateConfiguration();
     }
 
+    NetconfClientConfiguration(final NetconfClientProtocol protocol,
+            final TcpClientGrouping tcpParameters,
+            final TlsClientGrouping tlsParameters,
+            final org.opendaylight.netconf.transport.tls.SslHandlerFactory transportSslHandlerFactory,
+            final SshClientGrouping sshParameters,
+            final ClientFactoryManagerConfigurator sshConfigurator,
+            final NetconfClientSessionListener sessionListener,
+            final List<Uri> odlHelloCapabilities,
+            final Long connectionTimeoutMillis,
+            final @NonNegative int maximumIncomingChunkSize,
+            final NetconfHelloMessageAdditionalHeader additionalHeader,
+            final String name) {
+        this.clientProtocol = requireNonNull(protocol);
+        this.tcpParameters = requireNonNull(tcpParameters);
+        this.tlsParameters = tlsParameters;
+        this.transportSslHandlerFactory = transportSslHandlerFactory;
+        this.sshParameters = sshParameters;
+        this.sshConfigurator = sshConfigurator;
+        this.sessionListener = requireNonNull(sessionListener);
+        this.odlHelloCapabilities = odlHelloCapabilities;
+        this.connectionTimeoutMillis = connectionTimeoutMillis;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
+        this.additionalHeader = additionalHeader;
+        this.name = name;
+        this.address = null;
+        this.authHandler = null;
+        this.sslHandlerFactory = null;
+        this.sshClient = null;
+        // validate
+        if (NetconfClientProtocol.TLS.equals(protocol)) {
+            Preconditions.checkArgument(tlsParameters != null || transportSslHandlerFactory != null,
+                "Either tlsParameters or sslHandlerFactory is required");
+        } else if (NetconfClientProtocol.SSH.equals(protocol)) {
+            requireNonNull(sshParameters);
+        }
+    }
+
     public final String getName() {
         return name;
     }
@@ -108,11 +161,31 @@ public class NetconfClientConfiguration {
         return maximumIncomingChunkSize;
     }
 
+    public final TcpClientGrouping getTcpParameters() {
+        return tcpParameters;
+    }
+
+    public final  TlsClientGrouping getTlsParameters() {
+        return tlsParameters;
+    }
+
+    public final org.opendaylight.netconf.transport.tls.SslHandlerFactory getTransportSslHandlerFactory() {
+        return transportSslHandlerFactory;
+    }
+
+    public final SshClientGrouping getSshParameters() {
+        return sshParameters;
+    }
+
+    public ClientFactoryManagerConfigurator getSshConfigurator() {
+        return sshConfigurator;
+    }
+
     private void validateConfiguration() {
         switch (requireNonNull(clientProtocol)) {
             case TLS:
-                validateTlsConfiguration();
                 validateTcpConfiguration();
+                validateTlsConfiguration();
                 break;
             case SSH:
                 validateSshConfiguration();