On Monday 22 October 2007 22:01, you wrote:
> Author: nextgens
> Date: 2007-10-22 21:01:20 +0000 (Mon, 22 Oct 2007)
> New Revision: 15483
>
> Modified:
> trunk/freenet/src/freenet/node/RequestHandler.java
> Log:
> Simplify the logic, test for node.passOpennetRefsThroughDarknet() earlier
on.
>
> Don't send anything if we don't want to help path-folding.
Not sending anything is actively sabotaging path folding by causing opennet
nodes to waste threads waiting for a message which will never come. The
intended behaviour is to always send *something* to indicate the completion
of the request. Normally on a pure darknet node that would simply be an
FNPOpennetCompletedAck.
If you want to eliminate this spurious message in the pure darknet case,
without breaking pass-opennet-refs-over-darknet which IMHO is an important
piece of functionality, you will have to define a way for nodes to declare at
connection time that they are not interested in opennet in any way
whatsoever. Then we can safely not send an ack to such nodes if they
are !wantsOpennetRefs().
>
> Modified: trunk/freenet/src/freenet/node/RequestHandler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/RequestHandler.java 2007-10-22
> 20:40:07
UTC (rev 15482)
> +++ trunk/freenet/src/freenet/node/RequestHandler.java 2007-10-22
> 21:01:20
UTC (rev 15483)
> @@ -148,7 +148,8 @@
> node.addTransferringRequestHandler(uid);
> if(bt.send(node.executor)) {
> status = RequestSender.SUCCESS; // for byte logging
> - finishOpennetNoRelayChecked();
> + if(node.passOpennetRefsThroughDarknet())
> + finishOpennetNoRelayChecked();
We've fetched it from our datastore. We therefore cannot relay a downstream
noderef. We can either send our own noderef, if we want a connection, or we
can send an FNPOpennetCompletedAck to indicate that we don't want to.
> }
> }
> return;
> @@ -187,7 +188,8 @@
> finalTransferFailed = true;
> } else {
> // Successful CHK transfer, maybe path fold
> - finishOpennetChecked();
> + if(node.passOpennetRefsThroughDarknet())
> + finishOpennetChecked();
Again, we might have opennet enabled and pass-opennet-refs-through-darknet
disabled, and even if not, we need to send an FNPOpennetCompletedAck.
> }
> status = rs.getStatus();
> return;
> @@ -262,7 +264,7 @@
> }
>
> private void finishOpennetChecked() {
> - if(!(node.passOpennetRefsThroughDarknet() ||
> source.isOpennet())) {
> + if(!source.isOpennet()) {
This is plain wrong. If we want to pass refs through darknet peers, then we
should pass a ref to the requester if possible. If we don't want anything to
do with opennet, we should send an acknowledgement.
> Message msg = DMT.createFNPOpennetCompletedAck(uid);
> try {
> source.sendAsync(msg, null, 0, this);
> @@ -290,7 +292,7 @@
> }
>
> private void finishOpennetNoRelayChecked() {
> - if(!(node.passOpennetRefsThroughDarknet() ||
> source.isOpennet())) {
> + if(!source.isOpennet()) {
Here too.
> Message msg = DMT.createFNPOpennetCompletedAck(uid);
> try {
> source.sendAsync(msg, null, 0, this);
Normally I would let you correct it yourself, but there were a number of
issues which needed dealing with.
We should fix the traffic analysis vulnerability in passing opennet refs soon
(i.e. pad the noderef to exactly 2kB and split it up into two
packets/messages rather than sending potentially oversize, variable length
packets). But not before 1066.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20071023/dae80a3a/attachment.pgp>