diff --git a/src/main/java/org/traccar/helper/StringUtil.java b/src/main/java/org/traccar/helper/StringUtil.java index 686e386a6..c366f6393 100644 --- a/src/main/java/org/traccar/helper/StringUtil.java +++ b/src/main/java/org/traccar/helper/StringUtil.java @@ -36,4 +36,12 @@ public final class StringUtil { return value.substring(start); } + public static String stripTrailing(char c, String value) { + int end = value.length(); + while (end > 1 && value.charAt(end - 1) == c) { + end--; + } + return value.substring(0, end); + } + } diff --git a/src/main/java/org/traccar/protocol/CalAmpProtocolDecoder.java b/src/main/java/org/traccar/protocol/CalAmpProtocolDecoder.java index 316c4a848..0d1dc3544 100644 --- a/src/main/java/org/traccar/protocol/CalAmpProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/CalAmpProtocolDecoder.java @@ -24,6 +24,7 @@ import org.traccar.session.DeviceSession; import org.traccar.NetworkMessage; import org.traccar.Protocol; import org.traccar.helper.BitUtil; +import org.traccar.helper.StringUtil; import org.traccar.helper.UnitsConverter; import org.traccar.model.Position; @@ -166,7 +167,8 @@ public class CalAmpProtocolDecoder extends BaseProtocolDecoder { int content = buf.readUnsignedByte(); if (BitUtil.check(content, 0)) { - String id = ByteBufUtil.hexDump(buf.readSlice(buf.readUnsignedByte())).replace("f", ""); + String id = StringUtil.stripTrailing( + 'f', ByteBufUtil.hexDump(buf.readSlice(buf.readUnsignedByte()))); getDeviceSession(channel, remoteAddress, id); } diff --git a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java index 164ddb933..85a89b478 100644 --- a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -30,6 +30,7 @@ import org.traccar.helper.Checksum; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; +import org.traccar.helper.StringUtil; import org.traccar.helper.UnitsConverter; import org.traccar.model.CellTower; import org.traccar.model.Network; @@ -1226,7 +1227,8 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { buf.skipBytes(8); // imei buf.skipBytes(8); // imsi - position.set(Position.KEY_ICCID, ByteBufUtil.hexDump(buf.readSlice(10)).replaceAll("f", "")); + position.set(Position.KEY_ICCID, StringUtil.stripTrailing( + 'f', ByteBufUtil.hexDump(buf.readSlice(10)))); return position; } else if (subType == 0x0b) { diff --git a/src/main/java/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Jt600ProtocolDecoder.java index 900a5edd2..0a1723dad 100644 --- a/src/main/java/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -29,6 +29,7 @@ import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; +import org.traccar.helper.StringUtil; import org.traccar.helper.UnitsConverter; import org.traccar.model.CellTower; import org.traccar.model.Network; @@ -122,7 +123,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { buf.readByte(); // header - String id = String.valueOf(Long.parseLong(ByteBufUtil.hexDump(buf.readSlice(5)))); + String id = StringUtil.stripLeading('0', ByteBufUtil.hexDump(buf.readSlice(5))); DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, id); if (deviceSession == null) { return null; diff --git a/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java index 93db3fab7..965c6e100 100644 --- a/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Jt808ProtocolDecoder.java @@ -1124,8 +1124,8 @@ public class Jt808ProtocolDecoder extends BaseProtocolDecoder { } break; case 0x00B2: - position.set(Position.KEY_ICCID, ByteBufUtil.hexDump( - buf.readSlice(10)).replaceAll("f", "")); + position.set(Position.KEY_ICCID, StringUtil.stripTrailing( + 'f', ByteBufUtil.hexDump(buf.readSlice(10)))); break; case 0x00B9: buf.readUnsignedByte(); // count