aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar')
-rw-r--r--src/org/traccar/database/QueryBuilder.java2
-rw-r--r--src/org/traccar/protocol/Gt06ProtocolDecoder.java56
2 files changed, 32 insertions, 26 deletions
diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java
index 9b25f72fc..5a4948de0 100644
--- a/src/org/traccar/database/QueryBuilder.java
+++ b/src/org/traccar/database/QueryBuilder.java
@@ -398,7 +398,7 @@ public final class QueryBuilder {
String value = resultSet.getString(name);
if (value != null) {
try {
- method.invoke(object, Context.getObjectMapper().readValue(value, parameterType.getClass()));
+ method.invoke(object, Context.getObjectMapper().readValue(value, parameterType));
} catch (InvocationTargetException | IllegalAccessException | IOException error) {
Log.warning(error);
}
diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
index 9a3efa553..356097fb2 100644
--- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java
+++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
@@ -222,8 +222,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
}
}
- DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, imei);
- if (deviceSession != null) {
+ if (getDeviceSession(channel, remoteAddress, imei) != null) {
buf.skipBytes(buf.readableBytes() - 6);
sendResponse(channel, type, buf.readUnsignedShort());
}
@@ -235,11 +234,29 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
return null;
}
- if (type == MSG_STRING) {
+ Position position = new Position();
+ position.setDeviceId(deviceSession.getDeviceId());
+ position.setProtocol(getProtocolName());
+
+ if (type == MSG_LBS_EXTEND) {
+
+ DateBuilder dateBuilder = new DateBuilder(timeZone)
+ .setDate(buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte())
+ .setTime(buf.readUnsignedByte(), buf.readUnsignedByte(), buf.readUnsignedByte());
+
+ getLastLocation(position, dateBuilder.getDate());
- Position position = new Position();
- position.setDeviceId(deviceSession.getDeviceId());
- position.setProtocol(getProtocolName());
+ int mcc = buf.readUnsignedShort();
+ int mnc = buf.readUnsignedByte();
+
+ Network network = new Network();
+ for (int i = 0; i < 7; i++) {
+ network.addCellTower(CellTower.from(
+ mcc, mnc, buf.readUnsignedShort(), buf.readUnsignedMedium(), -buf.readUnsignedByte()));
+ }
+ position.setNetwork(network);
+
+ } else if (type == MSG_STRING) {
getLastLocation(position, null);
@@ -250,18 +267,8 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
position.set("command", buf.readBytes(commandLength - 1).toString(StandardCharsets.US_ASCII));
}
- buf.readUnsignedShort(); // language
-
- sendResponse(channel, type, buf.readUnsignedShort());
-
- return position;
-
} else if (isSupported(type)) {
- Position position = new Position();
- position.setDeviceId(deviceSession.getDeviceId());
- position.setProtocol(getProtocolName());
-
if (hasGps(type)) {
decodeGps(position, buf);
} else {
@@ -280,23 +287,22 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
position.set(Position.KEY_ODOMETER, buf.readUnsignedInt());
}
- if (buf.readableBytes() > 6) {
- buf.skipBytes(buf.readableBytes() - 6);
- }
- int index = buf.readUnsignedShort();
- position.set(Position.KEY_INDEX, index);
- sendResponse(channel, type, index);
-
- return position;
-
} else {
buf.skipBytes(dataLength);
if (type != MSG_COMMAND_0 && type != MSG_COMMAND_1 && type != MSG_COMMAND_2) {
sendResponse(channel, type, buf.readUnsignedShort());
}
+ return null;
+
+ }
+ if (buf.readableBytes() > 6) {
+ buf.skipBytes(buf.readableBytes() - 6);
}
+ sendResponse(channel, type, buf.readUnsignedShort());
+
+ return position;
}