From 620917cd70b8d33cb12e4a41a3e6c7b80a180901 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 14 Nov 2019 13:25:38 +0000 Subject: [PATCH] Transport: Fixes for IPv6 firewalled logic (ticket #2175) --- .../router/transport/udp/UDPTransport.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index 168bb2c883..405dcdb869 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -960,7 +960,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return; } - RouterAddress addr = getCurrentExternalAddress(false); + RouterAddress addr = getCurrentExternalAddress(ourIP.length == 16); if (inboundRecent && addr != null && addr.getPort() > 0 && addr.getHost() != null) { // use OS clock since its an ordering thing, not a time thing // Note that this fails us if we switch from one IP to a second, then back to the first, @@ -1067,10 +1067,21 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority if (oldIP != null) { _context.router().eventLog().addEvent(EventLog.CHANGE_IP, newIP); } + // save the external address but don't publish it + OrderedProperties localOpts = new OrderedProperties(); + localOpts.setProperty(UDPAddress.PROP_PORT, String.valueOf(ourPort)); + localOpts.setProperty(UDPAddress.PROP_HOST, newIP); + RouterAddress local = new RouterAddress(STYLE, localOpts, DEFAULT_COST); + replaceCurrentExternalAddress(local, true); + if (_log.shouldWarn()) + _log.warn("New IPv6 address, assuming still firewalled [" + + newIP + "]:" + ourPort, new Exception()); + } else { + if (_log.shouldInfo()) + _log.info("Same IPv6 address, assuming still firewalled [" + + newIP + "]:" + ourPort); + return false; } - if (_log.shouldLog(Log.WARN)) - _log.warn("New IPv6 address, assuming still firewalled " + - Addresses.toString(ourIP, ourPort)); rebuild = false; fireTest = true; } -- GitLab