aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/protocol/WatchFrameDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/protocol/WatchFrameDecoder.java')
-rw-r--r--src/main/java/org/traccar/protocol/WatchFrameDecoder.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/main/java/org/traccar/protocol/WatchFrameDecoder.java b/src/main/java/org/traccar/protocol/WatchFrameDecoder.java
index ec67aa34d..9dfae8726 100644
--- a/src/main/java/org/traccar/protocol/WatchFrameDecoder.java
+++ b/src/main/java/org/traccar/protocol/WatchFrameDecoder.java
@@ -27,9 +27,21 @@ public class WatchFrameDecoder extends BaseFrameDecoder {
protected Object decode(
ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {
+ int brackets = 0;
int endIndex = -1;
- for (int i = buf.writerIndex() - 1; i >= buf.readerIndex(); i--) {
- if (buf.getByte(i) == ']') {
+ for (int i = buf.readerIndex(); i < buf.writerIndex(); i++) {
+ byte b = buf.getByte(i);
+ switch (b) {
+ case '[':
+ brackets += 1;
+ break;
+ case ']':
+ brackets -= 1;
+ break;
+ default:
+ break;
+ }
+ if (brackets == 0 && i > buf.readerIndex()) {
endIndex = i + 1;
break;
}