diff options
author | Ivan Muratov <binakot@gmail.com> | 2017-07-14 13:31:24 +0300 |
---|---|---|
committer | Ivan Muratov <binakot@gmail.com> | 2017-07-14 13:31:24 +0300 |
commit | fb8c8f17435c43bb918d0b25dfe0e7ead17ff42d (patch) | |
tree | 7c83f7f3d5fe02b1dc02a0cb0f3e5e93e85e59f4 /src/org/traccar/protocol/Arnavi4FrameDecoder.java | |
parent | 6c7ef5fad28f65b1bf2693c25759517d69317f6e (diff) | |
parent | c8f648e0261ad46e9301db35f161140aabad880a (diff) | |
download | trackermap-server-fb8c8f17435c43bb918d0b25dfe0e7ead17ff42d.tar.gz trackermap-server-fb8c8f17435c43bb918d0b25dfe0e7ead17ff42d.tar.bz2 trackermap-server-fb8c8f17435c43bb918d0b25dfe0e7ead17ff42d.zip |
Merge branch 'arnavi4_remarks'
Diffstat (limited to 'src/org/traccar/protocol/Arnavi4FrameDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/Arnavi4FrameDecoder.java | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/org/traccar/protocol/Arnavi4FrameDecoder.java b/src/org/traccar/protocol/Arnavi4FrameDecoder.java index a50ece641..bb130e6bb 100644 --- a/src/org/traccar/protocol/Arnavi4FrameDecoder.java +++ b/src/org/traccar/protocol/Arnavi4FrameDecoder.java @@ -50,10 +50,18 @@ public class Arnavi4FrameDecoder extends FrameDecoder { return buf.readBytes(HEADER_LENGTH); } - int parcelNumber = buf.getByte(1) & 0xFF; - if (buf.getByte(0) == PACKAGE_START_SIGN && buf.getByte(buf.readableBytes() - 1) == PACKAGE_END_SIGN - && parcelNumber >= PACKAGE_MIN_PARCEL_NUMBER && parcelNumber <= PACKAGE_MAX_PARCEL_NUMBER) { - return buf; + int index = buf.getByte(1) & 0xFF; // parcel number + if (buf.getByte(0) == PACKAGE_START_SIGN + && index >= PACKAGE_MIN_PARCEL_NUMBER && index <= PACKAGE_MAX_PARCEL_NUMBER) { + + // package: 1 byte start sign, 1 byte parcel number, packets, 1 byte end sign + int packetStartIndex = 2; + while (packetStartIndex + 8 < buf.readableBytes() && buf.getByte(packetStartIndex) != PACKAGE_END_SIGN) { + // packet: 1 byte type, 2 bytes length, 4 bytes unixtime, length-bytes data, 1 byte crc + packetStartIndex += buf.getUnsignedShort(packetStartIndex + 1) + 8; + } + + return buf.readBytes(packetStartIndex + 1); } return null; |