aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/WatchFrameDecoder.java6
-rw-r--r--test/org/traccar/protocol/WatchFrameDecoderTest.java4
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("]"))));
+
}
}