From 91d6491b438ecddbe63a49de26a76cd8f7309650 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 17 Oct 2015 10:51:03 +1300 Subject: Properly decode pseudo IP address --- src/org/traccar/protocol/GatorProtocolDecoder.java | 21 +++++++++++++-------- .../traccar/protocol/GatorProtocolDecoderTest.java | 10 +++++++++- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/org/traccar/protocol/GatorProtocolDecoder.java b/src/org/traccar/protocol/GatorProtocolDecoder.java index b8431003b..f132e82d2 100644 --- a/src/org/traccar/protocol/GatorProtocolDecoder.java +++ b/src/org/traccar/protocol/GatorProtocolDecoder.java @@ -18,10 +18,8 @@ package org.traccar.protocol; import java.net.SocketAddress; import java.util.Calendar; import java.util.TimeZone; - import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Channel; - import org.traccar.BaseProtocolDecoder; import org.traccar.helper.ChannelBufferTools; import org.traccar.helper.UnitsConverter; @@ -45,6 +43,17 @@ public class GatorProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_PICTURE_FRAME = 0x54; public static final int MSG_CAMERA_RESPONSE = 0x56; public static final int MSG_PICTURE_DATA = 0x57; + + public static String decodeId(int b1, int b2, int b3, int b4) { + + int d1 = 30 + ((b1 >> 7) << 3) + ((b2 >> 7) << 2) + ((b3 >> 7) << 1) + (b4 >> 7); + int d2 = b1 & 0x7f; + int d3 = b2 & 0x7f; + int d4 = b3 & 0x7f; + int d5 = b4 & 0x7f; + + return String.format("%02d%02d%02d%02d%02d", d1, d2, d3, d4, d5); + } @Override protected Object decode( @@ -57,21 +66,17 @@ public class GatorProtocolDecoder extends BaseProtocolDecoder { int type = buf.readUnsignedByte(); buf.readUnsignedShort(); // length - // Pseudo IP address - String id = String.format("%02d%02d%02d%02d", + String id = decodeId( buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte()); - id = id.replaceFirst("^0+(?!$)", ""); if (type == MSG_POSITION_DATA || type == MSG_ROLLCALL_RESPONSE || type == MSG_ALARM_DATA || type == MSG_BLIND_AREA) { - // Create new position Position position = new Position(); position.setProtocol(getProtocolName()); - // Identification - if (!identify(id, channel)) { + if (!identify("1" + id, channel, null, false) && !identify(id, channel)) { return null; } position.setDeviceId(getDeviceId()); diff --git a/test/org/traccar/protocol/GatorProtocolDecoderTest.java b/test/org/traccar/protocol/GatorProtocolDecoderTest.java index cecf70527..606f58942 100644 --- a/test/org/traccar/protocol/GatorProtocolDecoderTest.java +++ b/test/org/traccar/protocol/GatorProtocolDecoderTest.java @@ -1,11 +1,19 @@ package org.traccar.protocol; import org.jboss.netty.buffer.ChannelBuffers; -import static org.traccar.helper.DecoderVerifier.verify; +import org.junit.Assert; import org.junit.Test; import org.traccar.helper.ChannelBufferTools; +import static org.traccar.helper.DecoderVerifier.verify; public class GatorProtocolDecoderTest extends ProtocolDecoderTest { + + @Test + public void testDecodeId() { + + Assert.assertEquals("3512345006", GatorProtocolDecoder.decodeId(12, 162, 50, 134)); + + } @Test public void testDecode() throws Exception { -- cgit v1.2.3