mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-01 08:03:31 +01:00
248 lines
6.9 KiB
Markdown
248 lines
6.9 KiB
Markdown
|
|
||
|
## Tor's modules ##
|
||
|
|
||
|
### Generic modules ###
|
||
|
|
||
|
`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()`.)
|
||
|
|
||
|
|
||
|
### Node-status modules ###
|
||
|
|
||
|
`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).
|
||
|
|
||
|
|
||
|
### Client modules ###
|
||
|
|
||
|
`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.
|
||
|
|
||
|
### Server modules ###
|
||
|
|
||
|
`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.)
|
||
|
|
||
|
|
||
|
### Onion service modules ###
|
||
|
|
||
|
`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.
|
||
|
|
||
|
|
||
|
### Authority modules ###
|
||
|
|
||
|
`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.
|
||
|
|
||
|
### Miscellaneous modules ###
|
||
|
|
||
|
`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.
|