aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/forward/NetworkForwarder.java11
-rw-r--r--src/main/java/org/traccar/handler/NetworkForwarderHandler.java8
2 files changed, 19 insertions, 0 deletions
diff --git a/src/main/java/org/traccar/forward/NetworkForwarder.java b/src/main/java/org/traccar/forward/NetworkForwarder.java
index 6abf2b7ba..0915aaa27 100644
--- a/src/main/java/org/traccar/forward/NetworkForwarder.java
+++ b/src/main/java/org/traccar/forward/NetworkForwarder.java
@@ -63,4 +63,15 @@ public class NetworkForwarder {
}
}
+ public void disconnect(InetSocketAddress source) {
+ Socket connectionTcp = connectionsTcp.remove(source);
+ if (connectionTcp != null) {
+ try {
+ connectionTcp.close();
+ } catch (IOException e) {
+ LOGGER.warn("Connection close error", e);
+ }
+ }
+ }
+
}
diff --git a/src/main/java/org/traccar/handler/NetworkForwarderHandler.java b/src/main/java/org/traccar/handler/NetworkForwarderHandler.java
index a3792a3e5..2c586c973 100644
--- a/src/main/java/org/traccar/handler/NetworkForwarderHandler.java
+++ b/src/main/java/org/traccar/handler/NetworkForwarderHandler.java
@@ -61,4 +61,12 @@ public class NetworkForwarderHandler extends ChannelInboundHandlerAdapter {
super.channelRead(ctx, msg);
}
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ if (!(ctx.channel() instanceof DatagramChannel)) {
+ networkForwarder.disconnect((InetSocketAddress) ctx.channel().remoteAddress());
+ }
+ super.channelInactive(ctx);
+ }
+
}