From 0963a1339cc3d2feb23a35809711cf92be71e4ba Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Sun, 11 Apr 2021 08:54:40 -0400 Subject: [PATCH] SSU: IPv6-only fixes --- .../src/net/i2p/router/transport/udp/UDPTransport.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 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 04ea241c2a..1a74bd80ff 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -290,6 +290,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority Status.IPV4_FIREWALLED_IPV6_OK, Status.IPV4_FIREWALLED_IPV6_UNKNOWN); + private static final Set<Status> STATUS_OK = EnumSet.of(Status.OK, + Status.IPV4_DISABLED_IPV6_OK); + public UDPTransport(RouterContext ctx, DHSessionKeyBuilder.Factory dh) { super(ctx); @@ -3304,7 +3307,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority final long mayDisconCutoff = now - MAY_DISCON_TIMEOUT; long pingCutoff = now - (2 * 60*60*1000); long pingFirewallCutoff = now - PING_FIREWALL_CUTOFF; - boolean shouldPingFirewall = _reachabilityStatus != Status.OK; + boolean shouldPingFirewall = !STATUS_OK.contains(_reachabilityStatus); int currentListenPort = getListenPort(false); boolean pingOneOnly = shouldPingFirewall && getExternalPort(false) == currentListenPort; boolean shortLoop = shouldPingFirewall || !haveCap || _context.netDb().floodfillEnabled(); @@ -3442,8 +3445,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority if (status != old) { // for the following transitions ONLY, require two in a row // to prevent thrashing - if ((old == Status.OK && STATUS_FW.contains(status)) || - (status == Status.OK && STATUS_FW.contains(old))) { + if ((STATUS_OK.contains(old) && STATUS_FW.contains(status)) || + (STATUS_OK.contains(status) && STATUS_FW.contains(old))) { if (status != _reachabilityStatusPending) { if (_log.shouldLog(Log.WARN)) _log.warn("Old status: " + old + " status pending confirmation: " + status + -- GitLab