You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/02/02 13:16:37 UTC

[incubator-plc4x] branch feature/Beckhoff_ADS_protocol updated: Added possibility to supply optional port. Can be used for Unit-Tests and tunneling.

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/Beckhoff_ADS_protocol
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git


The following commit(s) were added to refs/heads/feature/Beckhoff_ADS_protocol by this push:
     new b1824a5  Added possibility to supply optional port. Can be used for Unit-Tests and tunneling.
b1824a5 is described below

commit b1824a53fd0eb52f4678c53188ef07e59fa4701e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Feb 2 14:16:32 2018 +0100

    Added possibility to supply optional port.
    Can be used for Unit-Tests and tunneling.
---
 .../main/java/org/apache/plc4x/java/ads/ADSPlcDriver.java | 11 +++++++----
 .../plc4x/java/ads/connection/ADSPlcConnection.java       | 15 ++++++++++++++-
 .../java/org/apache/plc4x/java/ads/ADSPlcDriverTest.java  |  4 ++--
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/ADSPlcDriver.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/ADSPlcDriver.java
index 2b9b3b6..0210f99 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/ADSPlcDriver.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/ADSPlcDriver.java
@@ -18,6 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.ads;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.connection.ADSPlcConnection;
@@ -41,7 +42,7 @@ public class ADSPlcDriver implements PlcDriver {
             + "(/"
             + "(?<sourceAmsNetId>" + AMSNetId.AMS_NET_ID_PATTERN + "):(?<sourceAmsPort>" + AMSPort.AMS_PORT_PATTERN + ")"
             + ")?");
-    private static final Pattern ADS_URI_PATTERN = Pattern.compile("^ads://(?<host>\\w+)/" + ADS_ADDRESS_PATTERN);
+    private static final Pattern ADS_URI_PATTERN = Pattern.compile("^ads://(?<host>\\w+)(:(?<port>\\d*))?/" + ADS_ADDRESS_PATTERN);
 
     @Override
     public String getProtocolCode() {
@@ -61,13 +62,15 @@ public class ADSPlcDriver implements PlcDriver {
                 "Connection url " + url + " doesn't match 'ads://{host|ip}/{targetAmsNetId}:{targetAmsPort}/{sourceAmsNetId}:{sourceAmsPort}' RAW:" + ADS_URI_PATTERN);
         }
         String host = matcher.group("host");
+        String portString = matcher.group("port");
+        Integer port = StringUtils.isNotBlank(portString) ? Integer.parseInt(portString) : null;
         AMSNetId targetAmsNetId = AMSNetId.of(matcher.group("targetAmsNetId"));
         AMSPort targetAmsPort = AMSPort.of(matcher.group("targetAmsPort"));
         String sourceAmsNetIdString = matcher.group("sourceAmsNetId");
-        AMSNetId sourceAmsNetId = sourceAmsNetIdString != null ? AMSNetId.of(sourceAmsNetIdString) : null;
+        AMSNetId sourceAmsNetId = StringUtils.isNotBlank(sourceAmsNetIdString) ? AMSNetId.of(sourceAmsNetIdString) : null;
         String sourceAmsPortString = matcher.group("sourceAmsPort");
-        AMSPort sourceAmsPort = sourceAmsPortString != null ? AMSPort.of(sourceAmsPortString) : null;
-        return new ADSPlcConnection(host, targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
+        AMSPort sourceAmsPort = StringUtils.isNotBlank(sourceAmsPortString) ? AMSPort.of(sourceAmsPortString) : null;
+        return new ADSPlcConnection(host, port, targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
     }
 
     @Override
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
index 70a78a4..82be0de 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
@@ -36,6 +36,7 @@ import org.apache.plc4x.java.api.model.Address;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -46,6 +47,8 @@ public class ADSPlcConnection extends AbstractPlcConnection implements PlcReader
 
     private final String hostName;
 
+    private final Optional<Integer> suppliedPort;
+
     private final AMSNetId targetAmsNetId;
 
     private final AMSPort targetAmsPort;
@@ -61,8 +64,18 @@ public class ADSPlcConnection extends AbstractPlcConnection implements PlcReader
         this(hostName, targetAmsNetId, targetAmsPort, null, null);
     }
 
+    public ADSPlcConnection(String hostName, Integer port, AMSNetId targetAmsNetId, AMSPort targetAmsPort) {
+        this(hostName, port, targetAmsNetId, targetAmsPort, null, null);
+    }
+
+
     public ADSPlcConnection(String hostName, AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort) {
+        this(hostName, null, targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
+    }
+
+    public ADSPlcConnection(String hostName, Integer port, AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort) {
         this.hostName = hostName;
+        this.suppliedPort = Optional.ofNullable(port);
         this.targetAmsNetId = targetAmsNetId;
         this.targetAmsPort = targetAmsPort;
         this.sourceAmsNetId = sourceAmsNetId;
@@ -110,7 +123,7 @@ public class ADSPlcConnection extends AbstractPlcConnection implements PlcReader
                 }
             });
             // Start the client.
-            ChannelFuture f = bootstrap.connect(serverInetAddress, TCP_PORT).sync();
+            ChannelFuture f = bootstrap.connect(serverInetAddress, suppliedPort.orElse(TCP_PORT)).sync();
             f.awaitUninterruptibly();
             // Wait till the session is finished initializing.
             channel = f.channel();
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSPlcDriverTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSPlcDriverTest.java
index 021de10..ae19173 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSPlcDriverTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSPlcDriverTest.java
@@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@ExtendWithTcpHexDumper(port = ADSPlcConnection.TCP_PORT, shutdownTimeout = 3)
+@ExtendWithTcpHexDumper(shutdownTimeout = 3)
 public class ADSPlcDriverTest {
 
     private static final Logger logger = LoggerFactory.getLogger(ADSPlcDriverTest.class);
@@ -45,7 +45,7 @@ public class ADSPlcDriverTest {
     @Tag("fast")
     void getConnection() throws Exception {
         ADSPlcConnection adsConnection = (ADSPlcConnection)
-            new PlcDriverManager().getConnection("ads://localhost/0.0.0.0.0.0:13");
+            new PlcDriverManager().getConnection("ads://localhost:" + usedPort + "/0.0.0.0.0.0:13");
         Assertions.assertEquals(adsConnection.getHostName(), "localhost");
         Assertions.assertEquals(adsConnection.getTargetAmsNetId().toString(), "0.0.0.0.0.0");
         Assertions.assertEquals(adsConnection.getTargetAmsPort().toString(), "13");

-- 
To stop receiving notification emails like this one, please contact
sruehl@apache.org.