Tor 0.4.9.3-alpha-dev
Loading...
Searching...
No Matches
or.h
Go to the documentation of this file.
1/* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5/* See LICENSE for licensing information */
6
7/**
8 * \file or.h
9 * \brief Master header file for Tor-specific functionality.
10 **/
11
12#ifndef TOR_OR_H
13#define TOR_OR_H
14
15#include "orconfig.h"
16#include "lib/cc/torint.h"
17
18#ifdef HAVE_SIGNAL_H
19#include <signal.h>
20#endif
21#ifdef HAVE_TIME_H
22#include <time.h>
23#endif
24
25#include "lib/arch/bytes.h"
27#include "lib/container/map.h"
28#include "lib/buf/buffers.h"
32#include "lib/ctime/di_ops.h"
33#include "lib/defs/dh_sizes.h"
37#include "lib/err/torerr.h"
38#include "lib/fs/dir.h"
39#include "lib/fs/files.h"
40#include "lib/fs/mmap.h"
41#include "lib/fs/path.h"
42#include "lib/fs/userdb.h"
43#include "lib/geoip/country.h"
44#include "lib/intmath/addsub.h"
45#include "lib/intmath/bits.h"
46#include "lib/intmath/cmp.h"
47#include "lib/intmath/logic.h"
48#include "lib/intmath/muldiv.h"
49#include "lib/log/escape.h"
50#include "lib/log/ratelim.h"
51#include "lib/log/util_bug.h"
52#include "lib/malloc/malloc.h"
53#include "lib/net/address.h"
54#include "lib/net/inaddr.h"
55#include "lib/net/socket.h"
59#include "lib/string/printf.h"
60#include "lib/string/scanf.h"
63#include "lib/thread/threads.h"
67
68#include "ht.h"
69
70// These, more than other includes, are for keeping the other struct
71// definitions working. We should remove them when we minimize our includes.
73
76
77/* These signals are defined to help handle_control_signal work.
78 */
79#ifndef SIGHUP
80#define SIGHUP 1
81#endif
82#ifndef SIGINT
83#define SIGINT 2
84#endif
85#ifndef SIGUSR1
86#define SIGUSR1 10
87#endif
88#ifndef SIGUSR2
89#define SIGUSR2 12
90#endif
91#ifndef SIGTERM
92#define SIGTERM 15
93#endif
94/* Controller signals start at a high number so we don't
95 * conflict with system-defined signals. */
96#define SIGNEWNYM 129
97#define SIGCLEARDNSCACHE 130
98#define SIGHEARTBEAT 131
99#define SIGACTIVE 132
100#define SIGDORMANT 133
101
102#if (SIZEOF_CELL_T != 0)
103/* On Irix, stdlib.h defines a cell_t type, so we need to make sure
104 * that our stuff always calls cell_t something different. */
105#define cell_t tor_cell_t
106#endif
107
108/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */
109#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_))
110
111/** Length of longest allowable configured nickname. */
112#define MAX_NICKNAME_LEN 19
113/** Length of a router identity encoded as a hexadecimal digest, plus
114 * possible dollar sign. */
115#define MAX_HEX_NICKNAME_LEN (HEX_DIGEST_LEN+1)
116/** Maximum length of verbose router identifier: dollar sign, hex ID digest,
117 * equal sign or tilde, nickname. */
118#define MAX_VERBOSE_NICKNAME_LEN (1+HEX_DIGEST_LEN+1+MAX_NICKNAME_LEN)
119
120/** For HTTP parsing: Maximum number of bytes we'll accept in the headers
121 * of an HTTP request or response. */
122#define MAX_HEADERS_SIZE 50000
123
124/** Maximum size, in bytes, of a single router descriptor uploaded to us
125 * as a directory authority. Caches and clients fetch whatever descriptors
126 * the authorities tell them to fetch, and don't care about size. */
127#define MAX_DESCRIPTOR_UPLOAD_SIZE 20000
128
129/** Maximum size of a single extrainfo document, as above. */
130#define MAX_EXTRAINFO_UPLOAD_SIZE 50000
131
132/** Minimum lifetime for an onion key in days. */
133#define MIN_ONION_KEY_LIFETIME_DAYS (1)
134
135/** Maximum lifetime for an onion key in days. */
136#define MAX_ONION_KEY_LIFETIME_DAYS (90)
137
138/** Default lifetime for an onion key in days. */
139#define DEFAULT_ONION_KEY_LIFETIME_DAYS (28)
140
141/** Minimum grace period for acceptance of an onion key in days.
142 * The maximum value is defined in proposal #274 as being the current network
143 * consensus parameter for "onion-key-rotation-days". */
144#define MIN_ONION_KEY_GRACE_PERIOD_DAYS (1)
145
146/** Default grace period for acceptance of an onion key in days. */
147#define DEFAULT_ONION_KEY_GRACE_PERIOD_DAYS (7)
148
149/** How often we should check the network consensus if it is time to rotate or
150 * expire onion keys. */
151#define ONION_KEY_CONSENSUS_CHECK_INTERVAL (60*60)
152
153/** How often do we rotate TLS contexts? */
154#define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
155
156/** How old do we allow a router to get before removing it
157 * from the router list? In seconds. */
158#define ROUTER_MAX_AGE (60*60*48)
159/** How old can a router get before we (as a server) will no longer
160 * consider it live? In seconds. */
161#define ROUTER_MAX_AGE_TO_PUBLISH (60*60*24)
162/** How old do we let a saved descriptor get before force-removing it? */
163#define OLD_ROUTER_DESC_MAX_AGE (60*60*24*5)
164
165/* Proxy client types */
166#define PROXY_NONE 0
167#define PROXY_CONNECT 1
168#define PROXY_SOCKS4 2
169#define PROXY_SOCKS5 3
170#define PROXY_HAPROXY 4
171/* !!!! If there is ever a PROXY_* type over 7, we must grow the proxy_type
172 * field in or_connection_t */
173
174/* Pluggable transport proxy type. Don't use this in or_connection_t,
175 * instead use the actual underlying proxy type (see above). */
176#define PROXY_PLUGGABLE 5
177
178/** How many circuits do we want simultaneously in-progress to handle
179 * a given stream? */
180#define MIN_CIRCUITS_HANDLING_STREAM 2
181
182/* These RELAY_COMMAND constants define values for relay cell commands, and
183* must match those defined in tor-spec.txt. */
184#define RELAY_COMMAND_BEGIN 1
185#define RELAY_COMMAND_DATA 2
186#define RELAY_COMMAND_END 3
187#define RELAY_COMMAND_CONNECTED 4
188
189#define RELAY_COMMAND_SENDME 5
190#define RELAY_COMMAND_EXTEND 6
191#define RELAY_COMMAND_EXTENDED 7
192#define RELAY_COMMAND_TRUNCATE 8
193#define RELAY_COMMAND_TRUNCATED 9
194#define RELAY_COMMAND_DROP 10
195
196#define RELAY_COMMAND_RESOLVE 11
197#define RELAY_COMMAND_RESOLVED 12
198
199#define RELAY_COMMAND_BEGIN_DIR 13
200#define RELAY_COMMAND_EXTEND2 14
201#define RELAY_COMMAND_EXTENDED2 15
202
203/* Conflux */
204#define RELAY_COMMAND_CONFLUX_LINK 19
205#define RELAY_COMMAND_CONFLUX_LINKED 20
206#define RELAY_COMMAND_CONFLUX_LINKED_ACK 21
207#define RELAY_COMMAND_CONFLUX_SWITCH 22
208
209#define RELAY_COMMAND_ESTABLISH_INTRO 32
210#define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
211#define RELAY_COMMAND_INTRODUCE1 34
212#define RELAY_COMMAND_INTRODUCE2 35
213#define RELAY_COMMAND_RENDEZVOUS1 36
214#define RELAY_COMMAND_RENDEZVOUS2 37
215#define RELAY_COMMAND_INTRO_ESTABLISHED 38
216#define RELAY_COMMAND_RENDEZVOUS_ESTABLISHED 39
217#define RELAY_COMMAND_INTRODUCE_ACK 40
218
219#define RELAY_COMMAND_PADDING_NEGOTIATE 41
220#define RELAY_COMMAND_PADDING_NEGOTIATED 42
221
222#define RELAY_COMMAND_XOFF 43
223#define RELAY_COMMAND_XON 44
224
225/* NOTE: Any new command from above MUST be added to this function. */
226/** Helper to learn if we know the relay command. Unfortuantely, they are not
227 * contigous and so we need this kind of big switch. We could do better but for
228 * now, we'll run with this. */
229static inline bool
230is_known_relay_command(const uint8_t cmd)
231{
232 switch (cmd) {
233 case RELAY_COMMAND_BEGIN:
234 case RELAY_COMMAND_BEGIN_DIR:
235 case RELAY_COMMAND_CONFLUX_LINK:
236 case RELAY_COMMAND_CONFLUX_LINKED:
237 case RELAY_COMMAND_CONFLUX_LINKED_ACK:
238 case RELAY_COMMAND_CONFLUX_SWITCH:
239 case RELAY_COMMAND_CONNECTED:
240 case RELAY_COMMAND_DATA:
241 case RELAY_COMMAND_DROP:
242 case RELAY_COMMAND_END:
243 case RELAY_COMMAND_ESTABLISH_INTRO:
244 case RELAY_COMMAND_ESTABLISH_RENDEZVOUS:
245 case RELAY_COMMAND_EXTEND2:
246 case RELAY_COMMAND_EXTEND:
247 case RELAY_COMMAND_EXTENDED2:
248 case RELAY_COMMAND_EXTENDED:
249 case RELAY_COMMAND_INTRODUCE1:
250 case RELAY_COMMAND_INTRODUCE2:
251 case RELAY_COMMAND_INTRODUCE_ACK:
252 case RELAY_COMMAND_INTRO_ESTABLISHED:
253 case RELAY_COMMAND_PADDING_NEGOTIATE:
254 case RELAY_COMMAND_PADDING_NEGOTIATED:
255 case RELAY_COMMAND_RENDEZVOUS1:
256 case RELAY_COMMAND_RENDEZVOUS2:
257 case RELAY_COMMAND_RENDEZVOUS_ESTABLISHED:
258 case RELAY_COMMAND_RESOLVE:
259 case RELAY_COMMAND_RESOLVED:
260 case RELAY_COMMAND_SENDME:
261 case RELAY_COMMAND_TRUNCATE:
262 case RELAY_COMMAND_TRUNCATED:
263 case RELAY_COMMAND_XOFF:
264 case RELAY_COMMAND_XON:
265 return true;
266 default:
267 return false;
268 }
269}
270
271/* Reasons why an OR connection is closed. */
272#define END_OR_CONN_REASON_DONE 1
273#define END_OR_CONN_REASON_REFUSED 2 /* connection refused */
274#define END_OR_CONN_REASON_OR_IDENTITY 3
275#define END_OR_CONN_REASON_CONNRESET 4 /* connection reset by peer */
276#define END_OR_CONN_REASON_TIMEOUT 5
277#define END_OR_CONN_REASON_NO_ROUTE 6 /* no route to host/net */
278#define END_OR_CONN_REASON_IO_ERROR 7 /* read/write error */
279#define END_OR_CONN_REASON_RESOURCE_LIMIT 8 /* sockets, buffers, etc */
280#define END_OR_CONN_REASON_PT_MISSING 9 /* PT failed or not available */
281#define END_OR_CONN_REASON_TLS_ERROR 10 /* Problem in TLS protocol */
282#define END_OR_CONN_REASON_MISC 11
283
284/* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
285 * documentation of these. The values must match. */
286#define END_STREAM_REASON_MISC 1
287#define END_STREAM_REASON_RESOLVEFAILED 2
288#define END_STREAM_REASON_CONNECTREFUSED 3
289#define END_STREAM_REASON_EXITPOLICY 4
290#define END_STREAM_REASON_DESTROY 5
291#define END_STREAM_REASON_DONE 6
292#define END_STREAM_REASON_TIMEOUT 7
293#define END_STREAM_REASON_NOROUTE 8
294#define END_STREAM_REASON_HIBERNATING 9
295#define END_STREAM_REASON_INTERNAL 10
296#define END_STREAM_REASON_RESOURCELIMIT 11
297#define END_STREAM_REASON_CONNRESET 12
298#define END_STREAM_REASON_TORPROTOCOL 13
299#define END_STREAM_REASON_NOTDIRECTORY 14
300
301/* These high-numbered end reasons are not part of the official spec,
302 * and are not intended to be put in relay end cells. They are here
303 * to be more informative when sending back socks replies to the
304 * application. */
305/* XXXX 256 is no longer used; feel free to reuse it. */
306/** We were unable to attach the connection to any circuit at all. */
307/* XXXX the ways we use this one don't make a lot of sense. */
308#define END_STREAM_REASON_CANT_ATTACH 257
309/** We can't connect to any directories at all, so we killed our streams
310 * before they can time out. */
311#define END_STREAM_REASON_NET_UNREACHABLE 258
312/** This is a SOCKS connection, and the client used (or misused) the SOCKS
313 * protocol in a way we couldn't handle. */
314#define END_STREAM_REASON_SOCKSPROTOCOL 259
315/** This is a transparent proxy connection, but we can't extract the original
316 * target address:port. */
317#define END_STREAM_REASON_CANT_FETCH_ORIG_DEST 260
318/** This is a connection on the NATD port, and the destination IP:Port was
319 * either ill-formed or out-of-range. */
320#define END_STREAM_REASON_INVALID_NATD_DEST 261
321/** The target address is in a private network (like 127.0.0.1 or 10.0.0.1);
322 * you don't want to do that over a randomly chosen exit */
323#define END_STREAM_REASON_PRIVATE_ADDR 262
324/** This is an HTTP tunnel connection and the client used or misused HTTP in a
325 * way we can't handle.
326 */
327#define END_STREAM_REASON_HTTPPROTOCOL 263
328/**
329 * The user has asked us to do something that we reject
330 * (Like connecting to a plaintext port, or violating OnionTrafficOnly.)
331 **/
332#define END_STREAM_REASON_ENTRYPOLICY 264
333
334/** Bitwise-and this value with endreason to mask out all flags. */
335#define END_STREAM_REASON_MASK 511
336
337/** Bitwise-or this with the argument to control_event_stream_status
338 * to indicate that the reason came from an END cell. */
339#define END_STREAM_REASON_FLAG_REMOTE 512
340/** Bitwise-or this with the argument to control_event_stream_status
341 * to indicate that we already sent a CLOSED stream event. */
342#define END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED 1024
343/** Bitwise-or this with endreason to indicate that we already sent
344 * a socks reply, and no further reply needs to be sent from
345 * connection_mark_unattached_ap(). */
346#define END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED 2048
347
348/* 'type' values to use in RESOLVED cells. Specified in tor-spec.txt. */
349#define RESOLVED_TYPE_HOSTNAME 0
350#define RESOLVED_TYPE_IPV4 4
351#define RESOLVED_TYPE_IPV6 6
352#define RESOLVED_TYPE_ERROR_TRANSIENT 0xF0
353#define RESOLVED_TYPE_ERROR 0xF1
354/* C Tor internal error code to handle empty dns reply */
355#define RESOLVED_TYPE_NOERROR 0x01F2
356
357/* Negative reasons are internal: we never send them in a DESTROY or TRUNCATE
358 * call; they only go to the controller for tracking */
359
360/* Closing introduction point that were opened in parallel. */
361#define END_CIRC_REASON_IP_NOW_REDUNDANT -4
362
363/** Our post-timeout circuit time measurement period expired.
364 * We must give up now */
365#define END_CIRC_REASON_MEASUREMENT_EXPIRED -3
366
367/** We couldn't build a path for this circuit. */
368#define END_CIRC_REASON_NOPATH -2
369/** Catch-all "other" reason for closing origin circuits. */
370#define END_CIRC_AT_ORIGIN -1
371
372/* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt
373 * section 5.4 for documentation of these. */
374#define END_CIRC_REASON_MIN_ 0
375#define END_CIRC_REASON_NONE 0
376#define END_CIRC_REASON_TORPROTOCOL 1
377#define END_CIRC_REASON_INTERNAL 2
378#define END_CIRC_REASON_REQUESTED 3
379#define END_CIRC_REASON_HIBERNATING 4
380#define END_CIRC_REASON_RESOURCELIMIT 5
381#define END_CIRC_REASON_CONNECTFAILED 6
382#define END_CIRC_REASON_OR_IDENTITY 7
383#define END_CIRC_REASON_CHANNEL_CLOSED 8
384#define END_CIRC_REASON_FINISHED 9
385#define END_CIRC_REASON_TIMEOUT 10
386#define END_CIRC_REASON_DESTROYED 11
387#define END_CIRC_REASON_NOSUCHSERVICE 12
388#define END_CIRC_REASON_MAX_ 12
389
390/** Bitwise-OR this with the argument to circuit_mark_for_close() or
391 * control_event_circuit_status() to indicate that the reason was
392 * passed through from a destroy or truncate cell. */
393#define END_CIRC_REASON_FLAG_REMOTE 512
394
395/** Length of v2 descriptor ID (32 base32 chars = 160 bits).
396 *
397 * XXX: It is still used by v3 code but should be renamed or maybe removed. */
398#define REND_DESC_ID_V2_LEN_BASE32 BASE32_DIGEST_LEN
399
400/** Maximum length of authorized client names for a hidden service. */
401#define REND_CLIENTNAME_MAX_LEN 16
402
403/** Length of the rendezvous cookie that is used to connect circuits at the
404 * rendezvous point. */
405#define REND_COOKIE_LEN DIGEST_LEN
406
407/** Client authorization type that a hidden service performs. */
408typedef enum rend_auth_type_t {
409 REND_NO_AUTH = 0,
410 REND_V3_AUTH = 1, /* Dummy flag to allow adding v3 services on the
411 * control port */
413
414/* Stub because we can't include hs_ident.h. */
417struct hs_ident_circuit_t;
418
419typedef struct hsdir_index_t hsdir_index_t;
420
421/** Time interval for tracking replays of DH public keys received in
422 * INTRODUCE2 cells. Used only to avoid launching multiple
423 * simultaneous attempts to connect to the same rendezvous point. */
424#define REND_REPLAY_TIME_INTERVAL (5 * 60)
425
426/** Used to indicate which way a cell is going on a circuit. */
427typedef enum {
428 CELL_DIRECTION_IN=1, /**< The cell is moving towards the origin. */
429 CELL_DIRECTION_OUT=2, /**< The cell is moving away from the origin. */
431
432/**
433 * An enum to allow us to specify which channel in a circuit
434 * we're interested in.
435 *
436 * This is needed because our data structures and other fields
437 * for channel delivery are disassociated from the channel.
438 */
439typedef enum {
440 CIRCUIT_N_CHAN = 0,
441 CIRCUIT_P_CHAN = 1
443
444/** Initial value for both sides of a circuit transmission window when the
445 * circuit is initialized. Measured in cells. */
446#define CIRCWINDOW_START 1000
447#define CIRCWINDOW_START_MIN 100
448#define CIRCWINDOW_START_MAX 1000
449/** Amount to increment a circuit window when we get a circuit SENDME. */
450#define CIRCWINDOW_INCREMENT 100
451/** Initial value on both sides of a stream transmission window when the
452 * stream is initialized. Measured in cells. */
453#define STREAMWINDOW_START 500
454#define STREAMWINDOW_START_MAX 500
455/** Amount to increment a stream window when we get a stream SENDME. */
456#define STREAMWINDOW_INCREMENT 50
457
458/** Length for authenticated sendme tag with tor1 encryption. */
459#define SENDME_TAG_LEN_TOR1 20
460/** Length for authenticated sendme tag with cgo encryption. */
461#define SENDME_TAG_LEN_CGO 16
462
463/** Maximum number of queued cells on a circuit for which we are the
464 * midpoint before we give up and kill it. This must be >= circwindow
465 * to avoid killing innocent circuits, and >= circwindow*2 to give
466 * leaky-pipe a chance of working someday. The ORCIRC_MAX_MIDDLE_KILL_THRESH
467 * ratio controls the margin of error between emitting a warning and
468 * killing the circuit.
469 */
470#define ORCIRC_MAX_MIDDLE_CELLS (CIRCWINDOW_START_MAX*2)
471/** Ratio of hard (circuit kill) to soft (warning) thresholds for the
472 * ORCIRC_MAX_MIDDLE_CELLS tests.
473 */
474#define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f)
475
476/* Cell commands. These values are defined in tor-spec.txt. */
477#define CELL_PADDING 0
478#define CELL_CREATE 1
479#define CELL_CREATED 2
480#define CELL_RELAY 3
481#define CELL_DESTROY 4
482#define CELL_CREATE_FAST 5
483#define CELL_CREATED_FAST 6
484#define CELL_VERSIONS 7
485#define CELL_NETINFO 8
486#define CELL_RELAY_EARLY 9
487#define CELL_CREATE2 10
488#define CELL_CREATED2 11
489#define CELL_PADDING_NEGOTIATE 12
490
491#define CELL_VPADDING 128
492#define CELL_CERTS 129
493#define CELL_AUTH_CHALLENGE 130
494#define CELL_AUTHENTICATE 131
495#define CELL_AUTHORIZE 132
496#define CELL_COMMAND_MAX_ 132
497
498/** How long to test reachability before complaining to the user. */
499#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
500
501/** Legal characters in a nickname. */
502#define LEGAL_NICKNAME_CHARACTERS \
503 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
504
505/** Name chosen by routers that don't configure nicknames */
506#define UNNAMED_ROUTER_NICKNAME "Unnamed"
507
508/** Number of bytes in a SOCKS4 header. */
509#define SOCKS4_NETWORK_LEN 8
510
511/*
512 * Relay cell body (V0):
513 * Relay command [1 byte]
514 * Recognized [2 bytes]
515 * Stream ID [2 bytes]
516 * Partial SHA-1 [4 bytes]
517 * Length [2 bytes]
518 * Relay payload [498 bytes]
519 *
520 * Relay cell body (V1):
521 * Tag [16 bytes]
522 * Command [1 byte]
523 * Length [2 bytes]
524 * Stream ID [2 bytes, Optional, depends on command]
525 * Relay payload [488 bytes _or_ 490 bytes]
526 */
527
528/** Number of bytes in a cell, minus cell header. */
529#define CELL_PAYLOAD_SIZE 509
530/** Number of bytes in a cell transmitted over the network, in the longest
531 * form */
532#define CELL_MAX_NETWORK_SIZE 514
533
534/** Maximum length of a header on a variable-length cell. */
535#define VAR_CELL_MAX_HEADER_SIZE 7
536
537/** Which format should we use for relay cells? */
538typedef enum relay_cell_fmt_t {
539 /** Our original format, with 2 byte recognized field and a 4-byte digest */
541 /** New format introduced for CGO, with 16 byte tag. */
544
545static int get_cell_network_size(int wide_circ_ids);
546static inline int get_cell_network_size(int wide_circ_ids)
547{
548 return wide_circ_ids ? CELL_MAX_NETWORK_SIZE : CELL_MAX_NETWORK_SIZE - 2;
549}
550static int get_var_cell_header_size(int wide_circ_ids);
551static inline int get_var_cell_header_size(int wide_circ_ids)
552{
553 return wide_circ_ids ? VAR_CELL_MAX_HEADER_SIZE :
555}
556static int get_circ_id_size(int wide_circ_ids);
557static inline int get_circ_id_size(int wide_circ_ids)
558{
559 return wide_circ_ids ? 4 : 2;
560}
561
562/** Number of bytes used for a relay cell's header, in the v0 format. */
563#define RELAY_HEADER_SIZE_V0 (1+2+2+4+2)
564/** Number of bytes used for a relay cell's header, in the v1 format,
565 * if no StreamID is used. */
566#define RELAY_HEADER_SIZE_V1_NO_STREAM_ID (16+1+2)
567/** Number of bytes used for a relay cell's header, in the v1 format,
568 * if a StreamID is used. */
569#define RELAY_HEADER_SIZE_V1_WITH_STREAM_ID (16+1+2+2)
570
571/** Largest number of bytes that can fit in any relay cell payload.
572 *
573 * Note that the actual maximum may be smaller if the V1 cell format
574 * is in use; see relay_cell_max_payload_size() for the real maximum.
575 */
576#define RELAY_PAYLOAD_SIZE_MAX (CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE_V0)
577
578/** Smallest capacity of any relay cell payload. */
579#define RELAY_PAYLOAD_SIZE_MIN \
580 (CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE_V1_WITH_STREAM_ID)
581
582#ifdef TOR_UNIT_TESTS
583// This name is for testing only.
584#define RELAY_PAYLOAD_SIZE RELAY_PAYLOAD_SIZE_MAX
585#endif
586
587/** Identifies a circuit on an or_connection */
588typedef uint32_t circid_t;
589/** Identifies a stream on a circuit */
590typedef uint16_t streamid_t;
591
592/* channel_t typedef; struct channel_t is in channel.h */
593
594typedef struct channel_t channel_t;
595
596/* channel_listener_t typedef; struct channel_listener_t is in channel.h */
597
599
600/* TLS channel stuff */
601
602typedef struct channel_tls_t channel_tls_t;
603
604/* circuitmux_t typedef; struct circuitmux_t is in circuitmux.h */
605
606typedef struct circuitmux_t circuitmux_t;
607
608typedef struct cell_t cell_t;
609typedef struct var_cell_t var_cell_t;
610typedef struct packed_cell_t packed_cell_t;
611typedef struct cell_queue_t cell_queue_t;
612typedef struct destroy_cell_t destroy_cell_t;
614typedef struct ext_or_cmd_t ext_or_cmd_t;
615
616#ifdef TOR_UNIT_TESTS
617/* This is a vestigial type used only for testing.
618 * All current code should instead use relay_msg_t and related accessors.
619 */
620
621/** Beginning of a RELAY cell payload. */
622typedef struct {
623 uint8_t command; /**< The end-to-end relay command. */
624 uint16_t recognized; /**< Used to tell whether cell is for us. */
625 streamid_t stream_id; /**< Which stream is this cell associated with? */
626 char integrity[4]; /**< Used to tell whether cell is corrupted. */
627 uint16_t length; /**< How long is the payload body? */
628} relay_header_t;
629#endif
630
631typedef struct socks_request_t socks_request_t;
634
635/** Minimum length of the random part of an AUTH_CHALLENGE cell. */
636#define OR_AUTH_CHALLENGE_LEN 32
637
638/**
639 * @name Certificate types for CERTS cells.
640 *
641 * These values are defined by the protocol, and affect how an X509
642 * certificate in a CERTS cell is interpreted and used.
643 *
644 * @{ */
645/** A certificate that authenticates a TLS link key. The subject key
646 * must match the key used in the TLS handshake; it must be signed by
647 * the identity key. */
648#define OR_CERT_TYPE_TLS_LINK 1
649/** A self-signed identity certificate. The subject key must be a
650 * 1024-bit RSA key. */
651#define OR_CERT_TYPE_ID_1024 2
652/** A certificate that authenticates a key used in an AUTHENTICATE cell
653 * in the v3 handshake. The subject key must be a 1024-bit RSA key; it
654 * must be signed by the identity key */
655#define OR_CERT_TYPE_AUTH_1024 3
656/* DOCDOC */
657#define OR_CERT_TYPE_RSA_ED_CROSSCERT 7
658/**@}*/
659
660/** The first supported type of AUTHENTICATE cell. It contains
661 * a bunch of structures signed with an RSA1024 key. The signed
662 * structures include a HMAC using negotiated TLS secrets, and a digest
663 * of all cells sent or received before the AUTHENTICATE cell (including
664 * the random server-generated AUTH_CHALLENGE cell).
665 */
666#define AUTHTYPE_RSA_SHA256_TLSSECRET 1
667/** As AUTHTYPE_RSA_SHA256_TLSSECRET, but instead of using the
668 * negotiated TLS secrets, uses exported keying material from the TLS
669 * session as described in RFC 5705.
670 *
671 * Not used by today's tors, since everything that supports this
672 * also supports ED25519_SHA256_5705, which is better.
673 **/
674#define AUTHTYPE_RSA_SHA256_RFC5705 2
675/** As AUTHTYPE_RSA_SHA256_RFC5705, but uses an Ed25519 identity key to
676 * authenticate. */
677#define AUTHTYPE_ED25519_SHA256_RFC5705 3
678/*
679 * NOTE: authchallenge_type_is_better() relies on these AUTHTYPE codes
680 * being sorted in order of preference. If we someday add one with
681 * a higher numerical value that we don't like as much, we should revise
682 * authchallenge_type_is_better().
683 */
684
685/** The length of the part of the AUTHENTICATE cell body that the client and
686 * server can generate independently (when using RSA_SHA256_TLSSECRET). It
687 * contains everything except the client's timestamp, the client's randomly
688 * generated nonce, and the signature. */
689#define V3_AUTH_FIXED_PART_LEN (8+(32*6))
690/** The length of the part of the AUTHENTICATE cell body that the client
691 * signs. */
692#define V3_AUTH_BODY_LEN (V3_AUTH_FIXED_PART_LEN + 8 + 16)
693
696
697/** Length of Extended ORPort connection identifier. */
698#define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */
699
700typedef struct connection_t connection_t;
706typedef struct or_connection_t or_connection_t;
707
708/** Cast a connection_t subtype pointer to a connection_t **/
709#define TO_CONN(c) (&(((c)->base_)))
710
711/** Cast a entry_connection_t subtype pointer to a connection_t **/
712#define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
713
714typedef struct addr_policy_t addr_policy_t;
715
716typedef struct cached_dir_t cached_dir_t;
717
718/** Enum used to remember where a signed_descriptor_t is stored and how to
719 * manage the memory for signed_descriptor_body. */
720typedef enum {
721 /** The descriptor isn't stored on disk at all: the copy in memory is
722 * canonical; the saved_offset field is meaningless. */
724 /** The descriptor is stored in the cached_routers file: the
725 * signed_descriptor_body is meaningless; the signed_descriptor_len and
726 * saved_offset are used to index into the mmaped cache file. */
728 /** The descriptor is stored in the cached_routers.new file: the
729 * signed_descriptor_body and saved_offset fields are both set. */
730 /* FFFF (We could also mmap the file and grow the mmap as needed, or
731 * lazy-load the descriptor text by using seek and read. We don't, for
732 * now.)
733 */
736#define saved_location_bitfield_t ENUM_BF(saved_location_t)
737
738/** Enumeration: what directory object is being downloaded?
739 * This determines which schedule is selected to perform the download. */
740typedef enum {
741 DL_SCHED_GENERIC = 0,
742 DL_SCHED_CONSENSUS = 1,
743 DL_SCHED_BRIDGE = 2,
745#define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
746
747/** Enumeration: is the download schedule for downloading from an authority,
748 * or from any available directory mirror?
749 * During bootstrap, "any" means a fallback (or an authority, if there
750 * are no fallbacks).
751 * When we have a valid consensus, "any" means any directory server. */
752typedef enum {
753 DL_WANT_ANY_DIRSERVER = 0,
754 DL_WANT_AUTHORITY = 1,
756#define download_want_authority_bitfield_t \
757 ENUM_BF(download_want_authority_t)
758
759/** Enumeration: do we want to increment the schedule position each time a
760 * connection is attempted (these attempts can be concurrent), or do we want
761 * to increment the schedule position after a connection fails? */
762typedef enum {
763 DL_SCHED_INCREMENT_FAILURE = 0,
764 DL_SCHED_INCREMENT_ATTEMPT = 1,
766#define download_schedule_increment_bitfield_t \
767 ENUM_BF(download_schedule_increment_t)
768
770
771/** If n_download_failures is this high, the download can never happen. */
772#define IMPOSSIBLE_TO_DOWNLOAD 255
773
774/** The max size we expect router descriptor annotations we create to
775 * be. We'll accept larger ones if we see them on disk, but we won't
776 * create any that are larger than this. */
777#define ROUTER_ANNOTATION_BUF_LEN 256
778
780
781/** Flags used to summarize the declared protocol versions of a relay,
782 * so we don't need to parse them again and again. */
784 /** True iff we have a proto line for this router, or a versions line
785 * from which we could infer the protocols. */
786 unsigned int protocols_known:1;
787
788 /** True iff this router has a version or protocol list that allows it to
789 * accept EXTEND2 cells. This requires Relay=2. */
791
792 /** True iff this router has a version or protocol list that allows it to
793 * accept IPv6 connections. This requires Relay=2 or Relay=3. */
795
796 /** True iff this router has a version or protocol list that allows it to
797 * initiate IPv6 connections. This requires Relay=3. */
799
800 /** True iff this router has a version or protocol list that allows it to
801 * consider IPv6 connections canonical. This requires Relay=3. */
803
804 /** True iff this router has a protocol list that allows it to negotiate
805 * ed25519 identity keys on a link handshake with us. This
806 * requires LinkAuth=3. */
808
809 /** True iff this router has a protocol list that allows it to negotiate
810 * ed25519 identity keys on a link handshake, at all. This requires some
811 * LinkAuth=X for X >= 3. */
813
814 /** True iff this router has a protocol list that allows it to be an
815 * introduction point supporting ed25519 authentication key which is part of
816 * the v3 protocol detailed in proposal 224. This requires HSIntro=4. */
818
819 /** True iff this router has a protocol list that allows it to support the
820 * ESTABLISH_INTRO DoS cell extension. Requires HSIntro=5. */
822
823 /** True iff this router has a protocol list that allows it to be an hidden
824 * service directory supporting version 3 as seen in proposal 224. This
825 * requires HSDir=2. */
826 unsigned int supports_v3_hsdir : 1;
827
828 /** True iff this router has a protocol list that allows it to be an hidden
829 * service rendezvous point supporting version 3 as seen in proposal 224.
830 * This requires HSRend=2. */
832
833 /** True iff this router has a protocol list that allows clients to
834 * negotiate hs circuit setup padding. Requires Padding=2. */
836
837 /** True iff this router supports congestion control.
838 * Requires both FlowCtrl=2 *and* Relay=4 */
840
841 /** True iff this router supports conflux. */
842 unsigned int supports_conflux : 1;
843
844 /** True iff this router supports CGO. */
845 unsigned int supports_cgo : 1;
846
847 /** True iff this router supports ntorv3 */
848 unsigned int supports_ntor_v3 : 1;
850
851typedef struct routerinfo_t routerinfo_t;
852typedef struct extrainfo_t extrainfo_t;
853typedef struct routerstatus_t routerstatus_t;
854
855typedef struct microdesc_t microdesc_t;
856typedef struct node_t node_t;
862
863/** Enumerates recognized flavors of a consensus networkstatus document. All
864 * flavors of a consensus are generated from the same set of votes, but they
865 * present different types information to different versions of Tor. */
866typedef enum {
867 FLAV_NS = 0,
868 FLAV_MICRODESC = 1,
870
871/** How many different consensus flavors are there? */
872#define N_CONSENSUS_FLAVORS ((int)(FLAV_MICRODESC)+1)
873
874typedef struct networkstatus_t networkstatus_t;
876typedef struct desc_store_t desc_store_t;
877typedef struct routerlist_t routerlist_t;
878typedef struct extend_info_t extend_info_t;
880
881/** Bitfield enum type listing types of information that directory authorities
882 * can be authoritative about, and that directory caches may or may not cache.
883 *
884 * Note that the granularity here is based on authority granularity and on
885 * cache capabilities. Thus, one particular bit may correspond in practice to
886 * a few types of directory info, so long as every authority that pronounces
887 * officially about one of the types prounounces officially about all of them,
888 * and so long as every cache that caches one of them caches all of them.
889 */
890typedef enum {
891 NO_DIRINFO = 0,
892 /** Serves/signs v3 directory information: votes, consensuses, certs */
893 V3_DIRINFO = 1 << 2,
894 /** Serves bridge descriptors. */
896 /** Serves extrainfo documents. */
898 /** Serves microdescriptors. */
901
902#define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
903
904#define ONION_HANDSHAKE_TYPE_TAP 0x0000
905#define ONION_HANDSHAKE_TYPE_FAST 0x0001
906#define ONION_HANDSHAKE_TYPE_NTOR 0x0002
907#define ONION_HANDSHAKE_TYPE_NTOR_V3 0x0003
908#define MAX_ONION_HANDSHAKE_TYPE 0x0003
909
911typedef struct relay_crypto_t relay_crypto_t;
912typedef struct crypt_path_t crypt_path_t;
914
915#define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
916
918
919struct create_cell_t;
920
921/** Entry in the cell stats list of a circuit; used only if CELL_STATS
922 * events are enabled. */
924 uint8_t command; /**< cell command number. */
925 /** Waiting time in centiseconds if this event is for a removed cell,
926 * or 0 if this event is for adding a cell to the queue. 22 bits can
927 * store more than 11 hours, enough to assume that a circuit with this
928 * delay would long have been closed. */
929 unsigned int waiting_time:22;
930 unsigned int removed:1; /**< 0 for added to, 1 for removed from queue. */
931 unsigned int exitward:1; /**< 0 for app-ward, 1 for exit-ward. */
933
934typedef struct circuit_t circuit_t;
936typedef struct or_circuit_t or_circuit_t;
937
938/** Largest number of relay_early cells that we can send on a given
939 * circuit. */
940#define MAX_RELAY_EARLY_CELLS_PER_CIRCUIT 8
941
942typedef enum path_state_t path_state_t;
943#define path_state_bitfield_t ENUM_BF(path_state_t)
944
945#if REND_COOKIE_LEN != DIGEST_LEN
946#error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
947#endif
948#define REND_TOKEN_LEN DIGEST_LEN
949
950/** Convert a circuit subtype to a circuit_t. */
951#define TO_CIRCUIT(x) (&((x)->base_))
952
953/** @name Isolation flags
954
955 Ways to isolate client streams
956
957 @{
958*/
959/** Isolate based on destination port */
960#define ISO_DESTPORT (1u<<0)
961/** Isolate based on destination address */
962#define ISO_DESTADDR (1u<<1)
963/** Isolate based on SOCKS authentication */
964#define ISO_SOCKSAUTH (1u<<2)
965/** Isolate based on client protocol choice */
966#define ISO_CLIENTPROTO (1u<<3)
967/** Isolate based on client address */
968#define ISO_CLIENTADDR (1u<<4)
969/** Isolate based on session group (always on). */
970#define ISO_SESSIONGRP (1u<<5)
971/** Isolate based on newnym epoch (always on). */
972#define ISO_NYM_EPOCH (1u<<6)
973/** Isolate all streams (Internal only). */
974#define ISO_STREAM (1u<<7)
975/**@}*/
976
977/** Default isolation level for ports. */
978#define ISO_DEFAULT (ISO_CLIENTADDR|ISO_SOCKSAUTH|ISO_SESSIONGRP|ISO_NYM_EPOCH)
979
980/** Indicates that we haven't yet set a session group on a port_cfg_t. */
981#define SESSION_GROUP_UNSET -1
982/** Session group reserved for directory connections */
983#define SESSION_GROUP_DIRCONN -2
984/** Session group reserved for resolve requests launched by a controller */
985#define SESSION_GROUP_CONTROL_RESOLVE -3
986/** First automatically allocated session group number */
987#define SESSION_GROUP_FIRST_AUTO -4
988
989typedef struct port_cfg_t port_cfg_t;
990typedef struct routerset_t routerset_t;
991
992/** A magic value for the (Socks|OR|...)Port options below, telling Tor
993 * to pick its own port. */
994#define CFG_AUTO_PORT 0xc4005e
995
996typedef struct or_options_t or_options_t;
997
998typedef struct or_state_t or_state_t;
999
1000#define MAX_SOCKS_ADDR_LEN 256
1001
1002/********************************* circuitbuild.c **********************/
1003
1004/** How many hops does a general-purpose circuit have by default? */
1005#define DEFAULT_ROUTE_LEN 3
1006
1007/* Circuit Build Timeout "public" structures. */
1008
1009/** Precision multiplier for the Bw weights */
1010#define BW_WEIGHT_SCALE 10000
1011#define BW_MIN_WEIGHT_SCALE 1
1012#define BW_MAX_WEIGHT_SCALE INT32_MAX
1013
1015
1016/********************************* config.c ***************************/
1017
1018/********************************* connection_edge.c *************************/
1019
1020/** Enumerates possible origins of a client-side address mapping. */
1021typedef enum {
1022 /** We're remapping this address because the controller told us to. */
1024 /** We're remapping this address because of an AutomapHostsOnResolve
1025 * configuration. */
1027 /** We're remapping this address because our configuration (via torrc, the
1028 * command line, or a SETCONF command) told us to. */
1030 /** We're remapping this address because we have TrackHostExit configured,
1031 * and we want to remember to use the same exit next time. */
1033 /** We're remapping this address because we got a DNS resolution from a
1034 * Tor server that told us what its value was. */
1036
1037 /** No remapping has occurred. This isn't a possible value for an
1038 * addrmap_entry_t; it's used as a null value when we need to answer "Why
1039 * did this remapping happen." */
1042#define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
1043
1044#define WRITE_STATS_INTERVAL (24*60*60)
1045
1046/********************************* dirvote.c ************************/
1047
1048typedef struct vote_timing_t vote_timing_t;
1049
1050/********************************* microdesc.c *************************/
1051
1053
1054/** The maximum number of non-circuit-build-timeout failures a hidden
1055 * service client will tolerate while trying to build a circuit to an
1056 * introduction point. */
1057#define MAX_INTRO_POINT_REACHABILITY_FAILURES 5
1058
1059/** The minimum and maximum number of distinct INTRODUCE2 cells which a
1060 * hidden service's introduction point will receive before it begins to
1061 * expire. */
1062#define INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS 16384
1063/* Double the minimum value so the interval is [min, min * 2]. */
1064#define INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS \
1065 (INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS * 2)
1066
1067/** The minimum number of seconds that an introduction point will last
1068 * before expiring due to old age. (If it receives
1069 * INTRO_POINT_LIFETIME_INTRODUCTIONS INTRODUCE2 cells, it may expire
1070 * sooner.)
1071 *
1072 * XXX Should this be configurable? */
1073#define INTRO_POINT_LIFETIME_MIN_SECONDS (18*60*60)
1074/** The maximum number of seconds that an introduction point will last
1075 * before expiring due to old age.
1076 *
1077 * XXX Should this be configurable? */
1078#define INTRO_POINT_LIFETIME_MAX_SECONDS (24*60*60)
1079
1080/** The maximum number of circuit creation retry we do to an intro point
1081 * before giving up. We try to reuse intro point that fails during their
1082 * lifetime so this is a hard limit on the amount of time we do that. */
1083#define MAX_INTRO_POINT_CIRCUIT_RETRIES 3
1084
1085/********************************* routerlist.c ***************************/
1086
1087typedef struct dir_server_t dir_server_t;
1088
1089#define RELAY_REQUIRED_MIN_BANDWIDTH (75*1024)
1090#define BRIDGE_REQUIRED_MIN_BANDWIDTH (50*1024)
1091
1092#define ROUTER_MAX_DECLARED_BANDWIDTH INT32_MAX
1093
1094typedef struct tor_version_t tor_version_t;
1095
1096#endif /* !defined(TOR_OR_H) */
Headers for address.h.
Header for addsub.c.
Header for approx_time.c.
Header for binascii.c.
Header for bits.c.
Header file for buffers.c.
Inline functions for reading and writing multibyte values from the middle of strings,...
Macro definitions for MIN, MAX, and CLAMP.
Utility macros to handle different features and behavior in different compilers.
Locale-independent character-type inspection (header)
Header for compat_string.c.
Functions and types for monotonic times.
tor_cmdline_mode_t command
Definition config.c:2478
Country type for geoip.
Headers for crypto_cipher.c.
Headers for crypto_rsa.c.
Header for cstring.c.
Definitions for sizes of Diffie-Hellman groups elements in Z_p.
Headers for di_ops.c.
Header for dir.c.
Configuration structure for client ports.
Header for escape.c.
Wrappers for reading and writing data to files on disk.
Header for inaddr.c.
Macros for comparing the boolean value of integers.
Headers for util_malloc.c.
Headers for map.c.
Header for mmap.c.
Header for muldiv.c.
saved_location_t
Definition or.h:720
@ SAVED_IN_JOURNAL
Definition or.h:734
@ SAVED_NOWHERE
Definition or.h:723
@ SAVED_IN_CACHE
Definition or.h:727
#define VAR_CELL_MAX_HEADER_SIZE
Definition or.h:535
addressmap_entry_source_t
Definition or.h:1021
@ ADDRMAPSRC_TRACKEXIT
Definition or.h:1032
@ ADDRMAPSRC_AUTOMAP
Definition or.h:1026
@ ADDRMAPSRC_NONE
Definition or.h:1040
@ ADDRMAPSRC_CONTROLLER
Definition or.h:1023
@ ADDRMAPSRC_DNS
Definition or.h:1035
@ ADDRMAPSRC_TORRC
Definition or.h:1029
#define CELL_MAX_NETWORK_SIZE
Definition or.h:532
static bool is_known_relay_command(const uint8_t cmd)
Definition or.h:230
uint32_t circid_t
Definition or.h:588
uint16_t streamid_t
Definition or.h:590
download_want_authority_t
Definition or.h:752
rend_auth_type_t
Definition or.h:408
download_schedule_t
Definition or.h:740
cell_direction_t
Definition or.h:427
@ CELL_DIRECTION_OUT
Definition or.h:429
@ CELL_DIRECTION_IN
Definition or.h:428
consensus_flavor_t
Definition or.h:866
relay_cell_fmt_t
Definition or.h:538
@ RELAY_CELL_FORMAT_V1
Definition or.h:542
@ RELAY_CELL_FORMAT_V0
Definition or.h:540
dirinfo_type_t
Definition or.h:890
@ V3_DIRINFO
Definition or.h:893
@ BRIDGE_DIRINFO
Definition or.h:895
@ EXTRAINFO_DIRINFO
Definition or.h:897
@ MICRODESC_DIRINFO
Definition or.h:899
download_schedule_increment_t
Definition or.h:762
circuit_channel_direction_t
Definition or.h:439
path_state_t
Header for parse_int.c.
Header for path.c.
Header for printf.c.
Summarize similar messages that would otherwise flood the logs.
Header for scanf.c.
Header for smartlist.c.
Header for socket.c.
unsigned int supports_extend2_cells
Definition or.h:790
unsigned int supports_ed25519_link_handshake_compat
Definition or.h:807
unsigned int supports_v3_rendezvous_point
Definition or.h:831
unsigned int supports_hs_setup_padding
Definition or.h:835
unsigned int supports_cgo
Definition or.h:845
unsigned int supports_initiating_ipv6_extends
Definition or.h:798
unsigned int supports_ntor_v3
Definition or.h:848
unsigned int supports_v3_hsdir
Definition or.h:826
unsigned int supports_ed25519_link_handshake_any
Definition or.h:812
unsigned int supports_congestion_control
Definition or.h:839
unsigned int supports_canonical_ipv6_conns
Definition or.h:802
unsigned int supports_conflux
Definition or.h:842
unsigned int protocols_known
Definition or.h:786
unsigned int supports_accepting_ipv6_extends
Definition or.h:794
unsigned int supports_ed25519_hs_intro
Definition or.h:817
unsigned int supports_establish_intro_dos_extension
Definition or.h:821
Definition or.h:923
uint8_t command
Definition or.h:924
unsigned int waiting_time
Definition or.h:929
unsigned int exitward
Definition or.h:931
unsigned int removed
Definition or.h:930
Macros to implement mocking and selective exposure for the test code.
Header for threads.c.
Definitions for timing-related constants.
Header for time_fmt.c.
Declarations for timeval-related macros that some platforms are missing.
Headers for torerr.c.
Integer definitions used throughout Tor.
Header for userdb.c.
Macros to manage assertions, fatal and non-fatal.
Header for util_string.c.