core_or.md (1916B)
@dir core/or @brief core/or: Onion routing happens here!
This is the central part of Tor that handles the core tasks of onion routing: building circuit, handling circuits, attaching circuit to streams, moving data around, and so forth.
Some aspects of this module should probably be refactored into others.
Notable files here include:
channel.c
: Generic channel implementation. Channels handle sending and receiving cells
among tor nodes.
channeltls.c
: Channel implementation for TLS-based OR connections. Uses connection_or.c.
circuitbuild.c
: Code for constructing circuits and choosing their paths. (Note:
this module could plausibly be split into handling the client side,
the server side, and the path generation aspects of circuit building.)
circuitlist.c
: Code for maintaining and navigating the global list of circuits.
circuitmux.c
: Generic circuitmux implementation. A circuitmux handles deciding, for a
particular channel, which circuit should write next.
circuitmux_ewma.c
: A circuitmux implementation based on the EWMA (exponentially
weighted moving average) algorithm.
circuituse.c
: Code to actually send and receive data on circuits.
command.c
: Handles incoming cells on channels.
connection.c
: Generic and common connection tools, and implementation for the simpler
connection types.
connection_edge.c
: Implementation for entry and exit connections.
connection_or.c
: Implementation for OR connections (the ones that send cells over TLS).
onion.c
: Generic code for generating and responding to CREATE and CREATED
cells, and performing the appropriate onion handshakes. Also contains
code to manage the server-side onion queue.
relay.c
: Handles particular types of relay cells, and provides code to receive,
encrypt, route, and interpret relay cells.
scheduler.c
: Decides which channel/circuit pair is ready to receive the next cell.