From 7197d22f2a47dc8f64e5e6f1a16f7ba121a21bbc Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Fri, 4 Nov 2016 13:44:24 +0000
Subject: [PATCH] Transports: New config option i2np.allowLocal, replaces
 i2np.udp.allowLocal and i2np.ntcp.allowLocal, fixes test networks (ticket
 #1875)

---
 router/java/src/net/i2p/router/MultiRouter.java       |  3 +--
 .../src/net/i2p/router/transport/TransportImpl.java   |  9 +++++++++
 .../src/net/i2p/router/transport/TransportUtil.java   |  3 +++
 .../net/i2p/router/transport/ntcp/NTCPTransport.java  |  2 +-
 .../net/i2p/router/transport/udp/UDPTransport.java    | 11 +----------
 router/java/test/junit/net/i2p/router/SSUDemo.java    |  3 +--
 6 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/router/java/src/net/i2p/router/MultiRouter.java b/router/java/src/net/i2p/router/MultiRouter.java
index abcd32e3d0..8e663f8edf 100644
--- a/router/java/src/net/i2p/router/MultiRouter.java
+++ b/router/java/src/net/i2p/router/MultiRouter.java
@@ -193,8 +193,7 @@ public class MultiRouter {
         props.setProperty("i2np.udp.host", "127.0.0.1");
         props.setProperty("i2np.ntcp.port", BASE_PORT + id + "");
         props.setProperty("i2np.udp.port", BASE_PORT + id + "");
-        props.setProperty("i2np.ntcp.allowLocal", "true");
-        props.setProperty("i2np.udp.allowLocal", "true");
+        props.setProperty("i2np.allowLocal", "true");
         props.setProperty("i2np.udp.internalPort", BASE_PORT + id + "");
         props.setProperty("i2cp.port", Integer.toString((BASE_PORT + nbrRouters + id)));   
 
diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java
index d3f3a8d5fa..6e1df54ea7 100644
--- a/router/java/src/net/i2p/router/transport/TransportImpl.java
+++ b/router/java/src/net/i2p/router/transport/TransportImpl.java
@@ -943,6 +943,15 @@ public abstract class TransportImpl implements Transport {
                       yes ? new Exception() : null);
     }
 
+    /**
+     * Are we allowed to connect to local addresses?
+     *
+     * @since 0.9.28 moved from UDPTransport
+     */
+    protected boolean allowLocal() {
+        return _context.getBooleanProperty("i2np.allowLocal");
+    }
+
     /**
      * IP of the peer from the last connection (in or out, any transport).
      *
diff --git a/router/java/src/net/i2p/router/transport/TransportUtil.java b/router/java/src/net/i2p/router/transport/TransportUtil.java
index de8dc0f78d..16ede3b344 100644
--- a/router/java/src/net/i2p/router/transport/TransportUtil.java
+++ b/router/java/src/net/i2p/router/transport/TransportUtil.java
@@ -13,6 +13,7 @@ import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.Map;
 
+import net.i2p.I2PAppContext;
 import net.i2p.data.router.RouterAddress;
 import net.i2p.router.RouterContext;
 
@@ -131,6 +132,8 @@ public abstract class TransportUtil {
      *  @since IPv6
      */
     public static boolean isPubliclyRoutable(byte addr[], boolean allowIPv4, boolean allowIPv6) {
+        if (I2PAppContext.getGlobalContext().getBooleanProperty("i2np.allowLocal"))
+            return true;
         if (addr.length == 4) {
             if (!allowIPv4)
                 return false;
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index d371a936f5..13cba50f59 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -436,7 +436,7 @@ public class NTCPTransport extends TransportImpl {
                 continue;
             }
             if (!isValid(ip)) {
-                if (! _context.getBooleanProperty("i2np.ntcp.allowLocal")) {
+                if (! allowLocal()) {
                     //_context.statManager().addRateData("ntcp.bidRejectedLocalAddress", 1);
                     //if (_log.shouldLog(Log.DEBUG))
                     //    _log.debug("no bid when trying to send to " + peer + " as they have a private ntcp address");
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 760e132ea6..b2461c2031 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -1093,16 +1093,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             return true;
         return allowLocal();
     }
-    
-    /**
-     * Are we allowed to connect to local addresses?
-     *
-     * @since IPv6
-     */
-    boolean allowLocal() {
-        return _context.getBooleanProperty("i2np.udp.allowLocal");
-    }
-    
+
     /**
      *  Was true before 0.9.2
      *  Now false if we need introducers (as perhaps that's why we need them,
diff --git a/router/java/test/junit/net/i2p/router/SSUDemo.java b/router/java/test/junit/net/i2p/router/SSUDemo.java
index 5ae9ba101b..2c94f9ba8b 100644
--- a/router/java/test/junit/net/i2p/router/SSUDemo.java
+++ b/router/java/test/junit/net/i2p/router/SSUDemo.java
@@ -64,8 +64,7 @@ public class SSUDemo {
         envProps.setProperty("time.disabled", "false");
         // allow 127.0.0.1/10.0.0.1/etc (useful for testing).  If this is false,
         // peers who say they're on an invalid IP are banlisted
-        envProps.setProperty("i2np.udp.allowLocal", "true");
-        envProps.setProperty("i2np.ntcp.allowLocal", "true");
+        envProps.setProperty("i2np.allowLocal", "true");
         // IPv6
         envProps.setProperty("i2np.udp.ipv6", "enable");
         envProps.setProperty("i2np.ntcp.ipv6", "enable");
-- 
GitLab