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