Author: toad
Date: 2007-07-13 11:33:38 +0000 (Fri, 13 Jul 2007)
New Revision: 14063

Modified:
   trunk/freenet/src/freenet/node/OpennetManager.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Allow accepting node if it isn't connected within 1 minute of adding.
(There might have been a failure causing the other end to not add it; it won't 
be re-added on this end anyway).

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2007-07-13 11:31:40 UTC 
(rev 14062)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2007-07-13 11:33:38 UTC 
(rev 14063)
@@ -33,8 +33,12 @@

        // FIXME make this configurable
        static final int MAX_PEERS = 30;
-       // Chance of resetting path folding (for plausible deniability) is 1 in 
this number.
+       /** Chance of resetting path folding (for plausible deniability) is 1 
in this number. */
        static final int RESET_PATH_FOLDING_PROB = 20;
+       /** Don't re-add a node until it's been up and disconnected for at 
least this long */
+       static final int DONT_READD_TIME = 60*1000;
+       /** Don't drop a node until it's at least this old (time since added, 
or since startup */
+       static final int DROP_ELIGIBLE_TIME = 300*1000;

        public OpennetManager(Node node, NodeCryptoConfig opennetConfig) throws 
NodeInitException {
                this.node = node;
@@ -136,7 +140,9 @@
                        Logger.error(this, "Not adding self as opennet peer");
                        return false; // Equal to myself
                }
-               if(node.peers.containsPeer(pn)) {
+               PeerNode match;
+               if(((match = node.peers.containsPeer(pn)) != null) && 
(match.isConnected() || 
+                               ((!match.hasCompletedHandshake()) && 
match.timeSinceAddedOrRestarted() < DONT_READD_TIME))) {
                        Logger.error(this, "Not adding "+pn.userToString()+" to 
opennet list as already there");
                        return false;
                }

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-07-13 11:31:40 UTC 
(rev 14062)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-07-13 11:33:38 UTC 
(rev 14063)
@@ -1240,12 +1240,12 @@
                updatePMUserAlert();
        }

-       public boolean containsPeer(PeerNode pn) {
+       public PeerNode containsPeer(PeerNode pn) {
                PeerNode[] peers = pn.isOpennet() ? 
((PeerNode[])getOpennetPeers()) : ((PeerNode[])getDarknetPeers());

                for(int i=0;i<peers.length;i++)
-                       if(Arrays.equals(pn.getIdentity(), 
peers[i].getIdentity())) return true;
+                       if(Arrays.equals(pn.getIdentity(), 
peers[i].getIdentity())) return peers[i];

-               return false;
+               return null;
        }
 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-07-13 11:31:40 UTC 
(rev 14062)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-07-13 11:33:38 UTC 
(rev 14063)
@@ -126,6 +126,9 @@
     /** When was isRoutingCompatible() last true? */
     private long timeLastRoutable;

+    /** Time added or restarted (reset on startup unlike peerAddedTime) */
+    private long timeAddedOrRestarted;
+    
     /** Are we connected? If not, we need to start trying to
      * handshake.
      */
@@ -476,6 +479,7 @@
         timeLastReceivedSwapRequest = -1;
         timeLastConnected = -1;
         timeLastRoutable = -1;
+        timeAddedOrRestarted = System.currentTimeMillis();

         randomizeMaxTimeBetweenPacketSends();
         swapRequestsInterval = new SimpleRunningAverage(50, 
Node.MIN_INTERVAL_BETWEEN_INCOMING_SWAP_REQUESTS);
@@ -916,13 +920,20 @@
     }

     /**
-     * @return The time this PeerNode was added to the node
+     * @return The time this PeerNode was added to the node (persistent across 
restarts).
      */
     public synchronized long getPeerAddedTime() {
         return peerAddedTime;
     }

     /**
+     * @return The time elapsed since this PeerNode was added to the node, or 
the node started up.
+     */
+    public synchronized long timeSinceAddedOrRestarted() {
+       return System.currentTimeMillis() - timeAddedOrRestarted;
+    }
+    
+    /**
      * Disconnected e.g. due to not receiving a packet for ages.
      */
     public void disconnected() {
@@ -1661,7 +1672,6 @@
             throw new Error(e1);
         }
         BufferedReader br = new BufferedReader(isr);
-        SimpleFieldSet fs;
         try {
             return new SimpleFieldSet(br, false, true);
         } catch (IOException e) {


Reply via email to