buffers.c
: Implements the buf_t
buffered data type for connections, and several
low-level data handling functions to handle network protocols on it.
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.
config.c
: Parses options from torrc, and uses them to configure the rest of Tor.
confparse.c
: Generic torrc-style parser. Used to parse torrc and state files.
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).
main.c
: Principal entry point, main loops, scheduled events, and network
management for Tor.
ntmain.c
: Implements Tor as a Windows service. (Not very well.)
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.
onion_fast.c
: Implements the old SHA1-based CREATE_FAST/CREATED_FAST circuit
creation handshake. (Now deprecated.)
onion_ntor.c
: Implements the Curve25519-based NTOR circuit creation handshake.
onion_tap.c
: Implements the old RSA1024/DH1024-based TAP circuit creation handshake. (Now
deprecated.)
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.
statefile.c
: Handles loading and storing Tor's state file.
tor_main.c
: Contains the actual main()
function. (This is placed in a separate
file so that the unit tests can have their own main()
.)
directory.c
: Implements the HTTP-based directory protocol, including sending,
receiving, and handling most request types. (Note: The client parts
of this, and the generic-HTTP parts of this, could plausibly be split
off.)
microdesc.c
: Implements the compact "microdescriptor" format for keeping track of
what we know about a router.
networkstatus.c
: Code for fetching, storing, and interpreting consensus vote documents.
nodelist.c
: Higher-level view of our knowledge of which Tor servers exist. Each
node_t
corresponds to a router we know about.
routerlist.c
: Code for storing and retrieving router descriptors and extrainfo
documents.
routerparse.c
: Generic and specific code for parsing all Tor directory information
types.
routerset.c
: Parses and interprets a specification for a set of routers (by IP
range, fingerprint, nickname (deprecated), or country).
addressmap.c
: Handles client-side associations between one address and another.
These are used to implement client-side DNS caching (NOT RECOMMENDED),
MapAddress directives, Automapping, and more.
circpathbias.c
: Path bias attack detection for circuits: tracks whether
connections made through a particular guard have an unusually high failure rate.
circuitstats.c
: Code to track circuit performance statistics in order to adapt our behavior.
Notably includes an algorithm to track circuit build times.
dnsserv.c
: Implements DNSPort for clients. (Note that in spite of the word
"server" in this module's name, it is used for Tor clients. It
implements a DNS server, not DNS for servers.)
entrynodes.c
: Chooses, monitors, and remembers guard nodes. Also contains some
bridge-related code.
torcert.c
: Code to interpret and generate Ed25519-based certificates.
dns.c
: Server-side DNS code. Handles sending and receiving DNS requests on
exit nodes, and implements the server-side DNS cache.
dirserv.c
: Implements part of directory caches that handles responding to
client requests.
ext_orport.c
: Implements the extended ORPort protocol for communication between
server-side pluggable transports and Tor servers.
hibernate.c
: Performs bandwidth accounting, and puts Tor relays into hibernation
when their bandwidth is exhausted.
router.c
: Management code for running a Tor server. In charge of RSA key
maintenance, descriptor generation and uploading.
routerkeys.c
: Key handling code for a Tor server. (Currently handles only the
Ed25519 keys, but the RSA keys could be moved here too.)
rendcache.c
: Stores onion service descriptors.
rendclient.c
: Client-side implementation of the onion service protocol.
rendcommon.c
: Parts of the onion service protocol that are shared by clients,
services, and/or Tor servers.
rendmid.c
: Tor-server-side implementation of the onion service protocol. (Handles
acting as an introduction point or a rendezvous point.)
rendservice.c
: Service-side implementation of the onion service protocol.
replaycache.c
: Backend to check introduce2 requests for replay attempts.
dircollate.c
: Helper for dirvote.c
: Given a set of votes, each containing a list
of Tor nodes, determines which entries across all the votes correspond
to the same nodes, and yields them in a useful order.
dirvote.c
: Implements the directory voting algorithms that authorities use.
keypin.c
: Implements a persistent key-pinning mechanism to tie RSA1024
identities to ed25519
identities.
control.c
: Implements the Tor controller protocol.
cpuworker.c
: Implements the inner work queue function. We use this to move the
work of circuit creation (on server-side) to other CPUs.
fp_pair.c
: Types for handling 2-tuples of 20-byte fingerprints.
geoip.c
: Parses geoip files (which map IP addresses to country codes), and
performs lookups on the internal geoip table. Also stores some
geoip-related statistics.
policies.c
: Parses and implements Tor exit policies.
reasons.c
: Maps internal reason-codes to human-readable strings.
rephist.c
: Tracks Tor servers' performance over time.
status.c
: Writes periodic "heartbeat" status messages about the state of the Tor
process.
transports.c
: Implements management for the pluggable transports subsystem.