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


Reply via email to