diff options
Diffstat (limited to 'src/org/traccar/protocol/Gt06ProtocolDecoder.java')
-rw-r--r-- | src/org/traccar/protocol/Gt06ProtocolDecoder.java | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java index 57e2d64b7..f89d20fce 100644 --- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -20,6 +20,7 @@ import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.Context; +import org.traccar.DeviceSession; import org.traccar.helper.BitUtil; import org.traccar.helper.Checksum; import org.traccar.helper.DateBuilder; @@ -175,7 +176,6 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { int length = buf.readUnsignedByte(); int dataLength = length - 5; - int type = buf.readUnsignedByte(); if (type == MSG_LOGIN) { @@ -197,17 +197,23 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { } } - if (identify(imei, channel, remoteAddress)) { + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, imei); + if (deviceSession != null) { buf.skipBytes(buf.readableBytes() - 6); sendResponse(channel, type, buf.readUnsignedShort()); } - } else if (hasDeviceId()) { + } else { + + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress); + if (deviceSession == null) { + return null; + } if (type == MSG_STRING) { Position position = new Position(); - position.setDeviceId(getDeviceId()); + position.setDeviceId(deviceSession.getDeviceId()); position.setProtocol(getProtocolName()); getLastLocation(position, null); @@ -228,7 +234,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { } else if (isSupported(type)) { Position position = new Position(); - position.setDeviceId(getDeviceId()); + position.setDeviceId(deviceSession.getDeviceId()); position.setProtocol(getProtocolName()); if (hasGps(type)) { @@ -271,39 +277,31 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { } else if (header == 0x7979) { + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress); + if (deviceSession == null) { + return null; + } + buf.readUnsignedShort(); // length int type = buf.readUnsignedByte(); if (type == MSG_INFO) { int subType = buf.readUnsignedByte(); - if (subType == 0x00) { + Position position = new Position(); + position.setDeviceId(deviceSession.getDeviceId()); + position.setProtocol(getProtocolName()); - Position position = new Position(); - position.setDeviceId(getDeviceId()); - position.setProtocol(getProtocolName()); - - getLastLocation(position, null); + getLastLocation(position, null); + if (subType == 0x00) { position.set(Position.KEY_POWER, buf.readUnsignedShort() * 0.01); - return position; - } else if (subType == 0x05) { - - Position position = new Position(); - position.setDeviceId(getDeviceId()); - position.setProtocol(getProtocolName()); - - getLastLocation(position, null); - int flags = buf.readUnsignedByte(); - position.set("door", BitUtil.check(flags, 0)); position.set(Position.PREFIX_IO + 1, BitUtil.check(flags, 2)); - return position; - } } |