Move NetconfServerDispatcher to netconf.server.api
[netconf.git] / netconf / mdsal-netconf-tcp / src / main / java / org / opendaylight / netconf / tcp / NetconfNorthboundTcpServer.java
index 423e65e14e5eb7ec988672c8269e7e84a03dbd3e..b1fe4a48d2846c7ecdbc86d5a9273cb5969baca7 100644 (file)
@@ -8,26 +8,47 @@
 package org.opendaylight.netconf.tcp;
 
 import io.netty.channel.ChannelFuture;
-import java.net.InetAddress;
 import java.net.InetSocketAddress;
-import org.opendaylight.netconf.api.NetconfServerDispatcher;
+import org.opendaylight.netconf.server.api.NetconfServerDispatcher;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Create an MD-SAL NETCONF server using TCP.
  */
-public class NetconfNorthboundTcpServer implements AutoCloseable {
+@Component(service = { }, configurationPid = "org.opendaylight.netconf.tcp", enabled = false)
+@Designate(ocd = NetconfNorthboundTcpServer.Configuration.class)
+public final class NetconfNorthboundTcpServer implements AutoCloseable {
+    @ObjectClassDefinition
+    public @interface Configuration {
+        @AttributeDefinition
+        String bindingAddress() default "0.0.0.0";
+        @AttributeDefinition(min = "1", max = "65535")
+        int portNumber() default 2831;
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(NetconfNorthboundTcpServer.class);
 
     private final ChannelFuture tcpServer;
 
-    public NetconfNorthboundTcpServer(final NetconfServerDispatcher netconfServerDispatcher, final String address,
-            final String port) {
+    @Activate
+    public NetconfNorthboundTcpServer(
+            @Reference(target = "(type=netconf-server-dispatcher)") final NetconfServerDispatcher serverDispatcher,
+            final Configuration configuration) {
+        this(serverDispatcher, configuration.bindingAddress(), configuration.portNumber());
+    }
+
+    public NetconfNorthboundTcpServer(final NetconfServerDispatcher serverDispatcher, final String address,
+            final int port) {
         final InetSocketAddress inetAddress = getInetAddress(address, port);
-        tcpServer = netconfServerDispatcher.createServer(inetAddress);
+        tcpServer = serverDispatcher.createServer(inetAddress);
         tcpServer.addListener(future -> {
             if (future.isDone() && future.isSuccess()) {
                 LOG.info("Netconf TCP endpoint started successfully at {}", inetAddress);
@@ -38,12 +59,6 @@ public class NetconfNorthboundTcpServer implements AutoCloseable {
         });
     }
 
-    private static InetSocketAddress getInetAddress(final String bindingAddress, final String portNumber) {
-        final IpAddress ipAddress = IetfInetUtil.ipAddressFor(bindingAddress);
-        final InetAddress inetAd = IetfInetUtil.INSTANCE.inetAddressFor(ipAddress);
-        return new InetSocketAddress(inetAd, Integer.parseInt(portNumber));
-    }
-
     @Override
     public void close() {
         if (tcpServer.isDone()) {
@@ -52,4 +67,9 @@ public class NetconfNorthboundTcpServer implements AutoCloseable {
             tcpServer.cancel(true);
         }
     }
+
+    private static InetSocketAddress getInetAddress(final String bindingAddress, final int portNumber) {
+        final var inetAd = IetfInetUtil.INSTANCE.inetAddressFor(IetfInetUtil.ipAddressFor(bindingAddress));
+        return new InetSocketAddress(inetAd, portNumber);
+    }
 }