mirror of
https://github.com/traccar/traccar.git
synced 2026-02-02 03:34:01 -05:00
Add PT215 frame decoder
This commit is contained in:
55
src/main/java/org/traccar/protocol/Pt215FrameDecoder.java
Normal file
55
src/main/java/org/traccar/protocol/Pt215FrameDecoder.java
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright 2019 Anton Tananaev (anton@traccar.org)
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.traccar.protocol;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import org.traccar.BaseFrameDecoder;
|
||||
|
||||
public class Pt215FrameDecoder extends BaseFrameDecoder {
|
||||
|
||||
private ByteBuf decodeFrame(ByteBuf buf, int length) {
|
||||
if (buf.readableBytes() >= length) {
|
||||
return buf.readRetainedSlice(length);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object decode(
|
||||
ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {
|
||||
|
||||
if (buf.readableBytes() < 5) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int type = buf.getUnsignedByte(buf.readerIndex() + 2 + 1);
|
||||
switch (type) {
|
||||
case Pt215ProtocolDecoder.MSG_LOGIN:
|
||||
return decodeFrame(buf, 15);
|
||||
case Pt215ProtocolDecoder.MSG_GPS_REALTIME:
|
||||
case Pt215ProtocolDecoder.MSG_GPS_OFFLINE:
|
||||
return decodeFrame(buf, 27);
|
||||
case Pt215ProtocolDecoder.MSG_STATUS:
|
||||
return decodeFrame(buf, 11);
|
||||
default:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.traccar.protocol;
|
||||
|
||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
||||
import org.traccar.BaseProtocol;
|
||||
import org.traccar.PipelineBuilder;
|
||||
import org.traccar.TrackerServer;
|
||||
@@ -26,7 +25,7 @@ public class Pt215Protocol extends BaseProtocol {
|
||||
addServer(new TrackerServer(false, getName()) {
|
||||
@Override
|
||||
protected void addProtocolHandlers(PipelineBuilder pipeline) {
|
||||
pipeline.addLast(new LengthFieldBasedFrameDecoder(1024, 2, 1, -1, 0));
|
||||
pipeline.addLast(new Pt215FrameDecoder());
|
||||
pipeline.addLast(new Pt215ProtocolDecoder(Pt215Protocol.this));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.traccar.protocol;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.traccar.ProtocolTest;
|
||||
|
||||
public class Pt215FrameDecoderTest extends ProtocolTest {
|
||||
|
||||
@Test
|
||||
public void testDecode() throws Exception {
|
||||
|
||||
Pt215FrameDecoder decoder = new Pt215FrameDecoder();
|
||||
|
||||
verifyFrame(
|
||||
binary("58580d010359339075799656010d0a"),
|
||||
decoder.decode(null, null, binary("58580d010359339075799656010d0a")));
|
||||
|
||||
verifyFrame(
|
||||
binary("5858071340010819640d0a"),
|
||||
decoder.decode(null, null, binary("5858071340010819640d0a")));
|
||||
|
||||
verifyFrame(
|
||||
binary("585815101309160d0f0c9902b7015405f0e82404347afff7000d0a"),
|
||||
decoder.decode(null, null, binary("585815101309160d0f0c9902b7015405f0e82404347afff7000d0a")));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user