Author: toad
Date: 2007-12-13 23:46:55 +0000 (Thu, 13 Dec 2007)
New Revision: 16519

Modified:
   trunk/freenet/src/freenet/node/Announcer.java
   trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeIPDetector.java
Log:
Wait up to 2 minutes after startup for the IP to be detected before starting 
announcements.

Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java       2007-12-13 23:32:10 UTC 
(rev 16518)
+++ trunk/freenet/src/freenet/node/Announcer.java       2007-12-13 23:46:55 UTC 
(rev 16519)
@@ -232,12 +232,29 @@
                return false;
        }

+       private boolean ignoreIPUndetected;
+       static final int FORCE_ANNOUNCEMENT_NO_IP = 120*1000;
+       
        public void maybeSendAnnouncement() {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                if(logMINOR)
                        Logger.minor(this, "maybeSendAnnouncement()");
                long now = System.currentTimeMillis();
                if(enoughPeers()) return;
+               if((!ignoreIPUndetected) && (!node.ipDetector.hasValidIP())) {
+                       if(node.ipDetector.ipDetectorManager.hasDetectors()) {
+                               // Wait a bit
+                               node.getTicker().queueTimedJob(new Runnable() {
+                                       public void run() {
+                                               synchronized(Announcer.this) {
+                                                       if(ignoreIPUndetected) 
return;
+                                                       ignoreIPUndetected = 
true;
+                                               }
+                                               maybeSendAnnouncement();
+                                       }
+                               }, FORCE_ANNOUNCEMENT_NO_IP);
+                       }
+               }
                synchronized(this) {
                        // Second, do we have many announcements running?
                        if(runningAnnouncements > WANT_ANNOUNCEMENTS) {

Modified: trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
===================================================================
--- trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2007-12-13 
23:32:10 UTC (rev 16518)
+++ trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2007-12-13 
23:46:55 UTC (rev 16519)
@@ -694,5 +694,9 @@
                        // FIXME use status.externalPort.
                }
        }
+
+       public synchronized boolean hasDetectors() {
+               return plugins.length > 0;
+       }

 }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-12-13 23:32:10 UTC (rev 
16518)
+++ trunk/freenet/src/freenet/node/Node.java    2007-12-13 23:46:55 UTC (rev 
16519)
@@ -2844,4 +2844,17 @@
        public int getMaxOpennetPeers() {
                return maxOpennetPeers;
        }
+
+       public void onAddedValidIP() {
+               OpennetManager om;
+               synchronized(this) {
+                       om = opennet;
+               }
+               if(om != null) {
+                       Announcer announcer = om.announcer;
+                       if(announcer != null) {
+                               announcer.maybeSendAnnouncement();
+                       }
+               }
+       }
 }

Modified: trunk/freenet/src/freenet/node/NodeIPDetector.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeIPDetector.java  2007-12-13 23:32:10 UTC 
(rev 16518)
+++ trunk/freenet/src/freenet/node/NodeIPDetector.java  2007-12-13 23:46:55 UTC 
(rev 16519)
@@ -60,6 +60,7 @@
        private boolean hasDetectedIAD;
        /** Subsidiary detectors: NodeIPPortDetector's which rely on this 
object */
        private NodeIPPortDetector[] portDetectors;
+       private boolean hasValidIP;

        SimpleUserAlert maybeSymmetricAlert;

@@ -103,15 +104,34 @@

                if(node.clientCore != null) {
                        if (addedValidIP) {
-                               
node.clientCore.alerts.unregister(primaryIPUndetectedAlert);
+                               onAddedValidIP();
                        } else {
-                               
node.clientCore.alerts.register(primaryIPUndetectedAlert);
+                               onNotAddedValidIP();
                        }
                }
+               synchronized(this) {
+                       hasValidIP = addedValidIP;
+               }
                lastIPAddress = (FreenetInetAddress[]) addresses.toArray(new 
FreenetInetAddress[addresses.size()]);
                return lastIPAddress;
        }
-
+       
+       boolean hasValidIP() {
+               FreenetInetAddress[] addrs = detectPrimaryIPAddress();
+               synchronized(this) {
+                       return hasValidIP;
+               }
+       }
+       
+       private void onAddedValidIP() {
+               node.clientCore.alerts.unregister(primaryIPUndetectedAlert);
+               node.onAddedValidIP();
+       }
+       
+       private void onNotAddedValidIP() {
+               node.clientCore.alerts.register(primaryIPUndetectedAlert);
+       }
+       
        /**
         * Core of the IP detection algorithm.
         * @param addresses


Reply via email to