diff --git a/history.txt b/history.txt index 087b652874c89a5af9683f9fe96c17296c458617..31f2b932b74a2e884836ad7ae3fcc45575f5dceb 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2022-02-03 zzz + * SSU: Don't bid on connection to buggy routers + * Tunnels: Avoid buggy routers + 2022-01-30 zzz * Reseed, DoH: Fixes for IPv6-only diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 837dbdd0fb853e5cd6fa1025df7987bc7f74768d..3c8f141dcd43a8c444713ad96a6947f8e02bbf6f 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Git"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 10; + public final static long BUILD = 11; /** for example "-test" */ public final static String EXTRA = ""; 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 b96a172a0c119c88a5b21c85ee9f452f8d0525c7..c6a6c6da3bae692997b9b7a4cd2107690781d271 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -2039,13 +2039,20 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } // c++ bug thru 2.36.0/0.9.49, will disconnect inbound session after 5 seconds - if (addr.getCost() == 10) { + int cost = addr.getCost(); + if (cost == 10) { if (VersionComparator.comp(toAddress.getVersion(), "0.9.49") <= 0) { //if (_log.shouldDebug()) // _log.debug("Not bidding to: " + toAddress); markUnreachable(to); return null; } + } else if (cost == 9) { + // c++ bug in 2.40.0/0.9.52, drops SSU messages + if (toAddress.getVersion().equals("0.9.52")) { + markUnreachable(to); + return null; + } } // Check for supported sig type @@ -2106,12 +2113,12 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } else if (preferUDP()) { return _cachedBid[SLOW_BID]; } else if (haveCapacity()) { - if (addr.getCost() > DEFAULT_COST) + if (cost > DEFAULT_COST) return _cachedBid[SLOWEST_COST_BID]; else return _cachedBid[SLOWEST_BID]; } else { - if (addr.getCost() > DEFAULT_COST) + if (cost > DEFAULT_COST) return _cachedBid[NEAR_CAPACITY_COST_BID]; else return _cachedBid[NEAR_CAPACITY_BID]; diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java index 969acde5039e3613b6ecd24402c906277522a099..b311324ae5d1776c5b8d83e3a7e8220ccef7ff91 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java @@ -11,6 +11,7 @@ import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; +import net.i2p.CoreVersion; import net.i2p.crypto.EncType; import net.i2p.crypto.SHA256Generator; import net.i2p.crypto.SigType; @@ -19,6 +20,7 @@ import net.i2p.data.DataFormatException; import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.data.SessionKey; +import net.i2p.data.router.RouterAddress; import net.i2p.data.router.RouterIdentity; import net.i2p.data.router.RouterInfo; import net.i2p.router.LeaseSetKeys; @@ -498,6 +500,17 @@ public abstract class TunnelPeerSelector extends ConnectChecker { // minimum version check String v = peer.getVersion(); + if (v.equals("0.9.52")) { + // c++ bug in 2.40.0/0.9.52, drops SSU messages + for (RouterAddress addr : peer.getAddresses()) { + if (addr.getCost() == 9 && addr.getTransportStyle().equals("SSU")) + return true; + } + return false; + } + // quick check to skip the comparator + if (v.equals(CoreVersion.PUBLISHED_VERSION)) + return false; if (VersionComparator.comp(v, MIN_VERSION) < 0) return true;