or.h
上传用户:awang829
上传日期:2019-07-14
资源大小:2356k
文件大小:207k
源码类别:

网络

开发平台:

Unix_Linux

  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-2009, The Tor Project, Inc. */
  5. /* See LICENSE for licensing information */
  6. /**
  7.  * file or.h
  8.  * brief Master header file for Tor-specific functionality.
  9.  **/
  10. #ifndef _TOR_OR_H
  11. #define _TOR_OR_H
  12. #include "orconfig.h"
  13. #ifdef __COVERITY__
  14. /* If we're building for a static analysis, turn on all the off-by-default
  15.  * features. */
  16. #ifndef INSTRUMENT_DOWNLOADS
  17. #define INSTRUMENT_DOWNLOADS 1
  18. #endif
  19. #ifndef ENABLE_GEOIP_STATS
  20. #define ENABLE_GEOIP_STATS 1
  21. #endif
  22. #endif
  23. #ifdef MS_WINDOWS
  24. #define WIN32_WINNT 0x400
  25. #define _WIN32_WINNT 0x400
  26. #define WIN32_LEAN_AND_MEAN
  27. #endif
  28. #ifdef HAVE_UNISTD_H
  29. #include <unistd.h>
  30. #endif
  31. #ifdef HAVE_SIGNAL_H
  32. #include <signal.h>
  33. #endif
  34. #ifdef HAVE_NETDB_H
  35. #include <netdb.h>
  36. #endif
  37. #ifdef HAVE_SYS_PARAM_H
  38. #include <sys/param.h> /* FreeBSD needs this to know what version it is */
  39. #endif
  40. #include "torint.h"
  41. #ifdef HAVE_SYS_WAIT_H
  42. #include <sys/wait.h>
  43. #endif
  44. #ifdef HAVE_SYS_FCNTL_H
  45. #include <sys/fcntl.h>
  46. #endif
  47. #ifdef HAVE_FCNTL_H
  48. #include <fcntl.h>
  49. #endif
  50. #ifdef HAVE_SYS_IOCTL_H
  51. #include <sys/ioctl.h>
  52. #endif
  53. #ifdef HAVE_SYS_UN_H
  54. #include <sys/un.h>
  55. #endif
  56. #ifdef HAVE_SYS_STAT_H
  57. #include <sys/stat.h>
  58. #endif
  59. #ifdef HAVE_ARPA_INET_H
  60. #include <arpa/inet.h>
  61. #endif
  62. #ifdef HAVE_ERRNO_H
  63. #include <errno.h>
  64. #endif
  65. #ifdef HAVE_ASSERT_H
  66. #include <assert.h>
  67. #endif
  68. #ifdef HAVE_TIME_H
  69. #include <time.h>
  70. #endif
  71. #ifdef MS_WINDOWS
  72. #include <io.h>
  73. #include <process.h>
  74. #include <direct.h>
  75. #include <windows.h>
  76. #define snprintf _snprintf
  77. #endif
  78. #include "crypto.h"
  79. #include "tortls.h"
  80. #include "log.h"
  81. #include "compat.h"
  82. #include "container.h"
  83. #include "util.h"
  84. #include "torgzip.h"
  85. #include "address.h"
  86. #include <event.h>
  87. /* These signals are defined to help control_signal_act work.
  88.  */
  89. #ifndef SIGHUP
  90. #define SIGHUP 1
  91. #endif
  92. #ifndef SIGINT
  93. #define SIGINT 2
  94. #endif
  95. #ifndef SIGUSR1
  96. #define SIGUSR1 10
  97. #endif
  98. #ifndef SIGUSR2
  99. #define SIGUSR2 12
  100. #endif
  101. #ifndef SIGTERM
  102. #define SIGTERM 15
  103. #endif
  104. /* Controller signals start at a high number so we don't
  105.  * conflict with system-defined signals. */
  106. #define SIGNEWNYM 129
  107. #define SIGCLEARDNSCACHE 130
  108. #if (SIZEOF_CELL_T != 0)
  109. /* On Irix, stdlib.h defines a cell_t type, so we need to make sure
  110.  * that our stuff always calls cell_t something different. */
  111. #define cell_t tor_cell_t
  112. #endif
  113. /** Length of longest allowable configured nickname. */
  114. #define MAX_NICKNAME_LEN 19
  115. /** Length of a router identity encoded as a hexadecimal digest, plus
  116.  * possible dollar sign. */
  117. #define MAX_HEX_NICKNAME_LEN (HEX_DIGEST_LEN+1)
  118. /** Maximum length of verbose router identifier: dollar sign, hex ID digest,
  119.  * equal sign or tilde, nickname. */
  120. #define MAX_VERBOSE_NICKNAME_LEN (1+HEX_DIGEST_LEN+1+MAX_NICKNAME_LEN)
  121. /** Maximum size, in bytes, for resized buffers. */
  122. #define MAX_BUF_SIZE ((1<<24)-1) /* 16MB-1 */
  123. /** Maximum size, in bytes, for any directory object that we've downloaded. */
  124. #define MAX_DIR_DL_SIZE MAX_BUF_SIZE
  125. /** For HTTP parsing: Maximum number of bytes we'll accept in the headers
  126.  * of an HTTP request or response. */
  127. #define MAX_HEADERS_SIZE 50000
  128. /** Maximum size, in bytes, for any directory object that we're accepting
  129.  * as an upload. */
  130. #define MAX_DIR_UL_SIZE MAX_BUF_SIZE
  131. /** Maximum size, in bytes, of a single router descriptor uploaded to us
  132.  * as a directory authority. Caches and clients fetch whatever descriptors
  133.  * the authorities tell them to fetch, and don't care about size. */
  134. #define MAX_DESCRIPTOR_UPLOAD_SIZE 20000
  135. /** Maximum size of a single extrainfo document, as above. */
  136. #define MAX_EXTRAINFO_UPLOAD_SIZE 50000
  137. /** How long do we keep DNS cache entries before purging them (regardless of
  138.  * their TTL)? */
  139. #define MAX_DNS_ENTRY_AGE (30*60)
  140. /** How long do we cache/tell clients to cache DNS records when no TTL is
  141.  * known? */
  142. #define DEFAULT_DNS_TTL (30*60)
  143. /** How long can a TTL be before we stop believing it? */
  144. #define MAX_DNS_TTL (3*60*60)
  145. /** How small can a TTL be before we stop believing it?  Provides rudimentary
  146.  * pinning. */
  147. #define MIN_DNS_TTL (60)
  148. /** How often do we rotate onion keys? */
  149. #define MIN_ONION_KEY_LIFETIME (7*24*60*60)
  150. /** How often do we rotate TLS contexts? */
  151. #define MAX_SSL_KEY_LIFETIME (2*60*60)
  152. /** How old do we allow a router to get before removing it
  153.  * from the router list? In seconds. */
  154. #define ROUTER_MAX_AGE (60*60*48)
  155. /** How old can a router get before we (as a server) will no longer
  156.  * consider it live? In seconds. */
  157. #define ROUTER_MAX_AGE_TO_PUBLISH (60*60*20)
  158. /** How old do we let a saved descriptor get before force-removing it? */
  159. #define OLD_ROUTER_DESC_MAX_AGE (60*60*24*5)
  160. /** Possible rules for generating circuit IDs on an OR connection. */
  161. typedef enum {
  162.   CIRC_ID_TYPE_LOWER=0, /**< Pick from 0..1<<15-1. */
  163.   CIRC_ID_TYPE_HIGHER=1, /**< Pick from 1<<15..1<<16-1. */
  164.   /** The other side of a connection is an OP: never create circuits to it,
  165.    * and let it use any circuit ID it wants. */
  166.   CIRC_ID_TYPE_NEITHER=2
  167. } circ_id_type_t;
  168. #define _CONN_TYPE_MIN 3
  169. /** Type for sockets listening for OR connections. */
  170. #define CONN_TYPE_OR_LISTENER 3
  171. /** A bidirectional TLS connection transmitting a sequence of cells.
  172.  * May be from an OR to an OR, or from an OP to an OR. */
  173. #define CONN_TYPE_OR 4
  174. /** A TCP connection from an onion router to a stream's destination. */
  175. #define CONN_TYPE_EXIT 5
  176. /** Type for sockets listening for SOCKS connections. */
  177. #define CONN_TYPE_AP_LISTENER 6
  178. /** A SOCKS proxy connection from the user application to the onion
  179.  * proxy. */
  180. #define CONN_TYPE_AP 7
  181. /** Type for sockets listening for HTTP connections to the directory server. */
  182. #define CONN_TYPE_DIR_LISTENER 8
  183. /** Type for HTTP connections to the directory server. */
  184. #define CONN_TYPE_DIR 9
  185. /** Connection from the main process to a CPU worker process. */
  186. #define CONN_TYPE_CPUWORKER 10
  187. /** Type for listening for connections from user interface process. */
  188. #define CONN_TYPE_CONTROL_LISTENER 11
  189. /** Type for connections from user interface process. */
  190. #define CONN_TYPE_CONTROL 12
  191. /** Type for sockets listening for transparent connections redirected by pf or
  192.  * netfilter. */
  193. #define CONN_TYPE_AP_TRANS_LISTENER 13
  194. /** Type for sockets listening for transparent connections redirected by
  195.  * natd. */
  196. #define CONN_TYPE_AP_NATD_LISTENER 14
  197. /** Type for sockets listening for DNS requests. */
  198. #define CONN_TYPE_AP_DNS_LISTENER 15
  199. #define _CONN_TYPE_MAX 15
  200. /* !!!! If _CONN_TYPE_MAX is ever over 15, we must grow the type field in
  201.  * connection_t. */
  202. /** True iff <b>x</b> is an edge connection. */
  203. #define CONN_IS_EDGE(x) 
  204.   ((x)->type == CONN_TYPE_EXIT || (x)->type == CONN_TYPE_AP)
  205. /** State for any listener connection. */
  206. #define LISTENER_STATE_READY 0
  207. #define _CPUWORKER_STATE_MIN 1
  208. /** State for a connection to a cpuworker process that's idle. */
  209. #define CPUWORKER_STATE_IDLE 1
  210. /** State for a connection to a cpuworker process that's processing a
  211.  * handshake. */
  212. #define CPUWORKER_STATE_BUSY_ONION 2
  213. #define _CPUWORKER_STATE_MAX 2
  214. #define CPUWORKER_TASK_ONION CPUWORKER_STATE_BUSY_ONION
  215. #define _OR_CONN_STATE_MIN 1
  216. /** State for a connection to an OR: waiting for connect() to finish. */
  217. #define OR_CONN_STATE_CONNECTING 1
  218. /** State for a connection to an OR: waiting for proxy command to flush. */
  219. #define OR_CONN_STATE_PROXY_FLUSHING 2
  220. /** State for a connection to an OR: waiting for proxy response. */
  221. #define OR_CONN_STATE_PROXY_READING 3
  222. /** State for a connection to an OR or client: SSL is handshaking, not done
  223.  * yet. */
  224. #define OR_CONN_STATE_TLS_HANDSHAKING 4
  225. /** State for a connection to an OR: We're doing a second SSL handshake for
  226.  * renegotiation purposes. */
  227. #define OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING 5
  228. /** State for a connection at an OR: We're waiting for the client to
  229.  * renegotiate. */
  230. #define OR_CONN_STATE_TLS_SERVER_RENEGOTIATING 6
  231. /** State for a connection to an OR: We're done with our SSL handshake, but we
  232.  * haven't yet negotiated link protocol versions and sent a netinfo cell.
  233.  */
  234. #define OR_CONN_STATE_OR_HANDSHAKING 7
  235. /** State for a connection to an OR: Ready to send/receive cells. */
  236. #define OR_CONN_STATE_OPEN 8
  237. #define _OR_CONN_STATE_MAX 8
  238. #define _EXIT_CONN_STATE_MIN 1
  239. /** State for an exit connection: waiting for response from DNS farm. */
  240. #define EXIT_CONN_STATE_RESOLVING 1
  241. /** State for an exit connection: waiting for connect() to finish. */
  242. #define EXIT_CONN_STATE_CONNECTING 2
  243. /** State for an exit connection: open and ready to transmit data. */
  244. #define EXIT_CONN_STATE_OPEN 3
  245. /** State for an exit connection: waiting to be removed. */
  246. #define EXIT_CONN_STATE_RESOLVEFAILED 4
  247. #define _EXIT_CONN_STATE_MAX 4
  248. /* The AP state values must be disjoint from the EXIT state values. */
  249. #define _AP_CONN_STATE_MIN 5
  250. /** State for a SOCKS connection: waiting for SOCKS request. */
  251. #define AP_CONN_STATE_SOCKS_WAIT 5
  252. /** State for a SOCKS connection: got a y.onion URL; waiting to receive
  253.  * rendezvous descriptor. */
  254. #define AP_CONN_STATE_RENDDESC_WAIT 6
  255. /** The controller will attach this connection to a circuit; it isn't our
  256.  * job to do so. */
  257. #define AP_CONN_STATE_CONTROLLER_WAIT 7
  258. /** State for a SOCKS connection: waiting for a completed circuit. */
  259. #define AP_CONN_STATE_CIRCUIT_WAIT 8
  260. /** State for a SOCKS connection: sent BEGIN, waiting for CONNECTED. */
  261. #define AP_CONN_STATE_CONNECT_WAIT 9
  262. /** State for a SOCKS connection: sent RESOLVE, waiting for RESOLVED. */
  263. #define AP_CONN_STATE_RESOLVE_WAIT 10
  264. /** State for a SOCKS connection: ready to send and receive. */
  265. #define AP_CONN_STATE_OPEN 11
  266. /** State for a transparent natd connection: waiting for original
  267.  * destination. */
  268. #define AP_CONN_STATE_NATD_WAIT 12
  269. #define _AP_CONN_STATE_MAX 12
  270. /** True iff the AP_CONN_STATE_* value <b>s</b> means that the corresponding
  271.  * edge connection is not attached to any circuit. */
  272. #define AP_CONN_STATE_IS_UNATTACHED(s) 
  273.   ((s) <= AP_CONN_STATE_CIRCUIT_WAIT || (s) == AP_CONN_STATE_NATD_WAIT)
  274. #define _DIR_CONN_STATE_MIN 1
  275. /** State for connection to directory server: waiting for connect(). */
  276. #define DIR_CONN_STATE_CONNECTING 1
  277. /** State for connection to directory server: sending HTTP request. */
  278. #define DIR_CONN_STATE_CLIENT_SENDING 2
  279. /** State for connection to directory server: reading HTTP response. */
  280. #define DIR_CONN_STATE_CLIENT_READING 3
  281. /** State for connection to directory server: happy and finished. */
  282. #define DIR_CONN_STATE_CLIENT_FINISHED 4
  283. /** State for connection at directory server: waiting for HTTP request. */
  284. #define DIR_CONN_STATE_SERVER_COMMAND_WAIT 5
  285. /** State for connection at directory server: sending HTTP response. */
  286. #define DIR_CONN_STATE_SERVER_WRITING 6
  287. #define _DIR_CONN_STATE_MAX 6
  288. /** True iff the purpose of <b>conn</b> means that it's a server-side
  289.  * directory connection. */
  290. #define DIR_CONN_IS_SERVER(conn) ((conn)->purpose == DIR_PURPOSE_SERVER)
  291. #define _CONTROL_CONN_STATE_MIN 1
  292. /** State for a control connection: Authenticated and accepting v1 commands. */
  293. #define CONTROL_CONN_STATE_OPEN 1
  294. /** State for a control connection: Waiting for authentication; speaking
  295.  * protocol v1. */
  296. #define CONTROL_CONN_STATE_NEEDAUTH 2
  297. #define _CONTROL_CONN_STATE_MAX 2
  298. #define _DIR_PURPOSE_MIN 3
  299. /** A connection to a directory server: download a rendezvous
  300.  * descriptor. */
  301. #define DIR_PURPOSE_FETCH_RENDDESC 3
  302. /** A connection to a directory server: set after a rendezvous
  303.  * descriptor is downloaded. */
  304. #define DIR_PURPOSE_HAS_FETCHED_RENDDESC 4
  305. /** A connection to a directory server: download one or more v2
  306.  * network-status objects */
  307. #define DIR_PURPOSE_FETCH_V2_NETWORKSTATUS 5
  308. /** A connection to a directory server: download one or more server
  309.  * descriptors. */
  310. #define DIR_PURPOSE_FETCH_SERVERDESC 6
  311. /** A connection to a directory server: download one or more extra-info
  312.  * documents. */
  313. #define DIR_PURPOSE_FETCH_EXTRAINFO 7
  314. /** A connection to a directory server: upload a server descriptor. */
  315. #define DIR_PURPOSE_UPLOAD_DIR 8
  316. /** A connection to a directory server: upload a rendezvous
  317.  * descriptor. */
  318. #define DIR_PURPOSE_UPLOAD_RENDDESC 9
  319. /** A connection to a directory server: upload a v3 networkstatus vote. */
  320. #define DIR_PURPOSE_UPLOAD_VOTE 10
  321. /** A connection to a directory server: upload a v3 consensus signature */
  322. #define DIR_PURPOSE_UPLOAD_SIGNATURES 11
  323. /** A connection to a directory server: download one or more v3 networkstatus
  324.  * votes. */
  325. #define DIR_PURPOSE_FETCH_STATUS_VOTE 12
  326. /** A connection to a directory server: download a v3 detached signatures
  327.  * object for a consensus. */
  328. #define DIR_PURPOSE_FETCH_DETACHED_SIGNATURES 13
  329. /** A connection to a directory server: download a v3 networkstatus
  330.  * consensus. */
  331. #define DIR_PURPOSE_FETCH_CONSENSUS 14
  332. /** A connection to a directory server: download one or more directory
  333.  * authority certificates. */
  334. #define DIR_PURPOSE_FETCH_CERTIFICATE 15
  335. /** Purpose for connection at a directory server. */
  336. #define DIR_PURPOSE_SERVER 16
  337. /** A connection to a hidden service directory server: upload a v2 rendezvous
  338.  * descriptor. */
  339. #define DIR_PURPOSE_UPLOAD_RENDDESC_V2 17
  340. /** A connection to a hidden service directory server: download a v2 rendezvous
  341.  * descriptor. */
  342. #define DIR_PURPOSE_FETCH_RENDDESC_V2 18
  343. #define _DIR_PURPOSE_MAX 18
  344. /** True iff <b>p</b> is a purpose corresponding to uploading data to a
  345.  * directory server. */
  346. #define DIR_PURPOSE_IS_UPLOAD(p)                
  347.   ((p)==DIR_PURPOSE_UPLOAD_DIR ||               
  348.    (p)==DIR_PURPOSE_UPLOAD_RENDDESC ||          
  349.    (p)==DIR_PURPOSE_UPLOAD_VOTE ||              
  350.    (p)==DIR_PURPOSE_UPLOAD_SIGNATURES)
  351. #define _EXIT_PURPOSE_MIN 1
  352. /** This exit stream wants to do an ordinary connect. */
  353. #define EXIT_PURPOSE_CONNECT 1
  354. /** This exit stream wants to do a resolve (either normal or reverse). */
  355. #define EXIT_PURPOSE_RESOLVE 2
  356. #define _EXIT_PURPOSE_MAX 2
  357. /* !!!! If any connection purpose is ever over 31, we must grow the type
  358.  * field in connection_t. */
  359. /** Circuit state: I'm the origin, still haven't done all my handshakes. */
  360. #define CIRCUIT_STATE_BUILDING 0
  361. /** Circuit state: Waiting to process the onionskin. */
  362. #define CIRCUIT_STATE_ONIONSKIN_PENDING 1
  363. /** Circuit state: I'd like to deliver a create, but my n_conn is still
  364.  * connecting. */
  365. #define CIRCUIT_STATE_OR_WAIT 2
  366. /** Circuit state: onionskin(s) processed, ready to send/receive cells. */
  367. #define CIRCUIT_STATE_OPEN 3
  368. #define _CIRCUIT_PURPOSE_MIN 1
  369. /* these circuits were initiated elsewhere */
  370. #define _CIRCUIT_PURPOSE_OR_MIN 1
  371. /** OR-side circuit purpose: normal circuit, at OR. */
  372. #define CIRCUIT_PURPOSE_OR 1
  373. /** OR-side circuit purpose: At OR, from Bob, waiting for intro from Alices. */
  374. #define CIRCUIT_PURPOSE_INTRO_POINT 2
  375. /** OR-side circuit purpose: At OR, from Alice, waiting for Bob. */
  376. #define CIRCUIT_PURPOSE_REND_POINT_WAITING 3
  377. /** OR-side circuit purpose: At OR, both circuits have this purpose. */
  378. #define CIRCUIT_PURPOSE_REND_ESTABLISHED 4
  379. #define _CIRCUIT_PURPOSE_OR_MAX 4
  380. /* these circuits originate at this node */
  381. /* here's how circ client-side purposes work:
  382.  *   normal circuits are C_GENERAL.
  383.  *   circuits that are c_introducing are either on their way to
  384.  *     becoming open, or they are open and waiting for a
  385.  *     suitable rendcirc before they send the intro.
  386.  *   circuits that are c_introduce_ack_wait have sent the intro,
  387.  *     but haven't gotten a response yet.
  388.  *   circuits that are c_establish_rend are either on their way
  389.  *     to becoming open, or they are open and have sent the
  390.  *     establish_rendezvous cell but haven't received an ack.
  391.  *   circuits that are c_rend_ready are open and have received a
  392.  *     rend ack, but haven't heard from bob yet. if they have a
  393.  *     buildstate->pending_final_cpath then they're expecting a
  394.  *     cell from bob, else they're not.
  395.  *   circuits that are c_rend_ready_intro_acked are open, and
  396.  *     some intro circ has sent its intro and received an ack.
  397.  *   circuits that are c_rend_joined are open, have heard from
  398.  *     bob, and are talking to him.
  399.  */
  400. /** Client-side circuit purpose: Normal circuit, with cpath. */
  401. #define CIRCUIT_PURPOSE_C_GENERAL 5
  402. /** Client-side circuit purpose: at Alice, connecting to intro point. */
  403. #define CIRCUIT_PURPOSE_C_INTRODUCING 6
  404. /** Client-side circuit purpose: at Alice, sent INTRODUCE1 to intro point,
  405.  * waiting for ACK/NAK. */
  406. #define CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT 7
  407. /** Client-side circuit purpose: at Alice, introduced and acked, closing. */
  408. #define CIRCUIT_PURPOSE_C_INTRODUCE_ACKED 8
  409. /** Client-side circuit purpose: at Alice, waiting for ack. */
  410. #define CIRCUIT_PURPOSE_C_ESTABLISH_REND 9
  411. /** Client-side circuit purpose: at Alice, waiting for Bob. */
  412. #define CIRCUIT_PURPOSE_C_REND_READY 10
  413. /** Client-side circuit purpose: at Alice, waiting for Bob, INTRODUCE
  414.  * has been acknowledged. */
  415. #define CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED 11
  416. /** Client-side circuit purpose: at Alice, rendezvous established. */
  417. #define CIRCUIT_PURPOSE_C_REND_JOINED 12
  418. #define _CIRCUIT_PURPOSE_C_MAX 12
  419. /** Hidden-service-side circuit purpose: at Bob, waiting for introductions. */
  420. #define CIRCUIT_PURPOSE_S_ESTABLISH_INTRO 13
  421. /** Hidden-service-side circuit purpose: at Bob, successfully established
  422.  * intro. */
  423. #define CIRCUIT_PURPOSE_S_INTRO 14
  424. /** Hidden-service-side circuit purpose: at Bob, connecting to rend point. */
  425. #define CIRCUIT_PURPOSE_S_CONNECT_REND 15
  426. /** Hidden-service-side circuit purpose: at Bob, rendezvous established. */
  427. #define CIRCUIT_PURPOSE_S_REND_JOINED 16
  428. /** A testing circuit; not meant to be used for actual traffic. */
  429. #define CIRCUIT_PURPOSE_TESTING 17
  430. /** A controller made this circuit and Tor should not use it. */
  431. #define CIRCUIT_PURPOSE_CONTROLLER 18
  432. #define _CIRCUIT_PURPOSE_MAX 18
  433. /** A catch-all for unrecognized purposes. Currently we don't expect
  434.  * to make or see any circuits with this purpose. */
  435. #define CIRCUIT_PURPOSE_UNKNOWN 255
  436. /** True iff the circuit purpose <b>p</b> is for a circuit that
  437.  * originated at this node. */
  438. #define CIRCUIT_PURPOSE_IS_ORIGIN(p) ((p)>_CIRCUIT_PURPOSE_OR_MAX)
  439. /** True iff the circuit purpose <b>p</b> is for a circuit that originated
  440.  * here to serve as a client.  (Hidden services don't count here.) */
  441. #define CIRCUIT_PURPOSE_IS_CLIENT(p) 
  442.   ((p)> _CIRCUIT_PURPOSE_OR_MAX &&    
  443.    (p)<=_CIRCUIT_PURPOSE_C_MAX)
  444. /** True iff the circuit_t <b>c</b> is actually an origin_circuit_t. */
  445. #define CIRCUIT_IS_ORIGIN(c) (CIRCUIT_PURPOSE_IS_ORIGIN((c)->purpose))
  446. /** True iff the circuit purpose <b>p</b> is for an established rendezvous
  447.  * circuit. */
  448. #define CIRCUIT_PURPOSE_IS_ESTABLISHED_REND(p) 
  449.   ((p) == CIRCUIT_PURPOSE_C_REND_JOINED ||     
  450.    (p) == CIRCUIT_PURPOSE_S_REND_JOINED)
  451. /** How many circuits do we want simultaneously in-progress to handle
  452.  * a given stream? */
  453. #define MIN_CIRCUITS_HANDLING_STREAM 2
  454. /* These RELAY_COMMAND constants define values for relay cell commands, and
  455. * must match those defined in tor-spec.txt. */
  456. #define RELAY_COMMAND_BEGIN 1
  457. #define RELAY_COMMAND_DATA 2
  458. #define RELAY_COMMAND_END 3
  459. #define RELAY_COMMAND_CONNECTED 4
  460. #define RELAY_COMMAND_SENDME 5
  461. #define RELAY_COMMAND_EXTEND 6
  462. #define RELAY_COMMAND_EXTENDED 7
  463. #define RELAY_COMMAND_TRUNCATE 8
  464. #define RELAY_COMMAND_TRUNCATED 9
  465. #define RELAY_COMMAND_DROP 10
  466. #define RELAY_COMMAND_RESOLVE 11
  467. #define RELAY_COMMAND_RESOLVED 12
  468. #define RELAY_COMMAND_BEGIN_DIR 13
  469. #define RELAY_COMMAND_ESTABLISH_INTRO 32
  470. #define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
  471. #define RELAY_COMMAND_INTRODUCE1 34
  472. #define RELAY_COMMAND_INTRODUCE2 35
  473. #define RELAY_COMMAND_RENDEZVOUS1 36
  474. #define RELAY_COMMAND_RENDEZVOUS2 37
  475. #define RELAY_COMMAND_INTRO_ESTABLISHED 38
  476. #define RELAY_COMMAND_RENDEZVOUS_ESTABLISHED 39
  477. #define RELAY_COMMAND_INTRODUCE_ACK 40
  478. /* Reasons why an OR connection is closed. */
  479. #define END_OR_CONN_REASON_DONE           1
  480. #define END_OR_CONN_REASON_REFUSED        2 /* connection refused */
  481. #define END_OR_CONN_REASON_OR_IDENTITY    3
  482. #define END_OR_CONN_REASON_CONNRESET      4 /* connection reset by peer */
  483. #define END_OR_CONN_REASON_TIMEOUT        5
  484. #define END_OR_CONN_REASON_NO_ROUTE       6 /* no route to host/net */
  485. #define END_OR_CONN_REASON_IO_ERROR       7 /* read/write error */
  486. #define END_OR_CONN_REASON_RESOURCE_LIMIT 8 /* sockets, buffers, etc */
  487. #define END_OR_CONN_REASON_MISC           9
  488. /* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
  489.  * documentation of these.  The values must match. */
  490. #define END_STREAM_REASON_MISC 1
  491. #define END_STREAM_REASON_RESOLVEFAILED 2
  492. #define END_STREAM_REASON_CONNECTREFUSED 3
  493. #define END_STREAM_REASON_EXITPOLICY 4
  494. #define END_STREAM_REASON_DESTROY 5
  495. #define END_STREAM_REASON_DONE 6
  496. #define END_STREAM_REASON_TIMEOUT 7
  497. /* 8 is unallocated for historical reasons. */
  498. #define END_STREAM_REASON_HIBERNATING 9
  499. #define END_STREAM_REASON_INTERNAL 10
  500. #define END_STREAM_REASON_RESOURCELIMIT 11
  501. #define END_STREAM_REASON_CONNRESET 12
  502. #define END_STREAM_REASON_TORPROTOCOL 13
  503. #define END_STREAM_REASON_NOTDIRECTORY 14
  504. #define END_STREAM_REASON_ENTRYPOLICY 15
  505. /* These high-numbered end reasons are not part of the official spec,
  506.  * and are not intended to be put in relay end cells. They are here
  507.  * to be more informative when sending back socks replies to the
  508.  * application. */
  509. /* XXXX 256 is no longer used; feel free to reuse it. */
  510. /** We were unable to attach the connection to any circuit at all. */
  511. /* XXXX the ways we use this one don't make a lot of sense. */
  512. #define END_STREAM_REASON_CANT_ATTACH 257
  513. /** We can't connect to any directories at all, so we killed our streams
  514.  * before they can time out. */
  515. #define END_STREAM_REASON_NET_UNREACHABLE 258
  516. /** This is a SOCKS connection, and the client used (or misused) the SOCKS
  517.  * protocol in a way we couldn't handle. */
  518. #define END_STREAM_REASON_SOCKSPROTOCOL 259
  519. /** This is a transparent proxy connection, but we can't extract the original
  520.  * target address:port. */
  521. #define END_STREAM_REASON_CANT_FETCH_ORIG_DEST 260
  522. /** This is a connection on the NATD port, and the destination IP:Port was
  523.  * either ill-formed or out-of-range. */
  524. #define END_STREAM_REASON_INVALID_NATD_DEST 261
  525. /** Bitwise-and this value with endreason to mask out all flags. */
  526. #define END_STREAM_REASON_MASK 511
  527. /** Bitwise-or this with the argument to control_event_stream_status
  528.  * to indicate that the reason came from an END cell. */
  529. #define END_STREAM_REASON_FLAG_REMOTE 512
  530. /** Bitwise-or this with the argument to control_event_stream_status
  531.  * to indicate that we already sent a CLOSED stream event. */
  532. #define END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED 1024
  533. /** Bitwise-or this with endreason to indicate that we already sent
  534.  * a socks reply, and no further reply needs to be sent from
  535.  * connection_mark_unattached_ap(). */
  536. #define END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED 2048
  537. /** Reason for remapping an AP connection's address: we have a cached
  538.  * answer. */
  539. #define REMAP_STREAM_SOURCE_CACHE 1
  540. /** Reason for remapping an AP connection's address: the exit node told us an
  541.  * answer. */
  542. #define REMAP_STREAM_SOURCE_EXIT 2
  543. /* 'type' values to use in RESOLVED cells.  Specified in tor-spec.txt. */
  544. #define RESOLVED_TYPE_HOSTNAME 0
  545. #define RESOLVED_TYPE_IPV4 4
  546. #define RESOLVED_TYPE_IPV6 6
  547. #define RESOLVED_TYPE_ERROR_TRANSIENT 0xF0
  548. #define RESOLVED_TYPE_ERROR 0xF1
  549. /* Negative reasons are internal: we never send them in a DESTROY or TRUNCATE
  550.  * call; they only go to the controller for tracking  */
  551. /** We couldn't build a path for this circuit. */
  552. #define END_CIRC_REASON_NOPATH          -2
  553. /** Catch-all "other" reason for closing origin circuits. */
  554. #define END_CIRC_AT_ORIGIN              -1
  555. /* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt for
  556.  * documentation of these. */
  557. #define _END_CIRC_REASON_MIN            0
  558. #define END_CIRC_REASON_NONE            0
  559. #define END_CIRC_REASON_TORPROTOCOL     1
  560. #define END_CIRC_REASON_INTERNAL        2
  561. #define END_CIRC_REASON_REQUESTED       3
  562. #define END_CIRC_REASON_HIBERNATING     4
  563. #define END_CIRC_REASON_RESOURCELIMIT   5
  564. #define END_CIRC_REASON_CONNECTFAILED   6
  565. #define END_CIRC_REASON_OR_IDENTITY     7
  566. #define END_CIRC_REASON_OR_CONN_CLOSED  8
  567. #define END_CIRC_REASON_FINISHED        9
  568. #define END_CIRC_REASON_TIMEOUT         10
  569. #define END_CIRC_REASON_DESTROYED       11
  570. #define END_CIRC_REASON_NOSUCHSERVICE   12
  571. #define _END_CIRC_REASON_MAX            12
  572. /** Bitwise-OR this with the argument to circuit_mark_for_close() or
  573.  * control_event_circuit_status() to indicate that the reason was
  574.  * passed through from a destroy or truncate cell. */
  575. #define END_CIRC_REASON_FLAG_REMOTE     512
  576. /** Length of 'y' portion of 'y.onion' URL. */
  577. #define REND_SERVICE_ID_LEN_BASE32 16
  578. /** Length of 'y.onion' including '.onion' URL. */
  579. #define REND_SERVICE_ADDRESS_LEN (16+1+5)
  580. /** Length of a binary-encoded rendezvous service ID. */
  581. #define REND_SERVICE_ID_LEN 10
  582. /** How long after we receive a hidden service descriptor do we consider
  583.  * it fresh? */
  584. #define NUM_SECONDS_BEFORE_HS_REFETCH (60*15)
  585. /** Time period for which a v2 descriptor will be valid. */
  586. #define REND_TIME_PERIOD_V2_DESC_VALIDITY (24*60*60)
  587. /** Time period within which two sets of v2 descriptors will be uploaded in
  588.  * parallel. */
  589. #define REND_TIME_PERIOD_OVERLAPPING_V2_DESCS (60*60)
  590. /** Number of non-consecutive replicas (i.e. distributed somewhere
  591.  * in the ring) for a descriptor. */
  592. #define REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS 2
  593. /** Number of consecutive replicas for a descriptor. */
  594. #define REND_NUMBER_OF_CONSECUTIVE_REPLICAS 3
  595. /** Length of v2 descriptor ID (32 base32 chars = 160 bits). */
  596. #define REND_DESC_ID_V2_LEN_BASE32 32
  597. /** Length of the base32-encoded secret ID part of versioned hidden service
  598.  * descriptors. */
  599. #define REND_SECRET_ID_PART_LEN_BASE32 32
  600. /** Length of the base32-encoded hash of an introduction point's
  601.  * identity key. */
  602. #define REND_INTRO_POINT_ID_LEN_BASE32 32
  603. /** Length of the descriptor cookie that is used for client authorization
  604.  * to hidden services. */
  605. #define REND_DESC_COOKIE_LEN 16
  606. /** Length of the base64-encoded descriptor cookie that is used for
  607.  * exchanging client authorization between hidden service and client. */
  608. #define REND_DESC_COOKIE_LEN_BASE64 22
  609. /** Length of client identifier in encrypted introduction points for hidden
  610.  * service authorization type 'basic'. */
  611. #define REND_BASIC_AUTH_CLIENT_ID_LEN 4
  612. /** Multiple of the number of clients to which the real number of clients
  613.  * is padded with fake clients for hidden service authorization type
  614.  * 'basic'. */
  615. #define REND_BASIC_AUTH_CLIENT_MULTIPLE 16
  616. /** Length of client entry consisting of client identifier and encrypted
  617.  * session key for hidden service authorization type 'basic'. */
  618. #define REND_BASIC_AUTH_CLIENT_ENTRY_LEN (REND_BASIC_AUTH_CLIENT_ID_LEN 
  619.                                           + CIPHER_KEY_LEN)
  620. /** Maximum size of v2 hidden service descriptors. */
  621. #define REND_DESC_MAX_SIZE (20 * 1024)
  622. /** Legal characters for use in authorized client names for a hidden
  623.  * service. */
  624. #define REND_LEGAL_CLIENTNAME_CHARACTERS 
  625.   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-_"
  626. /** Maximum length of authorized client names for a hidden service. */
  627. #define REND_CLIENTNAME_MAX_LEN 16
  628. /** Length of the rendezvous cookie that is used to connect circuits at the
  629.  * rendezvous point. */
  630. #define REND_COOKIE_LEN DIGEST_LEN
  631. /** Client authorization type that a hidden service performs. */
  632. typedef enum rend_auth_type_t {
  633.   REND_NO_AUTH      = 0,
  634.   REND_BASIC_AUTH   = 1,
  635.   REND_STEALTH_AUTH = 2,
  636. } rend_auth_type_t;
  637. /** Client-side configuration of authorization for a hidden service. */
  638. typedef struct rend_service_authorization_t {
  639.   char descriptor_cookie[REND_DESC_COOKIE_LEN];
  640.   char onion_address[REND_SERVICE_ADDRESS_LEN+1];
  641.   rend_auth_type_t auth_type;
  642. } rend_service_authorization_t;
  643. /** Client- and server-side data that is used for hidden service connection
  644.  * establishment. Not all fields contain data depending on where this struct
  645.  * is used. */
  646. typedef struct rend_data_t {
  647.   /** Onion address (without the .onion part) that a client requests. */
  648.   char onion_address[REND_SERVICE_ID_LEN_BASE32+1];
  649.   /** (Optional) descriptor cookie that is used by a client. */
  650.   char descriptor_cookie[REND_DESC_COOKIE_LEN];
  651.   /** Authorization type for accessing a service used by a client. */
  652.   rend_auth_type_t auth_type;
  653.   /** Hash of the hidden service's PK used by a service. */
  654.   char rend_pk_digest[DIGEST_LEN];
  655.   /** Rendezvous cookie used by both, client and service. */
  656.   char rend_cookie[REND_COOKIE_LEN];
  657.   /** Rendezvous descriptor version that is used by a service. Used to
  658.    * distinguish introduction and rendezvous points belonging to the same
  659.    * rendezvous service ID, but different descriptor versions.
  660.    */
  661.   uint8_t rend_desc_version;
  662. } rend_data_t;
  663. /** Time interval for tracking possible replays of INTRODUCE2 cells.
  664.  * Incoming cells with timestamps half of this interval in the past or
  665.  * future are dropped immediately. */
  666. #define REND_REPLAY_TIME_INTERVAL (60 * 60)
  667. /** Used to indicate which way a cell is going on a circuit. */
  668. typedef enum {
  669.   CELL_DIRECTION_IN=1, /**< The cell is moving towards the origin. */
  670.   CELL_DIRECTION_OUT=2, /**< The cell is moving away from the origin. */
  671. } cell_direction_t;
  672. /** Initial value for both sides of a circuit transmission window when the
  673.  * circuit is initialized.  Measured in cells. */
  674. #define CIRCWINDOW_START 1000
  675. /** Amount to increment a circuit window when we get a circuit SENDME. */
  676. #define CIRCWINDOW_INCREMENT 100
  677. /** Initial value on both sides of a stream transmission window when the
  678.  * stream is initialized.  Measured in cells. */
  679. #define STREAMWINDOW_START 500
  680. /** Amount to increment a stream window when we get a stream SENDME. */
  681. #define STREAMWINDOW_INCREMENT 50
  682. /* Cell commands.  These values are defined in tor-spec.txt. */
  683. #define CELL_PADDING 0
  684. #define CELL_CREATE 1
  685. #define CELL_CREATED 2
  686. #define CELL_RELAY 3
  687. #define CELL_DESTROY 4
  688. #define CELL_CREATE_FAST 5
  689. #define CELL_CREATED_FAST 6
  690. #define CELL_VERSIONS 7
  691. #define CELL_NETINFO 8
  692. #define CELL_RELAY_EARLY 9
  693. /** True iff the cell command <b>x</b> is one that implies a variable-length
  694.  * cell. */
  695. #define CELL_COMMAND_IS_VAR_LENGTH(x) ((x) == CELL_VERSIONS)
  696. /** How long to test reachability before complaining to the user. */
  697. #define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
  698. /** Legal characters in a nickname. */
  699. #define LEGAL_NICKNAME_CHARACTERS 
  700.   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  701. /** Name to use in client TLS certificates if no nickname is given. Once
  702.  * Tor 0.1.2.x is obsolete, we can remove this. */
  703. #define DEFAULT_CLIENT_NICKNAME "client"
  704. /** Number of bytes in a SOCKS4 header. */
  705. #define SOCKS4_NETWORK_LEN 8
  706. /*
  707.  * Relay payload:
  708.  *         Relay command           [1 byte]
  709.  *         Recognized              [2 bytes]
  710.  *         Stream ID               [2 bytes]
  711.  *         Partial SHA-1           [4 bytes]
  712.  *         Length                  [2 bytes]
  713.  *         Relay payload           [498 bytes]
  714.  */
  715. /** Number of bytes in a cell, minus cell header. */
  716. #define CELL_PAYLOAD_SIZE 509
  717. /** Number of bytes in a cell transmitted over the network. */
  718. #define CELL_NETWORK_SIZE 512
  719. /** Length of a header on a variable-length cell. */
  720. #define VAR_CELL_HEADER_SIZE 5
  721. /** Number of bytes in a relay cell's header (not including general cell
  722.  * header). */
  723. #define RELAY_HEADER_SIZE (1+2+2+4+2)
  724. /** Largest number of bytes that can fit in a relay cell payload. */
  725. #define RELAY_PAYLOAD_SIZE (CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE)
  726. /** Identifies a circuit on an or_connection */
  727. typedef uint16_t circid_t;
  728. /** Identifies a stream on a circuit */
  729. typedef uint16_t streamid_t;
  730. /** Parsed onion routing cell.  All communication between nodes
  731.  * is via cells. */
  732. typedef struct cell_t {
  733.   circid_t circ_id; /**< Circuit which received the cell. */
  734.   uint8_t command; /**< Type of the cell: one of CELL_PADDING, CELL_CREATE,
  735.                     * CELL_DESTROY, etc */
  736.   char payload[CELL_PAYLOAD_SIZE]; /**< Cell body. */
  737. } cell_t;
  738. /** Parsed variable-length onion routing cell. */
  739. typedef struct var_cell_t {
  740.   uint8_t command;
  741.   circid_t circ_id;
  742.   uint16_t payload_len;
  743.   char payload[1];
  744. } var_cell_t;
  745. /** A cell as packed for writing to the network. */
  746. typedef struct packed_cell_t {
  747.   struct packed_cell_t *next; /**< Next cell queued on this circuit. */
  748.   char body[CELL_NETWORK_SIZE]; /**< Cell as packed for network. */
  749. } packed_cell_t;
  750. /** A queue of cells on a circuit, waiting to be added to the
  751.  * or_connection_t's outbuf. */
  752. typedef struct cell_queue_t {
  753.   packed_cell_t *head; /**< The first cell, or NULL if the queue is empty. */
  754.   packed_cell_t *tail; /**< The last cell, or NULL if the queue is empty. */
  755.   int n; /**< The number of cells in the queue. */
  756. } cell_queue_t;
  757. /** Beginning of a RELAY cell payload. */
  758. typedef struct {
  759.   uint8_t command; /**< The end-to-end relay command. */
  760.   uint16_t recognized; /**< Used to tell whether cell is for us. */
  761.   streamid_t stream_id; /**< Which stream is this cell associated with? */
  762.   char integrity[4]; /**< Used to tell whether cell is corrupted. */
  763.   uint16_t length; /**< How long is the payload body? */
  764. } relay_header_t;
  765. typedef struct buf_t buf_t;
  766. typedef struct socks_request_t socks_request_t;
  767. /* Values for connection_t.magic: used to make sure that downcasts (casts from
  768. * connection_t to foo_connection_t) are safe. */
  769. #define BASE_CONNECTION_MAGIC 0x7C3C304Eu
  770. #define OR_CONNECTION_MAGIC 0x7D31FF03u
  771. #define EDGE_CONNECTION_MAGIC 0xF0374013u
  772. #define DIR_CONNECTION_MAGIC 0x9988ffeeu
  773. #define CONTROL_CONNECTION_MAGIC 0x8abc765du
  774. /** Description of a connection to another host or process, and associated
  775.  * data.
  776.  *
  777.  * A connection is named based on what it's connected to -- an "OR
  778.  * connection" has a Tor node on the other end, an "exit
  779.  * connection" has a website or other server on the other end, and an
  780.  * "AP connection" has an application proxy (and thus a user) on the
  781.  * other end.
  782.  *
  783.  * Every connection has a type and a state.  Connections never change
  784.  * their type, but can go through many state changes in their lifetime.
  785.  *
  786.  * Every connection has two associated input and output buffers.
  787.  * Listeners don't use them.  For non-listener connections, incoming
  788.  * data is appended to conn->inbuf, and outgoing data is taken from
  789.  * conn->outbuf.  Connections differ primarily in the functions called
  790.  * to fill and drain these buffers.
  791.  */
  792. typedef struct connection_t {
  793.   uint32_t magic; /**< For memory debugging: must equal one of
  794.                    * *_CONNECTION_MAGIC. */
  795.   uint8_t state; /**< Current state of this connection. */
  796.   unsigned int type:4; /**< What kind of connection is this? */
  797.   unsigned int purpose:5; /**< Only used for DIR and EXIT types currently. */
  798.   /* The next fields are all one-bit booleans. Some are only applicable to
  799.    * connection subtypes, but we hold them here anyway, to save space.
  800.    */
  801.   unsigned int read_blocked_on_bw:1; /**< Boolean: should we start reading
  802.                             * again once the bandwidth throttler allows it? */
  803.   unsigned int write_blocked_on_bw:1; /**< Boolean: should we start writing
  804.                              * again once the bandwidth throttler allows
  805.                              * reads? */
  806.   unsigned int hold_open_until_flushed:1; /**< Despite this connection's being
  807.                                       * marked for close, do we flush it
  808.                                       * before closing it? */
  809.   unsigned int inbuf_reached_eof:1; /**< Boolean: did read() return 0 on this
  810.                                      * conn? */
  811.   /** Set to 1 when we're inside connection_flushed_some to keep us from
  812.    * calling connection_handle_write() recursively. */
  813.   unsigned int in_flushed_some:1;
  814.   /* For linked connections:
  815.    */
  816.   unsigned int linked:1; /**< True if there is, or has been, a linked_conn. */
  817.   /** True iff we'd like to be notified about read events from the
  818.    * linked conn. */
  819.   unsigned int reading_from_linked_conn:1;
  820.   /** True iff we're willing to write to the linked conn. */
  821.   unsigned int writing_to_linked_conn:1;
  822.   /** True iff we're currently able to read on the linked conn, and our
  823.    * read_event should be made active with libevent. */
  824.   unsigned int active_on_link:1;
  825.   /** True iff we've called connection_close_immediate() on this linked
  826.    * connection. */
  827.   unsigned int linked_conn_is_closed:1;
  828.   int s; /**< Our socket; -1 if this connection is closed, or has no
  829.           * socket. */
  830.   int conn_array_index; /**< Index into the global connection array. */
  831.   struct event *read_event; /**< Libevent event structure. */
  832.   struct event *write_event; /**< Libevent event structure. */
  833.   buf_t *inbuf; /**< Buffer holding data read over this connection. */
  834.   buf_t *outbuf; /**< Buffer holding data to write over this connection. */
  835.   size_t outbuf_flushlen; /**< How much data should we try to flush from the
  836.                            * outbuf? */
  837.   time_t timestamp_lastread; /**< When was the last time libevent said we could
  838.                               * read? */
  839.   time_t timestamp_lastwritten; /**< When was the last time libevent said we
  840.                                  * could write? */
  841.   time_t timestamp_created; /**< When was this connection_t created? */
  842.   /* XXXX_IP6 make this IPv6-capable */
  843.   int socket_family; /**< Address family of this connection's socket.  Usually
  844.                       * AF_INET, but it can also be AF_UNIX, or in the future
  845.                       * AF_INET6 */
  846.   tor_addr_t addr; /**< IP of the other side of the connection; used to
  847.                     * identify routers, along with port. */
  848.   uint16_t port; /**< If non-zero, port on the other end
  849.                   * of the connection. */
  850.   uint16_t marked_for_close; /**< Should we close this conn on the next
  851.                               * iteration of the main loop? (If true, holds
  852.                               * the line number where this connection was
  853.                               * marked.) */
  854.   const char *marked_for_close_file; /**< For debugging: in which file were
  855.                                       * we marked for close? */
  856.   char *address; /**< FQDN (or IP) of the guy on the other end.
  857.                   * strdup into this, because free_connection() frees it. */
  858.   /** Another connection that's connected to this one in lieu of a socket. */
  859.   struct connection_t *linked_conn;
  860.   /** Unique identifier for this connection on this Tor instance. */
  861.   uint64_t global_identifier;
  862.   /* XXXX022 move this field, and all the listener-only fields (just
  863.      socket_family, I think), into a new listener_connection_t subtype. */
  864.   /** If the connection is a CONN_TYPE_AP_DNS_LISTENER, this field points
  865.    * to the evdns_server_port is uses to listen to and answer connections. */
  866.   struct evdns_server_port *dns_server_port;
  867. } connection_t;
  868. /** Stores flags and information related to the portion of a v2 Tor OR
  869.  * connection handshake that happens after the TLS handshake is finished.
  870.  */
  871. typedef struct or_handshake_state_t {
  872.   /** When was the VERSIONS cell sent on this connection?  Used to get
  873.    * an estimate of the skew in the returning NETINFO reply. */
  874.   time_t sent_versions_at;
  875.   /** True iff we originated this connection */
  876.   unsigned int started_here : 1;
  877.   /** True iff we have received and processed a VERSIONS cell. */
  878.   unsigned int received_versions : 1;
  879. } or_handshake_state_t;
  880. /** Subtype of connection_t for an "OR connection" -- that is, one that speaks
  881.  * cells over TLS. */
  882. typedef struct or_connection_t {
  883.   connection_t _base;
  884.   /** Hash of the public RSA key for the other side's identity key, or zeroes
  885.    * if the other side hasn't shown us a valid identity key. */
  886.   char identity_digest[DIGEST_LEN];
  887.   char *nickname; /**< Nickname of OR on other side (if any). */
  888.   tor_tls_t *tls; /**< TLS connection state. */
  889.   int tls_error; /**< Last tor_tls error code. */
  890.   /** When we last used this conn for any client traffic. If not
  891.    * recent, we can rate limit it further. */
  892.   time_t client_used;
  893.   tor_addr_t real_addr; /**< The actual address that this connection came from
  894.                        * or went to.  The <b>addr</b> field is prone to
  895.                        * getting overridden by the address from the router
  896.                        * descriptor matching <b>identity_digest</b>. */
  897.   circ_id_type_t circ_id_type:2; /**< When we send CREATE cells along this
  898.                                   * connection, which half of the space should
  899.                                   * we use? */
  900.   /** Should this connection be used for extending circuits to the server
  901.    * matching the <b>identity_digest</b> field?  Set to true if we're pretty
  902.    * sure we aren't getting MITMed, either because we're connected to an
  903.    * address listed in a server descriptor, or because an authenticated
  904.    * NETINFO cell listed the address we're connected to as recognized. */
  905.   unsigned int is_canonical:1;
  906.   /** True iff this connection shouldn't get any new circs attached to it,
  907.    * because the connection is too old, or because there's a better one, etc.
  908.    */
  909.   unsigned int is_bad_for_new_circs:1;
  910.   uint8_t link_proto; /**< What protocol version are we using? 0 for
  911.                        * "none negotiated yet." */
  912.   circid_t next_circ_id; /**< Which circ_id do we try to use next on
  913.                           * this connection?  This is always in the
  914.                           * range 0..1<<15-1. */
  915.   or_handshake_state_t *handshake_state; /**< If we are setting this connection
  916.                                           * up, state information to do so. */
  917.   time_t timestamp_lastempty; /**< When was the outbuf last completely empty?*/
  918.   time_t timestamp_last_added_nonpadding; /** When did we last add a
  919.                                            * non-padding cell to the outbuf? */
  920.   /* bandwidth* and read_bucket only used by ORs in OPEN state: */
  921.   int bandwidthrate; /**< Bytes/s added to the bucket. (OPEN ORs only.) */
  922.   int bandwidthburst; /**< Max bucket size for this conn. (OPEN ORs only.) */
  923.   int read_bucket; /**< When this hits 0, stop receiving. Every second we
  924.                     * add 'bandwidthrate' to this, capping it at
  925.                     * bandwidthburst. (OPEN ORs only) */
  926.   int n_circuits; /**< How many circuits use this connection as p_conn or
  927.                    * n_conn ? */
  928.   /** Double-linked ring of circuits with queued cells waiting for room to
  929.    * free up on this connection's outbuf.  Every time we pull cells from a
  930.    * circuit, we advance this pointer to the next circuit in the ring. */
  931.   struct circuit_t *active_circuits;
  932.   struct or_connection_t *next_with_same_id; /**< Next connection with same
  933.                                               * identity digest as this one. */
  934. } or_connection_t;
  935. /** Subtype of connection_t for an "edge connection" -- that is, a socks (ap)
  936.  * connection, or an exit. */
  937. typedef struct edge_connection_t {
  938.   connection_t _base;
  939.   struct edge_connection_t *next_stream; /**< Points to the next stream at this
  940.                                           * edge, if any */
  941.   struct crypt_path_t *cpath_layer; /**< A pointer to which node in the circ
  942.                                      * this conn exits at. */
  943.   int package_window; /**< How many more relay cells can I send into the
  944.                        * circuit? */
  945.   int deliver_window; /**< How many more relay cells can end at me? */
  946.   /** Nickname of planned exit node -- used with .exit support. */
  947.   char *chosen_exit_name;
  948.   socks_request_t *socks_request; /**< SOCKS structure describing request (AP
  949.                                    * only.) */
  950.   struct circuit_t *on_circuit; /**< The circuit (if any) that this edge
  951.                                  * connection is using. */
  952.   uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
  953.                          * connection.  Exit connections only. */
  954.   streamid_t stream_id; /**< The stream ID used for this edge connection on its
  955.                          * circuit */
  956.   /** The reason why this connection is closing; passed to the controller. */
  957.   uint16_t end_reason;
  958.   /** Bytes read since last call to control_event_stream_bandwidth_used() */
  959.   uint32_t n_read;
  960.   /** Bytes written since last call to control_event_stream_bandwidth_used() */
  961.   uint32_t n_written;
  962.   /** What rendezvous service are we querying for? (AP only) */
  963.   rend_data_t *rend_data;
  964.   /** Number of times we've reassigned this application connection to
  965.    * a new circuit. We keep track because the timeout is longer if we've
  966.    * already retried several times. */
  967.   uint8_t num_socks_retries;
  968.   /** True iff this connection is for a DNS request only. */
  969.   unsigned int is_dns_request:1;
  970.   /** True iff this stream must attach to a one-hop circuit (e.g. for
  971.    * begin_dir). */
  972.   unsigned int want_onehop:1;
  973.   /** True iff this stream should use a BEGIN_DIR relay command to establish
  974.    * itself rather than BEGIN (either via onehop or via a whole circuit). */
  975.   unsigned int use_begindir:1;
  976.   unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
  977.                          * connections.  Set once we've set the stream end,
  978.                          * and check in connection_about_to_close_connection().
  979.                          */
  980.   /** True iff we've blocked reading until the circuit has fewer queued
  981.    * cells. */
  982.   unsigned int edge_blocked_on_circ:1;
  983.   /** For AP connections only. If 1, and we fail to reach the chosen exit,
  984.    * stop requiring it. */
  985.   unsigned int chosen_exit_optional:1;
  986.   /** For AP connections only. If non-zero, this exit node was picked as
  987.    * a result of the TrackHostExit, and the value decrements every time
  988.    * we fail to complete a circuit to our chosen exit -- if it reaches
  989.    * zero, abandon the associated mapaddress. */
  990.   unsigned int chosen_exit_retries:3;
  991.   /** If this is a DNSPort connection, this field holds the pending DNS
  992.    * request that we're going to try to answer.  */
  993.   struct evdns_server_request *dns_server_request;
  994. } edge_connection_t;
  995. /** Subtype of connection_t for an "directory connection" -- that is, an HTTP
  996.  * connection to retrieve or serve directory material. */
  997. typedef struct dir_connection_t {
  998.   connection_t _base;
  999.   char *requested_resource; /**< Which 'resource' did we ask the directory
  1000.                              * for? */
  1001.   unsigned int dirconn_direct:1; /**< Is this dirconn direct, or via Tor? */
  1002.   /* Used only for server sides of some dir connections, to implement
  1003.    * "spooling" of directory material to the outbuf.  Otherwise, we'd have
  1004.    * to append everything to the outbuf in one enormous chunk. */
  1005.   /** What exactly are we spooling right now? */
  1006.   enum {
  1007.     DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
  1008.     DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
  1009.     DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS
  1010.   } dir_spool_src : 3;
  1011.   /** If we're fetching descriptors, what router purpose shall we assign
  1012.    * to them? */
  1013.   uint8_t router_purpose;
  1014.   /** List of fingerprints for networkstatuses or descriptors to be spooled. */
  1015.   smartlist_t *fingerprint_stack;
  1016.   /** A cached_dir_t object that we're currently spooling out */
  1017.   struct cached_dir_t *cached_dir;
  1018.   /** The current offset into cached_dir. */
  1019.   off_t cached_dir_offset;
  1020.   /** The zlib object doing on-the-fly compression for spooled data. */
  1021.   tor_zlib_state_t *zlib_state;
  1022.   /** What rendezvous service are we querying for? */
  1023.   rend_data_t *rend_data;
  1024.   char identity_digest[DIGEST_LEN]; /**< Hash of the public RSA key for
  1025.                                      * the directory server's signing key. */
  1026. } dir_connection_t;
  1027. /** Subtype of connection_t for an connection to a controller. */
  1028. typedef struct control_connection_t {
  1029.   connection_t _base;
  1030.   uint32_t event_mask; /**< Bitfield: which events does this controller
  1031.                         * care about? */
  1032.   unsigned int use_long_names:1; /**< True if we should use long nicknames
  1033.                                   * on this (v1) connection. Only settable
  1034.                                   * via v1 controllers. */
  1035.   /** For control connections only. If set, we send extended info with control
  1036.    * events as appropriate. */
  1037.   unsigned int use_extended_events:1;
  1038.   /** True if we have sent a protocolinfo reply on this connection. */
  1039.   unsigned int have_sent_protocolinfo:1;
  1040.   /** Amount of space allocated in incoming_cmd. */
  1041.   uint32_t incoming_cmd_len;
  1042.   /** Number of bytes currently stored in incoming_cmd. */
  1043.   uint32_t incoming_cmd_cur_len;
  1044.   /** A control command that we're reading from the inbuf, but which has not
  1045.    * yet arrived completely. */
  1046.   char *incoming_cmd;
  1047. } control_connection_t;
  1048. /** Cast a connection_t subtype pointer to a connection_t **/
  1049. #define TO_CONN(c) (&(((c)->_base)))
  1050. /** Helper macro: Given a pointer to to._base, of type from*, return &to. */
  1051. #define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, _base))
  1052. /** Convert a connection_t* to an or_connection_t*; assert if the cast is
  1053.  * invalid. */
  1054. static or_connection_t *TO_OR_CONN(connection_t *);
  1055. /** Convert a connection_t* to a dir_connection_t*; assert if the cast is
  1056.  * invalid. */
  1057. static dir_connection_t *TO_DIR_CONN(connection_t *);
  1058. /** Convert a connection_t* to an edge_connection_t*; assert if the cast is
  1059.  * invalid. */
  1060. static edge_connection_t *TO_EDGE_CONN(connection_t *);
  1061. /** Convert a connection_t* to an control_connection_t*; assert if the cast is
  1062.  * invalid. */
  1063. static control_connection_t *TO_CONTROL_CONN(connection_t *);
  1064. static INLINE or_connection_t *TO_OR_CONN(connection_t *c)
  1065. {
  1066.   tor_assert(c->magic == OR_CONNECTION_MAGIC);
  1067.   return DOWNCAST(or_connection_t, c);
  1068. }
  1069. static INLINE dir_connection_t *TO_DIR_CONN(connection_t *c)
  1070. {
  1071.   tor_assert(c->magic == DIR_CONNECTION_MAGIC);
  1072.   return DOWNCAST(dir_connection_t, c);
  1073. }
  1074. static INLINE edge_connection_t *TO_EDGE_CONN(connection_t *c)
  1075. {
  1076.   tor_assert(c->magic == EDGE_CONNECTION_MAGIC);
  1077.   return DOWNCAST(edge_connection_t, c);
  1078. }
  1079. static INLINE control_connection_t *TO_CONTROL_CONN(connection_t *c)
  1080. {
  1081.   tor_assert(c->magic == CONTROL_CONNECTION_MAGIC);
  1082.   return DOWNCAST(control_connection_t, c);
  1083. }
  1084. /** What action type does an address policy indicate: accept or reject? */
  1085. typedef enum {
  1086.   ADDR_POLICY_ACCEPT=1,
  1087.   ADDR_POLICY_REJECT=2,
  1088. } addr_policy_action_t;
  1089. /** A reference-counted address policy rule. */
  1090. typedef struct addr_policy_t {
  1091.   int refcnt; /**< Reference count */
  1092.   addr_policy_action_t policy_type:2;/**< What to do when the policy matches.*/
  1093.   unsigned int is_private:1; /**< True iff this is the pseudo-address,
  1094.                               * "private". */
  1095.   unsigned int is_canonical:1; /**< True iff this policy is the canonical
  1096.                                 * copy (stored in a hash table to avoid
  1097.                                 * duplication of common policies) */
  1098.   maskbits_t maskbits; /**< Accept/reject all addresses <b>a</b> such that the
  1099.                  * first <b>maskbits</b> bits of <b>a</b> match
  1100.                  * <b>addr</b>. */
  1101.   tor_addr_t addr; /**< Base address to accept or reject. */
  1102.   uint16_t prt_min; /**< Lowest port number to accept/reject. */
  1103.   uint16_t prt_max; /**< Highest port number to accept/reject. */
  1104. } addr_policy_t;
  1105. /** A cached_dir_t represents a cacheable directory object, along with its
  1106.  * compressed form. */
  1107. typedef struct cached_dir_t {
  1108.   char *dir; /**< Contents of this object, NUL-terminated. */
  1109.   char *dir_z; /**< Compressed contents of this object. */
  1110.   size_t dir_len; /**< Length of <b>dir</b> (not counting its NUL). */
  1111.   size_t dir_z_len; /**< Length of <b>dir_z</b>. */
  1112.   time_t published; /**< When was this object published. */
  1113.   int refcnt; /**< Reference count for this cached_dir_t. */
  1114. } cached_dir_t;
  1115. /** Enum used to remember where a signed_descriptor_t is stored and how to
  1116.  * manage the memory for signed_descriptor_body.  */
  1117. typedef enum {
  1118.   /** The descriptor isn't stored on disk at all: the copy in memory is
  1119.    * canonical; the saved_offset field is meaningless. */
  1120.   SAVED_NOWHERE=0,
  1121.   /** The descriptor is stored in the cached_routers file: the
  1122.    * signed_descriptor_body is meaningless; the signed_descriptor_len and
  1123.    * saved_offset are used to index into the mmaped cache file. */
  1124.   SAVED_IN_CACHE,
  1125.   /** The descriptor is stored in the cached_routers.new file: the
  1126.    * signed_descriptor_body and saved_offset fields are both set. */
  1127.   /* FFFF (We could also mmap the file and grow the mmap as needed, or
  1128.    * lazy-load the descriptor text by using seek and read.  We don't, for
  1129.    * now.)
  1130.    */
  1131.   SAVED_IN_JOURNAL
  1132. } saved_location_t;
  1133. /** Enumeration: what kind of download schedule are we using for a given
  1134.  * object? */
  1135. typedef enum {
  1136.   DL_SCHED_GENERIC = 0,
  1137.   DL_SCHED_CONSENSUS = 1,
  1138.   DL_SCHED_BRIDGE = 2,
  1139. } download_schedule_t;
  1140. /** Information about our plans for retrying downloads for a downloadable
  1141.  * object. */
  1142. typedef struct download_status_t {
  1143.   time_t next_attempt_at; /**< When should we try downloading this descriptor
  1144.                            * again? */
  1145.   uint8_t n_download_failures; /**< Number of failures trying to download the
  1146.                                 * most recent descriptor. */
  1147.   download_schedule_t schedule : 8;
  1148. } download_status_t;
  1149. /** If n_download_failures is this high, the download can never happen. */
  1150. #define IMPOSSIBLE_TO_DOWNLOAD 255
  1151. /** The max size we expect router descriptor annotations we create to
  1152.  * be. We'll accept larger ones if we see them on disk, but we won't
  1153.  * create any that are larger than this. */
  1154. #define ROUTER_ANNOTATION_BUF_LEN 256
  1155. /** Information need to cache an onion router's descriptor. */
  1156. typedef struct signed_descriptor_t {
  1157.   /** Pointer to the raw server descriptor, preceded by annotations.  Not
  1158.    * necessarily NUL-terminated.  If saved_location is SAVED_IN_CACHE, this
  1159.    * pointer is null. */
  1160.   char *signed_descriptor_body;
  1161.   /** Length of the annotations preceding the server descriptor. */
  1162.   size_t annotations_len;
  1163.   /** Length of the server descriptor. */
  1164.   size_t signed_descriptor_len;
  1165.   /** Digest of the server descriptor, computed as specified in
  1166.    * dir-spec.txt. */
  1167.   char signed_descriptor_digest[DIGEST_LEN];
  1168.   /** Identity digest of the router. */
  1169.   char identity_digest[DIGEST_LEN];
  1170.   /** Declared publication time of the descriptor. */
  1171.   time_t published_on;
  1172.   /** For routerdescs only: digest of the corresponding extrainfo. */
  1173.   char extra_info_digest[DIGEST_LEN];
  1174.   /** For routerdescs only: Status of downloading the corresponding
  1175.    * extrainfo. */
  1176.   download_status_t ei_dl_status;
  1177.   /** Where is the descriptor saved? */
  1178.   saved_location_t saved_location;
  1179.   /** If saved_location is SAVED_IN_CACHE or SAVED_IN_JOURNAL, the offset of
  1180.    * this descriptor in the corresponding file. */
  1181.   off_t saved_offset;
  1182.   /** What position is this descriptor within routerlist->routers or
  1183.    * routerlist->old_routers? -1 for none. */
  1184.   int routerlist_index;
  1185.   /** The valid-until time of the most recent consensus that listed this
  1186.    * descriptor, or a bit after the publication time of the most recent v2
  1187.    * networkstatus that listed it.  0 for "never listed in a consensus or
  1188.    * status, so far as we know." */
  1189.   time_t last_listed_as_valid_until;
  1190. #ifdef TRACK_SERVED_TIME
  1191.   /** The last time we served anybody this descriptor.  Used for internal
  1192.    * testing to see whether we're holding on to descriptors too long. */
  1193.   time_t last_served_at; /*XXXX remove if not useful. */
  1194. #endif
  1195.   /* If true, we do not ever try to save this object in the cache. */
  1196.   unsigned int do_not_cache : 1;
  1197.   /* If true, this item is meant to represent an extrainfo. */
  1198.   unsigned int is_extrainfo : 1;
  1199.   /* If true, we got an extrainfo for this item, and the digest was right,
  1200.    * but it was incompatible. */
  1201.   unsigned int extrainfo_is_bogus : 1;
  1202.   /* If true, we are willing to transmit this item unencrypted. */
  1203.   unsigned int send_unencrypted : 1;
  1204. } signed_descriptor_t;
  1205. /** A signed integer representing a country code. */
  1206. typedef int16_t country_t;
  1207. /** Information about another onion router in the network. */
  1208. typedef struct {
  1209.   signed_descriptor_t cache_info;
  1210.   char *address; /**< Location of OR: either a hostname or an IP address. */
  1211.   char *nickname; /**< Human-readable OR name. */
  1212.   uint32_t addr; /**< IPv4 address of OR, in host order. */
  1213.   uint16_t or_port; /**< Port for TLS connections. */
  1214.   uint16_t dir_port; /**< Port for HTTP directory connections. */
  1215.   crypto_pk_env_t *onion_pkey; /**< Public RSA key for onions. */
  1216.   crypto_pk_env_t *identity_pkey;  /**< Public RSA key for signing. */
  1217.   char *platform; /**< What software/operating system is this OR using? */
  1218.   /* link info */
  1219.   uint32_t bandwidthrate; /**< How many bytes does this OR add to its token
  1220.                            * bucket per second? */
  1221.   uint32_t bandwidthburst; /**< How large is this OR's token bucket? */
  1222.   /** How many bytes/s is this router known to handle? */
  1223.   uint32_t bandwidthcapacity;
  1224.   smartlist_t *exit_policy; /**< What streams will this OR permit
  1225.                              * to exit?  NULL for 'reject *:*'. */
  1226.   long uptime; /**< How many seconds the router claims to have been up */
  1227.   smartlist_t *declared_family; /**< Nicknames of router which this router
  1228.                                  * claims are its family. */
  1229.   char *contact_info; /**< Declared contact info for this router. */
  1230.   unsigned int is_hibernating:1; /**< Whether the router claims to be
  1231.                                   * hibernating */
  1232.   unsigned int has_old_dnsworkers:1; /**< Whether the router is using
  1233.                                       * dnsworker code. */
  1234.   unsigned int caches_extra_info:1; /**< Whether the router caches and serves
  1235.                                      * extrainfo documents. */
  1236.   unsigned int allow_single_hop_exits:1;  /**< Whether the router allows
  1237.                                      * single hop exits. */
  1238.   /* local info */
  1239.   unsigned int is_running:1; /**< As far as we know, is this OR currently
  1240.                               * running? */
  1241.   unsigned int is_valid:1; /**< Has a trusted dirserver validated this OR?
  1242.                                *  (For Authdir: Have we validated this OR?)
  1243.                                */
  1244.   unsigned int is_named:1; /**< Do we believe the nickname that this OR gives
  1245.                             * us? */
  1246.   unsigned int is_fast:1; /** Do we think this is a fast OR? */
  1247.   unsigned int is_stable:1; /** Do we think this is a stable OR? */
  1248.   unsigned int is_possible_guard:1; /**< Do we think this is an OK guard? */
  1249.   unsigned int is_exit:1; /**< Do we think this is an OK exit? */
  1250.   unsigned int is_bad_exit:1; /**< Do we think this exit is censored, borked,
  1251.                                * or otherwise nasty? */
  1252.   unsigned int is_bad_directory:1; /**< Do we think this directory is junky,
  1253.                                     * underpowered, or otherwise useless? */
  1254.   unsigned int wants_to_be_hs_dir:1; /**< True iff this router claims to be
  1255.                                       * a hidden service directory. */
  1256.   unsigned int is_hs_dir:1; /**< True iff this router is a hidden service
  1257.                              * directory according to the authorities. */
  1258.   unsigned int policy_is_reject_star:1; /**< True iff the exit policy for this
  1259.                                          * router rejects everything. */
  1260. /** Tor can use this router for general positions in circuits. */
  1261. #define ROUTER_PURPOSE_GENERAL 0
  1262. /** Tor should avoid using this router for circuit-building. */
  1263. #define ROUTER_PURPOSE_CONTROLLER 1
  1264. /** Tor should use this router only for bridge positions in circuits. */
  1265. #define ROUTER_PURPOSE_BRIDGE 2
  1266. /** Tor should not use this router; it was marked in cached-descriptors with
  1267.  * a purpose we didn't recognize. */
  1268. #define ROUTER_PURPOSE_UNKNOWN 255
  1269.   uint8_t purpose; /** What positions in a circuit is this router good for? */
  1270.   /* The below items are used only by authdirservers for
  1271.    * reachability testing. */
  1272.   /** When was the last time we could reach this OR? */
  1273.   time_t last_reachable;
  1274.   /** When did we start testing reachability for this OR? */
  1275.   time_t testing_since;
  1276.   /** According to the geoip db what country is this router in? */
  1277.   country_t country;
  1278. } routerinfo_t;
  1279. /** Information needed to keep and cache a signed extra-info document. */
  1280. typedef struct extrainfo_t {
  1281.   signed_descriptor_t cache_info;
  1282.   /** The router's nickname. */
  1283.   char nickname[MAX_NICKNAME_LEN+1];
  1284.   /** True iff we found the right key for this extra-info, verified the
  1285.    * signature, and found it to be bad. */
  1286.   unsigned int bad_sig : 1;
  1287.   /** If present, we didn't have the right key to verify this extra-info,
  1288.    * so this is a copy of the signature in the document. */
  1289.   char *pending_sig;
  1290.   /** Length of pending_sig. */
  1291.   size_t pending_sig_len;
  1292. } extrainfo_t;
  1293. /** Contents of a single router entry in a network status object.
  1294.  */
  1295. typedef struct routerstatus_t {
  1296.   time_t published_on; /**< When was this router published? */
  1297.   char nickname[MAX_NICKNAME_LEN+1]; /**< The nickname this router says it
  1298.                                       * has. */
  1299.   char identity_digest[DIGEST_LEN]; /**< Digest of the router's identity
  1300.                                      * key. */
  1301.   char descriptor_digest[DIGEST_LEN]; /**< Digest of the router's most recent
  1302.                                        * descriptor. */
  1303.   uint32_t addr; /**< IPv4 address for this router. */
  1304.   uint16_t or_port; /**< OR port for this router. */
  1305.   uint16_t dir_port; /**< Directory port for this router. */
  1306.   unsigned int is_authority:1; /**< True iff this router is an authority. */
  1307.   unsigned int is_exit:1; /**< True iff this router is a good exit. */
  1308.   unsigned int is_stable:1; /**< True iff this router stays up a long time. */
  1309.   unsigned int is_fast:1; /**< True iff this router has good bandwidth. */
  1310.   unsigned int is_running:1; /**< True iff this router is up. */
  1311.   unsigned int is_named:1; /**< True iff "nickname" belongs to this router. */
  1312.   unsigned int is_unnamed:1; /**< True iff "nickname" belongs to another
  1313.                               * router. */
  1314.   unsigned int is_valid:1; /**< True iff this router isn't invalid. */
  1315.   unsigned int is_v2_dir:1; /**< True iff this router can serve directory
  1316.                              * information with v2 of the directory
  1317.                              * protocol. (All directory caches cache v1
  1318.                              * directories.)  */
  1319.   unsigned int is_possible_guard:1; /**< True iff this router would be a good
  1320.                                      * choice as an entry guard. */
  1321.   unsigned int is_bad_exit:1; /**< True iff this node is a bad choice for
  1322.                                * an exit node. */
  1323.   unsigned int is_bad_directory:1; /**< Do we think this directory is junky,
  1324.                                     * underpowered, or otherwise useless? */
  1325.   unsigned int is_hs_dir:1; /**< True iff this router is a v2-or-later hidden
  1326.                              * service directory. */
  1327.   /** True iff we know version info for this router. (i.e., a "v" entry was
  1328.    * included.)  We'll replace all these with a big tor_version_t or a char[]
  1329.    * if the number of traits we care about ever becomes incredibly big. */
  1330.   unsigned int version_known:1;
  1331.   /** True iff this router is a version that supports BEGIN_DIR cells. */
  1332.   unsigned int version_supports_begindir:1;
  1333.   /** True iff this router is a version that supports conditional consensus
  1334.    *  downloads (signed by list of authorities). */
  1335.   unsigned int version_supports_conditional_consensus:1;
  1336.   /** True iff this router is a version that we can post extrainfo docs to. */
  1337.   unsigned int version_supports_extrainfo_upload:1;
  1338.   /** True iff this router is a version that, if it caches directory info,
  1339.    * we can get v3 downloads from. */
  1340.   unsigned int version_supports_v3_dir:1;
  1341.   unsigned int has_bandwidth:1; /**< The vote/consensus had bw info */
  1342.   unsigned int has_exitsummary:1; /**< The vote/consensus had exit summaries */
  1343.   uint32_t bandwidth; /**< Bandwidth (capacity) of the router as reported in
  1344.                        * the vote/consensus, in kilobytes/sec. */
  1345.   char *exitsummary; /**< exit policy summary -
  1346.                       * XXX weasel: this probably should not stay a string. */
  1347.   /* ---- The fields below aren't derived from the networkstatus; they
  1348.    * hold local information only. */
  1349.   /** True if we, as a directory mirror, want to download the corresponding
  1350.    * routerinfo from the authority who gave us this routerstatus.  (That is,
  1351.    * if we don't have the routerinfo, and if we haven't already tried to get it
  1352.    * from this authority.)  Applies in v2 networkstatus document only.
  1353.    */
  1354.   unsigned int need_to_mirror:1;
  1355.   unsigned int name_lookup_warned:1; /**< Have we warned the user for referring
  1356.                                       * to this (unnamed) router by nickname?
  1357.                                       */
  1358.   time_t last_dir_503_at; /**< When did this router last tell us that it
  1359.                            * was too busy to serve directory info? */
  1360.   download_status_t dl_status;
  1361. } routerstatus_t;
  1362. /** How many times will we try to download a router's descriptor before giving
  1363.  * up? */
  1364. #define MAX_ROUTERDESC_DOWNLOAD_FAILURES 8
  1365. /** Contents of a v2 (non-consensus, non-vote) network status object. */
  1366. typedef struct networkstatus_v2_t {
  1367.   /** When did we receive the network-status document? */
  1368.   time_t received_on;
  1369.   /** What was the digest of the document? */
  1370.   char networkstatus_digest[DIGEST_LEN];
  1371.   /* These fields come from the actual network-status document.*/
  1372.   time_t published_on; /**< Declared publication date. */
  1373.   char *source_address; /**< Canonical directory server hostname. */
  1374.   uint32_t source_addr; /**< Canonical directory server IP. */
  1375.   uint16_t source_dirport; /**< Canonical directory server dirport. */
  1376.   unsigned int binds_names:1; /**< True iff this directory server binds
  1377.                                * names. */
  1378.   unsigned int recommends_versions:1; /**< True iff this directory server
  1379.                                        * recommends client and server software
  1380.                                        * versions. */
  1381.   unsigned int lists_bad_exits:1; /**< True iff this directory server marks
  1382.                                    * malfunctioning exits as bad. */
  1383.   /** True iff this directory server marks malfunctioning directories as
  1384.    * bad. */
  1385.   unsigned int lists_bad_directories:1;
  1386.   char identity_digest[DIGEST_LEN]; /**< Digest of signing key. */
  1387.   char *contact; /**< How to contact directory admin? (may be NULL). */
  1388.   crypto_pk_env_t *signing_key; /**< Key used to sign this directory. */
  1389.   char *client_versions; /**< comma-separated list of recommended client
  1390.                           * versions. */
  1391.   char *server_versions; /**< comma-separated list of recommended server
  1392.                           * versions. */
  1393.   smartlist_t *entries; /**< List of routerstatus_t*.   This list is kept
  1394.                          * sorted by identity_digest. */
  1395. } networkstatus_v2_t;
  1396. /** The claim about a single router, made in a vote. */
  1397. typedef struct vote_routerstatus_t {
  1398.   routerstatus_t status; /**< Underlying 'status' object for this router.
  1399.                           * Flags are redundant. */
  1400.   uint64_t flags; /**< Bit-field for all recognized flags; index into
  1401.                    * networkstatus_t.known_flags. */
  1402.   char *version; /**< The version that the authority says this router is
  1403.                   * running. */
  1404. } vote_routerstatus_t;
  1405. /** Information about a single voter in a vote or a consensus. */
  1406. typedef struct networkstatus_voter_info_t {
  1407.   char *nickname; /**< Nickname of this voter */
  1408.   char identity_digest[DIGEST_LEN]; /**< Digest of this voter's identity key */
  1409.   char *address; /**< Address of this voter, in string format. */
  1410.   uint32_t addr; /**< Address of this voter, in IPv4, in host order. */
  1411.   uint16_t dir_port; /**< Directory port of this voter */
  1412.   uint16_t or_port; /**< OR port of this voter */
  1413.   char *contact; /**< Contact information for this voter. */
  1414.   char vote_digest[DIGEST_LEN]; /**< Digest of this voter's vote, as signed. */
  1415.   /** Digest of this voter's "legacy" identity key, if any.  In vote only; for
  1416.    * consensuses, we treat legacy keys as additional signers. */
  1417.   char legacy_id_digest[DIGEST_LEN];
  1418.   /* Nothing from here on is signed. */
  1419.   char signing_key_digest[DIGEST_LEN]; /**< Declared digest of signing key
  1420.                                         * used by this voter. */
  1421.   char *signature; /**< Signature from this voter. */
  1422.   int signature_len; /**< Length of <b>signature</b> */
  1423.   unsigned int bad_signature : 1; /**< Set to true if we've tried to verify
  1424.                                    * the sig, and we know it's bad. */
  1425.   unsigned int good_signature : 1; /**< Set to true if we've verified the sig
  1426.                                      * as good. */
  1427. } networkstatus_voter_info_t;
  1428. /** Enumerates the possible seriousness values of a networkstatus document. */
  1429. typedef enum {
  1430.   NS_TYPE_VOTE,
  1431.   NS_TYPE_CONSENSUS,
  1432.   NS_TYPE_OPINION,
  1433. } networkstatus_type_t;
  1434. /** A common structure to hold a v3 network status vote, or a v3 network
  1435.  * status consensus. */
  1436. typedef struct networkstatus_t {
  1437.   networkstatus_type_t type; /**< Vote, consensus, or opinion? */
  1438.   time_t published; /**< Vote only: Time when vote was written. */
  1439.   time_t valid_after; /**< Time after which this vote or consensus applies. */
  1440.   time_t fresh_until; /**< Time before which this is the most recent vote or
  1441.                        * consensus. */
  1442.   time_t valid_until; /**< Time after which this vote or consensus should not
  1443.                        * be used. */
  1444.   /** Consensus only: what method was used to produce this consensus? */
  1445.   int consensus_method;
  1446.   /** Vote only: what methods is this voter willing to use? */
  1447.   smartlist_t *supported_methods;
  1448.   /** How long does this vote/consensus claim that authorities take to
  1449.    * distribute their votes to one another? */
  1450.   int vote_seconds;
  1451.   /** How long does this vote/consensus claim that authorities take to
  1452.    * distribute their consensus signatures to one another? */
  1453.   int dist_seconds;
  1454.   /** Comma-separated list of recommended client software, or NULL if this
  1455.    * voter has no opinion. */
  1456.   char *client_versions;
  1457.   char *server_versions;
  1458.   /** List of flags that this vote/consensus applies to routers.  If a flag is
  1459.    * not listed here, the voter has no opinion on what its value should be. */
  1460.   smartlist_t *known_flags;
  1461.   /** List of key=value strings for the parameters in this vote or
  1462.    * consensus, sorted by key. */
  1463.   smartlist_t *net_params;
  1464.   /** List of networkstatus_voter_info_t.  For a vote, only one element
  1465.    * is included.  For a consensus, one element is included for every voter
  1466.    * whose vote contributed to the consensus. */
  1467.   smartlist_t *voters;
  1468.   struct authority_cert_t *cert; /**< Vote only: the voter's certificate. */
  1469.   /** Digest of this document, as signed. */
  1470.   char networkstatus_digest[DIGEST_LEN];
  1471.   /** List of router statuses, sorted by identity digest.  For a vote,
  1472.    * the elements are vote_routerstatus_t; for a consensus, the elements
  1473.    * are routerstatus_t. */
  1474.   smartlist_t *routerstatus_list;
  1475.   /** If present, a map from descriptor digest to elements of
  1476.    * routerstatus_list. */
  1477.   digestmap_t *desc_digest_map;
  1478. } networkstatus_t;
  1479. /** A set of signatures for a networkstatus consensus.  All fields are as for
  1480.  * networkstatus_t. */
  1481. typedef struct ns_detached_signatures_t {
  1482.   time_t valid_after;
  1483.   time_t fresh_until;
  1484.   time_t valid_until;
  1485.   char networkstatus_digest[DIGEST_LEN];
  1486.   smartlist_t *signatures; /* list of networkstatus_voter_info_t */
  1487. } ns_detached_signatures_t;
  1488. /** Allowable types of desc_store_t. */
  1489. typedef enum store_type_t {
  1490.   ROUTER_STORE = 0,
  1491.   EXTRAINFO_STORE = 1
  1492. } store_type_t;
  1493. /** A 'store' is a set of descriptors saved on disk, with accompanying
  1494.  * journal, mmaped as needed, rebuilt as needed. */
  1495. typedef struct desc_store_t {
  1496.   /** Filename (within DataDir) for the store.  We append .tmp to this
  1497.    * filename for a temporary file when rebuilding the store, and .new to this
  1498.    * filename for the journal. */
  1499.   const char *fname_base;
  1500.   /** Alternative (obsolete) value for fname_base: if the file named by
  1501.    * fname_base isn't present, we read from here instead, but we never write
  1502.    * here. */
  1503.   const char *fname_alt_base;
  1504.   /** Human-readable description of what this store contains. */
  1505.   const char *description;
  1506.   tor_mmap_t *mmap; /**< A mmap for the main file in the store. */
  1507.   store_type_t type; /**< What's stored in this store? */
  1508.   /** The size of the router log, in bytes. */
  1509.   size_t journal_len;
  1510.   /** The size of the router store, in bytes. */
  1511.   size_t store_len;
  1512.   /** Total bytes dropped since last rebuild: this is space currently
  1513.    * used in the cache and the journal that could be freed by a rebuild. */
  1514.   size_t bytes_dropped;
  1515. } desc_store_t;
  1516. /** Contents of a directory of onion routers. */
  1517. typedef struct {
  1518.   /** Map from server identity digest to a member of routers. */
  1519.   struct digest_ri_map_t *identity_map;
  1520.   /** Map from server descriptor digest to a signed_descriptor_t from
  1521.    * routers or old_routers. */
  1522.   struct digest_sd_map_t *desc_digest_map;
  1523.   /** Map from extra-info digest to an extrainfo_t.  Only exists for
  1524.    * routers in routers or old_routers. */
  1525.   struct digest_ei_map_t *extra_info_map;
  1526.   /** Map from extra-info digests to a signed_descriptor_t for a router
  1527.    * descriptor having that extra-info digest.  Only exists for
  1528.    * routers in routers or old_routers. */
  1529.   struct digest_sd_map_t *desc_by_eid_map;
  1530.   /** List of routerinfo_t for all currently live routers we know. */
  1531.   smartlist_t *routers;
  1532.   /** List of signed_descriptor_t for older router descriptors we're
  1533.    * caching. */
  1534.   smartlist_t *old_routers;
  1535.   /** Store holding server descriptors.  If present, any router whose
  1536.    * cache_info.saved_location == SAVED_IN_CACHE is stored in this file
  1537.    * starting at cache_info.saved_offset */
  1538.   desc_store_t desc_store;
  1539.   /** Store holding extra-info documents. */
  1540.   desc_store_t extrainfo_store;
  1541. } routerlist_t;
  1542. /** Information on router used when extending a circuit. We don't need a
  1543.  * full routerinfo_t to extend: we only need addr:port:keyid to build an OR
  1544.  * connection, and onion_key to create the onionskin. Note that for onehop
  1545.  * general-purpose tunnels, the onion_key is NULL. */
  1546. typedef struct extend_info_t {
  1547.   char nickname[MAX_HEX_NICKNAME_LEN+1]; /**< This router's nickname for
  1548.                                           * display. */
  1549.   char identity_digest[DIGEST_LEN]; /**< Hash of this router's identity key. */
  1550.   uint16_t port; /**< OR port. */
  1551.   tor_addr_t addr; /**< IP address. */
  1552.   crypto_pk_env_t *onion_key; /**< Current onionskin key. */
  1553. } extend_info_t;
  1554. /** Certificate for v3 directory protocol: binds long-term authority identity
  1555.  * keys to medium-term authority signing keys. */
  1556. typedef struct authority_cert_t {
  1557.   /** Information relating to caching this cert on disk and looking it up. */
  1558.   signed_descriptor_t cache_info;
  1559.   /** This authority's long-term authority identity key. */
  1560.   crypto_pk_env_t *identity_key;
  1561.   /** This authority's medium-term signing key. */
  1562.   crypto_pk_env_t *signing_key;
  1563.   /** The digest of <b>signing_key</b> */
  1564.   char signing_key_digest[DIGEST_LEN];
  1565.   /** The listed expiration time of this certificate. */
  1566.   time_t expires;
  1567.   /** This authority's IPv4 address, in host order. */
  1568.   uint32_t addr;
  1569.   /** This authority's directory port. */
  1570.   uint16_t dir_port;
  1571.   /** True iff this certificate was cross-certified by signing the identity
  1572.    * key with the signing key. */
  1573.   uint8_t is_cross_certified;
  1574. } authority_cert_t;
  1575. /** Bitfield enum type listing types of directory authority/directory
  1576.  * server.  */
  1577. typedef enum {
  1578.   NO_AUTHORITY      = 0,
  1579.   /** Serves/signs v1 directory information: Big lists of routers, and short
  1580.    * routerstatus documents. */
  1581.   V1_AUTHORITY      = 1 << 0,
  1582.   /** Serves/signs v2 directory information: i.e. v2 networkstatus documents */
  1583.   V2_AUTHORITY      = 1 << 1,
  1584.   /** Serves/signs v3 directory information: votes, consensuses, certs */
  1585.   V3_AUTHORITY      = 1 << 2,
  1586.   /** Serves hidden service descriptors. */
  1587.   HIDSERV_AUTHORITY = 1 << 3,
  1588.   /** Serves bridge descriptors. */
  1589.   BRIDGE_AUTHORITY  = 1 << 4,
  1590.   /** Serves extrainfo documents. (XXX Not precisely an authority type)*/
  1591.   EXTRAINFO_CACHE   = 1 << 5,
  1592. } authority_type_t;
  1593. #define CRYPT_PATH_MAGIC 0x70127012u
  1594. /** Holds accounting information for a single step in the layered encryption
  1595.  * performed by a circuit.  Used only at the client edge of a circuit. */
  1596. typedef struct crypt_path_t {
  1597.   uint32_t magic;
  1598.   /* crypto environments */
  1599.   /** Encryption key and counter for cells heading towards the OR at this
  1600.    * step. */
  1601.   crypto_cipher_env_t *f_crypto;
  1602.   /** Encryption key and counter for cells heading back from the OR at this
  1603.    * step. */
  1604.   crypto_cipher_env_t *b_crypto;
  1605.   /** Digest state for cells heading towards the OR at this step. */
  1606.   crypto_digest_env_t *f_digest; /* for integrity checking */
  1607.   /** Digest state for cells heading away from the OR at this step. */
  1608.   crypto_digest_env_t *b_digest;
  1609.   /** Current state of Diffie-Hellman key negotiation with the OR at this
  1610.    * step. */
  1611.   crypto_dh_env_t *dh_handshake_state;
  1612.   /** Current state of 'fast' (non-PK) key negotiation with the OR at this
  1613.    * step. Used to save CPU when TLS is already providing all the
  1614.    * authentication, secrecy, and integrity we need, and we're already
  1615.    * distinguishable from an OR.
  1616.    */
  1617.   char fast_handshake_state[DIGEST_LEN];
  1618.   /** Negotiated key material shared with the OR at this step. */
  1619.   char handshake_digest[DIGEST_LEN];/* KH in tor-spec.txt */
  1620.   /** Information to extend to the OR at this step. */
  1621.   extend_info_t *extend_info;
  1622.   /** Is the circuit built to this step?  Must be one of:
  1623.    *    - CPATH_STATE_CLOSED (The circuit has not been extended to this step)
  1624.    *    - CPATH_STATE_AWAITING_KEYS (We have sent an EXTEND/CREATE to this step
  1625.    *      and not received an EXTENDED/CREATED)
  1626.    *    - CPATH_STATE_OPEN (The circuit has been extended to this step) */
  1627.   uint8_t state;
  1628. #define CPATH_STATE_CLOSED 0
  1629. #define CPATH_STATE_AWAITING_KEYS 1
  1630. #define CPATH_STATE_OPEN 2
  1631.   struct crypt_path_t *next; /**< Link to next crypt_path_t in the circuit.
  1632.                               * (The list is circular, so the last node
  1633.                               * links to the first.) */
  1634.   struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the
  1635.                               * circuit. */
  1636.   int package_window; /**< How many cells are we allowed to originate ending
  1637.                        * at this step? */
  1638.   int deliver_window; /**< How many cells are we willing to deliver originating
  1639.                        * at this step? */
  1640. } crypt_path_t;
  1641. #define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
  1642. #define DH_KEY_LEN DH_BYTES
  1643. #define ONIONSKIN_CHALLENGE_LEN (PKCS1_OAEP_PADDING_OVERHEAD+
  1644.                                  CIPHER_KEY_LEN+
  1645.                                  DH_KEY_LEN)
  1646. #define ONIONSKIN_REPLY_LEN (DH_KEY_LEN+DIGEST_LEN)
  1647. /** Information used to build a circuit. */
  1648. typedef struct {
  1649.   /** Intended length of the final circuit. */
  1650.   int desired_path_len;
  1651.   /** How to extend to the planned exit node. */
  1652.   extend_info_t *chosen_exit;
  1653.   /** Whether every node in the circ must have adequate uptime. */
  1654.   int need_uptime;
  1655.   /** Whether every node in the circ must have adequate capacity. */
  1656.   int need_capacity;
  1657.   /** Whether the last hop was picked with exiting in mind. */
  1658.   int is_internal;
  1659.   /** Did we pick this as a one-hop tunnel (not safe for other conns)?
  1660.    * These are for encrypted connections that exit to this router, not
  1661.    * for arbitrary exits from the circuit. */
  1662.   int onehop_tunnel;
  1663.   /** The crypt_path_t to append after rendezvous: used for rendezvous. */
  1664.   crypt_path_t *pending_final_cpath;
  1665.   /** How many times has building a circuit for this task failed? */
  1666.   int failure_count;
  1667.   /** At what time should we give up on this task? */
  1668.   time_t expiry_time;
  1669. } cpath_build_state_t;
  1670. #define ORIGIN_CIRCUIT_MAGIC 0x35315243u
  1671. #define OR_CIRCUIT_MAGIC 0x98ABC04Fu
  1672. /**
  1673.  * A circuit is a path over the onion routing
  1674.  * network. Applications can connect to one end of the circuit, and can
  1675.  * create exit connections at the other end of the circuit. AP and exit
  1676.  * connections have only one circuit associated with them (and thus these
  1677.  * connection types are closed when the circuit is closed), whereas
  1678.  * OR connections multiplex many circuits at once, and stay standing even
  1679.  * when there are no circuits running over them.
  1680.  *
  1681.  * A circuit_t structure can fill one of two roles.  First, a or_circuit_t
  1682.  * links two connections together: either an edge connection and an OR
  1683.  * connection, or two OR connections.  (When joined to an OR connection, a
  1684.  * circuit_t affects only cells sent to a particular circID on that
  1685.  * connection.  When joined to an edge connection, a circuit_t affects all
  1686.  * data.)
  1687.  * Second, an origin_circuit_t holds the cipher keys and state for sending data
  1688.  * along a given circuit.  At the OP, it has a sequence of ciphers, each
  1689.  * of which is shared with a single OR along the circuit.  Separate
  1690.  * ciphers are used for data going "forward" (away from the OP) and
  1691.  * "backward" (towards the OP).  At the OR, a circuit has only two stream
  1692.  * ciphers: one for data going forward, and one for data going backward.
  1693.  */
  1694. typedef struct circuit_t {
  1695.   uint32_t magic; /**< For memory and type debugging: must equal
  1696.                    * ORIGIN_CIRCUIT_MAGIC or OR_CIRCUIT_MAGIC. */
  1697.   /** Queue of cells waiting to be transmitted on n_conn. */
  1698.   cell_queue_t n_conn_cells;
  1699.   /** The OR connection that is next in this circuit. */
  1700.   or_connection_t *n_conn;
  1701.   /** The circuit_id used in the next (forward) hop of this circuit. */
  1702.   circid_t n_circ_id;
  1703.   /** The hop to which we want to extend this circuit.  Should be NULL if
  1704.    * the circuit has attached to a connection. */
  1705.   extend_info_t *n_hop;
  1706.   /** True iff we are waiting for n_conn_cells to become less full before
  1707.    * allowing p_streams to add any more cells. (Origin circuit only.) */
  1708.   unsigned int streams_blocked_on_n_conn : 1;
  1709.   /** True iff we are waiting for p_conn_cells to become less full before
  1710.    * allowing n_streams to add any more cells. (OR circuit only.) */
  1711.   unsigned int streams_blocked_on_p_conn : 1;
  1712.   uint8_t state; /**< Current status of this circuit. */
  1713.   uint8_t purpose; /**< Why are we creating this circuit? */
  1714.   /** How many relay data cells can we package (read from edge streams)
  1715.    * on this circuit before we receive a circuit-level sendme cell asking
  1716.    * for more? */
  1717.   int package_window;
  1718.   /** How many relay data cells will we deliver (write to edge streams)
  1719.    * on this circuit? When deliver_window gets low, we send some
  1720.    * circuit-level sendme cells to indicate that we're willing to accept
  1721.    * more. */
  1722.   int deliver_window;
  1723.   /** For storage while n_conn is pending
  1724.     * (state CIRCUIT_STATE_OR_WAIT). When defined, it is always
  1725.     * length ONIONSKIN_CHALLENGE_LEN. */
  1726.   char *n_conn_onionskin;
  1727.   time_t timestamp_created; /**< When was this circuit created? */
  1728.   time_t timestamp_dirty; /**< When the circuit was first used, or 0 if the
  1729.                            * circuit is clean. */
  1730.   uint16_t marked_for_close; /**< Should we close this circuit at the end of
  1731.                               * the main loop? (If true, holds the line number
  1732.                               * where this circuit was marked.) */
  1733.   const char *marked_for_close_file; /**< For debugging: in which file was this
  1734.                                       * circuit marked for close? */
  1735.   /** Next circuit in the doubly-linked ring of circuits waiting to add
  1736.    * cells to n_conn.  NULL if we have no cells pending, or if we're not
  1737.    * linked to an OR connection. */
  1738.   struct circuit_t *next_active_on_n_conn;
  1739.   /** Previous circuit in the doubly-linked ring of circuits waiting to add
  1740.    * cells to n_conn.  NULL if we have no cells pending, or if we're not
  1741.    * linked to an OR connection. */
  1742.   struct circuit_t *prev_active_on_n_conn;
  1743.   struct circuit_t *next; /**< Next circuit in linked list of all circuits. */
  1744. } circuit_t;
  1745. /** Largest number of relay_early cells that we can send on a given
  1746.  * circuit. */
  1747. #define MAX_RELAY_EARLY_CELLS_PER_CIRCUIT 8
  1748. /** An origin_circuit_t holds data necessary to build and use a circuit.
  1749.  */
  1750. typedef struct origin_circuit_t {
  1751.   circuit_t _base;
  1752.   /** Linked list of AP streams (or EXIT streams if hidden service)
  1753.    * associated with this circuit. */
  1754.   edge_connection_t *p_streams;
  1755.   /** Build state for this circuit. It includes the intended path
  1756.    * length, the chosen exit router, rendezvous information, etc.
  1757.    */
  1758.   cpath_build_state_t *build_state;
  1759.   /** The doubly-linked list of crypt_path_t entries, one per hop,
  1760.    * for this circuit. This includes ciphers for each hop,
  1761.    * integrity-checking digests for each hop, and package/delivery
  1762.    * windows for each hop.
  1763.    */
  1764.   crypt_path_t *cpath;
  1765.   /** Holds all rendezvous data on either client or service side. */
  1766.   rend_data_t *rend_data;
  1767.   /** How many more relay_early cells can we send on this circuit, according
  1768.    * to the specification? */
  1769.   unsigned int remaining_relay_early_cells : 4;
  1770.   /** What commands were sent over this circuit that decremented the
  1771.    * RELAY_EARLY counter? This is for debugging task 878. */
  1772.   uint8_t relay_early_commands[MAX_RELAY_EARLY_CELLS_PER_CIRCUIT];
  1773.   /** How many RELAY_EARLY cells have been sent over this circuit? This is
  1774.    * for debugging task 878, too. */
  1775.   int relay_early_cells_sent;
  1776.   /** The next stream_id that will be tried when we're attempting to
  1777.    * construct a new AP stream originating at this circuit. */
  1778.   streamid_t next_stream_id;
  1779.   /* The intro key replaces the hidden service's public key if purpose is
  1780.    * S_ESTABLISH_INTRO or S_INTRO, provided that no unversioned rendezvous
  1781.    * descriptor is used. */
  1782.   crypto_pk_env_t *intro_key;
  1783.   /** Quasi-global identifier for this circuit; used for control.c */
  1784.   /* XXXX NM This can get re-used after 2**32 circuits. */
  1785.   uint32_t global_identifier;
  1786. } origin_circuit_t;
  1787. /** An or_circuit_t holds information needed to implement a circuit at an
  1788.  * OR. */
  1789. typedef struct or_circuit_t {
  1790.   circuit_t _base;
  1791.   /** Next circuit in the doubly-linked ring of circuits waiting to add
  1792.    * cells to p_conn.  NULL if we have no cells pending, or if we're not
  1793.    * linked to an OR connection. */
  1794.   struct circuit_t *next_active_on_p_conn;
  1795.   /** Previous circuit in the doubly-linked ring of circuits waiting to add
  1796.    * cells to p_conn.  NULL if we have no cells pending, or if we're not
  1797.    * linked to an OR connection. */
  1798.   struct circuit_t *prev_active_on_p_conn;
  1799.   /** The circuit_id used in the previous (backward) hop of this circuit. */
  1800.   circid_t p_circ_id;
  1801.   /** Queue of cells waiting to be transmitted on p_conn. */
  1802.   cell_queue_t p_conn_cells;
  1803.   /** The OR connection that is previous in this circuit. */
  1804.   or_connection_t *p_conn;
  1805.   /** Linked list of Exit streams associated with this circuit. */
  1806.   edge_connection_t *n_streams;
  1807.   /** Linked list of Exit streams associated with this circuit that are
  1808.    * still being resolved. */
  1809.   edge_connection_t *resolving_streams;
  1810.   /** The cipher used by intermediate hops for cells heading toward the
  1811.    * OP. */
  1812.   crypto_cipher_env_t *p_crypto;
  1813.   /** The cipher used by intermediate hops for cells heading away from
  1814.    * the OP. */
  1815.   crypto_cipher_env_t *n_crypto;
  1816.   /** The integrity-checking digest used by intermediate hops, for
  1817.    * cells packaged here and heading towards the OP.
  1818.    */
  1819.   crypto_digest_env_t *p_digest;
  1820.   /** The integrity-checking digest used by intermediate hops, for
  1821.    * cells packaged at the OP and arriving here.
  1822.    */
  1823.   crypto_digest_env_t *n_digest;
  1824.   /** Points to spliced circuit if purpose is REND_ESTABLISHED, and circuit
  1825.    * is not marked for close. */
  1826.   struct or_circuit_t *rend_splice;
  1827. #if REND_COOKIE_LEN >= DIGEST_LEN
  1828. #define REND_TOKEN_LEN REND_COOKIE_LEN
  1829. #else
  1830. #define REND_TOKEN_LEN DIGEST_LEN
  1831. #endif
  1832.   /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
  1833.    * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
  1834.    * otherwise.
  1835.    * ???? move to a subtype or adjunct structure? Wastes 20 bytes. -NM
  1836.    */
  1837.   char rend_token[REND_TOKEN_LEN];
  1838.   /* ???? move to a subtype or adjunct structure? Wastes 20 bytes -NM */
  1839.   char handshake_digest[DIGEST_LEN]; /**< Stores KH for the handshake. */
  1840.   /** How many more relay_early cells can we send on this circuit, according
  1841.    * to the specification? */
  1842.   unsigned int remaining_relay_early_cells : 4;
  1843.   /** True iff this circuit was made with a CREATE_FAST cell. */
  1844.   unsigned int is_first_hop : 1;
  1845. } or_circuit_t;
  1846. /** Convert a circuit subtype to a circuit_t.*/
  1847. #define TO_CIRCUIT(x)  (&((x)->_base))
  1848. /** Convert a circuit_t* to a pointer to the enclosing or_circuit_t.  Asserts
  1849.  * if the cast is impossible. */
  1850. static or_circuit_t *TO_OR_CIRCUIT(circuit_t *);
  1851. /** Convert a circuit_t* to a pointer to the enclosing origin_circuit_t.
  1852.  * Asserts if the cast is impossible. */
  1853. static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
  1854. static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
  1855. {
  1856.   tor_assert(x->magic == OR_CIRCUIT_MAGIC);
  1857.   return DOWNCAST(or_circuit_t, x);
  1858. }
  1859. static INLINE origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *x)
  1860. {
  1861.   tor_assert(x->magic == ORIGIN_CIRCUIT_MAGIC);
  1862.   return DOWNCAST(origin_circuit_t, x);
  1863. }
  1864. /** Bitfield type: things that we're willing to use invalid routers for. */
  1865. typedef enum invalid_router_usage_t {
  1866.   ALLOW_INVALID_ENTRY       =1,
  1867.   ALLOW_INVALID_EXIT        =2,
  1868.   ALLOW_INVALID_MIDDLE      =4,
  1869.   ALLOW_INVALID_RENDEZVOUS  =8,
  1870.   ALLOW_INVALID_INTRODUCTION=16,
  1871. } invalid_router_usage_t;
  1872. /* limits for TCP send and recv buffer size used for constrained sockets */
  1873. #define MIN_CONSTRAINED_TCP_BUFFER 2048
  1874. #define MAX_CONSTRAINED_TCP_BUFFER 262144  /* 256k */
  1875. /** A linked list of lines in a config file. */
  1876. typedef struct config_line_t {
  1877.   char *key;
  1878.   char *value;
  1879.   struct config_line_t *next;
  1880. } config_line_t;
  1881. typedef struct routerset_t routerset_t;
  1882. /** Configuration options for a Tor process. */
  1883. typedef struct {
  1884.   uint32_t _magic;
  1885.   /** What should the tor process actually do? */
  1886.   enum {
  1887.     CMD_RUN_TOR=0, CMD_LIST_FINGERPRINT, CMD_HASH_PASSWORD,
  1888.     CMD_VERIFY_CONFIG, CMD_RUN_UNITTESTS
  1889.   } command;
  1890.   const char *command_arg; /**< Argument for command-line option. */
  1891.   config_line_t *Logs; /**< New-style list of configuration lines
  1892.                         * for logs */
  1893.   char *DebugLogFile; /**< Where to send verbose log messages. */
  1894.   char *DataDirectory; /**< OR only: where to store long-term data. */
  1895.   char *Nickname; /**< OR only: nickname of this onion router. */
  1896.   char *Address; /**< OR only: configured address for this onion router. */
  1897.   char *PidFile; /**< Where to store PID of Tor process. */
  1898.   routerset_t *ExitNodes; /**< Structure containing nicknames, digests,
  1899.                            * country codes and IP address patterns of ORs to
  1900.                            * consider as exits. */
  1901.   routerset_t *EntryNodes;/**< Structure containing nicknames, digests,
  1902.                            * country codes and IP address patterns of ORs to
  1903.                            * consider as entry points. */
  1904.   int StrictExitNodes; /**< Boolean: When none of our ExitNodes are up, do we
  1905.                         * stop building circuits? */
  1906.   int StrictEntryNodes; /**< Boolean: When none of our EntryNodes are up, do we
  1907.                          * stop building circuits? */
  1908.   routerset_t *ExcludeNodes;/**< Structure containing nicknames, digests,
  1909.                              * country codes and IP address patterns of ORs
  1910.                              * not to use in circuits. */
  1911.   routerset_t *ExcludeExitNodes;/**< Structure containing nicknames, digests,
  1912.                                  * country codes and IP address patterns of
  1913.                                  * ORs not to consider as exits. */
  1914.   /** Union of ExcludeNodes and ExcludeExitNodes */
  1915.   struct routerset_t *_ExcludeExitNodesUnion;
  1916.   /** List of "entry", "middle", "exit", "introduction", "rendezvous". */
  1917.   smartlist_t *AllowInvalidNodes;
  1918.   /** Bitmask; derived from AllowInvalidNodes. */
  1919.   invalid_router_usage_t _AllowInvalid;
  1920.   config_line_t *ExitPolicy; /**< Lists of exit policy components. */
  1921.   int ExitPolicyRejectPrivate; /**< Should we not exit to local addresses? */
  1922.   config_line_t *SocksPolicy; /**< Lists of socks policy components */
  1923.   config_line_t *DirPolicy; /**< Lists of dir policy components */
  1924.   /** Addresses to bind for listening for SOCKS connections. */
  1925.   config_line_t *SocksListenAddress;
  1926.   /** Addresses to bind for listening for transparent pf/netfilter
  1927.    * connections. */
  1928.   config_line_t *TransListenAddress;
  1929.   /** Addresses to bind for listening for transparent natd connections */
  1930.   config_line_t *NatdListenAddress;
  1931.   /** Addresses to bind for listening for SOCKS connections. */
  1932.   config_line_t *DNSListenAddress;
  1933.   /** Addresses to bind for listening for OR connections. */
  1934.   config_line_t *ORListenAddress;
  1935.   /** Addresses to bind for listening for directory connections. */
  1936.   config_line_t *DirListenAddress;
  1937.   /** Addresses to bind for listening for control connections. */
  1938.   config_line_t *ControlListenAddress;
  1939.   /** Local address to bind outbound sockets */
  1940.   char *OutboundBindAddress;
  1941.   /** Directory server only: which versions of
  1942.    * Tor should we tell users to run? */
  1943.   config_line_t *RecommendedVersions;
  1944.   config_line_t *RecommendedClientVersions;
  1945.   config_line_t *RecommendedServerVersions;
  1946.   /** Whether dirservers refuse router descriptors with private IPs. */
  1947.   int DirAllowPrivateAddresses;
  1948.   char *User; /**< Name of user to run Tor as. */
  1949.   char *Group; /**< Name of group to run Tor as. */
  1950.   int ORPort; /**< Port to listen on for OR connections. */
  1951.   int SocksPort; /**< Port to listen on for SOCKS connections. */
  1952.   /** Port to listen on for transparent pf/netfilter connections. */
  1953.   int TransPort;
  1954.   int NatdPort; /**< Port to listen on for transparent natd connections. */
  1955.   int ControlPort; /**< Port to listen on for control connections. */
  1956.   config_line_t *ControlSocket; /**< List of Unix Domain Sockets to listen on
  1957.                                  * for control connections. */
  1958.   int DirPort; /**< Port to listen on for directory connections. */
  1959.   int DNSPort; /**< Port to listen on for DNS requests. */
  1960.   int AssumeReachable; /**< Whether to publish our descriptor regardless. */
  1961.   int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
  1962.   int V1AuthoritativeDir; /**< Boolean: is this an authoritative directory
  1963.                            * for version 1 directories? */
  1964.   int V2AuthoritativeDir; /**< Boolean: is this an authoritative directory
  1965.                            * for version 2 directories? */
  1966.   int V3AuthoritativeDir; /**< Boolean: is this an authoritative directory
  1967.                            * for version 3 directories? */
  1968.   int HSAuthoritativeDir; /**< Boolean: does this an authoritative directory
  1969.                            * handle hidden service requests? */
  1970.   int HSAuthorityRecordStats; /**< Boolean: does this HS authoritative
  1971.                                * directory record statistics? */
  1972.   int NamingAuthoritativeDir; /**< Boolean: is this an authoritative directory
  1973.                                * that's willing to bind names? */
  1974.   int VersioningAuthoritativeDir; /**< Boolean: is this an authoritative
  1975.                                    * directory that's willing to recommend
  1976.                                    * versions? */
  1977.   int BridgeAuthoritativeDir; /**< Boolean: is this an authoritative directory
  1978.                                * that aggregates bridge descriptors? */
  1979.   /** If set on a bridge authority, it will answer requests on its dirport
  1980.    * for bridge statuses -- but only if the requests use this password.
  1981.    * If set on a bridge user, request bridge statuses, and use this password
  1982.    * when doing so. */
  1983.   char *BridgePassword;
  1984.   int UseBridges; /**< Boolean: should we start all circuits with a bridge? */
  1985.   config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
  1986.   int BridgeRelay; /**< Boolean: are we acting as a bridge relay? We make
  1987.                     * this explicit so we can change how we behave in the
  1988.                     * future. */
  1989.   /** Boolean: if we know the bridge's digest, should we get new
  1990.    * descriptors from the bridge authorities or from the bridge itself? */
  1991.   int UpdateBridgesFromAuthority;
  1992.   int AvoidDiskWrites; /**< Boolean: should we never cache things to disk?
  1993.                         * Not used yet. */
  1994.   int ClientOnly; /**< Boolean: should we never evolve into a server role? */
  1995.   /** Boolean: should we never publish a descriptor? Deprecated. */
  1996.   int NoPublish;
  1997.   /** To what authority types do we publish our descriptor? Choices are
  1998.    * "v1", "v2", "v3", "bridge", or "". */
  1999.   smartlist_t *PublishServerDescriptor;
  2000.   /** An authority type, derived from PublishServerDescriptor. */
  2001.   authority_type_t _PublishServerDescriptor;
  2002.   /** Boolean: do we publish hidden service descriptors to the HS auths? */
  2003.   int PublishHidServDescriptors;
  2004.   int FetchServerDescriptors; /**< Do we fetch server descriptors as normal? */
  2005.   int FetchHidServDescriptors; /** and hidden service descriptors? */
  2006.   int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
  2007.   int MinUptimeHidServDirectoryV2; /**< As directory authority, accept hidden
  2008.                                     * service directories after what time? */
  2009.   int FetchUselessDescriptors; /**< Do we fetch non-running descriptors too? */
  2010.   int AllDirActionsPrivate; /**< Should every directory action be sent
  2011.                              * through a Tor circuit? */
  2012.   int ConnLimit; /**< Demanded minimum number of simultaneous connections. */
  2013.   int _ConnLimit; /**< Maximum allowed number of simultaneous connections. */
  2014.   int RunAsDaemon; /**< If true, run in the background. (Unix only) */
  2015.   int FascistFirewall; /**< Whether to prefer ORs reachable on open ports. */
  2016.   smartlist_t *FirewallPorts; /**< Which ports our firewall allows
  2017.                                * (strings). */
  2018.   config_line_t *ReachableAddresses; /**< IP:ports our firewall allows. */
  2019.   config_line_t *ReachableORAddresses; /**< IP:ports for OR conns. */
  2020.   config_line_t *ReachableDirAddresses; /**< IP:ports for Dir conns. */
  2021.   int ConstrainedSockets; /**< Shrink xmit and recv socket buffers. */
  2022.   uint64_t ConstrainedSockSize; /**< Size of constrained buffers. */
  2023.   /** Application ports that require all nodes in circ to have sufficient
  2024.    * uptime. */
  2025.   smartlist_t *LongLivedPorts;
  2026.   /** Application ports that are likely to be unencrypted and
  2027.    * unauthenticated; we reject requests for them to prevent the
  2028.    * user from screwing up and leaking plaintext secrets to an
  2029.    * observer somewhere on the Internet. */
  2030.   smartlist_t *RejectPlaintextPorts;
  2031.   /** Related to RejectPlaintextPorts above, except this config option
  2032.    * controls whether we warn (in the log and via a controller status
  2033.    * event) every time a risky connection is attempted. */
  2034.   smartlist_t *WarnPlaintextPorts;
  2035.   /** Should we try to reuse the same exit node for a given host */
  2036.   smartlist_t *TrackHostExits;
  2037.   int TrackHostExitsExpire; /**< Number of seconds until we expire an
  2038.                              * addressmap */
  2039.   config_line_t *AddressMap; /**< List of address map directives. */