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;
}
return sslHandlerFactory;
}
- public NetconfSshClient getSshClient() {
- return sshClient;
- }
-
public List<Uri> getOdlHelloCapabilities() {
return odlHelloCapabilities;
}
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 {