summaryrefslogtreecommitdiff
path: root/doc/TODO
diff options
context:
space:
mode:
Diffstat (limited to 'doc/TODO')
-rw-r--r--doc/TODO37
1 files changed, 37 insertions, 0 deletions
diff --git a/doc/TODO b/doc/TODO
index 781b35ec70..ffdb6ad6a4 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -68,6 +68,43 @@ R - actually cause the directory.c functions to know about or_port
and use it when we're supposed to.
N - for tunneled edge conns, stop reading to the bridge connection
when the or_conn we're writing to has a full outbuf.
+ - This is iffy. Really, it would've been better to stop writing
+ on the dir conn when the edge conn's inbuf is getting full.
+ But the issue there is that we package from edge
+ connections aggressively until we hit their package windows or the
+ circuit package windows, even if the buffer on the corresponding OR
+ connection is pretty damn big. This sucks from a RAM usage POV.
+ Now, we could try to stop reading on the edges (or just the edges
+ connected to a local bridge) when an or_conn's outbuf is full. But
+ if we're a server, and we stop reading on some exit conns when OR
+ conns are full, soon OR conns will contain only traffic from other OR
+ conns, and the exit data in question will never get written.
+
+ - The right solution in the long run (0.2.0) is probably as follows:
+ - Remove socketpair-based bridges: use shared (or connected) buffers
+ for communication, rather than sockets.
+ - When relaying cells from an OR conn to an OR conn, have them wait
+ in a queue on the or_circuit_t object; don't move them onto the
+ target conn until there is space in the target conn's outbuf.
+ Also, only package data from exitconns when there is space in the
+ target conn's outbuf.
+ - As an added advantage, this would let us kill stalled _circuits_
+ when their buffers get too full, rather than killing entire OR
+ conns. But we must think about anonymity implications of that.
+ - We'll probably want to do some kind of big refactoring of our
+ dataflow when we do these changes; stuff is hairy enough already,
+ and it will only get harrier with this stuff.
+
+ - For the short run, our options seem to be:
+ - Disable BEGIN_DIR support at the server-side unless it's
+ explicitly turned on.
+ - Go ahead and make directory bridge data not get produced when the
+ corresponding or_conn is full, and accept the sometimes directory
+ data will just never get written.
+ - Rate-limit directory bridge data somehow when the corresponding
+ or_conn is full. Possibly based on the flush rate of the or_conn?
+ - Reject BEGIN_DIR requests that we think will be insanely big.
+
N - DNS improvements
. Asynchronous DNS