Teach netconf-client abount maximum incoming chunk size
[netconf.git] / netconf / netconf-client / src / main / java / org / opendaylight / netconf / client / NetconfClientSessionNegotiatorFactory.java
index d6cc5b18c75518eb152aa77a578987f337b2d199..6215f4f0a82b2db3e8f21f06400a74e27d749ce7 100644 (file)
@@ -9,30 +9,29 @@ package org.opendaylight.netconf.client;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableSet;
-import com.siemens.ct.exi.core.CodingMode;
-import com.siemens.ct.exi.core.FidelityOptions;
-import com.siemens.ct.exi.core.exceptions.UnsupportedOption;
 import io.netty.channel.Channel;
 import io.netty.util.Timer;
 import io.netty.util.concurrent.Promise;
+import java.util.Optional;
 import java.util.Set;
-import org.opendaylight.netconf.api.NetconfClientSessionPreferences;
-import org.opendaylight.netconf.api.NetconfMessage;
+import org.checkerframework.checker.index.qual.NonNegative;
+import org.opendaylight.netconf.api.NetconfSessionListenerFactory;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessage;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
+import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiatorFactory;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
 import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
-import org.opendaylight.protocol.framework.SessionListenerFactory;
-import org.opendaylight.protocol.framework.SessionNegotiator;
-import org.opendaylight.protocol.framework.SessionNegotiatorFactory;
+import org.opendaylight.netconf.shaded.exificient.core.CodingMode;
+import org.opendaylight.netconf.shaded.exificient.core.FidelityOptions;
+import org.opendaylight.netconf.shaded.exificient.core.exceptions.UnsupportedOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorFactory<NetconfMessage,
-        NetconfClientSession, NetconfClientSessionListener> {
+public class NetconfClientSessionNegotiatorFactory
+        implements NetconfSessionNegotiatorFactory<NetconfClientSession, NetconfClientSessionListener> {
 
     public static final Set<String> EXI_CLIENT_CAPABILITIES = ImmutableSet.of(
             XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
@@ -68,6 +67,7 @@ public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorF
     }
 
     private final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader;
+    private final @NonNegative int maximumIncomingChunkSize;
     private final Set<String> clientCapabilities;
     private final long connectionTimeoutMillis;
     private final Timer timer;
@@ -79,6 +79,14 @@ public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorF
         this(timer, additionalHeader, connectionTimeoutMillis, DEFAULT_OPTIONS);
     }
 
+    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+                                                 final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
+                                                 final long connectionTimeoutMillis,
+                                                 final @NonNegative int maximumIncomingChunkSize) {
+        this(timer, additionalHeader, connectionTimeoutMillis, DEFAULT_OPTIONS, EXI_CLIENT_CAPABILITIES,
+            maximumIncomingChunkSize);
+    }
+
     public NetconfClientSessionNegotiatorFactory(final Timer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis, final Set<String> capabilities) {
@@ -96,23 +104,34 @@ public class NetconfClientSessionNegotiatorFactory implements SessionNegotiatorF
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis, final EXIParameters exiOptions,
                                                  final Set<String> capabilities) {
+        this(timer, additionalHeader, connectionTimeoutMillis, exiOptions, capabilities,
+            AbstractNetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
+    }
+
+    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+                                                 final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
+                                                 final long connectionTimeoutMillis, final EXIParameters exiOptions,
+                                                 final Set<String> capabilities,
+                                                 final @NonNegative int maximumIncomingChunkSize) {
         this.timer = requireNonNull(timer);
         this.additionalHeader = additionalHeader;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
-        this.options = exiOptions;
-        this.clientCapabilities = capabilities;
+        options = exiOptions;
+        clientCapabilities = capabilities;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
+    }
+
+    public long getConnectionTimeoutMillis() {
+        return connectionTimeoutMillis;
     }
 
     @Override
-    public SessionNegotiator<NetconfClientSession> getSessionNegotiator(
-            final SessionListenerFactory<NetconfClientSessionListener> sessionListenerFactory,
+    public NetconfClientSessionNegotiator getSessionNegotiator(
+            final NetconfSessionListenerFactory<NetconfClientSessionListener> sessionListenerFactory,
             final Channel channel, final Promise<NetconfClientSession> promise) {
-
-        NetconfMessage startExiMessage = NetconfStartExiMessage.create(options, START_EXI_MESSAGE_ID);
-        NetconfHelloMessage helloMessage = NetconfHelloMessage.createClientHello(clientCapabilities, additionalHeader);
-
-        NetconfClientSessionPreferences proposal = new NetconfClientSessionPreferences(helloMessage, startExiMessage);
-        return new NetconfClientSessionNegotiator(proposal, promise, channel, timer,
-                sessionListenerFactory.getSessionListener(), connectionTimeoutMillis);
+        return new NetconfClientSessionNegotiator(
+            NetconfHelloMessage.createClientHello(clientCapabilities, additionalHeader),
+            NetconfStartExiMessage.create(options, START_EXI_MESSAGE_ID), promise, channel, timer,
+                sessionListenerFactory.getSessionListener(), connectionTimeoutMillis, maximumIncomingChunkSize);
     }
 }