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