From 4c876606ca3afa794366bcc0688fdafaa6b02f4f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 22 Jan 2019 21:50:29 -0800 Subject: Fix eelink login response --- src/org/traccar/protocol/EelinkProtocolDecoder.java | 21 +++++++++++++-------- src/org/traccar/protocol/EelinkProtocolEncoder.java | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'src/org/traccar/protocol') diff --git a/src/org/traccar/protocol/EelinkProtocolDecoder.java b/src/org/traccar/protocol/EelinkProtocolDecoder.java index dcc87dccc..14bf44fbf 100644 --- a/src/org/traccar/protocol/EelinkProtocolDecoder.java +++ b/src/org/traccar/protocol/EelinkProtocolDecoder.java @@ -17,6 +17,7 @@ package org.traccar.protocol; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.socket.DatagramChannel; import org.traccar.BaseProtocolDecoder; @@ -62,13 +63,6 @@ public class EelinkProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_CAMERA_INFO = 0x1E; public static final int MSG_CAMERA_DATA = 0x1F; - private void sendResponse(Channel channel, SocketAddress remoteAddress, String uniqueId, int type, int index) { - if (channel != null) { - channel.writeAndFlush(new NetworkMessage(EelinkProtocolEncoder.encodeContent( - channel instanceof DatagramChannel, uniqueId, type, index, null), remoteAddress)); - } - } - private String decodeAlarm(Short value) { switch (value) { case 0x01: @@ -356,7 +350,18 @@ public class EelinkProtocolDecoder extends BaseProtocolDecoder { int index = buf.readUnsignedShort(); if (type != MSG_GPS && type != MSG_DATA) { - sendResponse(channel, remoteAddress, uniqueId, type, index); + ByteBuf content = Unpooled.buffer(); + if (type == MSG_LOGIN) { + content.writeInt((int) (System.currentTimeMillis() / 1000)); + content.writeByte(1); // protocol version + content.writeByte(0); // action mask + } + ByteBuf response = EelinkProtocolEncoder.encodeContent( + channel instanceof DatagramChannel, uniqueId, type, index, content); + content.release(); + if (channel != null) { + channel.writeAndFlush(new NetworkMessage(response, remoteAddress)); + } } if (type == MSG_LOGIN) { diff --git a/src/org/traccar/protocol/EelinkProtocolEncoder.java b/src/org/traccar/protocol/EelinkProtocolEncoder.java index c005fbc67..8f33441fb 100644 --- a/src/org/traccar/protocol/EelinkProtocolEncoder.java +++ b/src/org/traccar/protocol/EelinkProtocolEncoder.java @@ -69,6 +69,7 @@ public class EelinkProtocolEncoder extends BaseProtocolEncoder { } result.writeBytes(buf); + buf.release(); return result; } -- cgit v1.2.3