Author: nextgens
Date: 2006-07-12 16:08:14 +0000 (Wed, 12 Jul 2006)
New Revision: 9578

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
   trunk/freenet/src/freenet/io/comm/PeerContext.java
   trunk/freenet/src/freenet/node/CHKInsertSender.java
   trunk/freenet/src/freenet/node/LocationManager.java
   trunk/freenet/src/freenet/node/NodeDispatcher.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
477: More work on N2NM over mandatory
Only allow N2NM to builds > 476

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-07-12 16:01:17 UTC (rev 9577)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-07-12 16:08:14 UTC (rev 9578)
@@ -303,7 +303,7 @@
                                }
                                String namePrefixString = "";
                                String nameSuffixString = "";
-                               if(pn.isConnected()) {
+                               if(pn.isConnected() && 
(Integer.valueOf(pn.getSimpleVersion()).intValue() > 476)) {
                                  namePrefixString = "<a 
href=\"/send_n2ntm/?peernode_hashcode="+pn.hashCode()+"\">";
                                  nameSuffixString = "</a>";
                                }

Modified: trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DummyPeerContext.java     2006-07-12 
16:01:17 UTC (rev 9577)
+++ trunk/freenet/src/freenet/io/comm/DummyPeerContext.java     2006-07-12 
16:08:14 UTC (rev 9578)
@@ -22,7 +22,7 @@
                // Do nothing
        }

