Tor  0.4.6.0-alpha-dev
circuitbuild_relay.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-2020, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
6 
7 /**
8  * @file circuitbuild_relay.h
9  * @brief Header for feature/relay/circuitbuild_relay.c
10  **/
11 
12 #ifndef TOR_FEATURE_RELAY_CIRCUITBUILD_RELAY_H
13 #define TOR_FEATURE_RELAY_CIRCUITBUILD_RELAY_H
14 
15 #include "lib/cc/torint.h"
16 #include "lib/log/log.h"
17 
18 #include "app/config/config.h"
19 
20 struct cell_t;
21 struct created_cell_t;
22 
23 struct circuit_t;
24 struct or_circuit_t;
25 struct extend_cell_t;
26 
27 /* Log a protocol warning about getting an extend cell on a client. */
28 static inline void
29 circuitbuild_warn_client_extend(void)
30 {
31  log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
32  "Got an extend cell, but running as a client. Closing.");
33 }
34 
35 #ifdef HAVE_MODULE_RELAY
36 
37 int circuit_extend(struct cell_t *cell, struct circuit_t *circ);
38 
39 int onionskin_answer(struct or_circuit_t *circ,
40  const struct created_cell_t *created_cell,
41  const char *keys, size_t keys_len,
42  const uint8_t *rend_circ_nonce);
43 
44 #else /* !defined(HAVE_MODULE_RELAY) */
45 
46 static inline int
47 circuit_extend(struct cell_t *cell, struct circuit_t *circ)
48 {
49  (void)cell;
50  (void)circ;
51  circuitbuild_warn_client_extend();
52  return -1;
53 }
54 
55 static inline int
56 onionskin_answer(struct or_circuit_t *circ,
57  const struct created_cell_t *created_cell,
58  const char *keys, size_t keys_len,
59  const uint8_t *rend_circ_nonce)
60 {
61  (void)circ;
62  (void)created_cell;
63  (void)keys;
64  (void)keys_len;
65  (void)rend_circ_nonce;
67  return -1;
68 }
69 
70 #endif /* defined(HAVE_MODULE_RELAY) */
71 
72 #ifdef TOR_UNIT_TESTS
73 
74 STATIC int circuit_extend_state_valid_helper(const struct circuit_t *circ);
75 STATIC int circuit_extend_add_ed25519_helper(struct extend_cell_t *ec);
76 STATIC int circuit_extend_add_ipv4_helper(struct extend_cell_t *ec);
77 STATIC int circuit_extend_add_ipv6_helper(struct extend_cell_t *ec);
78 STATIC int circuit_extend_lspec_valid_helper(const struct extend_cell_t *ec,
79  const struct circuit_t *circ);
80 STATIC const tor_addr_port_t * circuit_choose_ip_ap_for_extend(
81  const tor_addr_port_t *ipv4_ap,
82  const tor_addr_port_t *ipv6_ap);
83 STATIC void circuit_open_connection_for_extend(const struct extend_cell_t *ec,
84  struct circuit_t *circ,
85  int should_launch);
86 
87 #endif /* defined(TOR_UNIT_TESTS) */
88 
89 #endif /* !defined(TOR_FEATURE_RELAY_CIRCUITBUILD_RELAY_H) */
log_fn
#define log_fn(severity, domain, args,...)
Definition: log.h:283
created_cell_t
Definition: onion.h:36
torint.h
Integer definitions used throughout Tor.
cell_t
Definition: cell_st.h:17
tor_addr_port_t
Definition: address.h:81
tor_assert_nonfatal_unreached
#define tor_assert_nonfatal_unreached()
Definition: util_bug.h:176
extend_cell_t
Definition: onion.h:46
circuit_t
Definition: circuit_st.h:61
log.h
Headers for log.c.
onionskin_answer
int onionskin_answer(struct or_circuit_t *circ, const created_cell_t *created_cell, const char *keys, size_t keys_len, const uint8_t *rend_circ_nonce)
Definition: circuitbuild_relay.c:534
or_circuit_t
Definition: or_circuit_st.h:21
config.h
Header file for config.c.
STATIC
#define STATIC
Definition: testsupport.h:32
circuit_extend
int circuit_extend(struct cell_t *cell, struct circuit_t *circ)
Definition: circuitbuild_relay.c:423
LD_PROTOCOL
#define LD_PROTOCOL
Definition: log.h:72