diff options
3 files changed, 24 insertions, 9 deletions
diff --git a/src/main/java/org/traccar/protocol/T800xProtocolDecoder.java b/src/main/java/org/traccar/protocol/T800xProtocolDecoder.java index 5c2c26da7..4351a14bf 100644 --- a/src/main/java/org/traccar/protocol/T800xProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/T800xProtocolDecoder.java @@ -37,10 +37,18 @@ import java.util.Date; public class T800xProtocolDecoder extends BaseProtocolDecoder { + private short header = DEFAULT_HEADER; + + public short getHeader() { + return header; + } + public T800xProtocolDecoder(Protocol protocol) { super(protocol); } + public static final short DEFAULT_HEADER = 0x2323; + public static final int MSG_LOGIN = 0x01; public static final int MSG_GPS = 0x02; public static final int MSG_HEARTBEAT = 0x03; @@ -110,7 +118,7 @@ public class T800xProtocolDecoder extends BaseProtocolDecoder { ByteBuf buf = (ByteBuf) msg; - short header = buf.readShort(); + header = buf.readShort(); int type = buf.readUnsignedByte(); buf.readUnsignedShort(); // length int index = buf.readUnsignedShort(); @@ -128,7 +136,7 @@ public class T800xProtocolDecoder extends BaseProtocolDecoder { if (type == MSG_GPS || type == MSG_ALARM) { - return decodePosition(channel, deviceSession, buf, header, type, index, imei); + return decodePosition(channel, deviceSession, buf, type, index, imei); } else if (type == MSG_NETWORK) { @@ -169,7 +177,7 @@ public class T800xProtocolDecoder extends BaseProtocolDecoder { private Position decodePosition( Channel channel, DeviceSession deviceSession, - ByteBuf buf, short header, int type, int index, ByteBuf imei) { + ByteBuf buf, int type, int index, ByteBuf imei) { Position position = new Position(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); diff --git a/src/main/java/org/traccar/protocol/T800xProtocolEncoder.java b/src/main/java/org/traccar/protocol/T800xProtocolEncoder.java index 439bedb57..74587c8b1 100644 --- a/src/main/java/org/traccar/protocol/T800xProtocolEncoder.java +++ b/src/main/java/org/traccar/protocol/T800xProtocolEncoder.java @@ -17,6 +17,7 @@ package org.traccar.protocol; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; import org.traccar.BaseProtocolEncoder; import org.traccar.helper.DataConverter; import org.traccar.model.Command; @@ -34,12 +35,11 @@ public class T800xProtocolEncoder extends BaseProtocolEncoder { super(protocol); } - private ByteBuf encodeContent(Command command, String content) { + private ByteBuf encodeContent(Command command, short header, String content) { ByteBuf buf = Unpooled.buffer(); - buf.writeByte('%'); - buf.writeByte('%'); + buf.writeShort(header); buf.writeByte(T800xProtocolDecoder.MSG_COMMAND); buf.writeShort(7 + 8 + 1 + content.length()); buf.writeShort(1); // serial number @@ -51,11 +51,16 @@ public class T800xProtocolEncoder extends BaseProtocolEncoder { } @Override - protected Object encodeCommand(Command command) { + protected Object encodeCommand(Channel channel, Command command) { + + short header = T800xProtocolDecoder.DEFAULT_HEADER; + if (channel != null) { + header = channel.pipeline().get(T800xProtocolDecoder.class).getHeader(); + } switch (command.getType()) { case Command.TYPE_CUSTOM: - return encodeContent(command, command.getString(Command.KEY_DATA)); + return encodeContent(command, header, command.getString(Command.KEY_DATA)); default: return null; } diff --git a/src/test/java/org/traccar/protocol/T800xProtocolEncoderTest.java b/src/test/java/org/traccar/protocol/T800xProtocolEncoderTest.java index 683aa9d80..9a628cdb6 100644 --- a/src/test/java/org/traccar/protocol/T800xProtocolEncoderTest.java +++ b/src/test/java/org/traccar/protocol/T800xProtocolEncoderTest.java @@ -16,7 +16,9 @@ public class T800xProtocolEncoderTest extends ProtocolTest { command.setType(Command.TYPE_CUSTOM); command.set(Command.KEY_DATA, "RELAY,0000,On#"); - verifyCommand(encoder, command, binary("252581001e000101234567890123450152454c41592c303030302c4f6e23")); + verifyFrame( + binary("232381001e000101234567890123450152454c41592c303030302c4f6e23"), + encoder.encodeCommand(null, command)); } |