-       public boolean isReallyConnected() {
+       public boolean isRoutable() {
                return false;
        }


Modified: trunk/freenet/src/freenet/io/comm/PeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/PeerContext.java  2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/io/comm/PeerContext.java  2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -17,5 +17,5 @@
        boolean isConnected();

        /** Is the peer connected? are we able to route requests to it? */
-       boolean isReallyConnected();
+       boolean isRoutable();
 }

Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -654,7 +654,7 @@
                        MessageFilter mf = null;
                        for(int i=0;i<waiters.length;i++) {
                                AwaitingCompletion awc = waiters[i];
-                               if(!awc.pn.isReallyConnected()) {
+                               if(!awc.pn.isRoutable()) {
                                        Logger.normal(this, "Disconnected: 
"+awc.pn+" in "+CHKInsertSender.this);
                                        continue;
                                }
@@ -686,7 +686,7 @@
                                        }
                                        if(noTimeLeft) {
                                                for(int 
i=0;i<waiters.length;i++) {
-                                                       
if(!waiters[i].pn.isReallyConnected()) continue;
+                                                       
if(!waiters[i].pn.isRoutable()) continue;
                                                        
if(!waiters[i].completedTransfer) {
                                                                
waiters[i].completedTransfer(false);
                                                        }
@@ -753,7 +753,7 @@
                                        if(noTimeLeft) {
                                                Logger.minor(this, "Overall 
timeout on "+CHKInsertSender.this);
                                                for(int 
i=0;i<waiters.length;i++) {
-                                                       
if(!waiters[i].pn.isReallyConnected()) continue;
+                                                       
if(!waiters[i].pn.isRoutable()) continue;
                                                        
if(!waiters[i].receivedCompletionNotice)
                                                                
waiters[i].completed(false, false);
                                                        
if(!waiters[i].completedTransfer)
@@ -778,7 +778,7 @@
                        boolean completedTransfers = true;
                        synchronized(nodesWaitingForCompletion) {
                                for(int i=0;i<waiters.length;i++) {
-                                       if(!waiters[i].pn.isReallyConnected()) 
continue;
+                                       if(!waiters[i].pn.isRoutable()) 
continue;
                                        if(!waiters[i].completedTransfer) {
                                                completedTransfers = false;
                                                break;
@@ -794,7 +794,7 @@
                                                }
                                                completedTransfers = true;
                                                for(int 
i=0;i<waiters.length;i++) {
-                                                       
if(!waiters[i].pn.isReallyConnected()) continue;
+                                                       
if(!waiters[i].pn.isRoutable()) continue;
                                                        
if(!waiters[i].completedTransfer) {
                                                                
completedTransfers = false;
                                                                break;

Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -124,7 +124,7 @@
                                 PeerNode[] peers = node.peers.connectedPeers;
                                 for(int i=0;i<peers.length;i++) {
                                     PeerNode pn = peers[i];
-                                    if(pn.isReallyConnected()) {
+                                    if(pn.isRoutable()) {
                                         double ploc = 
pn.getLocation().getValue();
                                         if(ploc == myLoc) {
                                             myFlag = true;
@@ -386,7 +386,7 @@
                 }

                 if(reply == null) {
-                    if(pn.isReallyConnected() && (System.currentTimeMillis() - 
pn.timeLastConnected() > TIMEOUT*2)) {
+                    if(pn.isRoutable() && (System.currentTimeMillis() - 
pn.timeLastConnected() > TIMEOUT*2)) {
                         // Timed out! Abort...
                         Logger.error(this, "Timed out waiting for 
SwapRejected/SwapReply on "+uid);
                     }
@@ -421,7 +421,7 @@
                 }

                 if(reply == null) {
-                    if(pn.isReallyConnected() && (System.currentTimeMillis() - 
pn.timeLastConnected() > TIMEOUT*2)) {
+                    if(pn.isRoutable() && (System.currentTimeMillis() - 
pn.timeLastConnected() > TIMEOUT*2)) {
                         // Hrrrm!
                         Logger.error(this, "Timed out waiting for SwapComplete 
- malicious node?? on "+uid);
                     }

Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java  2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java  2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -74,7 +74,7 @@
                return true;
         }

-        if(!source.isReallyConnected()) return false;
+        if(!source.isRoutable()) return false;

         if(spec == DMT.FNPLocChangeNotification) {
             double newLoc = m.getDouble(DMT.LOCATION);

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -153,7 +153,7 @@
                 Math.max(pn.lastReceivedPacketTime(), 
lastReceivedPacketFromAnyNode);
             if(pn.isConnected()) {

-               if(pn.isReallyConnected() && pn.shouldDisconnectNow()) {
+               if(pn.isRoutable() && pn.shouldDisconnectNow()) {
                        // we don't disconnect but we mark it incompatible
                        pn.invalidate();
                        pn.setPeerNodeStatus(now);

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -133,7 +133,7 @@
         // removing from connectedPeers
         ArrayList a = new ArrayList();
         for(int i=0;i<myPeers.length;i++) {
-               if((myPeers[i]!=pn) && myPeers[i].isReallyConnected())
+               if((myPeers[i]!=pn) && myPeers[i].isRoutable())
                        a.add(myPeers[i]);
         }

@@ -168,7 +168,7 @@
                        // removing from connectedPeers
                        ArrayList a = new ArrayList();
                        for(int i=0;i<myPeers.length;i++) {
-                               if((myPeers[i]!=pn) && 
myPeers[i].isReallyConnected())
+                               if((myPeers[i]!=pn) && myPeers[i].isRoutable())
                                        a.add(myPeers[i]);
                        }
                        PeerNode[] newConnectedPeers = new PeerNode[a.size()];
@@ -180,7 +180,7 @@
        }

     public void addConnectedPeer(PeerNode pn) {
-       if(!pn.isReallyConnected()) {
+       if(!pn.isRoutable()) {
                Logger.minor(this, "Not ReallyConnected: "+pn);
                return;
        }
@@ -272,7 +272,7 @@
         locs = new double[connectedPeers.length];
         int x = 0;
         for(int i=0;i<conns.length;i++) {
-            if(conns[i].isReallyConnected())
+            if(conns[i].isRoutable())
                 locs[x++] = conns[i].getLocation().getValue();
         }
         // Wipe out any information contained in the order
@@ -294,7 +294,7 @@
         for(int i=0;i<5;i++) {
             PeerNode pn = 
connectedPeers[node.random.nextInt(connectedPeers.length)];
             if(pn == exclude) continue;
-            if(pn.isReallyConnected()) return pn;
+            if(pn.isRoutable()) return pn;
         }
         // None of them worked
         // Move the un-connected ones out
@@ -304,14 +304,14 @@
         for(int i=0;i<myPeers.length;i++) {
             PeerNode pn = myPeers[i];
             if(pn == exclude) continue;
-            if(pn.isReallyConnected()) {
+            if(pn.isRoutable()) {
                 v.add(pn);
             } else {
                Logger.minor(this, "Excluding "+pn+" because is disconnected");
             }
         }
         int lengthWithoutExcluded = v.size();
-        if((exclude != null) && exclude.isReallyConnected())
+        if((exclude != null) && exclude.isRoutable())
             v.add(exclude);
         PeerNode[] newConnectedPeers = new PeerNode[v.size()];
         newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers);
@@ -327,7 +327,7 @@
     public void localBroadcast(Message msg) {
         PeerNode[] peers = connectedPeers; // avoid synchronization
         for(int i=0;i<peers.length;i++) {
-            if(peers[i].isReallyConnected()) try {
+            if(peers[i].isRoutable()) try {
                 peers[i].sendAsync(msg, null, 0, null);
             } catch (NotConnectedException e) {
                 // Ignore
@@ -348,7 +348,7 @@
         PeerNode best = null;
         for(int i=0;i<peers.length;i++) {
             PeerNode p = peers[i];
-            if(!p.isReallyConnected()) continue;
+            if(!p.isRoutable()) continue;
             double diff = distance(p, loc);
             if(diff < bestDiff) {
                 best = p;
@@ -423,7 +423,7 @@
                Logger.minor(this, "Skipping (req came from): "+p.getPeer());
                continue;
             }
-            if(!p.isReallyConnected()) {
+            if(!p.isRoutable()) {
                Logger.minor(this, "Skipping (not connected): "+p.getPeer());
                continue;
             }
@@ -580,7 +580,7 @@
        public boolean anyConnectedPeers() {
                PeerNode[] conns = connectedPeers;
                for(int i=0;i<conns.length;i++) {
-                       if(conns[i].isReallyConnected()) return true;
+                       if(conns[i].isRoutable()) return true;
                }
                return false;
        }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-07-12 16:01:17 UTC 
(rev 9577)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-07-12 16:08:14 UTC 
(rev 9578)
@@ -113,7 +113,7 @@
      * handshake.
      */
     private boolean isConnected;
-    
+    private boolean isRoutable;
     /**
      * ARK fetcher.
      */
@@ -680,12 +680,15 @@
      * Note possible deadlocks! PeerManager calls this, we call
      * PeerManager in e.g. verified.
      */
-    public boolean isReallyConnected() {
-        return isConnected;
+    public boolean isRoutable() {
+        return isConnected() && isRoutingCompatible();
     }

+    public boolean isRoutingCompatible(){
+       return isRoutable;
+    }
     public boolean isConnected(){
-       return (isConnected) || (completedHandshake && 
(verifiedIncompatibleNewerVersion || verifiedIncompatibleOlderVersion));
+       return isConnected;
     }

     /**
@@ -736,6 +739,7 @@
         synchronized(this) {
                // Force renegotiation.
             isConnected = false;
+            isRoutable = false;
             completedHandshake = false;
             setPeerNodeStatus(now);
             // Prevent sending packets to the node until that happens.
@@ -1109,6 +1113,7 @@
                        Logger.error(this, "Failed to parse new noderef for 
"+this+": "+e1, e1);
                        // Treat as invalid version
                }
+               isRoutable = true;
                if(reverseInvalidVersion()) {
                        try {
                                
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(lastGoodVersion));
@@ -1117,7 +1122,7 @@
                        }
                        Logger.normal(this, "Not connecting to "+this+" - 
reverse invalid version "+Version.getVersionString()+" for peer's 
lastGoodversion: "+lastGoodVersion);
                        verifiedIncompatibleNewerVersion = true;
-                       isConnected = false;
+                       isRoutable = false;
                        node.peers.disconnected(this);
                } else {
                        verifiedIncompatibleNewerVersion = false;
@@ -1125,12 +1130,12 @@
                if(invalidVersion()) {
                        Logger.normal(this, "Not connecting to "+this+" - 
invalid version "+version);
                        verifiedIncompatibleOlderVersion = true;
-                       isConnected = false;
+                       isRoutable = false;
                        node.peers.disconnected(this);
                } else {
                        verifiedIncompatibleOlderVersion = false;
                }
-               
+               isConnected = true;
                setPeerNodeStatus(now);
                KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
                changedIP(replyTo);
@@ -1194,7 +1199,7 @@
             else return;
             if(unverifiedTracker != null) return;
         }
-        if(isReallyConnected())
+        if(isRoutable())
                sendInitialMessages();
     }

@@ -1461,12 +1466,12 @@

     public String getStatus() {
        String status;
-       if(isConnected)
-               status = new String("CONNECTED");
+       if(isRoutable())
+               status = "CONNECTED";
        else if (isConnected())
-               status = new String("INCOMPATIBLE");
+               status = "INCOMPATIBLE";
        else
-               status = new String("DISCONNECTED");
+               status = "DISCONNECTED";
         return 
                status + " " + getPeer()+" "+myName+" 
"+currentLocation.getValue()+" "+getVersion()+" backoff: 
"+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil - 
System.currentTimeMillis(),0))+")";
     }
@@ -1490,7 +1495,7 @@
        }

        public String getSimpleVersion(){
-               return (new 
Integer(Version.getArbitraryBuildNumber(version))).toString();
+               return String.valueOf(Version.getArbitraryBuildNumber(version));
        }

     /**
@@ -1790,7 +1795,8 @@
                        pingAverage.report(now - startTime);
                        Logger.minor(this, "Reporting ping time to "+this+" : 
"+(now - startTime));
                }
-               if(!isReallyConnected()){
+               
+               if(!shouldDisconnectNow()){
                                invalidate();
                                setPeerNodeStatus(now);
                }
@@ -1983,7 +1989,7 @@

        public synchronized void setPeerNodeStatus(long now) {
                int oldPeerNodeStatus = peerNodeStatus;
-               if(isConnected) {
+               if(isRoutable()) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
                        if(now < routingBackedOffUntil) {
                                peerNodeStatus = 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
@@ -2002,9 +2008,9 @@
                        }
                } else if(isDisabled) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_DISABLED;
-               } else if(completedHandshake && 
verifiedIncompatibleNewerVersion) {
+               } else if(isConnected && verifiedIncompatibleNewerVersion) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_TOO_NEW;
-               } else if(completedHandshake && 
verifiedIncompatibleOlderVersion) {
+               } else if(isConnected && verifiedIncompatibleOlderVersion) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_TOO_OLD;
                } else if(neverConnected) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_NEVER_CONNECTED;
@@ -2070,6 +2076,7 @@
         * This will return true if our lastGoodBuild has changed due to a 
timed mandatory.
         */
        public synchronized boolean shouldDisconnectNow() {
+               // We should disconnect here if "protocol version missmatch", 
maybe throwing an exception
                verifiedIncompatibleOlderVersion = invalidVersion();
                verifiedIncompatibleNewerVersion = reverseInvalidVersion();
                if(verifiedIncompatibleNewerVersion || 
verifiedIncompatibleOlderVersion) return true;
@@ -2077,7 +2084,7 @@
        }

        protected synchronized void invalidate(){
-               isConnected = false;
+               isRoutable = false;
         Logger.normal(this, "Invalidated "+this);
        }


Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-12 16:01:17 UTC (rev 
9577)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-12 16:08:14 UTC (rev 
9578)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

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

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


Reply via email to