diff options
-rw-r--r-- | src/org/traccar/protocol/WatchFrameDecoder.java | 6 | ||||
-rw-r--r-- | test/org/traccar/protocol/WatchFrameDecoderTest.java | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/org/traccar/protocol/WatchFrameDecoder.java b/src/org/traccar/protocol/WatchFrameDecoder.java index b2ac5b4f7..b4a82c0be 100644 --- a/src/org/traccar/protocol/WatchFrameDecoder.java +++ b/src/org/traccar/protocol/WatchFrameDecoder.java @@ -33,7 +33,8 @@ public class WatchFrameDecoder extends BaseFrameDecoder { while (buf.readerIndex() < endIndex) { byte b = buf.readByte(); if (b == '}') { - switch (buf.readByte()) { + byte c = buf.readByte(); + switch (c) { case 0x01: frame.writeByte('}'); break; @@ -50,7 +51,8 @@ public class WatchFrameDecoder extends BaseFrameDecoder { frame.writeByte('*'); break; default: - throw new IllegalArgumentException(); + throw new IllegalArgumentException(String.format( + "unexpected byte at %d: 0x%02x", buf.readerIndex() - 1, c)); } } else { frame.writeByte(b); diff --git a/test/org/traccar/protocol/WatchFrameDecoderTest.java b/test/org/traccar/protocol/WatchFrameDecoderTest.java index 741807de2..4e40eea86 100644 --- a/test/org/traccar/protocol/WatchFrameDecoderTest.java +++ b/test/org/traccar/protocol/WatchFrameDecoderTest.java @@ -26,6 +26,10 @@ public class WatchFrameDecoderTest extends ProtocolTest { binary("5b5a4a2a3031343131313030313335303330342a303033342a303030392a4c4b2c302c302c31395d"), decoder.decode(null, null, binary("5b5a4a2a3031343131313030313335303330342a303033342a303030392a4c4b2c302c302c31395d"))); + verifyFrame( + concatenateBuffers(buffer("[CS*1234567890*000e*TK,#!AMR"), binary("7d5b5d2c2aff"), buffer("]")), + decoder.decode(null, null, concatenateBuffers(buffer("[CS*1234567890*000e*TK,#!AMR"), binary("7d017d027d037d047d05ff"), buffer("]")))); + } } |