[freenet-cvs] r15495 - in trunk/freenet/src/freenet: io/comm node

toad at freenetproject.org toad at freenetproject.org
Tue Oct 23 00:39:30 UTC 2007


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.




More information about the cvs mailing list