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

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

commit 572e16bcf7287bebf47c501152675ff37854fc65
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Wed Jun 13 09:45:55 2018 +0200

    ADS/AMS log unexpected frames
---
 .../plc4x/java/ads/api/serial/types/FragmentNumber.java    | 14 ++++++++++++++
 .../plc4x/java/ads/protocol/Payload2SerialProtocol.java    |  7 +++++++
 .../Payload2SerialProtocolExampleConversationTest.java     |  4 ++++
 3 files changed, 25 insertions(+)

diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java
index 808049a..6c43809 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/types/FragmentNumber.java
@@ -21,6 +21,9 @@ package org.apache.plc4x.java.ads.api.serial.types;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.util.ByteValue;
 
+import static java.lang.Integer.toHexString;
+import static org.apache.commons.lang3.StringUtils.leftPad;
+
 public class FragmentNumber extends ByteValue {
 
     public static final int NUM_BYTES = 1;
@@ -41,4 +44,15 @@ public class FragmentNumber extends ByteValue {
         return new FragmentNumber(byteBuf);
     }
 
+    public byte getAsByte() {
+        return getBytes()[0];
+    }
+
+    @Override
+    public String toString() {
+        return super.toString() + "{" +
+            "byteValue=" + (getAsByte() & 0xFF) +
+            ",hexValue=0x" + leftPad(toHexString(getAsByte() & 0xFF), 
NUM_BYTES * 2, "0") +
+            "}";
+    }
 }
\ No newline at end of file
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
index 70a7932..95193d0 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocol.java
@@ -70,6 +70,13 @@ public class Payload2SerialProtocol extends 
MessageToMessageCodec<ByteBuf, ByteB
         TransmitterAddress transmitterAddress = TransmitterAddress.of(byteBuf);
         ReceiverAddress receiverAddress = ReceiverAddress.of(byteBuf);
         FragmentNumber fragmentNumber = FragmentNumber.of(byteBuf);
+        int expectedFrameNumber = fragmentCounter.get() - 1;
+        if (expectedFrameNumber < 0) {
+            expectedFrameNumber = 255;
+        }
+        if (fragmentNumber.getAsByte() != expectedFrameNumber) {
+            LOGGER.warn("Unexpected fragment {} received. Expected {}", 
fragmentNumber, expectedFrameNumber);
+        }
         UserDataLength userDataLength = UserDataLength.of(byteBuf);
         UserData userData;
         byte userDataLengthAsByte = userDataLength.getAsByte();
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocolExampleConversationTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocolExampleConversationTest.java
index 06b1a21..1f58276 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocolExampleConversationTest.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Payload2SerialProtocolExampleConversationTest.java
@@ -25,6 +25,7 @@ import io.netty.channel.ChannelHandlerContext;
 import io.netty.util.concurrent.EventExecutor;
 import io.netty.util.concurrent.ScheduledFuture;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.plc4x.java.ads.api.commands.AdsReadRequest;
 import org.apache.plc4x.java.ads.api.commands.AdsReadResponse;
 import org.apache.plc4x.java.ads.api.commands.types.*;
@@ -48,6 +49,7 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.plc4x.java.ads.util.Assert.byteArrayEqualsTo;
 import static org.mockito.Mockito.*;
@@ -68,6 +70,7 @@ public class Payload2SerialProtocolExampleConversationTest {
     public void setUp() {
         ExecutorService executorService = Executors.newFixedThreadPool(10);
         channelHandlerContextMock = mock(ChannelHandlerContext.class, 
RETURNS_DEEP_STUBS);
+        
when(channelHandlerContextMock.toString()).thenReturn("ChannelHandlerContextMock");
         when(channelHandlerContextMock.executor()).then(_ign -> {
             EventExecutor eventExecutor = mock(EventExecutor.class);
             when(eventExecutor.schedule(any(Callable.class), anyLong(), any()))
@@ -124,6 +127,7 @@ public class Payload2SerialProtocolExampleConversationTest {
 
     @Test
     public void exampleConversation() throws Exception {
+        FieldUtils.writeDeclaredField(SUT, "fragmentCounter", new 
AtomicInteger(6), true);
         // 1. Terminal --> PLC : Request of 2 bytre data
         int[] exampleRequestInt = {
             /*Magic Cookie    */    0x01, 0xA5,

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

Reply via email to