Author: toad
Date: 2006-06-16 13:37:40 +0000 (Fri, 16 Jun 2006)
New Revision: 9228

Modified:
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
818: Fix serious connection bug when IP addresses change.

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-16 12:44:45 UTC 
(rev 9227)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-16 13:37:40 UTC 
(rev 9228)
@@ -977,7 +977,9 @@
     }

     private void setDetectedPeer(Peer newPeer) {
-       if(detectedPeer == null || !detectedPeer.equals(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;
        }
@@ -1292,7 +1294,7 @@
     /**
      * Process a new nodereference, as a SimpleFieldSet.
      */
-    private void processNewNoderef(SimpleFieldSet fs, boolean forARK) throws 
FSParseException {
+    private synchronized void processNewNoderef(SimpleFieldSet fs, boolean 
forARK) throws FSParseException {
         Logger.minor(this, "Parsing: \n"+fs);
         boolean changedAnything = false;
         String identityString = fs.get("identity");
@@ -1365,13 +1367,9 @@
         if(!Arrays.equals(oldPeers, nominalPeer.toArray(new 
Peer[nominalPeer.size()])))
                changedAnything = true;

-        if(nominalPeer.isEmpty()) {
-               Logger.normal(this, "No physical.udp in noderef for identity 
'"+identityString+"', possibly at location '"+locationString+"' with name 
'"+myName+"'");
-               // detectedPeer stays as it is
-        } else {
-            /* yes, we pick up a random one : it will be updated on handshake 
*/
-               this.setDetectedPeer((Peer) nominalPeer.firstElement());
-        }
+        // DO NOT change detectedPeer !!!
+        // The given physical.udp may be WRONG!!!
+        
         String name = fs.get("myName");
         if(name == null) throw new FSParseException("No name");
         // In future, ARKs may support automatic transition when the ARK key 
is changed.

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-16 12:44:45 UTC (rev 
9227)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-16 13:37:40 UTC (rev 
9228)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 817;
+       private static final int buildNumber = 818;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to