From 42cf2358fefa5176a3c72478a778ae382c9e1836 Mon Sep 17 00:00:00 2001 From: Christoph Krey Date: Thu, 29 Jun 2017 13:10:16 +0200 Subject: [FIX] Aplicom protocol does not ignore Alive messages #3305 --- src/org/traccar/protocol/AplicomFrameDecoder.java | 5 +++++ .../traccar/protocol/AplicomFrameDecoderTest.java | 24 ++++++++++++++++++++++ .../protocol/AplicomProtocolDecoderTest.java | 4 ++++ 3 files changed, 33 insertions(+) create mode 100644 test/org/traccar/protocol/AplicomFrameDecoderTest.java diff --git a/src/org/traccar/protocol/AplicomFrameDecoder.java b/src/org/traccar/protocol/AplicomFrameDecoder.java index 785d90767..e12848f8f 100644 --- a/src/org/traccar/protocol/AplicomFrameDecoder.java +++ b/src/org/traccar/protocol/AplicomFrameDecoder.java @@ -26,6 +26,11 @@ public class AplicomFrameDecoder extends FrameDecoder { protected Object decode( ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf) throws Exception { + // Skip Alive message + while (buf.readableBytes() > 0 && Character.isDigit(buf.getByte(buf.readerIndex()))) { + buf.readByte(); + } + // Check minimum length if (buf.readableBytes() < 11) { return null; diff --git a/test/org/traccar/protocol/AplicomFrameDecoderTest.java b/test/org/traccar/protocol/AplicomFrameDecoderTest.java new file mode 100644 index 000000000..e000674db --- /dev/null +++ b/test/org/traccar/protocol/AplicomFrameDecoderTest.java @@ -0,0 +1,24 @@ +package org.traccar.protocol; + +import org.junit.Assert; +import org.junit.Test; +import org.traccar.ProtocolTest; + +public class AplicomFrameDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + AplicomFrameDecoder decoder = new AplicomFrameDecoder(); + + Assert.assertEquals( + binary("44C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"), + decoder.decode(null, null, binary("33353733303030373030393233333644C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"))); + + Assert.assertEquals( + binary("44C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"), + decoder.decode(null, null, binary("44C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"))); + + } + +} diff --git a/test/org/traccar/protocol/AplicomProtocolDecoderTest.java b/test/org/traccar/protocol/AplicomProtocolDecoderTest.java index 3c71e86b3..51002924d 100644 --- a/test/org/traccar/protocol/AplicomProtocolDecoderTest.java +++ b/test/org/traccar/protocol/AplicomProtocolDecoderTest.java @@ -8,6 +8,7 @@ public class AplicomProtocolDecoderTest extends ProtocolTest { @Test public void testDecode() throws Exception { + AplicomFrameDecoder frameDecoder = new AplicomFrameDecoder(); AplicomProtocolDecoder decoder = new AplicomProtocolDecoder(new AplicomProtocol()); verifyAttributes(decoder, binary( @@ -70,6 +71,9 @@ public class AplicomProtocolDecoderTest extends ProtocolTest { verifyPosition(decoder, binary( "44C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C")); + verifyPosition(decoder, frameDecoder.decode(null, null, + binary("33353733303030373030393233333644C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"))); + } } -- cgit v1.2.3 From 2a3e2325885adbd76818170b935ee6de85e0ea1a Mon Sep 17 00:00:00 2001 From: Christoph Krey Date: Fri, 30 Jun 2017 08:10:20 +0200 Subject: [FIX] don't test frame decoder in protocol decoder test --- test/org/traccar/protocol/AplicomProtocolDecoderTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/org/traccar/protocol/AplicomProtocolDecoderTest.java b/test/org/traccar/protocol/AplicomProtocolDecoderTest.java index 51002924d..3c71e86b3 100644 --- a/test/org/traccar/protocol/AplicomProtocolDecoderTest.java +++ b/test/org/traccar/protocol/AplicomProtocolDecoderTest.java @@ -8,7 +8,6 @@ public class AplicomProtocolDecoderTest extends ProtocolTest { @Test public void testDecode() throws Exception { - AplicomFrameDecoder frameDecoder = new AplicomFrameDecoder(); AplicomProtocolDecoder decoder = new AplicomProtocolDecoder(new AplicomProtocol()); verifyAttributes(decoder, binary( @@ -71,9 +70,6 @@ public class AplicomProtocolDecoderTest extends ProtocolTest { verifyPosition(decoder, binary( "44C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C")); - verifyPosition(decoder, frameDecoder.decode(null, null, - binary("33353733303030373030393233333644C20146B710C158DA009500B09F7700C054CA0EA454CA0EA403BE0BF6015D706B070000142A600000000000000002434946010801000754CA0EA4000000000000008400000000000000000000000000000000300000FE00FE0000000000000000000000000000000000000000000000000000000000000000000040502035000000000000020D0000030D0000040C0000040D0000050C0000050D0000058C0000060C"))); - } } -- cgit v1.2.3 From c12a28b811b3310eab5942e9c3650d50c2df1606 Mon Sep 17 00:00:00 2001 From: Christoph Krey Date: Fri, 30 Jun 2017 08:38:20 +0200 Subject: [FIX] use readable() instead of testing readableBytes() --- src/org/traccar/protocol/AplicomFrameDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/traccar/protocol/AplicomFrameDecoder.java b/src/org/traccar/protocol/AplicomFrameDecoder.java index e12848f8f..24d55f1cf 100644 --- a/src/org/traccar/protocol/AplicomFrameDecoder.java +++ b/src/org/traccar/protocol/AplicomFrameDecoder.java @@ -27,7 +27,7 @@ public class AplicomFrameDecoder extends FrameDecoder { ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf) throws Exception { // Skip Alive message - while (buf.readableBytes() > 0 && Character.isDigit(buf.getByte(buf.readerIndex()))) { + while (buf.readable() && Character.isDigit(buf.getByte(buf.readerIndex()))) { buf.readByte(); } -- cgit v1.2.3