diff options
5 files changed, 30 insertions, 29 deletions
diff --git a/src/org/traccar/protocol/WondexFrameDecoder.java b/src/org/traccar/protocol/WondexFrameDecoder.java index c5309db71..ac1622350 100644 --- a/src/org/traccar/protocol/WondexFrameDecoder.java +++ b/src/org/traccar/protocol/WondexFrameDecoder.java @@ -15,9 +15,7 @@ */ package org.traccar.protocol; -import java.nio.charset.StandardCharsets; import org.jboss.netty.buffer.ChannelBuffer; -import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.handler.codec.frame.FrameDecoder; @@ -42,9 +40,7 @@ public class WondexFrameDecoder extends FrameDecoder { if (channel != null) { channel.write(frame); } - // Pass deviceId to protocol decoder - long deviceId = ((Long.reverseBytes((frame.getLong(0)))) >> 32) & 0xFFFFFFFFL; - return ChannelBuffers.copiedBuffer("$ID:" + String.valueOf(deviceId), StandardCharsets.US_ASCII); + return frame; } else { diff --git a/src/org/traccar/protocol/WondexProtocol.java b/src/org/traccar/protocol/WondexProtocol.java index 639669767..e7144eabe 100644 --- a/src/org/traccar/protocol/WondexProtocol.java +++ b/src/org/traccar/protocol/WondexProtocol.java @@ -18,7 +18,6 @@ package org.traccar.protocol; import org.jboss.netty.bootstrap.ConnectionlessBootstrap; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; -import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; import org.traccar.BaseProtocol; import org.traccar.TrackerServer; @@ -42,7 +41,6 @@ public class WondexProtocol extends BaseProtocol { protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new WondexFrameDecoder()); pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("objectEncoder", new WondexProtocolEncoder()); pipeline.addLast("objectDecoder", new WondexProtocolDecoder(WondexProtocol.this)); } @@ -51,7 +49,6 @@ public class WondexProtocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("objectEncoder", new WondexProtocolEncoder()); pipeline.addLast("objectDecoder", new WondexProtocolDecoder(WondexProtocol.this)); } diff --git a/src/org/traccar/protocol/WondexProtocolDecoder.java b/src/org/traccar/protocol/WondexProtocolDecoder.java index d5c325037..837f40a08 100644 --- a/src/org/traccar/protocol/WondexProtocolDecoder.java +++ b/src/org/traccar/protocol/WondexProtocolDecoder.java @@ -15,6 +15,7 @@ */ package org.traccar.protocol; +import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.helper.DateBuilder; @@ -25,6 +26,7 @@ import org.traccar.model.Event; import org.traccar.model.Position; import java.net.SocketAddress; +import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.regex.Pattern; @@ -59,23 +61,26 @@ public class WondexProtocolDecoder extends BaseProtocolDecoder { protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { - if (((String) msg).startsWith("$ID:")) { - identify(((String) msg).substring(4), channel, remoteAddress); + if (((ChannelBuffer) msg).getUnsignedByte(0) == 0xD0) { + + long deviceId = ((Long.reverseBytes((((ChannelBuffer) msg).getLong(0)))) >> 32) & 0xFFFFFFFFL; + identify(String.valueOf(deviceId), channel, remoteAddress); + return null; - } else if (((String) msg).startsWith("$OK:") || ((String) msg).startsWith("$ERR:")) { + } else if (((ChannelBuffer) msg).toString(StandardCharsets.US_ASCII).startsWith("$OK:") + || ((ChannelBuffer) msg).toString(StandardCharsets.US_ASCII).startsWith("$ERR:")) { Position position = new Position(); position.setProtocol(getProtocolName()); position.setDeviceId(getDeviceId()); getLastLocation(position, new Date()); position.setValid(false); - position.set(Event.KEY_RESULT, (String) msg); + position.set(Event.KEY_RESULT, ((ChannelBuffer) msg).toString(StandardCharsets.US_ASCII)); return position; - } else { - Parser parser = new Parser(PATTERN, (String) msg); + Parser parser = new Parser(PATTERN, ((ChannelBuffer) msg).toString(StandardCharsets.US_ASCII)); if (!parser.matches()) { return null; } diff --git a/test/org/traccar/protocol/WondexFrameDecoderTest.java b/test/org/traccar/protocol/WondexFrameDecoderTest.java index fa95acb2b..2b401aa18 100644 --- a/test/org/traccar/protocol/WondexFrameDecoderTest.java +++ b/test/org/traccar/protocol/WondexFrameDecoderTest.java @@ -18,7 +18,7 @@ public class WondexFrameDecoderTest extends ProtocolTest { binary("313034343938393630312c32303133303332333039353531352c31332e3537323737362c35322e3430303833382c302c3030302c37322c302c32"), decoder.decode(null, null, binary("313034343938393630312c32303133303332333039353531352c31332e3537323737362c35322e3430303833382c302c3030302c37322c302c320d0a"))); - Assert.assertEquals(binary("2449443a31303030303030303031"), + Assert.assertEquals(binary("d0d70b0001ca9a3b"), decoder.decode(null, null, binary("d0d70b0001ca9a3b"))); } diff --git a/test/org/traccar/protocol/WondexProtocolDecoderTest.java b/test/org/traccar/protocol/WondexProtocolDecoderTest.java index 2212cc216..bf85c71ba 100644 --- a/test/org/traccar/protocol/WondexProtocolDecoderTest.java +++ b/test/org/traccar/protocol/WondexProtocolDecoderTest.java @@ -10,50 +10,53 @@ public class WondexProtocolDecoderTest extends ProtocolTest { WondexProtocolDecoder decoder = new WondexProtocolDecoder(new WondexProtocol()); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "2000000108,20151030145404,76.948633,43.354700,0,140,15,100,1,1325,125.4,10.5,0.0"), position("2015-10-30 14:54:04.000", true, 43.35470, 76.94863)); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "2000000257,20151030145351,69.379976,53.283905,0,0,16,2,0,0,469.1,58.9,0.0"), position("2015-10-30 14:53:51.000", false, 53.28390, 69.37998)); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "2000000232,20151030145206,51.166900,43.651353,0,132,11,2,0,0,0.0,0.0,0.0")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "2000000259,20151030145653,69.380826,53.283890,9,10,15,2,1,695,1002.6,108.2,0.0")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "1044989601,20130323074605,0.000000,90.000000,0,000,0,0,2")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "123456789000001,20120101123200,130.000000,60.000000,0,000,0,0,0,0")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "210000001,20070313170040,121.123456,12.654321,0,233,0,9,2,0.0,0,0.00,0.00,0")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "1044989601,20130322172647,13.572583,52.401070,22,204,49,0,2")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "1044989601,20130322172647,13.572583,52.401070,22,204,-49,0,2")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "3997324533,20140326074908,28.797603,47.041635,0,48,0,6,2,3.90V,0")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "2000000001,20140529213210,-63.179111,9.781493,0,0,54.0,8,2,0.0,0,0.01,0.01,0,0,0,0")); - verifyNotNull(decoder, text( + verifyNotNull(decoder, buffer( "$OK:VER=M7 2.003 DVB rev02c,V2")); - verifyNotNull(decoder, text( + verifyNotNull(decoder, buffer( "$OK:REBOOT")); - verifyNotNull(decoder, text( + verifyNotNull(decoder, buffer( "$ERR:GETLOCATION=1")); + verifyNothing(decoder, binary( + "d0d70b0001ca9a3b")); + } } |