aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2014-08-27 22:12:52 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2014-08-27 22:12:52 +1200
commit82a47eee96b4098ebfffa1cea4e1cd7895511564 (patch)
tree64b27823a23c9ed54934f04d4e8a68a72b4706f1
parent2ba8c5218542ff71ff4087ddaefffa0fb572024d (diff)
downloadtrackermap-server-82a47eee96b4098ebfffa1cea4e1cd7895511564.tar.gz
trackermap-server-82a47eee96b4098ebfffa1cea4e1cd7895511564.tar.bz2
trackermap-server-82a47eee96b4098ebfffa1cea4e1cd7895511564.zip
Fix GT06 protocol decoder
-rw-r--r--src/org/traccar/protocol/Gt06ProtocolDecoder.java11
-rw-r--r--test/org/traccar/protocol/Gt06ProtocolDecoderTest.java51
2 files changed, 35 insertions, 27 deletions
diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
index 8851c0f3e..fef3e2f5b 100644
--- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java
+++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
@@ -62,6 +62,9 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
private static final int MSG_LBS_STATUS = 0x19;
private static final int MSG_GPS_PHONE = 0x1A;
private static final int MSG_GPS_LBS_EXTEND = 0x1E;
+ private static final int MSG_COMMAND_0 = 0x80;
+ private static final int MSG_COMMAND_1 = 0x81;
+ private static final int MSG_COMMAND_2 = 0x82;
private static void sendResponse(Channel channel, int type, int index) {
if (channel != null) {
@@ -88,7 +91,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
return null;
}
- int length = buf.readByte(); // size
+ int length = buf.readUnsignedByte(); // size
int dataLength = length - 5;
int type = buf.readUnsignedByte();
@@ -213,10 +216,12 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
position.setExtendedInfo(extendedInfo.toString());
return position;
}
-
+
else {
buf.skipBytes(dataLength);
- sendResponse(channel, type, buf.readUnsignedShort());
+ if (type != MSG_COMMAND_0 && type != MSG_COMMAND_1 && type != MSG_COMMAND_2) {
+ sendResponse(channel, type, buf.readUnsignedShort());
+ }
}
return null;
diff --git a/test/org/traccar/protocol/Gt06ProtocolDecoderTest.java b/test/org/traccar/protocol/Gt06ProtocolDecoderTest.java
index ac353c34a..7542bde61 100644
--- a/test/org/traccar/protocol/Gt06ProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/Gt06ProtocolDecoderTest.java
@@ -15,41 +15,44 @@ public class Gt06ProtocolDecoderTest {
Gt06ProtocolDecoder decoder = new Gt06ProtocolDecoder(null);
decoder.setDataManager(new TestDataManager());
- int[] buf1 = {0x78,0x78,0x11,0x01,0x01,0x23,0x45,0x67,0x89,0x01,0x23,0x45,0x10,0x0B,0x32,0x01,0x00,0x01,0x71,0x93,0x0D,0x0A};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf1))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x11,0x01,0x01,0x23,0x45,0x67,0x89,0x01,0x23,0x45,0x10,0x0B,0x32,0x01,0x00,0x01,0x71,0x93,0x0D,0x0A}))));
- int[] buf2 = {0x78,0x78,0x1F,0x12,0x0B,0x08,0x1D,0x11,0x2E,0x10,0xCC,0x02,0x7A,0xC7,0xEB,0x0C,0x46,0x58,0x49,0x00,0x14,0x8F,0x01,0xCC,0x00,0x28,0x7D,0x00,0x1F,0xB8,0x00,0x03,0x80,0x81,0x0D,0x0A};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf2))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x1F,0x12,0x0B,0x08,0x1D,0x11,0x2E,0x10,0xCC,0x02,0x7A,0xC7,0xEB,0x0C,0x46,0x58,0x49,0x00,0x14,0x8F,0x01,0xCC,0x00,0x28,0x7D,0x00,0x1F,0xB8,0x00,0x03,0x80,0x81,0x0D,0x0A}))));
- int[] buf3 = {0x78,0x78,0x0D,0x01,0x08,0x64,0x71,0x70,0x03,0x28,0x35,0x81,0x00,0x09,0x3F,0x04,0x0D,0x0A};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf3))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x0D,0x01,0x08,0x64,0x71,0x70,0x03,0x28,0x35,0x81,0x00,0x09,0x3F,0x04,0x0D,0x0A}))));
- int[] buf4 = {0x78,0x78,0x0D,0x01,0x01,0x23,0x45,0x67,0x89,0x01,0x23,0x45,0x00,0x01,0x8C,0xDD,0x0D,0x0A};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf4))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x0D,0x01,0x01,0x23,0x45,0x67,0x89,0x01,0x23,0x45,0x00,0x01,0x8C,0xDD,0x0D,0x0A}))));
- int[] buf5 = {0x78,0x78,0x0d,0x01,0x03,0x53,0x41,0x90,0x36,0x06,0x60,0x61,0x00,0x03,0xc3,0xdf,0x0d,0x0a};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf5))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x0d,0x01,0x03,0x53,0x41,0x90,0x36,0x06,0x60,0x61,0x00,0x03,0xc3,0xdf,0x0d,0x0a}))));
- int[] buf6 = {0x78,0x78,0x19,0x10,0x0B,0x03,0x1A,0x0B,0x1B,0x31,0xCC,0x02,0x7A,0xC7,0xFD,0x0C,0x46,0x57,0xBF,0x01,0x15,0x21,0x00,0x01,0x00,0x1C,0xC6,0x07,0x0D,0x0A};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf6))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x19,0x10,0x0B,0x03,0x1A,0x0B,0x1B,0x31,0xCC,0x02,0x7A,0xC7,0xFD,0x0C,0x46,0x57,0xBF,0x01,0x15,0x21,0x00,0x01,0x00,0x1C,0xC6,0x07,0x0D,0x0A}))));
- int[] buf7 = {0x78,0x78,0x21,0x12,0x0C,0x01,0x0C,0x0F,0x15,0x1F,0xCF,0x02,0x7A,0xC8,0x84,0x0C,0x46,0x57,0xEC,0x00,0x14,0x00,0x01,0xCC,0x00,0x28,0x7D,0x00,0x1F,0x72,0x00,0x01,0x00,0x0F,0x53,0xA0,0x0D,0x0A};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf7))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x21,0x12,0x0C,0x01,0x0C,0x0F,0x15,0x1F,0xCF,0x02,0x7A,0xC8,0x84,0x0C,0x46,0x57,0xEC,0x00,0x14,0x00,0x01,0xCC,0x00,0x28,0x7D,0x00,0x1F,0x72,0x00,0x01,0x00,0x0F,0x53,0xA0,0x0D,0x0A}))));
- int[] buf8 = {0x78,0x78,0x25,0x16,0x0B,0x05,0x1B,0x09,0x35,0x23,0xCF,0x02,0x7A,0xC8,0x36,0x0C,0x46,0x57,0xB3,0x00,0x14,0x00,0x09,0x01,0xCC,0x00,0x26,0x6A,0x00,0x1E,0x17,0x40,0x05,0x04,0x00,0x02,0x00,0x08,0xD7,0xB1,0x0D,0x0A};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf8))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x25,0x16,0x0B,0x05,0x1B,0x09,0x35,0x23,0xCF,0x02,0x7A,0xC8,0x36,0x0C,0x46,0x57,0xB3,0x00,0x14,0x00,0x09,0x01,0xCC,0x00,0x26,0x6A,0x00,0x1E,0x17,0x40,0x05,0x04,0x00,0x02,0x00,0x08,0xD7,0xB1,0x0D,0x0A}))));
- int[] buf9 = {0x78,0x78,0x11,0x01,0x08,0x64,0x71,0x70,0x03,0x66,0x44,0x67,0x10,0x0f,0x19,0x0a,0x00,0x02,0xc6,0xd2,0x0d,0x0a};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf9))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x11,0x01,0x08,0x64,0x71,0x70,0x03,0x66,0x44,0x67,0x10,0x0f,0x19,0x0a,0x00,0x02,0xc6,0xd2,0x0d,0x0a}))));
- int[] buf10 = {0x78,0x78,0x19,0x10,0x0e,0x01,0x09,0x03,0x23,0x0e,0xc8,0x03,0xae,0x32,0xa6,0x06,0x53,0xcd,0xed,0x00,0x18,0x00,0x00,0x02,0x00,0x72,0xfe,0xb7,0x0d,0x0a};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf10))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x19,0x10,0x0e,0x01,0x09,0x03,0x23,0x0e,0xc8,0x03,0xae,0x32,0xa6,0x06,0x53,0xcd,0xed,0x00,0x18,0x00,0x00,0x02,0x00,0x72,0xfe,0xb7,0x0d,0x0a}))));
- int[] buf11 = {0x78,0x78,0x47,0x1e,0x0e,0x03,0x11,0x0b,0x05,0x11,0xc5,0x01,0xc6,0x64,0xfd,0x07,0x4d,0xb7,0x3f,0x02,0x18,0xa6,0x02,0xe0,0x03,0x43,0x3a,0x00,0x2f,0xed,0x40,0x43,0x3a,0x00,0x56,0xe1,0x4e,0x43,0x3a,0x00,0x56,0x10,0x4e,0x43,0x3a,0x00,0x56,0xfd,0x53,0x43,0x3a,0x00,0x2e,0xed,0x55,0x43,0x3a,0x00,0x7e,0x4b,0x57,0x43,0x3a,0x00,0x2e,0xe2,0x5a,0xff,0x00,0x02,0x01,0x20,0xf6,0x72,0x0d,0x0a};
- verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf11))));
+ verify(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x47,0x1e,0x0e,0x03,0x11,0x0b,0x05,0x11,0xc5,0x01,0xc6,0x64,0xfd,0x07,0x4d,0xb7,0x3f,0x02,0x18,0xa6,0x02,0xe0,0x03,0x43,0x3a,0x00,0x2f,0xed,0x40,0x43,0x3a,0x00,0x56,0xe1,0x4e,0x43,0x3a,0x00,0x56,0x10,0x4e,0x43,0x3a,0x00,0x56,0xfd,0x53,0x43,0x3a,0x00,0x2e,0xed,0x55,0x43,0x3a,0x00,0x7e,0x4b,0x57,0x43,0x3a,0x00,0x2e,0xe2,0x5a,0xff,0x00,0x02,0x01,0x20,0xf6,0x72,0x0d,0x0a}))));
- int[] buf12 = {0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x2a,0x3b,0x24,0x0d,0x0a,0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x2d,0x4f,0x9b,0x0d,0x0a,0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x30,0x84,0xff,0x0d,0x0a};
- assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(buf12))));
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x2a,0x3b,0x24,0x0d,0x0a,0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x2d,0x4f,0x9b,0x0d,0x0a,0x79,0x79,0x00,0x5b,0xfd,0x03,0x58,0x89,0x90,0x50,0x92,0x77,0x25,0x00,0x4c,0x00,0x20,0xbf,0x98,0x43,0x58,0xdf,0x60,0x3b,0x2e,0xa3,0xa3,0x39,0xe5,0x43,0x35,0x01,0x3a,0x5b,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5d,0x47,0x54,0x30,0x36,0x44,0x5f,0x32,0x30,0x5f,0x36,0x30,0x44,0x4d,0x32,0x5f,0x42,0x32,0x35,0x45,0x5f,0x56,0x31,0x35,0x5f,0x57,0x4d,0x5b,0x42,0x55,0x49,0x4c,0x44,0x5d,0x32,0x30,0x31,0x33,0x2f,0x31,0x32,0x2f,0x32,0x38,0x20,0x31,0x35,0x3a,0x32,0x34,0x00,0x30,0x84,0xff,0x0d,0x0a}))));
+
+ assertNull(decoder.decode(null, null, ChannelBuffers.wrappedBuffer(ChannelBufferTools.convertArray(
+ new int[] {0x78,0x78,0x8b,0x81,0x83,0x00,0x00,0x00,0x00,0x53,0x45,0x45,0x46,0x4e,0x26,0x26,0x00,0x4f,0x04,0x22,0x00,0x45,0x04,0x26,0x26,0x26,0x2b,0x37,0x39,0x30,0x35,0x34,0x30,0x31,0x35,0x35,0x34,0x36,0x26,0x26,0x26,0x26,0x26,0x26,0x04,0x10,0x04,0x1b,0x04,0x15,0x04,0x1a,0x04,0x21,0x04,0x15,0x04,0x19,0x26,0x26,0x2b,0x37,0x39,0x30,0x36,0x34,0x33,0x33,0x30,0x31,0x31,0x35,0x26,0x26,0x04,0x10,0x04,0x3d,0x04,0x4f,0x26,0x26,0x2b,0x37,0x39,0x36,0x30,0x34,0x37,0x38,0x34,0x30,0x36,0x34,0x26,0x26,0x04,0x12,0x04,0x3e,0x04,0x32,0x04,0x30,0x26,0x26,0x2b,0x37,0x39,0x32,0x38,0x38,0x34,0x37,0x37,0x38,0x38,0x31,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x23,0x23,0x00,0x02,0x00,0x22,0x15,0x5d,0x0d,0x0a}))));
}