aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/protocol/NavisFrameDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/protocol/NavisFrameDecoder.java')
-rw-r--r--src/org/traccar/protocol/NavisFrameDecoder.java30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/org/traccar/protocol/NavisFrameDecoder.java b/src/org/traccar/protocol/NavisFrameDecoder.java
index 9a3b3d45c..0146243cd 100644
--- a/src/org/traccar/protocol/NavisFrameDecoder.java
+++ b/src/org/traccar/protocol/NavisFrameDecoder.java
@@ -21,20 +21,17 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.TooLongFrameException;
import java.nio.charset.StandardCharsets;
import org.traccar.BaseFrameDecoder;
+import org.traccar.BasePipelineFactory;
public class NavisFrameDecoder extends BaseFrameDecoder {
+ private int flexDataSize; // bytes
+
private static final int NTCB_HEADER_LENGTH = 16;
private static final int NTCB_LENGTH_OFFSET = 12;
private static final int FLEX_HEADER_LENGTH = 2;
private static final int MAX_FRAME_LENGTH = 65551;
- private final NavisProtocolDecoder protocolDecoder;
-
- public NavisFrameDecoder(NavisProtocolDecoder protocolDecoder) {
- this.protocolDecoder = protocolDecoder;
- }
-
@Override
protected Object decode(
ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {
@@ -53,7 +50,15 @@ public class NavisFrameDecoder extends BaseFrameDecoder {
return buf.readRetainedSlice(1);
}
- if (protocolDecoder.getFlexDataSize() > 0) {
+ if (ctx != null) {
+ NavisProtocolDecoder protocolDecoder =
+ BasePipelineFactory.getHandler(ctx.pipeline(), NavisProtocolDecoder.class);
+ if (protocolDecoder != null) {
+ flexDataSize = protocolDecoder.getFlexDataSize();
+ }
+ }
+
+ if (flexDataSize > 0) {
// FLEX frame
if (buf.readableBytes() > FLEX_HEADER_LENGTH) {
int length = 0;
@@ -61,14 +66,13 @@ public class NavisFrameDecoder extends BaseFrameDecoder {
switch (type) {
// FLEX 1.0
case "~A":
- length = protocolDecoder.getFlexDataSize()
- * buf.getByte(buf.readerIndex() + FLEX_HEADER_LENGTH) + 1 + 1;
+ length = flexDataSize * buf.getByte(buf.readerIndex() + FLEX_HEADER_LENGTH) + 1 + 1;
break;
case "~T":
- length = protocolDecoder.getFlexDataSize() + 4 + 1;
+ length = flexDataSize + 4 + 1;
break;
case "~C":
- length = protocolDecoder.getFlexDataSize() + 1;
+ length = flexDataSize + 1;
break;
// FLEX 2.0 (Extra packages)
case "~E":
@@ -108,4 +112,8 @@ public class NavisFrameDecoder extends BaseFrameDecoder {
return null;
}
+ public void setFlexDataSize(int flexDataSize) {
+ this.flexDataSize = flexDataSize;
+ }
+
}