Refresh IETF client/server models
[netconf.git] / protocol / netconf-client / src / main / java / org / opendaylight / netconf / client / conf / NetconfClientConfiguration.java
index 0ceba3c00569ce8692e2b1f121b403fa0cf3da8e..bce687d01c0742889b709960436b36700e6529f9 100644 (file)
@@ -10,84 +10,84 @@ package org.opendaylight.netconf.client.conf;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.MoreObjects.ToStringHelper;
-import java.net.InetSocketAddress;
+import com.google.common.base.Preconditions;
 import java.util.List;
 import java.util.Optional;
 import org.checkerframework.checker.index.qual.NonNegative;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 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.netconf.transport.tls.SslHandlerFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev231228.SshClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev231228.TcpClientGrouping;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev231228.TlsClientGrouping;
 
-public class NetconfClientConfiguration {
-    private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
+public final class NetconfClientConfiguration {
 
     private final NetconfClientProtocol clientProtocol;
-    private final InetSocketAddress address;
     private final Long connectionTimeoutMillis;
-
     private final NetconfHelloMessageAdditionalHeader additionalHeader;
     private final NetconfClientSessionListener sessionListener;
-
-    private final AuthenticationHandler authHandler;
-    private final SslHandlerFactory sslHandlerFactory;
-    private final NetconfSshClient sshClient;
-
     private final List<Uri> odlHelloCapabilities;
     private final @NonNegative int maximumIncomingChunkSize;
     private final String name;
 
-    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) {
-        this.address = address;
-        this.connectionTimeoutMillis = connectionTimeoutMillis;
-        this.additionalHeader = additionalHeader;
-        this.sessionListener = sessionListener;
-        clientProtocol = protocol;
-        this.authHandler = authHandler;
+    private final TcpClientGrouping tcpParameters;
+    private final TlsClientGrouping tlsParameters;
+    private final org.opendaylight.netconf.transport.tls.SslHandlerFactory sslHandlerFactory;
+    private final SshClientGrouping sshParameters;
+    private final ClientFactoryManagerConfigurator sshConfigurator;
+
+    NetconfClientConfiguration(final NetconfClientProtocol protocol,
+            final TcpClientGrouping tcpParameters,
+            final TlsClientGrouping tlsParameters,
+            final org.opendaylight.netconf.transport.tls.SslHandlerFactory sslHandlerFactory,
+            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.name = name;
+        this.tcpParameters = requireNonNull(tcpParameters);
+        this.tlsParameters = tlsParameters;
         this.sslHandlerFactory = sslHandlerFactory;
-        this.sshClient = sshClient;
+        this.sshParameters = sshParameters;
+        this.sshConfigurator = sshConfigurator;
+        this.sessionListener = requireNonNull(sessionListener);
         this.odlHelloCapabilities = odlHelloCapabilities;
+        this.connectionTimeoutMillis = connectionTimeoutMillis;
         this.maximumIncomingChunkSize = maximumIncomingChunkSize;
-        this.name = name;
-        validateConfiguration();
+        this.additionalHeader = additionalHeader;
+        // validate
+        if (NetconfClientProtocol.TLS.equals(protocol)) {
+            Preconditions.checkArgument(tlsParameters != null || sslHandlerFactory != null,
+                "Either tlsParameters or sslHandlerFactory is required");
+        } else if (NetconfClientProtocol.SSH.equals(protocol)) {
+            requireNonNull(sshParameters);
+        }
     }
 
-    public final String getName() {
+    public String getName() {
         return name;
     }
 
-    public final InetSocketAddress getAddress() {
-        return address;
-    }
-
-    public final Long getConnectionTimeoutMillis() {
+    public Long getConnectionTimeoutMillis() {
         return connectionTimeoutMillis;
     }
 
-    public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
+    public Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
         return Optional.ofNullable(additionalHeader);
     }
 
-    public final NetconfClientSessionListener getSessionListener() {
+    public NetconfClientSessionListener getSessionListener() {
         return sessionListener;
     }
 
-    public final AuthenticationHandler getAuthHandler() {
-        return authHandler;
-    }
-
     public NetconfClientProtocol getProtocol() {
         return clientProtocol;
     }
@@ -96,10 +96,6 @@ public class NetconfClientConfiguration {
         return sslHandlerFactory;
     }
 
-    public NetconfSshClient getSshClient() {
-        return sshClient;
-    }
-
     public List<Uri> getOdlHelloCapabilities() {
         return odlHelloCapabilities;
     }
@@ -108,53 +104,35 @@ public class NetconfClientConfiguration {
         return maximumIncomingChunkSize;
     }
 
-    private void validateConfiguration() {
-        switch (requireNonNull(clientProtocol)) {
-            case TLS:
-                validateTlsConfiguration();
-                validateTcpConfiguration();
-                break;
-            case SSH:
-                validateSshConfiguration();
-                validateTcpConfiguration();
-                break;
-            case TCP:
-                validateTcpConfiguration();
-                break;
-            default:
-                LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
-        }
+    public TcpClientGrouping getTcpParameters() {
+        return tcpParameters;
     }
 
-    protected final void validateTlsConfiguration() {
-        requireNonNull(sslHandlerFactory, "sslHandlerFactory");
+    public TlsClientGrouping getTlsParameters() {
+        return tlsParameters;
     }
 
-    protected final void validateSshConfiguration() {
-        requireNonNull(authHandler, "authHandler");
+    public SshClientGrouping getSshParameters() {
+        return sshParameters;
     }
 
-    protected final void validateTcpConfiguration() {
-        requireNonNull(address, "address");
-        requireNonNull(clientProtocol, "clientProtocol");
-        requireNonNull(connectionTimeoutMillis, "connectionTimeoutMillis");
-        requireNonNull(sessionListener, "sessionListener");
+    public ClientFactoryManagerConfigurator getSshConfigurator() {
+        return sshConfigurator;
     }
 
     @Override
-    public final String toString() {
-        return buildToStringHelper().toString();
-    }
-
-    protected ToStringHelper buildToStringHelper() {
+    public String toString() {
         return MoreObjects.toStringHelper(this)
-                .add("address", address)
-                .add("connectionTimeoutMillis", connectionTimeoutMillis)
-                .add("additionalHeader", additionalHeader)
-                .add("sessionListener", sessionListener)
-                .add("clientProtocol", clientProtocol)
-                .add("authHandler", authHandler)
-                .add("sslHandlerFactory", sslHandlerFactory);
+            .add("clientProtocol", clientProtocol)
+            .add("connectionTimeoutMillis", connectionTimeoutMillis)
+            .add("additionalHeader", additionalHeader)
+            .add("sessionListener", sessionListener)
+            .add("tcpParameters", tcpParameters)
+            .add("tlsParameters", tlsParameters)
+            .add("sshParameters", sshParameters)
+            .add("sslHandlerFactory (defined)", sslHandlerFactory != null)
+            .add("sslHandlerFactory (defined)", sshConfigurator != null)
+            .toString();
     }
 
     public enum NetconfClientProtocol {