aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/core_or.md
blob: 0b4d430a00e5b7b66b1b082d91f3b272d179a1e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@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.