Author: nextgens
Date: 2007-10-10 20:38:21 +0000 (Wed, 10 Oct 2007)
New Revision: 15443

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
JFK: resend message3 if needed

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-10-10 
17:06:17 UTC (rev 15442)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-10-10 
20:38:21 UTC (rev 15443)
@@ -1001,7 +1001,7 @@
         * 
         */

-       private void sendJFKMessage3(int version,int negType,int phase,byte[] 
nonceInitiator,byte[] nonceResponder,byte[] hisExponential, byte[] 
authenticator, PeerNode pn, Peer replyTo)
+       private void sendJFKMessage3(int version,int negType,int phase,byte[] 
nonceInitiator,byte[] nonceResponder,byte[] hisExponential, byte[] 
authenticator, final PeerNode pn, final Peer replyTo)
        {
                if(logMINOR) Logger.minor(this, "Sending a JFK(3) message to 
"+pn);
                BlockCipher c = null;
@@ -1012,7 +1012,7 @@
                byte[] data = new byte[8 + pn.jfkMyRef.length];
                System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0, 
8);
                System.arraycopy(pn.jfkMyRef, 0, data, 8, pn.jfkMyRef.length);
-               byte[] message3 = new byte[NONCE_SIZE*2 + // nI, nR
+               final byte[] message3 = new byte[NONCE_SIZE*2 + // nI, nR
                                           
DiffieHellman.modulusLengthInBytes()*2 + // g^i, g^r
                                           HASH_LENGTH + // authenticator
                                           HASH_LENGTH + // HMAC(cyphertext)
@@ -1097,6 +1097,15 @@
                                authenticatorCache.put(authenticator,message3);
                }               
                sendAuthPacket(1, 2, 2, message3, pn, replyTo);
+               
+               /* Re-send the packet after 5sec if we don't get any reply */
+               node.getTicker().queueTimedJob(new FastRunnable() {
+                       public void run() {
+                               if(pn.timeLastConnected() >= 
pn.lastReceivedPacketTime()) {
+                                       sendAuthPacket(1, 2, 2, message3, pn, 
replyTo);
+                               }
+                       }
+               }, 5*1000);
        }




Reply via email to