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;
     }


Reply via email to