Pass maximum chunk size to AbstractNetconfSessionNegotiator
[netconf.git] / netconf / netconf-netty-util / src / main / java / org / opendaylight / netconf / nettyutil / AbstractNetconfSessionNegotiator.java
index 3566bf4bb19fc39f69ab29e6dac2c86258c073bd..04f4aa90b5b1c24f7ac7fe5157aa3bc6fe08c342 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.netconf.nettyutil;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
@@ -77,6 +78,7 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
     private final @NonNull NetconfHelloMessage localHello;
     protected final Channel channel;
 
+    private final @NonNegative int maximumIncomingChunkSize;
     private final long connectionTimeoutMillis;
     private final Promise<S> promise;
     private final L sessionListener;
@@ -88,14 +90,25 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
     private State state = State.IDLE;
 
     protected AbstractNetconfSessionNegotiator(final NetconfHelloMessage hello, final Promise<S> promise,
-                                               final Channel channel, final Timer timer,
-                                               final L sessionListener, final long connectionTimeoutMillis) {
+                                               final Channel channel, final Timer timer, final L sessionListener,
+                                               final long connectionTimeoutMillis,
+                                               final @NonNegative int maximumIncomingChunkSize) {
         this.localHello = requireNonNull(hello);
         this.promise = requireNonNull(promise);
         this.channel = requireNonNull(channel);
         this.timer = timer;
         this.sessionListener = sessionListener;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
+        checkArgument(maximumIncomingChunkSize > 0, "Invalid maximum incoming chunk size %s", maximumIncomingChunkSize);
+    }
+
+    @Deprecated(since = "4.0.1", forRemoval = true)
+    protected AbstractNetconfSessionNegotiator(final NetconfHelloMessage hello, final Promise<S> promise,
+                                               final Channel channel, final Timer timer,
+                                               final L sessionListener, final long connectionTimeoutMillis) {
+        this(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
     protected final @NonNull NetconfHelloMessage localHello() {
@@ -194,7 +207,7 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_FRAME_ENCODER,
                 FramingMechanismHandlerFactory.createHandler(FramingMechanism.CHUNK));
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_AGGREGATOR,
-                new NetconfChunkAggregator(DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE));
+                new NetconfChunkAggregator(maximumIncomingChunkSize));
     }
 
     private boolean shouldUseChunkFraming(final Document doc) {