TODO 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. [First four are all equally first.
  2. Others follow in order of priority.]
  3. Patch well-known proxies to make them OR compliant
  4. Data stream anonymizing, HTTP/FTP (Privoxy, Squid), SMTP, etc.
  5. Packet Redirector, a la FreeBSD (DNS, authenticated connections, etc.)
  6. Deploy and manage open source development site.
  7. Manage and maintain code, write documentation, design and write
  8. unit tests, handle patch submissions, make the autoconf work, etc
  9. Deploy a widespread network: manage deployment.
  10. Maintain and distribute directory/network state information etc. Keep
  11. operators and users happy.
  12. Test OR network for reliability and performance, with and without
  13. mechanisms for throttling, congestion control, padding, load balancing
  14. if applicable, etc.
  15. Use httperf and webload to get some performance stats
  16. Modify code as dictated by testing.
  17. Develop rendezvous points
  18. Implement reply onions
  19. Develop location protected servers idea
  20. Enhance router twins to do load balancing as well as DoS prevention
  21. Develop and deploy automated reputation management, directory servers,
  22. and directory/network state monitoring.
  23. ---
  24. debian / red hat spec file
  25. handle starting things as a system daemon
  26. transition addr to sin_addr
  27. get proxy to choose the same conn if it's open
  28. Obvious things I'd like to do that won't break anything:
  29. * Abstract out crypto calls (done), with the eventual goal of moving
  30. from openssl to something with a more flexible license.
  31. * Test suite. We need one.
  32. * Since my OR can handle multiple circuits through a given OP,
  33. I think it's clear that the OP should pass new create cells through the
  34. same channel. Thus we can take advantage of the padding we're already
  35. getting. Does that mean the choose_onion functions should be changed
  36. to always pick a favorite OR first, so the OP can minimize the number
  37. of outgoing connections it must sustain?
  38. * Figure out what .h files we're actually using, and how portable
  39. those are.
  40. * Exit policies. Since we don't really know what protocol is being spoken,
  41. it really comes down to an IP range and port range that we
  42. allow/disallow. The 'application' connection can evaluate it and make
  43. a decision.
  44. * We currently block on gethostbyname at the exit. This is poor. We need
  45. to set it up so we have a separate process that we talk to. There are
  46. some free software versions we can use, but they'll still be tricky.
  47. * I'd like a cleaner interface for the configuration files, keys, etc.
  48. Perhaps the next step is a central repository where we download router
  49. lists? We can aim to make use of the directory servers that Mixminion
  50. deploys.
  51. * ORs should rotate their link keys periodically. Later.
  52. * The parts of the code that say 'FIXME'
  53. * Clean up the number of places that get to look at prkey. Later.
  54. * Circuits should expire sometime, say, when circuit->expire triggers?
  55. Later.
  56. Non-obvious things I'd like to do:
  57. (Many of these topics are inter-related. It's clear that we need more
  58. analysis before we can guess which approaches are good.)
  59. * Currently when a connection goes down, it generates a destroy cell
  60. (either in both directions or just the appropriate one). When a
  61. destroy cell arrives to an OR (and it gets read after all previous
  62. cells have arrived), it delivers a destroy cell for the "other side"
  63. of the circuit: if the other side is an OP or App, it closes the entire
  64. connection as well.
  65. But by "a connection going down", I mean "I read eof from it". Yet
  66. reading an eof simply means that it promises not to send any more
  67. data. It may still be perfectly fine receiving data (read "man 2
  68. shutdown"). In fact, some webservers work that way -- the client sends
  69. his entire request, and when the webserver reads an eof it begins
  70. its response. We currently don't support that sort of protocol; we
  71. may want to switch to some sort of a two-way-destroy-ripple technique
  72. (where a destroy makes its way all the way to the end of the circuit
  73. before being echoed back, and data stops flowing only when a destroy
  74. has been received from both sides of the circuit); this extends the
  75. one-hop-ack approach that Matej used.
  76. * Reply onions. Hrm.