import java.net.InetSocketAddress;
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.protocol.framework.ReconnectStrategy;
import org.slf4j.Logger;
private final ReconnectStrategy reconnectStrategy;
private final AuthenticationHandler authHandler;
+ private final SslHandlerFactory sslHandlerFactory;
NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address,
final Long connectionTimeoutMillis,
final NetconfHelloMessageAdditionalHeader additionalHeader,
final NetconfClientSessionListener sessionListener,
- final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler) {
+ final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler,
+ final SslHandlerFactory sslHandlerFactory) {
this.address = address;
this.connectionTimeoutMillis = connectionTimeoutMillis;
this.additionalHeader = additionalHeader;
this.clientProtocol = protocol;
this.reconnectStrategy = reconnectStrategy;
this.authHandler = authHandler;
+ this.sslHandlerFactory = sslHandlerFactory;
validateConfiguration();
}
return clientProtocol;
}
+ public SslHandlerFactory getSslHandlerFactory() {
+ return sslHandlerFactory;
+ }
+
@SuppressWarnings("checkstyle:FallThrough")
private void validateConfiguration() {
Preconditions.checkNotNull(clientProtocol, " ");
switch (clientProtocol) {
+ case TLS:
case SSH:
- validateSshConfiguration();
- // Fall through intentional (ssh validation is a superset of tcp validation)
+ if (clientProtocol == NetconfClientProtocol.SSH) {
+ validateSshConfiguration();
+ } else {
+ validateTlsConfiguration();
+ }
+ // Fall through intentional (ssh or tls validation is a superset of tcp validation)
case TCP:
validateTcpConfiguration();
break;
}
}
+ protected void validateTlsConfiguration() {
+ Preconditions.checkNotNull(sslHandlerFactory, "sslHandlerFactory");
+ }
+
protected void validateSshConfiguration() {
Preconditions.checkNotNull(authHandler, "authHandler");
}
.add("sessionListener", sessionListener)
.add("reconnectStrategy", reconnectStrategy)
.add("clientProtocol", clientProtocol)
- .add("authHandler", authHandler);
+ .add("authHandler", authHandler)
+ .add("sslHandlerFactory", sslHandlerFactory);
}
public enum NetconfClientProtocol {
- TCP, SSH
+ TCP, SSH, TLS
}
}
\ No newline at end of file
import java.net.InetSocketAddress;
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.protocol.framework.ReconnectStrategy;
private ReconnectStrategy reconnectStrategy;
private AuthenticationHandler authHandler;
private NetconfClientConfiguration.NetconfClientProtocol clientProtocol = DEFAULT_CLIENT_PROTOCOL;
+ private SslHandlerFactory sslHandlerFactory;
protected NetconfClientConfigurationBuilder() {
}
return this;
}
+ @SuppressWarnings("checkstyle:hiddenField")
+ public NetconfClientConfigurationBuilder withSslHandlerFactory(final SslHandlerFactory sslHandlerFactory) {
+ this.sslHandlerFactory = sslHandlerFactory;
+ return this;
+ }
+
final InetSocketAddress getAddress() {
return address;
}
return clientProtocol;
}
+ final SslHandlerFactory getSslHandlerFactory() {
+ return sslHandlerFactory;
+ }
+
public NetconfClientConfiguration build() {
return new NetconfClientConfiguration(clientProtocol, address, connectionTimeoutMillis, additionalHeader,
- sessionListener, reconnectStrategy, authHandler);
+ sessionListener, reconnectStrategy, authHandler, sslHandlerFactory);
}
}
import java.net.InetSocketAddress;
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.protocol.framework.ReconnectStrategy;
import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
final NetconfClientSessionListener sessionListener,
final ReconnectStrategy reconnectStrategy,
final ReconnectStrategyFactory connectStrategyFactory,
- final AuthenticationHandler authHandler) {
+ final AuthenticationHandler authHandler,
+ final SslHandlerFactory sslHandlerFactory) {
super(clientProtocol, address, connectionTimeoutMillis, additionalHeader, sessionListener, reconnectStrategy,
- authHandler);
+ authHandler, sslHandlerFactory);
this.connectStrategyFactory = connectStrategyFactory;
validateReconnectConfiguration();
}
import java.net.InetSocketAddress;
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.protocol.framework.ReconnectStrategy;
import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
public NetconfReconnectingClientConfiguration build() {
return new NetconfReconnectingClientConfiguration(getProtocol(), getAddress(), getConnectionTimeoutMillis(),
getAdditionalHeader(), getSessionListener(), getReconnectStrategy(), connectStrategyFactory,
- getAuthHandler());
+ getAuthHandler(), getSslHandlerFactory());
}
// Override setter methods to return subtype
NetconfClientConfiguration.NetconfClientProtocol clientProtocol) {
return (NetconfReconnectingClientConfigurationBuilder) super.withProtocol(clientProtocol);
}
+
+ @Override
+ public NetconfReconnectingClientConfigurationBuilder withSslHandlerFactory(
+ final SslHandlerFactory sslHandlerFactory) {
+ return (NetconfReconnectingClientConfigurationBuilder) super.withSslHandlerFactory(sslHandlerFactory);
+ }
}
Assert.assertEquals(strategy, cfg.getReconnectStrategy());
Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, cfg.getProtocol());
Assert.assertEquals(address, cfg.getAddress());
+
+ SslHandlerFactory sslHandlerFactory = Mockito.mock(SslHandlerFactory.class);
+ NetconfClientConfiguration cfg2 = NetconfClientConfigurationBuilder.create()
+ .withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TLS)
+ .withAddress(address)
+ .withConnectionTimeoutMillis(timeout)
+ .withReconnectStrategy(strategy)
+ .withAdditionalHeader(header)
+ .withSessionListener(listener)
+ .withSslHandlerFactory(sslHandlerFactory).build();
+
+ Assert.assertEquals(timeout, cfg2.getConnectionTimeoutMillis());
+ Assert.assertEquals(Optional.fromNullable(header), cfg2.getAdditionalHeader());
+ Assert.assertEquals(listener, cfg2.getSessionListener());
+ Assert.assertEquals(sslHandlerFactory, cfg2.getSslHandlerFactory());
+ Assert.assertEquals(strategy, cfg2.getReconnectStrategy());
+ Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, cfg2.getProtocol());
+ Assert.assertEquals(address, cfg2.getAddress());
}
}
Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, cfg.getProtocol());
Assert.assertEquals(address, cfg.getAddress());
Assert.assertEquals(reconnect, cfg.getReconnectStrategy());
+
+ SslHandlerFactory sslHandlerFactory = Mockito.mock(SslHandlerFactory.class);
+ NetconfReconnectingClientConfiguration cfg2 = NetconfReconnectingClientConfigurationBuilder.create()
+ .withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TLS)
+ .withAddress(address)
+ .withConnectionTimeoutMillis(timeout)
+ .withReconnectStrategy(reconnect)
+ .withAdditionalHeader(header)
+ .withSessionListener(listener)
+ .withConnectStrategyFactory(strategy)
+ .withSslHandlerFactory(sslHandlerFactory).build();
+
+ Assert.assertEquals(timeout, cfg2.getConnectionTimeoutMillis());
+ Assert.assertEquals(Optional.fromNullable(header), cfg2.getAdditionalHeader());
+ Assert.assertEquals(listener, cfg2.getSessionListener());
+ Assert.assertEquals(sslHandlerFactory, cfg2.getSslHandlerFactory());
+ Assert.assertEquals(strategy, cfg2.getConnectStrategyFactory());
+ Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, cfg2.getProtocol());
+ Assert.assertEquals(address, cfg2.getAddress());
+ Assert.assertEquals(reconnect, cfg2.getReconnectStrategy());
}
}