You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/03/10 20:31:47 UTC

[plc4x] 01/03: - Changed the GeneratedDriverByteToMessageCodec to also call the corrupt package consumer if something goes wrong in the packet size estimation.

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 0d9eb89d47cb6b11828fdc73c34591f5905c9daa
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Mar 10 16:37:20 2020 +0100

    - Changed the GeneratedDriverByteToMessageCodec to also call the corrupt package consumer if something goes wrong in the packet size estimation.
---
 .../spi/GeneratedDriverByteToMessageCodec.java     | 27 ++++++++++++----------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/GeneratedDriverByteToMessageCodec.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/GeneratedDriverByteToMessageCodec.java
index 3f9cc10..b326b77 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/GeneratedDriverByteToMessageCodec.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/GeneratedDriverByteToMessageCodec.java
@@ -59,18 +59,19 @@ public abstract class GeneratedDriverByteToMessageCodec<T extends Message> exten
         logger.trace("Receiving bytes, trying to decode Message...");
         // As long as there is data available, continue checking the content.
         while(byteBuf.readableBytes() > 0) {
-            // Check if enough data is present to process the entire package.
-            int packetSize = getPacketSize(byteBuf);
-            if(packetSize == -1 || packetSize > byteBuf.readableBytes()) {
-                return;
-            }
+            byte[] bytes = null;
+            try {
+                // Check if enough data is present to process the entire package.
+                int packetSize = getPacketSize(byteBuf);
+                if(packetSize == -1 || packetSize > byteBuf.readableBytes()) {
+                    return;
+                }
 
-            // Read the packet data into a new ReadBuffer
-            byte[] bytes = new byte[packetSize];
-            byteBuf.readBytes(bytes);
-            ReadBuffer readBuffer = new ReadBuffer(bytes, !bigEndian);
+                // Read the packet data into a new ReadBuffer
+                bytes = new byte[packetSize];
+                byteBuf.readBytes(bytes);
+                ReadBuffer readBuffer = new ReadBuffer(bytes, !bigEndian);
 
-            try {
                 // Parse the packet.
                 T packet = io.parse(readBuffer, parserArgs);
 
@@ -83,8 +84,10 @@ public abstract class GeneratedDriverByteToMessageCodec<T extends Message> exten
                     return;
                 }
             } catch (Exception e) {
-                logger.warn("Error decoding package with content [" + Hex.encodeHexString(bytes) + "]: "
-                    + e.getMessage(), e);
+                if(bytes != null) {
+                    logger.warn("Error decoding package with content [" + Hex.encodeHexString(bytes) + "]: "
+                        + e.getMessage(), e);
+                }
                 // Just remove any trailing junk ... if there is any.
                 removeRestOfCorruptPackage(byteBuf);
             }