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.Preconditions;
14 import java.util.List;
15 import java.util.Optional;
16 import org.checkerframework.checker.index.qual.NonNegative;
17 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
18 import org.opendaylight.netconf.client.NetconfClientSessionListener;
19 import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
20 import org.opendaylight.netconf.transport.tls.SslHandlerFactory;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ssh.client.rev231228.SshClientGrouping;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tcp.client.rev231228.TcpClientGrouping;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.tls.client.rev231228.TlsClientGrouping;
26 public final class NetconfClientConfiguration {
28 private final NetconfClientProtocol clientProtocol;
29 private final Long connectionTimeoutMillis;
30 private final NetconfHelloMessageAdditionalHeader additionalHeader;
31 private final NetconfClientSessionListener sessionListener;
32 private final List<Uri> odlHelloCapabilities;
33 private final @NonNegative int maximumIncomingChunkSize;
34 private final String name;
36 private final TcpClientGrouping tcpParameters;
37 private final TlsClientGrouping tlsParameters;
38 private final org.opendaylight.netconf.transport.tls.SslHandlerFactory sslHandlerFactory;
39 private final SshClientGrouping sshParameters;
40 private final ClientFactoryManagerConfigurator sshConfigurator;
42 NetconfClientConfiguration(final NetconfClientProtocol protocol,
43 final TcpClientGrouping tcpParameters,
44 final TlsClientGrouping tlsParameters,
45 final org.opendaylight.netconf.transport.tls.SslHandlerFactory sslHandlerFactory,
46 final SshClientGrouping sshParameters,
47 final ClientFactoryManagerConfigurator sshConfigurator,
48 final NetconfClientSessionListener sessionListener,
49 final List<Uri> odlHelloCapabilities,
50 final Long connectionTimeoutMillis,
51 final @NonNegative int maximumIncomingChunkSize,
52 final NetconfHelloMessageAdditionalHeader additionalHeader,
54 this.clientProtocol = requireNonNull(protocol);
56 this.tcpParameters = requireNonNull(tcpParameters);
57 this.tlsParameters = tlsParameters;
58 this.sslHandlerFactory = sslHandlerFactory;
59 this.sshParameters = sshParameters;
60 this.sshConfigurator = sshConfigurator;
61 this.sessionListener = requireNonNull(sessionListener);
62 this.odlHelloCapabilities = odlHelloCapabilities;
63 this.connectionTimeoutMillis = connectionTimeoutMillis;
64 this.maximumIncomingChunkSize = maximumIncomingChunkSize;
65 this.additionalHeader = additionalHeader;
67 if (NetconfClientProtocol.TLS.equals(protocol)) {
68 Preconditions.checkArgument(tlsParameters != null || sslHandlerFactory != null,
69 "Either tlsParameters or sslHandlerFactory is required");
70 } else if (NetconfClientProtocol.SSH.equals(protocol)) {
71 requireNonNull(sshParameters);
75 public String getName() {
79 public Long getConnectionTimeoutMillis() {
80 return connectionTimeoutMillis;
83 public Optional<NetconfHelloMessageAdditionalHeader> getAdditionalHeader() {
84 return Optional.ofNullable(additionalHeader);
87 public NetconfClientSessionListener getSessionListener() {
88 return sessionListener;
91 public NetconfClientProtocol getProtocol() {
92 return clientProtocol;
95 public SslHandlerFactory getSslHandlerFactory() {
96 return sslHandlerFactory;
99 public List<Uri> getOdlHelloCapabilities() {
100 return odlHelloCapabilities;
103 public @NonNegative int getMaximumIncomingChunkSize() {
104 return maximumIncomingChunkSize;
107 public TcpClientGrouping getTcpParameters() {
108 return tcpParameters;
111 public TlsClientGrouping getTlsParameters() {
112 return tlsParameters;
115 public SshClientGrouping getSshParameters() {
116 return sshParameters;
119 public ClientFactoryManagerConfigurator getSshConfigurator() {
120 return sshConfigurator;
124 public String toString() {
125 return MoreObjects.toStringHelper(this)
126 .add("clientProtocol", clientProtocol)
127 .add("connectionTimeoutMillis", connectionTimeoutMillis)
128 .add("additionalHeader", additionalHeader)
129 .add("sessionListener", sessionListener)
130 .add("tcpParameters", tcpParameters)
131 .add("tlsParameters", tlsParameters)
132 .add("sshParameters", sshParameters)
133 .add("sslHandlerFactory (defined)", sslHandlerFactory != null)
134 .add("sslHandlerFactory (defined)", sshConfigurator != null)
138 public enum NetconfClientProtocol {