diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2014-12-22 21:16:39 +1300 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2014-12-22 21:16:39 +1300 |
commit | 0e22ee92528ed1a1ec76f536881928c4f7b78042 (patch) | |
tree | ce38a1d2b0d00e809926dce0136ea564ae984fe3 /src/org/traccar/protocol/AtrackProtocolDecoder.java | |
parent | 00116baebfd152e1e4df7835673d1f6fb443e862 (diff) | |
download | trackermap-server-0e22ee92528ed1a1ec76f536881928c4f7b78042.tar.gz trackermap-server-0e22ee92528ed1a1ec76f536881928c4f7b78042.tar.bz2 trackermap-server-0e22ee92528ed1a1ec76f536881928c4f7b78042.zip |
Support UDP for Atrack (fix #341)
Diffstat (limited to 'src/org/traccar/protocol/AtrackProtocolDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/AtrackProtocolDecoder.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/org/traccar/protocol/AtrackProtocolDecoder.java b/src/org/traccar/protocol/AtrackProtocolDecoder.java index db6cdb7e1..1323ce8a3 100644 --- a/src/org/traccar/protocol/AtrackProtocolDecoder.java +++ b/src/org/traccar/protocol/AtrackProtocolDecoder.java @@ -15,6 +15,7 @@ */ package org.traccar.protocol; +import java.net.SocketAddress; import java.nio.charset.Charset; import java.util.Date; import java.util.LinkedList; @@ -41,13 +42,13 @@ public class AtrackProtocolDecoder extends BaseProtocolDecoder { private static final int MSG_HEARTBEAT = 0x1A; private static final int MSG_DATA = 0x10; - private static void sendResponse(Channel channel, long rawId, int index) { + private static void sendResponse(Channel channel, SocketAddress remoteAddress, long rawId, int index) { if (channel != null) { ChannelBuffer response = ChannelBuffers.directBuffer(12); response.writeShort(0xfe02); response.writeLong(rawId); response.writeShort(index); - channel.write(response); + channel.write(response, remoteAddress); } } @@ -69,10 +70,19 @@ public class AtrackProtocolDecoder extends BaseProtocolDecoder { @Override protected Object decode( - ChannelHandlerContext ctx, Channel channel, Object msg) + ChannelHandlerContext ctx, Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { ChannelBuffer buf = (ChannelBuffer) msg; + + // Keep alive message + if (buf.getUnsignedShort(buf.readerIndex()) == 0xfe02) { + if (channel != null) { + channel.write(buf, remoteAddress); + } + return null; + } + buf.skipBytes(2); // prefix buf.readUnsignedShort(); // checksum buf.readUnsignedShort(); // length @@ -90,7 +100,7 @@ public class AtrackProtocolDecoder extends BaseProtocolDecoder { } // Send acknowledgement - sendResponse(channel, rawId, index); + sendResponse(channel, remoteAddress, rawId, index); List<Position> positions = new LinkedList<Position>(); |