or Directory Reference

core/or: Onion routing happens here!



file  addr_policy_st.h [code]
 Address policy structures.
file  address_set.c [code]
 Implementation for a set of addresses.
file  address_set.h [code]
 Types to handle sets of addresses.
file  cell_queue_st.h [code]
 Cell queue structures.
file  cell_st.h [code]
 Fixed-size cell structure.
file  channel.c [code]
 OR/OP-to-OR channel abstraction layer. A channel's job is to transfer cells from Tor instance to Tor instance. Currently, there is only one implementation of the channel abstraction: in channeltls.c.
file  channel.h [code]
 Header file for channel.c.
file  channelpadding.c [code]
 Link-level padding code.
file  channeltls.c [code]
 A concrete subclass of channel_t using or_connection_t to transfer cells between Tor instances.
file  channeltls.h [code]
 Header file for channeltls.c.
file  circuit_st.h [code]
 Base circuit structure.
file  circuitbuild.c [code]
 Implements the details of building circuits (by chosing paths, constructing/sending create/extend cells, and so on).
file  circuitbuild.h [code]
 Header file for circuitbuild.c.
file  circuitlist.c [code]
 Manage global structures that list and index circuits, and look up circuits within them.
file  circuitlist.h [code]
 Header file for circuitlist.c.
file  circuitmux.c [code]
 Circuit mux/cell selection abstraction.
file  circuitmux.h [code]
 Header file for circuitmux.c.
file  circuitmux_ewma.c [code]
 EWMA circuit selection as a circuitmux_t policy.
file  circuitmux_ewma.h [code]
 Header file for circuitmux_ewma.c.
file  circuitpadding.c [code]
 Circuit-level padding implementation.
file  circuitpadding.h [code]
 Header file for circuitpadding.c.
file  circuitpadding_machines.c [code]
 Circuit padding state machines.
file  circuitpadding_machines.h [code]
 Header file for circuitpadding_machines.c.
file  circuitstats.c [code]
 Maintains and analyzes statistics about circuit built times, so we can tell how long we may need to wait for a fast circuit to be constructed.
file  circuitstats.h [code]
 Header file for circuitstats.c.
file  circuituse.c [code]
 Launch the right sort of circuits and attach the right streams to them.
file  circuituse.h [code]
 Header file for circuituse.c.
file  command.c [code]
 Functions for processing incoming cells.
file  command.h [code]
 Header file for command.c.
file  connection_edge.c [code]
 Handle edge streams.
file  connection_edge.h [code]
 Header file for connection_edge.c.
file  connection_or.c [code]
 Functions to handle OR connections, TLS handshaking, and cells on the network.
file  connection_or.h [code]
 Header file for connection_or.c.
file  connection_st.h [code]
 Base connection structure.
file  cpath_build_state_st.h [code]
 Circuit-build-stse structure.
file  crypt_path.c [code]
 Functions dealing with layered circuit encryption. This file aims to provide an API around the crypt_path_t structure which holds crypto information about a specific hop of a circuit.
file  crypt_path.h [code]
 Header file for crypt_path.c.
file  crypt_path_reference_st.h [code]
 reference-counting structure for crypt_path_t
file  crypt_path_st.h [code]
 Path structures for origin circuits.
file  destroy_cell_queue_st.h [code]
 Destroy-cell queue structures.
file  edge_connection_st.h [code]
 Edge-connection structure.
file  entry_connection_st.h [code]
 Entry connection structure.
file  entry_port_cfg_st.h [code]
 Configuration structure for client ports.
file  extend_info_st.h [code]
 Extend-info structure.
file  extendinfo.c [code]
 Functions for creating and using extend_info_t objects.
file  extendinfo.h [code]
 Header for core/or/extendinfo.c.
file  half_edge_st.h [code]
 Half-open connection structure.
file  listener_connection_st.h [code]
 Listener connection structure.
file [code]
 LTTng tracing probe declaration for the circuit subsystem. It is in this .inc file due to the non C standard syntax and the way we guard the header with the LTTng specific TRACEPOINT_HEADER_MULTI_READ.
file  ocirc_event.c [code]
 Publish state change messages for origin circuits.
file  ocirc_event.h [code]
 Header file for ocirc_event.c.
file  onion.c [code]
 Functions to queue create cells, and parse and create the CREATE cell and its allies.
file  onion.h [code]
 Header file for onion.c.
file  or.h [code]
 Master header file for Tor-specific functionality.
file  or_connection_st.h [code]
 OR connection structure.
file  or_handshake_certs_st.h [code]
 OR handshake certs structure.
file  or_handshake_state_st.h [code]
 OR handshake state structure.
file  or_periodic.c [code]
 Periodic callbacks for the onion routing subsystem.
file  or_periodic.h [code]
 Header for core/or/or_periodic.c.
file  or_sys.c [code]
 Subsystem definitions for OR module.
file  or_sys.h [code]
 Header for core/or/or_sys.c.
file  orconn_event.c [code]
 Publish state change messages for OR connections.
file  orconn_event.h [code]
 Header file for orconn_event.c.
file  origin_circuit_st.h [code]
 Origin circuit structure.
file  policies.c [code]
 Code to parse and use address policies and exit policies.
file  policies.h [code]
 Header file for policies.c.
file  port_cfg_st.h [code]
 Listener port configuration structure.
file  protover.c [code]
 Versioning information for different pieces of the Tor protocol.
file  protover.h [code]
 Headers and type declarations for protover.c.
file  reasons.c [code]
 Convert circuit, stream, and orconn error reasons to and/or from strings and errno values.
file  reasons.h [code]
 Header file for reasons.c.
file  relay.c [code]
 Handle relay cell encryption/decryption, plus packaging and receiving from circuits, plus queuing on circuits.
file  relay.h [code]
 Header file for relay.c.
file  relay_crypto_st.h [code]
 Relay-cell encryption state structure.
file  scheduler.c [code]
 Channel scheduling system: decides which channels should send and receive when.
file  scheduler.h [code]
 Header file for scheduler*.c.
file  scheduler_kist.c [code]
 Implements the KIST cell scheduler.
file  scheduler_vanilla.c [code]
 "Vanilla" (pre-KIST) cell scheduler code.
file  sendme.c [code]
 Code that is related to SENDME cells both in terms of creating/parsing cells and handling the content.
file  sendme.h [code]
 Header file for sendme.c.
file  server_port_cfg_st.h [code]
 Cnfiguration structure for server ports.
file  socks_request_st.h [code]
 Client request structure.
file  status.c [code]
 Collect status information and log heartbeat messages.
file  status.h [code]
 Header for status.c.
file  tor_version_st.h [code]
 Parsed Tor version structure.
file  trace_probes_circuit.c [code]
 Tracepoint provider source file for the circuit subsystem. Probes are generated within this C file for LTTng-UST.
file  var_cell_st.h [code]
 Variable-length cell structure.
file  versions.c [code]
 Code to manipulate, parse, and compare Tor versions.
file  versions.h [code]
 Header file for versions.c.

Detailed Description

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.