Author: toad
Date: 2007-12-06 23:37:46 +0000 (Thu, 06 Dec 2007)
New Revision: 16381

Modified:
   trunk/freenet/src/freenet/node/AnnounceSender.java
Log:
Allow 30 seconds post-AnnounceCompleted for delayed (re-ordered) announcement 
replies.

Modified: trunk/freenet/src/freenet/node/AnnounceSender.java
===================================================================
--- trunk/freenet/src/freenet/node/AnnounceSender.java  2007-12-06 23:15:59 UTC 
(rev 16380)
+++ trunk/freenet/src/freenet/node/AnnounceSender.java  2007-12-06 23:37:46 UTC 
(rev 16381)
@@ -21,6 +21,7 @@
     // Constants
     static final int ACCEPTED_TIMEOUT = 5000;
     static final int ANNOUNCE_TIMEOUT = 240000; // longer than a regular 
request as have to transfer noderefs hop by hop etc
+    static final int END_TIMEOUT = 30000; // After received the completion 
message, wait 30 seconds for any late reordered replies

        private final PeerNode source;
        private final long uid;
@@ -251,7 +252,34 @@

                if(msg.getSpec() == DMT.FNPOpennetAnnounceCompleted) {
                        complete();
-                       return;
+                       
mfAnnounceReply.setTimeout(END_TIMEOUT).setTimeoutRelativeToCreation(true);
+                       
mfNotWanted.setTimeout(END_TIMEOUT).setTimeoutRelativeToCreation(true);
+                       mf = mfAnnounceReply.or(mfNotWanted);
+                       while(true)  {
+                       try {
+                               msg = node.usm.waitFor(mf, this);
+                       } catch (DisconnectedException e) {
+                               return;
+                       }
+                               if(msg == null) return;
+                               if(msg.getSpec() == 
DMT.FNPOpennetAnnounceReply) {
+                                       validateForwardReply(msg, next);
+                                       continue;
+                               }
+                               if(msg.getSpec() == 
DMT.FNPOpennetAnnounceNodeNotWanted) {
+                               if(cb != null)
+                                       cb.nodeNotWanted();
+                               if(source != null) {
+                                                       try {
+                                                               sendNotWanted();
+                                                       } catch 
(NotConnectedException e) {
+                                                               
Logger.error(this, "Lost connection to source");
+                                                               return;
+                                                       }
+                               }
+                                       continue;
+                               }
+                       }
                }

                if(msg.getSpec() == DMT.FNPRouteNotFound) {


Reply via email to