2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.client.conf;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.base.MoreObjects;
13 import com.google.common.base.MoreObjects.ToStringHelper;
14 import java.net.InetSocketAddress;
15 import java.util.List;
16 import java.util.Optional;
17 import org.checkerframework.checker.index.qual.NonNegative;
18 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
19 import org.opendaylight.netconf.client.NetconfClientSessionListener;
20 import org.opendaylight.netconf.client.SslHandlerFactory;
21 import org.opendaylight.netconf.nettyutil.ReconnectStrategy;
22 import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler;
23 import org.opendaylight.netconf.nettyutil.handler.ssh.client.NetconfSshClient;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
28 public class NetconfClientConfiguration {
29 private static final Logger LOG = LoggerFactory.getLogger(NetconfClientConfiguration.class);
31 private final NetconfClientProtocol clientProtocol;
32 private final InetSocketAddress address;
33 private final Long connectionTimeoutMillis;
35 private final NetconfHelloMessageAdditionalHeader additionalHeader;
36 private final NetconfClientSessionListener sessionListener;
38 private final ReconnectStrategy reconnectStrategy;
40 private final AuthenticationHandler authHandler;
41 private final SslHandlerFactory sslHandlerFactory;
42 private final NetconfSshClient sshClient;
44 private final List<Uri> odlHelloCapabilities;
45 private final @NonNegative int maximumIncomingChunkSize;
46 private final String name;
48 NetconfClientConfiguration(final NetconfClientProtocol protocol, final InetSocketAddress address,
49 final Long connectionTimeoutMillis,
50 final NetconfHelloMessageAdditionalHeader additionalHeader,
51 final NetconfClientSessionListener sessionListener,
52 final ReconnectStrategy reconnectStrategy, final AuthenticationHandler authHandler,
53 final SslHandlerFactory sslHandlerFactory, final NetconfSshClient sshClient,
54 final List<Uri> odlHelloCapabilities, final @NonNegative int maximumIncomingChunkSize,
56 this.address = address;
57 this.connectionTimeoutMillis = connectionTimeoutMillis;
58 this.additionalHeader = additionalHeader;
59 this.sessionListener = sessionListener;
60 clientProtocol = protocol;
61 this.reconnectStrategy = reconnectStrategy;
62 this.authHandler = authHandler;
63 this.sslHandlerFactory = sslHandlerFactory;
64 this.sshClient = sshClient;
65 this.odlHelloCapabilities = odlHelloCapabilities;
66 this.maximumIncomingChunkSize = maximumIncomingChunkSize;
68 validateConfiguration();
71 public final String getName() {
75 public final InetSocketAddress getAddress() {
79 public final Long getConnectionTimeoutMillis() {
80 return connectionTimeoutMillis;
83 public final Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
84 return Optional.ofNullable(additionalHeader);
87 public final NetconfClientSessionListener getSessionListener() {
88 return sessionListener;
91 @Deprecated(forRemoval = true)
92 public final ReconnectStrategy getReconnectStrategy() {
93 return reconnectStrategy;
96 public final AuthenticationHandler getAuthHandler() {
100 public NetconfClientProtocol getProtocol() {
101 return clientProtocol;
104 public SslHandlerFactory getSslHandlerFactory() {
105 return sslHandlerFactory;
108 public NetconfSshClient getSshClient() {
112 public List<Uri> getOdlHelloCapabilities() {
113 return odlHelloCapabilities;
116 public @NonNegative int getMaximumIncomingChunkSize() {
117 return maximumIncomingChunkSize;
120 private void validateConfiguration() {
121 switch (requireNonNull(clientProtocol)) {
123 validateTlsConfiguration();
124 validateTcpConfiguration();
127 validateSshConfiguration();
128 validateTcpConfiguration();
131 validateTcpConfiguration();
134 LOG.warn("Unexpected protocol: {} in netconf client configuration.", clientProtocol);
138 protected final void validateTlsConfiguration() {
139 requireNonNull(sslHandlerFactory, "sslHandlerFactory");
142 protected final void validateSshConfiguration() {
143 requireNonNull(authHandler, "authHandler");
146 protected final void validateTcpConfiguration() {
147 requireNonNull(address, "address");
148 requireNonNull(clientProtocol, "clientProtocol");
149 requireNonNull(connectionTimeoutMillis, "connectionTimeoutMillis");
150 requireNonNull(sessionListener, "sessionListener");
151 requireNonNull(reconnectStrategy, "reconnectStrategy");
155 public final String toString() {
156 return buildToStringHelper().toString();
159 protected ToStringHelper buildToStringHelper() {
160 return MoreObjects.toStringHelper(this)
161 .add("address", address)
162 .add("connectionTimeoutMillis", connectionTimeoutMillis)
163 .add("additionalHeader", additionalHeader)
164 .add("sessionListener", sessionListener)
165 .add("reconnectStrategy", reconnectStrategy)
166 .add("clientProtocol", clientProtocol)
167 .add("authHandler", authHandler)
168 .add("sslHandlerFactory", sslHandlerFactory);
171 public enum NetconfClientProtocol {