Author: toad
Date: 2008-09-03 22:29:26 +0000 (Wed, 03 Sep 2008)
New Revision: 22393

Modified:
   trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
   trunk/freenet/src/freenet/node/NodeCryptoConfig.java
   trunk/freenet/src/freenet/node/NodeIPDetector.java
   trunk/freenet/src/freenet/node/NodeIPPortDetector.java
   trunk/freenet/src/freenet/support/transport/ip/IPAddressDetector.java
Log:
Make includeLocalAddressesInNoderefs per-port i.e. one for opennet, one for 
darknet.


Modified: trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
===================================================================
--- trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2008-09-03 
22:20:01 UTC (rev 22392)
+++ trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2008-09-03 
22:29:26 UTC (rev 22393)
@@ -423,7 +423,7 @@
                PeerNode[] peers = node.getPeerNodes();
                PeerNode[] conns = node.getConnectedPeers();
                int peerCount = node.peers.countValidPeers();
-               FreenetInetAddress[] nodeAddrs = detector.getPrimaryIPAddress();
+               FreenetInetAddress[] nodeAddrs = 
detector.getPrimaryIPAddress(true);
                long now = System.currentTimeMillis();
                synchronized(this) {
                        if(plugins.length == 0) {

Modified: trunk/freenet/src/freenet/node/NodeCryptoConfig.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeCryptoConfig.java        2008-09-03 
22:20:01 UTC (rev 22392)
+++ trunk/freenet/src/freenet/node/NodeCryptoConfig.java        2008-09-03 
22:29:26 UTC (rev 22393)
@@ -51,6 +51,9 @@
         * aggressive handshakes (every 10-30 seconds). */
        private boolean assumeNATed;

+       /** If true, include local addresses on noderefs */
+       public boolean includeLocalAddressesInNoderefs;
+       
        NodeCryptoConfig(SubConfig config, int sortOrder, boolean isOpennet, 
SecurityLevels securityLevels) throws NodeInitException {
                this.isOpennet = isOpennet;

@@ -199,6 +202,22 @@
                        }               
                });
                assumeNATed = config.getBoolean("assumeNATed");
+               
+               // Include local IPs in noderef file
+               
+               config.register("includeLocalAddressesInNoderefs", false, 
sortOrder++, true, false, "NodeIPDectector.inclLocalAddress", 
"NodeIPDectector.inclLocalAddressLong", new BooleanCallback() {
+
+                       public Boolean get() {
+                               return includeLocalAddressesInNoderefs;
+                       }
+
+                       public void set(Boolean val) throws 
InvalidConfigValueException {
+                               includeLocalAddressesInNoderefs = val;
+                       }
+               });
+               
+               includeLocalAddressesInNoderefs = 
config.getBoolean("includeLocalAddressesInNoderefs");
+               
        }

        /** The number of config options i.e. the amount to increment sortOrder 
by */
@@ -264,4 +283,9 @@
        public boolean alwaysHandshakeAggressively() {
                return assumeNATed;
        }
+       
+       public boolean includeLocalAddressesInNoderefs() {
+               return includeLocalAddressesInNoderefs;
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/NodeIPDetector.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeIPDetector.java  2008-09-03 22:20:01 UTC 
(rev 22392)
+++ trunk/freenet/src/freenet/node/NodeIPDetector.java  2008-09-03 22:29:26 UTC 
(rev 22393)
@@ -2,6 +2,7 @@

 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -61,8 +62,6 @@
        private static IPUndetectedUserAlert primaryIPUndetectedAlert;
        // FIXME redundant? see lastIPAddress
        FreenetInetAddress[] lastIP;
-       /** If true, include local addresses on noderefs */
-       public boolean includeLocalAddressesInNoderefs;
        /** Set when we have grounds to believe that we may be behind a 
symmetric NAT. */
        boolean maybeSymmetric;
        private boolean hasDetectedPM;
@@ -97,7 +96,7 @@
         * 
         * Will warn the user with a UserAlert if we don't have sufficient 
information.
         */
-       FreenetInetAddress[] detectPrimaryIPAddress() {
+       FreenetInetAddress[] detectPrimaryIPAddress(boolean dumpLocalAddresses) 
{
                boolean addedValidIP = false;
                Logger.minor(this, "Redetecting IPs...");
                Vector addresses = new Vector();
@@ -131,6 +130,14 @@
                        hasValidIP = addedValidIP;
                }
                lastIPAddress = (FreenetInetAddress[]) addresses.toArray(new 
FreenetInetAddress[addresses.size()]);
+               if(dumpLocalAddresses) {
+                       ArrayList filtered = new 
ArrayList(lastIPAddress.length);
+                       for(int i=0;i<lastIPAddress.length;i++) {
+                               
if(IPUtil.isValidAddress(lastIPAddress[i].getAddress(), false))
+                                       filtered.add(lastIPAddress[i]);
+                       }
+                       return (FreenetInetAddress[]) filtered.toArray(new 
FreenetInetAddress[filtered.size()]);
+               }
                return lastIPAddress;
        }

@@ -283,8 +290,8 @@
                return L10n.getString("NodeIPDetector."+key, pattern, value);
        }

