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;