Tor 0.4.9.0-alpha-dev
entry_connection_st.h
Go to the documentation of this file.
1/* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5/* See LICENSE for licensing information */
6
7/**
8 * @file entry_connection_st.h
9 * @brief Entry connection structure.
10 **/
11
12#ifndef ENTRY_CONNECTION_ST_H
13#define ENTRY_CONNECTION_ST_H
14
16
17/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
18 * connection, a DNS request, a TransPort connection or a NATD connection */
20 struct edge_connection_t edge_;
21
22 /** Nickname of planned exit node -- used with .exit support. */
23 /* XXX prop220: we need to make chosen_exit_name able to encode Ed IDs too.
24 * That's logically part of the UI parts for prop220 though. */
26
27 socks_request_t *socks_request; /**< SOCKS structure describing request (AP
28 * only.) */
29
30 /* === Isolation related, AP only. === */
31 entry_port_cfg_t entry_cfg;
32 /** AP only: The newnym epoch in which we created this connection. */
33 unsigned nym_epoch;
34
35 /** AP only: The original requested address before we rewrote it. */
37 /* Other fields to isolate on already exist. The ClientAddr is addr. The
38 ClientProtocol is a combination of type and socks_request->
39 socks_version. SocksAuth is socks_request->username/password.
40 DestAddr is in socks_request->address. */
41
42 /** Number of times we've reassigned this application connection to
43 * a new circuit. We keep track because the timeout is longer if we've
44 * already retried several times. */
46
47 /** For AP connections only: buffer for data that we have sent
48 * optimistically, which we might need to re-send if we have to
49 * retry this connection. */
51 /* For AP connections only: buffer for data that we previously sent
52 * optimistically which we are currently re-sending as we retry this
53 * connection. */
54 struct buf_t *sending_optimistic_data;
55
56 /** If this is a DNSPort connection, this field holds the pending DNS
57 * request that we're going to try to answer. */
58 struct evdns_server_request *dns_server_request;
59
60#define DEBUGGING_17659
61
62#ifdef DEBUGGING_17659
63 uint16_t marked_pending_circ_line;
64 const char *marked_pending_circ_file;
65#endif
66
67#define NUM_CIRCUITS_LAUNCHED_THRESHOLD 10
68 /** Number of times we've launched a circuit to handle this stream. If
69 * it gets too high, that could indicate an inconsistency between our
70 * "launch a circuit to handle this stream" logic and our "attach our
71 * stream to one of the available circuits" logic. */
72 unsigned int num_circuits_launched:4;
73
74 /** True iff this stream must attach to a one-hop circuit (e.g. for
75 * begin_dir). */
76 unsigned int want_onehop:1;
77 /** True iff this stream should use a BEGIN_DIR relay command to establish
78 * itself rather than BEGIN (either via onehop or via a whole circuit). */
79 unsigned int use_begindir:1;
80
81 /** For AP connections only. If 1, and we fail to reach the chosen exit,
82 * stop requiring it. */
83 unsigned int chosen_exit_optional:1;
84 /** For AP connections only. If non-zero, this exit node was picked as
85 * a result of the TrackHostExit, and the value decrements every time
86 * we fail to complete a circuit to our chosen exit -- if it reaches
87 * zero, abandon the associated mapaddress. */
88 unsigned int chosen_exit_retries:3;
89
90 /** True iff this is an AP connection that came from a transparent or
91 * NATd connection */
92 unsigned int is_transparent_ap:1;
93
94 /** For AP connections only: Set if this connection's target exit node
95 * allows optimistic data (that is, data sent on this stream before
96 * the exit has sent a CONNECTED cell) and we have chosen to use it.
97 */
98 unsigned int may_use_optimistic_data : 1;
99
100 /** True iff this is a connection to a HS that has PoW defenses enabled,
101 * so we know not to apply the usual SOCKS timeout. */
102 unsigned int hs_with_pow_conn : 1;
103};
104
105/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
106#define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
107
108#endif /* !defined(ENTRY_CONNECTION_ST_H) */
Edge-connection structure.
unsigned int is_transparent_ap
socks_request_t * socks_request
struct evdns_server_request * dns_server_request
unsigned int num_circuits_launched
unsigned int chosen_exit_optional
unsigned int chosen_exit_retries
unsigned int may_use_optimistic_data
unsigned int hs_with_pow_conn
struct buf_t * pending_optimistic_data