Author: nextgens
Date: 2007-11-29 14:53:53 +0000 (Thu, 29 Nov 2007)
New Revision: 16083

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
JFK: force disconnect from a peer if it hasn't rekeyed 5mins after we asked it 
to

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-11-29 
14:34:11 UTC (rev 16082)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-11-29 
14:53:53 UTC (rev 16083)
@@ -105,6 +105,8 @@
        public static final int TRANSIENT_KEY_REKEYING_MIN_INTERVAL = 
30*60*1000;
         /** The rekeying interval for the session key (keytrackers) */
         public static final int SESSION_KEY_REKEYING_INTERVAL = 60*60*1000;
+       /** The max amount of time we will accept to use the current tracker 
when it should have been replaced */
+       public static final int MAX_SESSION_KEY_REKEYING_DELAY = 5*60*1000;
         /** The amount of data sent before we ask for a rekey */
         public static final int AMOUNT_OF_BYTES_ALLOWED_BEFORE_WE_REKEY = 1024 
* 1024 * 1024;
        /** The Runnable in charge of rekeying on a regular basis */

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-11-29 14:34:11 UTC 
(rev 16082)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-11-29 14:53:53 UTC 
(rev 16083)
@@ -61,6 +61,7 @@
 import freenet.support.Logger;
 import freenet.support.ShortBuffer;
 import freenet.support.SimpleFieldSet;
+import freenet.support.TimeUtil;
 import freenet.support.WouldBlockException;
 import freenet.support.math.RunningAverage;
 import freenet.support.math.SimpleRunningAverage;
@@ -968,10 +969,16 @@
         if(hasLiveHandshake(now)) return;
         synchronized (this) {
             if(isRekeying || !isConnected) return;
-            if((timeLastRekeyed + 
FNPPacketMangler.SESSION_KEY_REKEYING_INTERVAL < now) || 
(totalBytesExchangedWithCurrentTracker > 
FNPPacketMangler.AMOUNT_OF_BYTES_ALLOWED_BEFORE_WE_REKEY)) {
+           long timeWhenRekeyingShouldOccur = timeLastRekeyed + 
FNPPacketMangler.SESSION_KEY_REKEYING_INTERVAL;
+            if((timeWhenRekeyingShouldOccur < now) || 
(totalBytesExchangedWithCurrentTracker > 
FNPPacketMangler.AMOUNT_OF_BYTES_ALLOWED_BEFORE_WE_REKEY)) {
                 hasRekeyed = true;
                 isRekeying = true;
             }
+           
+           if(timeWhenRekeyingShouldOccur + 
FNPPacketMangler.MAX_SESSION_KEY_REKEYING_DELAY < now) {
+                   Logger.error(this, "The peer ("+this+") has been asked to 
rekey "+TimeUtil.formatTime(FNPPacketMangler.MAX_SESSION_KEY_REKEYING_DELAY)+" 
ago... force disconnect.");
+                   forceDisconnect();
+           }
         }
         if(hasRekeyed)
             Logger.normal(this, "We are asking for the key to be renewed 
("+this.detectedPeer+')');


Reply via email to