* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.netconf.client;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.collect.ImmutableSet;
-import com.siemens.ct.exi.CodingMode;
-import com.siemens.ct.exi.FidelityOptions;
-import com.siemens.ct.exi.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.NetconfDocumentedException;
-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,
private static final String START_EXI_MESSAGE_ID = "default-start-exi";
private static final EXIParameters DEFAULT_OPTIONS;
- private final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader;
- private final long connectionTimeoutMillis;
- private final Timer timer;
- private final EXIParameters options;
-
static {
final FidelityOptions fidelity = FidelityOptions.createDefault();
try {
DEFAULT_OPTIONS = new EXIParameters(CodingMode.BYTE_PACKED, fidelity);
}
+ private final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader;
+ private final @NonNegative int maximumIncomingChunkSize;
private final Set<String> clientCapabilities;
+ private final long connectionTimeoutMillis;
+ private final Timer timer;
+ private final EXIParameters options;
public NetconfClientSessionNegotiatorFactory(final Timer timer,
final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
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) {
final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
final long connectionTimeoutMillis, final EXIParameters exiOptions,
final Set<String> capabilities) {
- this.timer = Preconditions.checkNotNull(timer);
+ 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 = null;
- try {
- helloMessage = NetconfHelloMessage.createClientHello(clientCapabilities, additionalHeader);
- } catch (NetconfDocumentedException e) {
- LOG.error("Unable to create client hello message with capabilities {} and additional handler {}",
- clientCapabilities, additionalHeader);
- throw new IllegalStateException(e);
- }
-
- 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);
}
}