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.