Author: toad
Date: 2007-10-23 00:39:29 +0000 (Tue, 23 Oct 2007)
New Revision: 15495

Added:
   trunk/freenet/src/freenet/io/comm/NullAsyncMessageFilterCallback.java
Modified:
   trunk/freenet/src/freenet/node/RequestSender.java
Log:
Swallow any unwanted opennet messages in RequestSender completion

Added: trunk/freenet/src/freenet/io/comm/NullAsyncMessageFilterCallback.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/NullAsyncMessageFilterCallback.java       
                        (rev 0)
+++ trunk/freenet/src/freenet/io/comm/NullAsyncMessageFilterCallback.java       
2007-10-23 00:39:29 UTC (rev 15495)
@@ -0,0 +1,15 @@
+package freenet.io.comm;
+
+public class NullAsyncMessageFilterCallback implements
+               AsyncMessageFilterCallback {
+
+       public void onMatched(Message m) {
+               // Do nothing
+       }
+
+       public boolean shouldTimeout() {
+               // Not until matched.
+               return false;
+       }
+
+}

Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java   2007-10-23 00:34:25 UTC 
(rev 15494)
+++ trunk/freenet/src/freenet/node/RequestSender.java   2007-10-23 00:39:29 UTC 
(rev 15495)
@@ -13,6 +13,7 @@
 import freenet.io.comm.Message;
 import freenet.io.comm.MessageFilter;
 import freenet.io.comm.NotConnectedException;
+import freenet.io.comm.NullAsyncMessageFilterCallback;
 import freenet.io.comm.PeerParseException;
 import freenet.io.comm.ReferenceSignatureVerificationException;
 import freenet.io.comm.RetrievalException;
@@ -629,7 +630,8 @@
                if(key instanceof NodeCHK && next != null && 
                                (next.isOpennet() || 
node.passOpennetRefsThroughDarknet()) ) {
                        finishOpennet(next);
-               }
+               } else
+                       finishOpennetNull(next);
         }

                synchronized(this) {
@@ -639,7 +641,20 @@

     }

-    /**
+    /** Wait for the opennet completion message and discard it */
+    private void finishOpennetNull(PeerNode next) {
+       MessageFilter mfAck = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(OPENNET_TIMEOUT).setType(DMT.FNPOpennetCompletedAck);
+       MessageFilter mfConnect = 
MessageFilter.create().setSource(next).setField(DMT.UID, 
uid).setTimeout(OPENNET_TIMEOUT).setType(DMT.FNPOpennetConnectDestination);
+       MessageFilter mf = 
mfAck.or(mfConnect).setMatchesDroppedConnection(true).setMatchesRestartedConnections(true);
+       
+       try {
+                       node.usm.addAsyncFilter(mf, new 
NullAsyncMessageFilterCallback());
+               } catch (DisconnectedException e) {
+                       // Fine by me.
+               }
+       }
+
+       /**
      * Do path folding, maybe.
      * Wait for either a CompletedAck or a ConnectDestination.
      * If the former, exit.


Reply via email to