aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/handler
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2024-06-09 13:37:45 -0700
committerAnton Tananaev <anton@traccar.org>2024-06-09 13:37:45 -0700
commite92dea78ebad3f921c031a974378a218c6bd90b1 (patch)
tree4e9f39855c9137fb203dde85ec16535ee0cdce10 /src/main/java/org/traccar/handler
parent2147ecb2d9fe0fb49b3f03dc650bc363e72e3fd2 (diff)
downloadtrackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.tar.gz
trackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.tar.bz2
trackermap-server-e92dea78ebad3f921c031a974378a218c6bd90b1.zip
Decode text data in logs (fix #5336)
Diffstat (limited to 'src/main/java/org/traccar/handler')
-rw-r--r--src/main/java/org/traccar/handler/network/StandardLoggingHandler.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java b/src/main/java/org/traccar/handler/network/StandardLoggingHandler.java
index dae93655d..f6ee08756 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;
}
@@ -66,7 +77,14 @@ public class StandardLoggingHandler extends ChannelDuplexHandler {
if (networkMessage.getMessage() instanceof ByteBuf) {
LogRecord record = new LogRecord(ctx.channel().localAddress(), networkMessage.getRemoteAddress());
record.setProtocol(protocol);
- record.setData(ByteBufUtil.hexDump((ByteBuf) networkMessage.getMessage()));
+ ByteBuf data = (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;
}
}