aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2023-07-20 06:48:50 -0700
committerAnton Tananaev <anton@traccar.org>2023-07-20 06:55:36 -0700
commit6631d7c4b3522e81af563e3ac82131a6e5c50b89 (patch)
tree84f34380fb407c5bc5d963eb524b604a5e601268 /src/main/java
parentf1470e56708b66c805e63619209930e83116f4ea (diff)
downloadtrackermap-server-6631d7c4b3522e81af563e3ac82131a6e5c50b89.tar.gz
trackermap-server-6631d7c4b3522e81af563e3ac82131a6e5c50b89.tar.bz2
trackermap-server-6631d7c4b3522e81af563e3ac82131a6e5c50b89.zip
Improve RF-V48 frame decoding
Diffstat (limited to 'src/main/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;
}