aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/helper/Checksum.java8
-rw-r--r--src/org/traccar/protocol/Arnavi4ProtocolDecoder.java11
-rw-r--r--test/org/traccar/helper/ChecksumTest.java8
3 files changed, 18 insertions, 9 deletions
diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java
index 43ba6a689..7a0151d36 100644
--- a/src/org/traccar/helper/Checksum.java
+++ b/src/org/traccar/helper/Checksum.java
@@ -243,4 +243,12 @@ public final class Checksum {
return (10 - (checksum % 10)) % 10;
}
+ public static int modulo256(byte... bytes) {
+ int sum = 0;
+ for (byte b : bytes) {
+ sum = (sum + b) & 0xFF;
+ }
+ return sum;
+ }
+
}
diff --git a/src/org/traccar/protocol/Arnavi4ProtocolDecoder.java b/src/org/traccar/protocol/Arnavi4ProtocolDecoder.java
index caa8dd28f..46caebb71 100644
--- a/src/org/traccar/protocol/Arnavi4ProtocolDecoder.java
+++ b/src/org/traccar/protocol/Arnavi4ProtocolDecoder.java
@@ -5,6 +5,7 @@ import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.traccar.BaseProtocolDecoder;
import org.traccar.DeviceSession;
+import org.traccar.helper.Checksum;
import org.traccar.model.Position;
import java.net.SocketAddress;
@@ -35,14 +36,6 @@ public class Arnavi4ProtocolDecoder extends BaseProtocolDecoder {
super(protocol);
}
- private static int modulo256Checksum(byte[] bytes) {
- int sum = 0;
- for (byte b : bytes) {
- sum = (sum + b) & 0xFF;
- }
- return sum;
- }
-
private Position decodePosition(DeviceSession deviceSession, ChannelBuffer buf, long timestamp) {
final Position position = new Position();
@@ -107,7 +100,7 @@ public class Arnavi4ProtocolDecoder extends BaseProtocolDecoder {
response = ChannelBuffers.dynamicBuffer(ByteOrder.LITTLE_ENDIAN, 9);
response.writeBytes(new byte[]{0x7B, 0x04, 0x00});
byte[] timestampBytes = ByteBuffer.allocate(4).putInt((int) (System.currentTimeMillis() / 1000)).array();
- response.writeByte(modulo256Checksum(timestampBytes));
+ response.writeByte(Checksum.modulo256(timestampBytes));
response.writeBytes(timestampBytes);
response.writeByte(0x7D);
diff --git a/test/org/traccar/helper/ChecksumTest.java b/test/org/traccar/helper/ChecksumTest.java
index c37eda88d..737b65c62 100644
--- a/test/org/traccar/helper/ChecksumTest.java
+++ b/test/org/traccar/helper/ChecksumTest.java
@@ -4,6 +4,7 @@ import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.junit.Assert;
import org.junit.Test;
+import org.traccar.protocol.Arnavi4ProtocolDecoder;
import java.nio.charset.StandardCharsets;
@@ -28,4 +29,11 @@ public class ChecksumTest {
Assert.assertEquals(0, Checksum.luhn(63070019470771L));
}
+ @Test
+ public void testModulo256() {
+ Assert.assertEquals(0x00, Checksum.modulo256((byte)0x00));
+ Assert.assertEquals(0x00, Checksum.modulo256((byte)0x00, (byte)0x00, (byte)0x00));
+ Assert.assertEquals(0x06, Checksum.modulo256((byte)0x01, (byte)0x02, (byte)0x03));
+ }
+
}