/[wanproxy]/trunk/TODO
ViewVC logotype

Annotate of /trunk/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 437 - (show annotations)
Sun May 23 06:02:16 2010 UTC (3 months, 2 weeks ago) by juli
File size: 4739 byte(s)
I think 0.7 with the current UUID code may be good enough.
1 For 0.7.1:
2 o) Fix any bugs with XCodec EOS support.
3 o) Add an ActionCache which classes can use to dole out Actions and which at
4 destruction time will assert that there are no outstanding actions. This
5 will make debugging code involving Actions easier and give better Action
6 allocation performance, done properly.
7 o) Rewrite PipeLink to constantly poll for spontaneous output. Make sure all
8 other things can handle spontaneous output.
9 o) Make XCodecEncoder and XCodecDecoder pipes outright so as to avoid all of
10 the weird interactions between each and its Pipe variant.
11
12 For 0.7.2:
13 o) A better look-ahead parser.
14 o) Test error handling in epoll.
15 o) Test error handling with port(3C).
16 o) Condition variables to suppport spontaneous output from XCodecEncoderPipe.
17 o) Make UnixClient and UnixServer take the SocketType as an argument to make
18 it possible to support both stream-orientation and datagram-orientation?
19 Would need to update UnixServer's API to support both models.
20 o) Something higher-level than Pipe which supports various disciplines and
21 makes it easier to write stream processing modules.
22 o) Make *Client::connect() work like TCPClient::connect().
23 o) Move to the getrusage-based Timer class and make it clear that that is what
24 it is for. Perhaps create a Timer base class and a UserTimer and WallTimer
25 for real use?
26 o) Add a flush token for Pipe::input() ?
27 o) Add a flesh Event type for Pipe::output() ?
28 XXX It's unclear, but I think a flush method or similar may be needed to
29 implement buffer limiting? A flush method being like input(), except
30 that it only returns once the last Pipe in the Pipeline has returned
31 flush complete, or error if data cannot be flushed because there is not
32 enough to finish processing the data that is pending, at which point
33 you at least know that everything else has been flushed?
34 o) Make Pipe::input take a parameter to send EOS along with data.
35 o) How do we find out if remote has shut down read channel so we can stop
36 writing and shut down a Splice?
37 o) Make interface/listener objects automatically start listening.
38 o) Clean up address configuration objects to be more sensible, being either
39 specific components of addresses (e.g. to specify an IP address) or socket
40 addresses (e.g. AF_UNIX paths, IP+port pairs for TCP or UDP or SCTP.)
41 o) Connector abstraction: connection pooling / connecting via a SOCKS server.
42
43 For 0.8.0:
44 o) Cache hierarchy, including persistent storage.
45 o) TLS.
46
47 For 0.9.0:
48 o) Handle OOB data.
49
50 After 1.0.0:
51 o) A CLI program for management. Remember to USE_POLL=select since Mac OS X can
52 only use select(2) for stdin and stdout.
53 o) Make it possible to detect when we are sending to a socket that is also
54 within WANProxy and avoid a system call -- just copy directly to the
55 appropriate buffer. It should be pretty easy to do this with the IO queueing
56 system if we getpeername/getsockname to identify this occurring.
57 o) Add an IO queueing system that will make it possible to use lio_listio on
58 systems that support it.
59 o) Make the XCodec encoder and decoder asynchronous.
60 o) Connection table. Database.
61 o) HTTP termination and reinitiation good enough to support an HTTP proxy mode.
62
63 Ongoing:
64 o) Add lots of comments.
65 o) Fix bugs.
66 o) Audit log levels.
67 o) Try to remove HALTs and NOTREACHEDs that aren't legitimate.
68 o) Give better debug information from configuration system.
69
70 Maybe:
71 o) A resolver that's less fragile than the OS-supplied ones. Mac OS X, at
72 minimum, neither keeps a pool of file descriptors nor errors out gracefully
73 when the OS is out of them, leading to hangs.
74 o) Send definitions out-of-band, too, so that QoS and backpressure on one
75 connection can't delay other connections.
76 o) In-path forwarding using BPF and a tiny network stack.
77 o) Run-length-encoding.
78 o) Many compression algorithms.
79 o) Allow chaining codecs.
80 o) SOCKS IPv6 support.
81 o) Some decent way to configure Pipelines.
82 o) Figure out a good name for a Pipeline, since Pipeline seems rubbish.
83 o) Merge two Pipelines.
84 o) Convert the SOCKS proxy server to a PipeEndpoint that merges the Pipeline
85 that it is connected to with a newly-created one.
86 o) Be less protocol-ignorant; add protocol-aware framing to WANProxy. For
87 example, HTTP response headers are likely to include some amount of changing
88 data (timestamps, etc.) so perhaps it's better to take a clean shot at the
89 start of the content. And perhaps it's better to convert to large chunks in
90 chunked encoding mode to get bigger windows of data to encode. No need to
91 remember the last 3 bytes of a chunk, the chunk header, and the next N bytes,
92 if the chunks won't be laid out the same every time. Right?

  ViewVC Help
Powered by ViewVC 1.2-dev