aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/handler
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-08-03 20:52:00 -0600
committerIván Ávalos <avalos@disroot.org>2024-08-03 20:52:00 -0600
commit55f6d92c09a5b1d8566b53633d07be3d31010d3b (patch)
treeb86bed801b0bbadb72c7e839296dae1d28b12bbb /src/main/java/org/traccar/handler
parentc04ad7d48331253c095fc123ded1b00f6ff871d3 (diff)
parent2788174193def918a3a1a5be3bbed24c9613323f (diff)
downloadtrackermap-server-55f6d92c09a5b1d8566b53633d07be3d31010d3b.tar.gz
trackermap-server-55f6d92c09a5b1d8566b53633d07be3d31010d3b.tar.bz2
trackermap-server-55f6d92c09a5b1d8566b53633d07be3d31010d3b.zip
Merge tag 'tags/v6.3'
Diffstat (limited to 'src/main/java/org/traccar/handler')
-rw-r--r--src/main/java/org/traccar/handler/ComputedAttributesHandler.java64
-rw-r--r--src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java16
-rw-r--r--src/main/java/org/traccar/handler/network/AcknowledgementHandler.java6
-rw-r--r--src/main/java/org/traccar/handler/network/NetworkMessageHandler.java6
-rw-r--r--src/main/java/org/traccar/handler/network/RemoteAddressHandler.java3
-rw-r--r--src/main/java/org/traccar/handler/network/StandardLoggingHandler.java24
6 files changed, 55 insertions, 64 deletions
diff --git a/src/main/java/org/traccar/handler/ComputedAttributesHandler.java b/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
index d286866a5..f4079f127 100644
--- a/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
+++ b/src/main/java/org/traccar/handler/ComputedAttributesHandler.java
@@ -146,57 +146,41 @@ public class ComputedAttributesHandler extends BasePositionHandler {
.collect(Collectors.toUnmodifiableList());
for (Attribute attribute : attributes) {
if (attribute.getAttribute() != null) {
- Object result = null;
try {
- result = computeAttribute(attribute, position);
- } catch (JexlException error) {
- LOGGER.warn("Attribute computation error", error);
- }
- if (result != null) {
- try {
+ Object result = computeAttribute(attribute, position);
+ if (result != null) {
switch (attribute.getAttribute()) {
- case "valid":
- position.setValid((Boolean) result);
- break;
- case "latitude":
- position.setLatitude(((Number) result).doubleValue());
- break;
- case "longitude":
- position.setLongitude(((Number) result).doubleValue());
- break;
- case "altitude":
- position.setAltitude(((Number) result).doubleValue());
- break;
- case "speed":
- position.setSpeed(((Number) result).doubleValue());
- break;
- case "course":
- position.setCourse(((Number) result).doubleValue());
- break;
- case "address":
- position.setAddress((String) result);
- break;
- case "accuracy":
- position.setAccuracy(((Number) result).doubleValue());
- break;
- default:
+ case "valid" -> position.setValid((Boolean) result);
+ case "latitude" -> position.setLatitude(((Number) result).doubleValue());
+ case "longitude" -> position.setLongitude(((Number) result).doubleValue());
+ case "altitude" -> position.setAltitude(((Number) result).doubleValue());
+ case "speed" -> position.setSpeed(((Number) result).doubleValue());
+ case "course" -> position.setCourse(((Number) result).doubleValue());
+ case "address" -> position.setAddress((String) result);
+ case "accuracy" -> position.setAccuracy(((Number) result).doubleValue());
+ default -> {
switch (attribute.getType()) {
- case "number":
+ case "number" -> {
Number numberValue = (Number) result;
position.getAttributes().put(attribute.getAttribute(), numberValue);
- break;
- case "boolean":
+ }
+ case "boolean" -> {
Boolean booleanValue = (Boolean) result;
position.getAttributes().put(attribute.getAttribute(), booleanValue);
- break;
- default:
+ }
+ default -> {
position.getAttributes().put(attribute.getAttribute(), result.toString());
+ }
}
- break;
+ }
}
- } catch (ClassCastException error) {
- LOGGER.warn("Attribute cast error", error);
+ } else {
+ position.getAttributes().remove(attribute.getAttribute());
}
+ } catch (JexlException error) {
+ LOGGER.warn("Attribute computation error", error);
+ } catch (ClassCastException error) {
+ LOGGER.warn("Attribute cast error", error);
}
}
}
diff --git a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
index 573ad4ad6..7fc6086aa 100644
--- a/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
+++ b/src/main/java/org/traccar/handler/events/MaintenanceEventHandler.java
@@ -57,16 +57,12 @@ public class MaintenanceEventHandler extends BaseEventHandler {
}
private double getValue(Position position, String type) {
- switch (type) {
- case "serverTime":
- return position.getServerTime().getTime();
- case "deviceTime":
- return position.getDeviceTime().getTime();
- case "fixTime":
- return position.getFixTime().getTime();
- default:
- return position.getDouble(type);
- }
+ return switch (type) {
+ case "serverTime" -> position.getServerTime().getTime();
+ case "deviceTime" -> position.getDeviceTime().getTime();
+ case "fixTime" -> position.getFixTime().getTime();
+ default -> position.getDouble(type);
+ };
}
}
diff --git a/src/main/java/org/traccar/handler/network/AcknowledgementHandler.java b/src/main/java/org/traccar/handler/network/AcknowledgementHandler.java
index e87f5d34c..7ba625e00 100644
--- a/src/main/java/org/traccar/handler/network/AcknowledgementHandler.java
+++ b/src/main/java/org/traccar/handler/network/AcknowledgementHandler.java
@@ -92,12 +92,10 @@ public class AcknowledgementHandler extends ChannelOutboundHandlerAdapter {
if (queue == null) {
queue = new LinkedList<>();
}
- } else if (msg instanceof EventDecoded) {
- EventDecoded event = (EventDecoded) msg;
+ } else if (msg instanceof EventDecoded event) {
LOGGER.debug("Event decoded {}", event.getObjects().size());
waiting.addAll(event.getObjects());
- } else if (msg instanceof EventHandled) {
- EventHandled event = (EventHandled) msg;
+ } else if (msg instanceof EventHandled event) {
LOGGER.debug("Event handled");
waiting.remove(event.getObject());
}
diff --git a/src/main/java/org/traccar/handler/network/NetworkMessageHandler.java b/src/main/java/org/traccar/handler/network/NetworkMessageHandler.java
index c2fb9016a..f151c91a9 100644
--- a/src/main/java/org/traccar/handler/network/NetworkMessageHandler.java
+++ b/src/main/java/org/traccar/handler/network/NetworkMessageHandler.java
@@ -32,16 +32,14 @@ public class NetworkMessageHandler extends ChannelDuplexHandler {
if (ctx.channel() instanceof DatagramChannel) {
DatagramPacket packet = (DatagramPacket) msg;
ctx.fireChannelRead(new NetworkMessage(packet.content(), packet.sender()));
- } else if (msg instanceof ByteBuf) {
- ByteBuf buffer = (ByteBuf) msg;
+ } else if (msg instanceof ByteBuf buffer) {
ctx.fireChannelRead(new NetworkMessage(buffer, ctx.channel().remoteAddress()));
}
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
- if (msg instanceof NetworkMessage) {
- NetworkMessage message = (NetworkMessage) msg;
+ if (msg instanceof NetworkMessage message) {
if (ctx.channel() instanceof DatagramChannel) {
InetSocketAddress recipient = (InetSocketAddress) message.getRemoteAddress();
InetSocketAddress sender = (InetSocketAddress) ctx.channel().localAddress();
diff --git a/src/main/java/org/traccar/handler/network/RemoteAddressHandler.java b/src/main/java/org/traccar/handler/network/RemoteAddressHandler.java
index c52bb2be1..9d5504ce1 100644
--- a/src/main/java/org/traccar/handler/network/RemoteAddressHandler.java
+++ b/src/main/java/org/traccar/handler/network/RemoteAddressHandler.java
@@ -44,8 +44,7 @@ public class RemoteAddressHandler extends ChannelInboundHandlerAdapter {
InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress();
String hostAddress = remoteAddress != null ? remoteAddress.getAddress().getHostAddress() : null;
- if (msg instanceof Position) {
- Position position = (Position) msg;
+ if (msg instanceof Position position) {
position.set(Position.KEY_IP, hostAddress);
}
}
diff --git a/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java b/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java
index dae93655d..8e63cae4d 100644
--- a/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java
+++ b/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java
@@ -24,22 +24,33 @@ import jakarta.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.NetworkMessage;
+import org.traccar.config.Config;
+import org.traccar.config.Keys;
+import org.traccar.helper.BufferUtil;
import org.traccar.helper.NetworkUtil;
import org.traccar.model.LogRecord;
import org.traccar.session.ConnectionManager;
+import java.nio.charset.StandardCharsets;
+
public class StandardLoggingHandler extends ChannelDuplexHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(StandardLoggingHandler.class);
private final String protocol;
private ConnectionManager connectionManager;
+ private boolean decodeTextData;
public StandardLoggingHandler(String protocol) {
this.protocol = protocol;
}
@Inject
+ public void setConfig(Config config) {
+ decodeTextData = config.getBoolean(Keys.LOGGER_TEXT_PROTOCOL);
+ }
+
+ @Inject
public void setConnectionManager(ConnectionManager connectionManager) {
this.connectionManager = connectionManager;
}
@@ -61,12 +72,17 @@ public class StandardLoggingHandler extends ChannelDuplexHandler {
}
private LogRecord createLogRecord(ChannelHandlerContext ctx, Object msg) {
- if (msg instanceof NetworkMessage) {
- NetworkMessage networkMessage = (NetworkMessage) msg;
- if (networkMessage.getMessage() instanceof ByteBuf) {
+ if (msg instanceof NetworkMessage networkMessage) {
+ if (networkMessage.getMessage() instanceof ByteBuf data) {
LogRecord record = new LogRecord(ctx.channel().localAddress(), networkMessage.getRemoteAddress());
record.setProtocol(protocol);
- record.setData(ByteBufUtil.hexDump((ByteBuf) networkMessage.getMessage()));
+ if (decodeTextData && BufferUtil.isPrintable(data, data.readableBytes())) {
+ record.setData(data.getCharSequence(
+ data.readerIndex(), data.readableBytes(), StandardCharsets.US_ASCII).toString()
+ .replace("\r", "\\r").replace("\n", "\\n"));
+ } else {
+ record.setData(ByteBufUtil.hexDump(data));
+ }
return record;
}
}