aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/protocol/GranitProtocolDecoder.java
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-07-07 18:24:06 +1200
committerGitHub <noreply@github.com>2016-07-07 18:24:06 +1200
commitf51fc87269a3fe83de3399ec5031ad9a2d0a88bd (patch)
treebbd43d22154f513967d53ea2bac62076ddc03b44 /src/org/traccar/protocol/GranitProtocolDecoder.java
parent9d44d79e32f634df6b98d9898aa714fee25f035c (diff)
parent77aa77eab91127267d0d3d134acf21e456ecd072 (diff)
downloadtrackermap-server-f51fc87269a3fe83de3399ec5031ad9a2d0a88bd.tar.gz
trackermap-server-f51fc87269a3fe83de3399ec5031ad9a2d0a88bd.tar.bz2
trackermap-server-f51fc87269a3fe83de3399ec5031ad9a2d0a88bd.zip
Merge pull request #2085 from Abyss777/master
Simplify Granit command result detection
Diffstat (limited to 'src/org/traccar/protocol/GranitProtocolDecoder.java')
-rw-r--r--src/org/traccar/protocol/GranitProtocolDecoder.java17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/org/traccar/protocol/GranitProtocolDecoder.java b/src/org/traccar/protocol/GranitProtocolDecoder.java
index b92bc72e2..3e2553927 100644
--- a/src/org/traccar/protocol/GranitProtocolDecoder.java
+++ b/src/org/traccar/protocol/GranitProtocolDecoder.java
@@ -21,6 +21,7 @@ import org.jboss.netty.channel.Channel;
import org.traccar.BaseProtocolDecoder;
import org.traccar.helper.BitUtil;
import org.traccar.helper.Checksum;
+import org.traccar.helper.StringFinder;
import org.traccar.model.Position;
import java.net.SocketAddress;
@@ -132,10 +133,11 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder {
protected Object decode(Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
ChannelBuffer buf = (ChannelBuffer) msg;
- String bufString = buf.toString(StandardCharsets.US_ASCII);
- if (hasDeviceId() && bufString.contains("OK") || bufString.startsWith("ERROR")
- || bufString.startsWith("+PR") || bufString.startsWith("+IDNT")
- || bufString.startsWith("+BBMD")) {
+
+ int indexTilde = buf.indexOf(buf.readerIndex(), buf.writerIndex(), new StringFinder("~"));
+
+ if (hasDeviceId() && indexTilde == -1) {
+ String bufString = buf.toString(StandardCharsets.US_ASCII);
Position position = new Position();
position.setProtocol(getProtocolName());
position.setDeviceId(getDeviceId());
@@ -144,16 +146,15 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder {
getLastLocation(position, new Date());
position.setValid(false);
position.set(Position.KEY_RESULT, bufString);
-
return position;
}
if (buf.readableBytes() < HEADER_LENGTH) {
return null;
}
- buf.skipBytes(HEADER_LENGTH);
+ String header = buf.readBytes(HEADER_LENGTH).toString(StandardCharsets.US_ASCII);
- if (bufString.startsWith("+RRCB~")) {
+ if (header.equals("+RRCB~")) {
buf.skipBytes(2); //binary length 26
int deviceId = buf.readUnsignedShort();
if (!identify(String.valueOf(deviceId), channel, remoteAddress)) {
@@ -172,7 +173,7 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder {
decodeStructure(buf, position);
return position;
- } else if (bufString.startsWith("+DDAT~")) {
+ } else if (header.equals("+DDAT~")) {
buf.skipBytes(2); //binary length
int deviceId = buf.readUnsignedShort();
if (!identify(String.valueOf(deviceId), channel, remoteAddress)) {