circuitbuild.h (4328B)
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 circuitbuild.h 9 * \brief Header file for circuitbuild.c. 10 **/ 11 12 #ifndef TOR_CIRCUITBUILD_H 13 #define TOR_CIRCUITBUILD_H 14 15 struct ed25519_public_key_t; 16 struct curve25519_public_key_t; 17 18 int route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei); 19 char *circuit_list_path(origin_circuit_t *circ, int verbose); 20 char *circuit_list_path_for_controller(origin_circuit_t *circ); 21 void circuit_log_path(int severity, unsigned int domain, 22 origin_circuit_t *circ); 23 origin_circuit_t *origin_circuit_init(uint8_t purpose, int flags); 24 origin_circuit_t *circuit_establish_circuit(uint8_t purpose, 25 extend_info_t *exit, 26 int flags); 27 MOCK_DECL(origin_circuit_t *, circuit_establish_circuit_conflux, ( 28 const uint8_t *nonce, 29 uint8_t purpose, 30 extend_info_t *exit, 31 int flags)); 32 33 struct circuit_guard_state_t *origin_circuit_get_guard_state( 34 origin_circuit_t *circ); 35 int circuit_handle_first_hop(origin_circuit_t *circ); 36 void circuit_n_chan_done(channel_t *chan, int status); 37 int circuit_timeout_want_to_count_circ(const origin_circuit_t *circ); 38 int circuit_send_next_onion_skin(origin_circuit_t *circ); 39 void circuit_note_clock_jumped(int64_t seconds_elapsed, bool was_idle); 40 struct created_cell_t; 41 int circuit_finish_handshake(origin_circuit_t *circ, 42 const struct created_cell_t *created_cell); 43 int circuit_truncated(origin_circuit_t *circ, int reason); 44 MOCK_DECL(int, circuit_all_predicted_ports_handled, (time_t now, 45 int *need_uptime, 46 int *need_capacity)); 47 48 int circuit_append_new_exit(origin_circuit_t *circ, extend_info_t *info); 49 int circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *info); 50 int circuit_has_usable_onion_key(const origin_circuit_t *circ); 51 const uint8_t *build_state_get_exit_rsa_id(cpath_build_state_t *state); 52 MOCK_DECL(const node_t *, 53 build_state_get_exit_node,(cpath_build_state_t *state)); 54 const char *build_state_get_exit_nickname(cpath_build_state_t *state); 55 56 struct circuit_guard_state_t; 57 58 const node_t *choose_good_entry_server(const origin_circuit_t *circ, 59 uint8_t purpose, 60 cpath_build_state_t *state, 61 struct circuit_guard_state_t **guard_state_out); 62 void circuit_upgrade_circuits_from_guard_wait(void); 63 64 MOCK_DECL(channel_t *, channel_connect_for_circuit,(const extend_info_t *ei)); 65 66 struct create_cell_t; 67 MOCK_DECL(int, 68 circuit_deliver_create_cell,(circuit_t *circ, 69 const struct create_cell_t *create_cell, 70 int relayed)); 71 72 struct circuit_params_t; 73 int client_circ_negotiation_message(const extend_info_t *ei, 74 uint8_t **msg_out, 75 size_t *msg_len_out, 76 struct circuit_params_t *params_out); 77 78 #ifdef CIRCUITBUILD_PRIVATE 79 STATIC circid_t get_unique_circ_id_by_chan(channel_t *chan); 80 STATIC int new_route_len(uint8_t purpose, extend_info_t *exit_ei, 81 const smartlist_t *nodes); 82 MOCK_DECL(STATIC int, count_acceptable_nodes, (const smartlist_t *nodes, 83 int direct)); 84 85 STATIC int onion_extend_cpath(origin_circuit_t *circ); 86 87 STATIC int 88 onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit_ei); 89 STATIC int cpath_build_state_to_crn_flags(const cpath_build_state_t *state); 90 STATIC int cpath_build_state_to_crn_ipv6_extend_flag( 91 const cpath_build_state_t *state, 92 int cur_len); 93 94 #endif /* defined(CIRCUITBUILD_PRIVATE) */ 95 96 #endif /* !defined(TOR_CIRCUITBUILD_H) */