aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar')
-rw-r--r--src/org/traccar/CopyAttributesHandler.java2
-rw-r--r--src/org/traccar/MainEventHandler.java18
2 files changed, 17 insertions, 3 deletions
diff --git a/src/org/traccar/CopyAttributesHandler.java b/src/org/traccar/CopyAttributesHandler.java
index f6326ea84..18052d0ea 100644
--- a/src/org/traccar/CopyAttributesHandler.java
+++ b/src/org/traccar/CopyAttributesHandler.java
@@ -33,7 +33,7 @@ public class CopyAttributesHandler extends BaseDataHandler {
position.getDeviceId(), "processing.copyAttributes", null, true);
Position last = getLastPosition(position.getDeviceId());
if (attributesString != null && last != null) {
- for (String attribute : attributesString.split(" ")) {
+ for (String attribute : attributesString.split("[ ,]")) {
if (last.getAttributes().containsKey(attribute) && !position.getAttributes().containsKey(attribute)) {
position.getAttributes().put(attribute, last.getAttributes().get(attribute));
}
diff --git a/src/org/traccar/MainEventHandler.java b/src/org/traccar/MainEventHandler.java
index ec31c5efd..b67d7af84 100644
--- a/src/org/traccar/MainEventHandler.java
+++ b/src/org/traccar/MainEventHandler.java
@@ -29,9 +29,21 @@ import org.traccar.protocol.TeltonikaProtocolDecoder;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
public class MainEventHandler extends IdleStateAwareChannelHandler {
+ private final Set<String> connectionlessProtocols = new HashSet<>();
+
+ public MainEventHandler() {
+ String connectionlessProtocolList = Context.getConfig().getString("status.ignoreOffline");
+ if (connectionlessProtocolList != null) {
+ connectionlessProtocols.addAll(Arrays.asList(connectionlessProtocolList.split(",")));
+ }
+ }
+
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
@@ -80,8 +92,9 @@ public class MainEventHandler extends IdleStateAwareChannelHandler {
Log.info(formatChannel(e.getChannel()) + " disconnected");
closeChannel(e.getChannel());
- if (ctx.getPipeline().get("httpDecoder") == null
- && !(ctx.getPipeline().get("objectDecoder") instanceof TeltonikaProtocolDecoder)) {
+ BaseProtocolDecoder protocolDecoder = (BaseProtocolDecoder) ctx.getPipeline().get("objectDecoder");
+ if (ctx.getPipeline().get("httpDecoder") == null &&
+ !connectionlessProtocols.contains(protocolDecoder.getProtocolName())) {
Context.getConnectionManager().removeActiveDevice(e.getChannel());
}
}
@@ -103,4 +116,5 @@ public class MainEventHandler extends IdleStateAwareChannelHandler {
channel.close();
}
}
+
}