Author: toad
Date: 2006-08-31 15:49:33 +0000 (Thu, 31 Aug 2006)
New Revision: 10305
Modified:
trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
trunk/freenet/src/freenet/node/NodeIPDetector.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
IP detection related:
Logging.
Detect every 12 hours if have a directly detected IP.
Locking.
What is peerAddedTime = 1 for? Set it to 0.
Send an IP-detected message if the other side's IP changes while a connection
is open.
Modified: trunk/freenet/src/freenet/node/IPDetectorPluginManager.java
===================================================================
--- trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2006-08-31
15:35:02 UTC (rev 10304)
+++ trunk/freenet/src/freenet/node/IPDetectorPluginManager.java 2006-08-31
15:49:33 UTC (rev 10305)
@@ -169,8 +169,8 @@
if(detector.hasDirectlyDetectedIP()) {
// We might still be firewalled?
// First, check only once per day or startup
- if(now - lastDetectAttemptEndedTime <
24*60*60*1000) {
- if(logMINOR) Logger.minor(this, "Node
has directly detected IP and we have checked less than 24 hours ago");
+ if(now - lastDetectAttemptEndedTime <
12*60*60*1000) {
+ if(logMINOR) Logger.minor(this, "Node
has directly detected IP and we have checked less than 12 hours ago");
return;
}
Modified: trunk/freenet/src/freenet/node/NodeIPDetector.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeIPDetector.java 2006-08-31 15:35:02 UTC
(rev 10304)
+++ trunk/freenet/src/freenet/node/NodeIPDetector.java 2006-08-31 15:49:33 UTC
(rev 10305)
@@ -69,6 +69,7 @@
* third parties if available and UP&P if available.
*/
Peer[] detectPrimaryIPAddress() {
+ Logger.minor(this, "Redetecting IPs...");
boolean setMaybeSymmetric = false;
Vector addresses = new Vector();
if(overrideIPAddress != null) {
@@ -121,6 +122,7 @@
if(countsByPeer.size() == 1) {
Iterator it = countsByPeer.keySet().iterator();
Peer p = (Peer) (it.next());
+ Logger.minor(this, "Everyone agrees we are "+p);
if(!addresses.contains(p)) addresses.add(p);
} else if(countsByPeer.size() > 1) {
Iterator it = countsByPeer.keySet().iterator();
@@ -220,9 +222,11 @@
public void redetectAddress() {
Peer[] newIP = detectPrimaryIPAddress();
- if(Arrays.equals(newIP, lastIP)) return;
+ synchronized(this) {
+ if(Arrays.equals(newIP, lastIP)) return;
+ lastIP = newIP;
+ }
arkPutter.update();
- lastIP = newIP;
node.writeNodeFile();
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-08-31 15:35:02 UTC
(rev 10304)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-08-31 15:49:33 UTC
(rev 10305)
@@ -493,7 +493,7 @@
long tempPeerAddedTime =
Long.parseLong(tempPeerAddedTimeString);
peerAddedTime = tempPeerAddedTime;
} else {
- peerAddedTime = 1;
+ peerAddedTime = 0;
}
neverConnected =
Fields.stringToBool(metadata.get("neverConnected"), false);
if((now - peerAddedTime) > (((long) 30)*24*60*60*1000)) { //
30 days
@@ -1191,13 +1191,17 @@
setDetectedPeer(newPeer);
}
- private synchronized void setDetectedPeer(Peer newPeer) {
+ private void setDetectedPeer(Peer newPeer) {
// Only clear lastAttemptedHandshakeIPUpdateTime if we have a new IP.
// Also, we need to call .equals() to propagate any DNS lookups that
have been done if the two have the same domain.
- if((newPeer != null) && ((detectedPeer == null) ||
!detectedPeer.equals(newPeer))) {
- this.detectedPeer=newPeer;
- this.lastAttemptedHandshakeIPUpdateTime = 0;
+ synchronized(this) {
+ if((newPeer != null) && ((detectedPeer == null) ||
!detectedPeer.equals(newPeer))) {
+ this.detectedPeer=newPeer;
+ this.lastAttemptedHandshakeIPUpdateTime = 0;
+ if(!isConnected) return;
+ } else return;
}
+ sendIPAddressMessage();
}
/**
@@ -1437,6 +1441,15 @@
Logger.error(this, "Completed handshake with "+getPeer()+" but
disconnected ("+isConnected+":"+currentTracker+"!!!: "+e, e);
}
}
+
+ private void sendIPAddressMessage() {
+ Message ipMsg = DMT.createFNPDetectedIPAddress(getDetectedPeer());
+ try {
+ sendAsync(ipMsg, null, 0, null);
+ } catch (NotConnectedException e) {
+ Logger.normal(this, "Sending IP change message to "+this+" but
disconnected: "+e, e);
+ }
+ }
/**
* Called when a packet is successfully decrypted on a given