Author: toad
Date: 2006-06-10 14:05:20 +0000 (Sat, 10 Jun 2006)
New Revision: 9128
Modified:
trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
trunk/freenet/src/freenet/node/DNSRequester.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
795: Simplify code. The _addr should always be just the raw IP, not the name.
Modified: trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java 2006-06-10
11:26:44 UTC (rev 9127)
+++ trunk/freenet/src/freenet/io/comm/FreenetInetAddress.java 2006-06-10
14:05:20 UTC (rev 9128)
@@ -180,7 +180,7 @@
if (_address != null && hostname == null) {
return _address;
} else {
- Logger.minor(this, "Looking up '"+hostname+"' in DNS");
+ Logger.minor(this, "Looking up '"+hostname+"' in DNS");
/*
* Peers are constructed from an address once a
* handshake has been completed, so this lookup
@@ -192,18 +192,19 @@
* DNS lookup with every packet we send.
*/
try {
- InetAddress addr = InetAddress.getByName(hostname);
- //Logger.normal(this, "Look up got '"+addr+"'");
- if( addr != null ) {
- /*
- * cache the answer since getHandshakeAddress()
- * doesn't use the cached value, thus
- * getHandshakeIPs() should always get the
- * latest value from DNS (minus Java's caching)
- */
- this._address = addr;
- }
- return addr;
+ InetAddress addr = InetAddress.getByName(hostname);
+ Logger.minor(this, "Look up got '"+addr+"'");
+ if( addr != null ) {
+ /*
+ * cache the answer since getHandshakeAddress()
+ * doesn't use the cached value, thus
+ * getHandshakeIPs() should always get the
+ * latest value from DNS (minus Java's caching)
+ */
+ this._address =
InetAddress.getByAddress(addr.getAddress());
+ Logger.minor(this, "Setting address to
"+_address);
+ }
+ return addr;
} catch (UnknownHostException e) {
return null;
}
Modified: trunk/freenet/src/freenet/node/DNSRequester.java
===================================================================
--- trunk/freenet/src/freenet/node/DNSRequester.java 2006-06-10 11:26:44 UTC
(rev 9127)
+++ trunk/freenet/src/freenet/node/DNSRequester.java 2006-06-10 14:05:20 UTC
(rev 9128)
@@ -58,9 +58,11 @@
}
for(int i=0;i<nodes.length;i++) {
PeerNode pn = nodes[i];
+ Logger.minor(this, "Node: "+pn);
if(!pn.isConnected()) {
// Not connected
// Try new DNS lookup
+ Logger.minor(this, "Doing lookup on "+pn);
pn.maybeUpdateHandshakeIPs(false);
}
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-06-10 11:26:44 UTC
(rev 9127)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-06-10 14:05:20 UTC
(rev 9128)
@@ -505,7 +505,7 @@
private String handshakeIPsToString() {
Peer[] localHandshakeIPs;
synchronized(this) {
- localHandshakeIPs = handshakeIPs;
+ localHandshakeIPs = handshakeIPs;
}
if(localHandshakeIPs == null)
return "null";
@@ -556,13 +556,15 @@
*/
public void maybeUpdateHandshakeIPs(boolean ignoreHostnames) {
long now = System.currentTimeMillis();
- if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) return;
// 5 minutes
+ if((now - lastAttemptedHandshakeIPUpdateTime) < (5*60*1000)) {
+ Logger.minor(this, "Looked up recently");
+ return; // 5 minutes FIXME
+ }
// We want to come back right away for DNS requesting if this is our
first time through
if(!ignoreHostnames)
lastAttemptedHandshakeIPUpdateTime = now;
Logger.minor(this, "Updating handshake IPs for peer '"+getPeer()+"'
named '"+myName+"' ("+ignoreHostnames+")");
Peer[] localHandshakeIPs;
- Peer[] p = null;
Peer[] myNominalPeer;
// Don't synchronize while doing lookups which may take a long time!
@@ -572,7 +574,7 @@
if(myNominalPeer.length == 0) {
if(detectedPeer == null) {
- localHandshakeIPs = null;
+ localHandshakeIPs = null;
synchronized(this) {
handshakeIPs = localHandshakeIPs;
}
@@ -587,38 +589,46 @@
Logger.minor(this, "2: maybeUpdateHandshakeIPs got a result of:
"+handshakeIPsToString());
return;
}
-
- if( detectedPeer != null && ! nominalPeer.contains(detectedPeer)){
- p= new Peer[1+nominalPeer.size()];
- p[0]=detectedPeer;
- for(int i=1;i<nominalPeer.size()+1;i++)
- p[i]=(Peer) nominalPeer.get(i-1);
- }else{
- p = (Peer[]) nominalPeer.toArray(new Peer[nominalPeer.size()]);
- }
-
+
// Hack for two nodes on the same IP that can't talk over inet for
routing reasons
FreenetInetAddress localhost = node.fLocalhostAddress;
FreenetInetAddress nodeAddr = node.getPrimaryIPAddress();
- Peer extra = null;
- for(int i=0;i<p.length;i++) {
- FreenetInetAddress a = p[i].getFreenetAddress();
- if(a.equals(nodeAddr)) {
- extra = new Peer(localhost, p[i].getPort());
+ Vector peers = new Vector(nominalPeer);
+
+ boolean addedLocalhost = false;
+ Peer detectedDuplicate = null;
+ for(int i=0;i<nominalPeer.size();i++) {
+ Peer p = (Peer) nominalPeer.get(i);
+ if(p == null) continue;
+ if(detectedPeer != null) {
+ if(p != detectedPeer && p.equals(detectedPeer)) {
+ // Equal but not the same object; need to
update the copy.
+ detectedDuplicate = p;
+ }
}
+ FreenetInetAddress addr = p.getFreenetAddress();
+ if(addr.equals(localhost)) {
+ if(addedLocalhost) continue;
+ addedLocalhost = true;
+ }
+ if(addr.equals(nodeAddr)) {
+ if(!addedLocalhost)
+ peers.add(localhost);
+ }
+ if(peers.contains(p)) continue;
+ peers.add(p);
}
- if(extra != null) {
- Peer[] newPeers = new Peer[p.length+1];
- System.arraycopy(p, 0, newPeers, 0, p.length);
- newPeers[p.length] = extra;
- p = newPeers;
- }
- localHandshakeIPs = p;
+
+ localHandshakeIPs = (Peer[]) peers.toArray(new Peer[peers.size()]);
localHandshakeIPs = updateHandshakeIPs(localHandshakeIPs,
ignoreHostnames);
synchronized(this) {
handshakeIPs = localHandshakeIPs;
+ if(detectedDuplicate != null &&
detectedDuplicate.equals(detectedPeer)) {
+ detectedPeer = detectedDuplicate;
+ }
}
+ Logger.minor(this, "3: detectedPeer = "+detectedPeer+"
("+detectedPeer.getAddress(false));
Logger.minor(this, "3: maybeUpdateHandshakeIPs got a result of:
"+handshakeIPsToString());
return;
}