-       FreenetInetAddress[] getPrimaryIPAddress() {
-               if(lastIPAddress == null) return detectPrimaryIPAddress();
+       FreenetInetAddress[] getPrimaryIPAddress(boolean dumpLocal) {
+               if(lastIPAddress == null) return 
detectPrimaryIPAddress(dumpLocal);
                return lastIPAddress;
        }

@@ -321,7 +328,7 @@
        }

        public void redetectAddress() {
-               FreenetInetAddress[] newIP = detectPrimaryIPAddress();
+               FreenetInetAddress[] newIP = detectPrimaryIPAddress(false);
                NodeIPPortDetector[] detectors;
                synchronized(this) {
                        if(Arrays.equals(newIP, lastIP)) return;
@@ -337,10 +344,6 @@
                this.oldIPAddress = freenetAddress;
        }

-       public boolean includeLocalAddressesInNoderefs() {
-               return includeLocalAddressesInNoderefs;
-       }
-
        public int registerConfigs(SubConfig nodeConfig, int sortOrder) {
                // IP address override
                nodeConfig.register("ipAddressOverride", "", sortOrder++, true, 
false, "NodeIPDectector.ipOverride", 
@@ -444,23 +447,6 @@
                        }
                }

-               // Include local IPs in noderef file
-               
-               nodeConfig.register("includeLocalAddressesInNoderefs", false, 
sortOrder++, true, false, "NodeIPDectector.inclLocalAddress", 
"NodeIPDectector.inclLocalAddressLong", new BooleanCallback() {
-
-                       public Boolean get() {
-                               return includeLocalAddressesInNoderefs;
-                       }
-
-                       public void set(Boolean val) throws 
InvalidConfigValueException {
-                               includeLocalAddressesInNoderefs = val;
-                               lastIPAddress = null;
-                               ipDetector.clearCached();
-                       }
-               });
-               
-               includeLocalAddressesInNoderefs = 
nodeConfig.getBoolean("includeLocalAddressesInNoderefs");
-               
                return sortOrder;
        }


Modified: trunk/freenet/src/freenet/node/NodeIPPortDetector.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeIPPortDetector.java      2008-09-03 
22:20:01 UTC (rev 22392)
+++ trunk/freenet/src/freenet/node/NodeIPPortDetector.java      2008-09-03 
22:29:26 UTC (rev 22393)
@@ -49,7 +49,7 @@
                        // he is on a multi-homed box where only one IP can be 
used for Freenet.
                        return new FreenetInetAddress[] { addr };
                }
-               return ipDetector.detectPrimaryIPAddress();
+               return 
ipDetector.detectPrimaryIPAddress(crypto.config.includeLocalAddressesInNoderefs);
        }

        /**

Modified: trunk/freenet/src/freenet/support/transport/ip/IPAddressDetector.java
===================================================================
--- trunk/freenet/src/freenet/support/transport/ip/IPAddressDetector.java       
2008-09-03 22:20:01 UTC (rev 22392)
+++ trunk/freenet/src/freenet/support/transport/ip/IPAddressDetector.java       
2008-09-03 22:29:26 UTC (rev 22393)
@@ -187,9 +187,8 @@
                                                // Wildcard address, 0.0.0.0, 
ignore.
                                        } else if(i.isLinkLocalAddress() || 
i.isLoopbackAddress() ||
                                                        i.isSiteLocalAddress()) 
{
-                                               
if(detector.includeLocalAddressesInNoderefs()) {
-                                                       output.add(i);
-                                               }
+                                               // Will be filtered out later 
if necessary.
+                                               output.add(i);
                                        } else if(i.isMulticastAddress()) {
                                                // Ignore
                                        } else {


Reply via email to