xxx-controllers-intercept-extends.txt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. Author: Geoff Goodell
  2. Title: Allow controller to manage circuit extensions
  3. Date: 12 March 2006
  4. History:
  5. This was once bug 268. Moving it into the proposal system for posterity.
  6. Test:
  7. Tor controllers should have a means of learning more about circuits built
  8. through Tor routers. Specifically, if a Tor controller is connected to a Tor
  9. router, it should be able to subscribe to a new class of events, perhaps
  10. "onion" or "router" events. A Tor router SHOULD then ensure that the
  11. controller is informed:
  12. (a) (NEW) when it receives a connection from some other location, in which
  13. case it SHOULD indicate (1) a unique identifier for the circuit, and (2) a
  14. ServerID in the event of an OR connection from another Tor router, and
  15. Hostname otherwise.
  16. (b) (REQUEST) when it receives a request to extend an existing circuit to a
  17. successive Tor router, in which case it SHOULD provide (1) the unique
  18. identifier for the circuit, (2) a Hostname (or, if possible, ServerID) of the
  19. previous Tor router in the circuit, and (3) a ServerID for the requested
  20. successive Tor router in the circuit;
  21. (c) (EXTEND) Tor will attempt to extend the circuit to some other router, in
  22. which case it SHOULD provide the same fields as provided for REQUEST.
  23. (d) (SUCCEEDED) The circuit has been successfully extended to some ther
  24. router, in which case it SHOULD provide the same fields as provided for
  25. REQUEST.
  26. We also need a new configuration option analogous to _leavestreamsunattached,
  27. specifying whether the controller is to manage circuit extensions or not.
  28. Perhaps we can call it "_leavecircuitsunextended". When set to 0, Tor
  29. manages everything as usual. When set to 1, a circuit received by the Tor
  30. router cannot transition from "REQUEST" to "EXTEND" state without being
  31. directed by a new controller command. The controller command probably does
  32. not need any arguments, since circuits are extended per client source
  33. routing, and all that the controller does is accept or reject the extension.
  34. This feature can be used as a basis for enforcing routing policy.