Introduce NetconfTimer
[netconf.git] / protocol / netconf-client / src / main / java / org / opendaylight / netconf / client / NetconfClientSessionNegotiatorFactory.java
index af1ef5fce0b2826ab6dbb10b67e15ad9f9d65dc9..7b2f464b44f56ad89ad84e394752fe2d0abdd9c5 100644 (file)
@@ -11,43 +11,39 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableSet;
 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.checkerframework.checker.index.qual.NonNegative;
+import org.opendaylight.netconf.api.CapabilityURN;
 import org.opendaylight.netconf.api.NetconfSessionListenerFactory;
 import org.opendaylight.netconf.api.messages.HelloMessage;
 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.common.NetconfTimer;
+import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiator;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
+import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
 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 NetconfSessionNegotiatorFactory<NetconfClientSession, NetconfClientSessionListener> {
-
+public final class NetconfClientSessionNegotiatorFactory {
     public static final Set<String> EXI_CLIENT_CAPABILITIES = ImmutableSet.of(
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
+        CapabilityURN.BASE,
+        CapabilityURN.BASE_1_1,
+        CapabilityURN.EXI);
 
     public static final Set<String> LEGACY_EXI_CLIENT_CAPABILITIES = ImmutableSet.of(
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
+        CapabilityURN.BASE,
+        CapabilityURN.EXI);
 
     public static final Set<String> DEFAULT_CLIENT_CAPABILITIES = ImmutableSet.of(
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1);
+        CapabilityURN.BASE,
+        CapabilityURN.BASE_1_1);
 
-    public static final Set<String> LEGACY_FRAMING_CLIENT_CAPABILITIES = ImmutableSet.of(
-            XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0);
+    public static final Set<String> LEGACY_FRAMING_CLIENT_CAPABILITIES = ImmutableSet.of(CapabilityURN.BASE);
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfClientSessionNegotiatorFactory.class);
     private static final String START_EXI_MESSAGE_ID = "default-start-exi";
@@ -70,16 +66,16 @@ public class NetconfClientSessionNegotiatorFactory
     private final @NonNegative int maximumIncomingChunkSize;
     private final Set<String> clientCapabilities;
     private final long connectionTimeoutMillis;
-    private final Timer timer;
+    private final NetconfTimer timer;
     private final EXIParameters options;
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis) {
         this(timer, additionalHeader, connectionTimeoutMillis, DEFAULT_OPTIONS);
     }
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis,
                                                  final @NonNegative int maximumIncomingChunkSize) {
@@ -87,28 +83,28 @@ public class NetconfClientSessionNegotiatorFactory
             maximumIncomingChunkSize);
     }
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis, final Set<String> capabilities) {
         this(timer, additionalHeader, connectionTimeoutMillis, DEFAULT_OPTIONS, capabilities);
 
     }
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis, final EXIParameters exiOptions) {
         this(timer, additionalHeader, connectionTimeoutMillis, exiOptions, EXI_CLIENT_CAPABILITIES);
     }
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  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);
+            NetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
-    public NetconfClientSessionNegotiatorFactory(final Timer timer,
+    public NetconfClientSessionNegotiatorFactory(final NetconfTimer timer,
                                                  final Optional<NetconfHelloMessageAdditionalHeader> additionalHeader,
                                                  final long connectionTimeoutMillis, final EXIParameters exiOptions,
                                                  final Set<String> capabilities,
@@ -125,13 +121,20 @@ public class NetconfClientSessionNegotiatorFactory
         return connectionTimeoutMillis;
     }
 
-    @Override
+    /**
+     * Create a new negotiator attached to a channel, which will notify
+     * a promise once the negotiation completes.
+     *
+     * @param channel Underlying channel
+     * @param promise Promise to be notified
+     * @return new negotiator instance
+     */
     public NetconfClientSessionNegotiator getSessionNegotiator(
             final NetconfSessionListenerFactory<NetconfClientSessionListener> sessionListenerFactory,
             final Channel channel, final Promise<NetconfClientSession> promise) {
         return new NetconfClientSessionNegotiator(
             HelloMessage.createClientHello(clientCapabilities, additionalHeader),
-            NetconfStartExiMessage.create(options, START_EXI_MESSAGE_ID), promise, channel, timer,
+            NetconfStartExiMessageProvider.create(options, START_EXI_MESSAGE_ID), promise, channel, timer,
                 sessionListenerFactory.getSessionListener(), connectionTimeoutMillis, maximumIncomingChunkSize);
     }
 }