diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2022-09-21 09:57:52 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-21 09:57:52 -0700 |
commit | d5b1385596f79da2514ea7cccf27e9bdeebcacae (patch) | |
tree | f7b2d44f09dee52c09c2c7e2384f0c27f1e65fa1 /src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java | |
parent | 561647947118a86256dbb584f6da450334462739 (diff) | |
parent | 7aa230b9ddcd5540e7ff9c9b3d9bcf5119175c46 (diff) | |
download | trackermap-server-d5b1385596f79da2514ea7cccf27e9bdeebcacae.tar.gz trackermap-server-d5b1385596f79da2514ea7cccf27e9bdeebcacae.tar.bz2 trackermap-server-d5b1385596f79da2514ea7cccf27e9bdeebcacae.zip |
Merge pull request #4912 from stefanclark/Xexun2Encoder
Implement Xexun2 encoder
Diffstat (limited to 'src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java')
-rw-r--r-- | src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java index 28e7fbda3..913dfaf28 100644 --- a/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.traccar.session.DeviceSession; import org.traccar.NetworkMessage; import org.traccar.Protocol; import org.traccar.helper.BitUtil; +import org.traccar.helper.Checksum; import org.traccar.helper.UnitsConverter; import org.traccar.model.CellTower; import org.traccar.model.Network; @@ -41,13 +42,14 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { super(protocol); } + public static final int FLAG = 0xfaaf; + public static final int MSG_COMMAND = 0x07; public static final int MSG_POSITION = 0x14; private void sendResponse(Channel channel, int type, int index, ByteBuf imei) { if (channel != null) { ByteBuf response = Unpooled.buffer(); - response.writeByte(0xfa); - response.writeByte(0xaf); + response.writeShort(FLAG); response.writeShort(type); response.writeShort(index); @@ -56,8 +58,7 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { response.writeShort(0xfffe); // checksum response.writeByte(1); // response - response.writeByte(0xfa); - response.writeByte(0xaf); + response.writeShort(FLAG); channel.writeAndFlush(new NetworkMessage(response, channel.remoteAddress())); } @@ -99,10 +100,16 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { return null; } - sendResponse(channel, type, index, imei); + int payloadSize = buf.readUnsignedShort() & 0x03ff; + int checksum = buf.readUnsignedShort(); - buf.readUnsignedShort(); // attributes - buf.readUnsignedShort(); // checksum + if (checksum != Checksum.ip(buf.nioBuffer(buf.readerIndex(), payloadSize))) { + return null; + } + + if (type != MSG_COMMAND) { + sendResponse(channel, type, index, imei); + } if (type == MSG_POSITION) { List<Integer> lengths = new ArrayList<>(); |