#include "or.h"
#include "ht.h"
circuit_t* _circuit_get_global_list | ( | void | ) |
Return the head of the global linked list of circuits.
Referenced by count_established_intro_points(), dump_cell_pool_usage(), getinfo_helper_events(), rend_config_services(), and rep_hist_buffer_stats_write().
void _circuit_mark_for_close | ( | circuit_t * | circ, | |
int | reason, | |||
int | line, | |||
const char * | file | |||
) |
Mark circ to be closed next time we call circuit_close_all_marked(). Do any cleanup needed:
References or_circuit_t::_base, edge_connection_t::_base, assert_circuit_ok(), origin_circuit_t::build_state, build_state_get_exit_nickname(), cpath_build_state_t::chosen_exit, circuit_build_failed(), CIRCUIT_IS_ORIGIN, CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT, circuit_rep_hist_note_result(), CIRCUIT_STATE_ONIONSKIN_PENDING, CIRCUIT_STATE_OPEN, CIRCUIT_STATE_OR_WAIT, connection_edge_destroy(), connection_or_send_destroy(), control_event_circuit_status(), edge_connection_t::edge_has_sent_end, END_CIRC_AT_ORIGIN, END_CIRC_REASON_FLAG_REMOTE, edge_connection_t::end_reason, END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED, LD_BUG, LD_REND, connection_t::marked_for_close, circuit_t::marked_for_close, circuit_t::marked_for_close_file, circuit_t::n_circ_id, circuit_t::n_conn, or_circuit_t::n_streams, edge_connection_t::next_stream, edge_connection_t::on_circuit, rend_data_t::onion_address, onion_pending_remove(), or_circuit_t::p_circ_id, or_circuit_t::p_conn, origin_circuit_t::p_streams, circuit_t::purpose, rend_client_remove_intro_point(), origin_circuit_t::rend_data, or_circuit_t::rend_splice, or_circuit_t::resolving_streams, safe_str_client(), smartlist_remove(), circuit_t::state, TO_CIRCUIT, TO_CONN, TO_OR_CIRCUIT(), TO_ORIGIN_CIRCUIT(), and tor_assert.
static INLINE int _orconn_circid_entries_eq | ( | orconn_circid_circuit_map_t * | a, | |
orconn_circid_circuit_map_t * | b | |||
) | [static] |
Helper for hash tables: compare the OR connection and circuit ID for a and b, and return less than, equal to, or greater than zero appropriately.
static INLINE unsigned int _orconn_circid_entry_hash | ( | orconn_circid_circuit_map_t * | a | ) | [static] |
Helper: return a hash based on circuit ID and the pointer value of or_conn in a.
void assert_circuit_ok | ( | const circuit_t * | c | ) |
Verify that circuit c has all of its invariants correct. Trigger an assert if anything is invalid.
References edge_connection_t::_base, assert_cpath_ok(), circuit_get_by_circid_orconn_impl(), CIRCUIT_IS_ORIGIN, CIRCUIT_PURPOSE_REND_ESTABLISHED, CIRCUIT_STATE_OPEN, CIRCUIT_STATE_OR_WAIT, CONN_TYPE_EXIT, origin_circuit_t::cpath, circuit_t::deliver_window, circuit_t::magic, circuit_t::marked_for_close, circuit_t::n_circ_id, circuit_t::n_conn, circuit_t::n_conn_onionskin, or_circuit_t::n_crypto, or_circuit_t::n_digest, circuit_t::n_hop, or_circuit_t::n_streams, edge_connection_t::next_stream, or_circuit_t::p_circ_id, or_circuit_t::p_conn, or_circuit_t::p_crypto, or_circuit_t::p_digest, circuit_t::package_window, circuit_t::purpose, or_circuit_t::rend_splice, smartlist_isin(), circuit_t::state, TO_OR_CIRCUIT(), TO_ORIGIN_CIRCUIT(), tor_assert, and connection_t::type.
Referenced by _circuit_mark_for_close(), circuit_package_relay_cell(), connection_ap_handshake_attach_circuit(), connection_exit_begin_conn(), and connection_exit_begin_resolve().
void assert_cpath_layer_ok | ( | const crypt_path_t * | cp | ) |
Verify that cpath layer cp has all of its invariants correct. Trigger an assert if anything is invalid.
References crypt_path_t::b_crypto, crypt_path_t::deliver_window, crypt_path_t::dh_handshake_state, crypt_path_t::f_crypto, LD_BUG, crypt_path_t::magic, crypt_path_t::package_window, crypt_path_t::state, and tor_assert.
Referenced by assert_connection_ok(), and assert_cpath_ok().
static void assert_cpath_ok | ( | const crypt_path_t * | cp | ) | [static] |
Verify that cpath cp has all of its invariants correct. Trigger an assert if anything is invalid.
References assert_cpath_layer_ok(), crypt_path_t::next, crypt_path_t::prev, crypt_path_t::state, and tor_assert.
Referenced by assert_circuit_ok().
static void circuit_add | ( | circuit_t * | circ | ) | [static] |
Add circ to the global list of circuits. This is called only from within circuit_new.
References circuit_t::next.
Referenced by init_circuit_base().
void circuit_close_all_marked | ( | void | ) |
Detach from the global circuit list, and deallocate, all circuits that have been marked for close.
References circuit_free(), circuit_t::marked_for_close, and circuit_t::next.
Referenced by run_scheduled_events().
int circuit_count_pending_on_or_conn | ( | or_connection_t * | or_conn | ) |
Return the number of circuits in state OR_WAIT, waiting for the given connection.
References circuit_get_all_pending_on_or_conn(), LD_CIRC, or_connection_t::nickname, smartlist_create(), and smartlist_free().
Referenced by control_event_or_conn_status().
void circuit_dump_by_conn | ( | connection_t * | conn, | |
int | severity | |||
) |
Log, at severity severity, information about each circuit that is connected to conn.
References connection_t::addr, extend_info_t::addr, circuit_dump_details(), CIRCUIT_IS_ORIGIN, CIRCUIT_STATE_OPEN, connection_t::conn_array_index, CONN_TYPE_OR, DIGEST_LEN, extend_info_t::identity_digest, circuit_t::marked_for_close, circuit_t::n_circ_id, circuit_t::n_conn, circuit_t::n_hop, circuit_t::next, edge_connection_t::next_stream, or_circuit_t::p_circ_id, connection_t::port, extend_info_t::port, circuit_t::state, TO_CONN, TO_OR_CIRCUIT(), TO_OR_CONN(), TO_ORIGIN_CIRCUIT(), tor_addr_eq, and connection_t::type.
Referenced by dumpstats().
static void circuit_dump_details | ( | int | severity, | |
circuit_t * | circ, | |||
int | conn_array_index, | |||
const char * | type, | |||
int | this_circid, | |||
int | other_circid | |||
) | [static] |
A helper function for circuit_dump_by_conn() below. Log a bunch of information about circuit circ.
References CIRCUIT_IS_ORIGIN, circuit_log_path(), circuit_state_to_string(), LD_CIRC, circuit_t::state, circuit_t::timestamp_created, and TO_ORIGIN_CIRCUIT().
Referenced by circuit_dump_by_conn().
void circuit_expire_all_dirty_circs | ( | void | ) |
Go through the circuitlist; for each circuit that starts at us and is dirty, frob its timestamp_dirty so we won't use it for any new streams.
This is useful for letting the user change pseudonyms, so new streams will not be linkable to old streams.
References CIRCUIT_IS_ORIGIN, get_options(), circuit_t::marked_for_close, or_options_t::MaxCircuitDirtiness, circuit_t::next, and circuit_t::timestamp_dirty.
Referenced by circuit_note_clock_jumped(), do_hup(), options_act(), and signewnym_impl().
origin_circuit_t* circuit_find_to_cannibalize | ( | uint8_t | purpose, | |
extend_info_t * | info, | |||
int | flags | |||
) |
Return a circuit that is open, is CIRCUIT_PURPOSE_C_GENERAL, has a timestamp_dirty value of 0, has flags matching the CIRCLAUNCH_* flags in flags, and if info is defined, does not already use info as any of its hops; or NULL if no circuit fits this description.
The purpose argument (currently ignored) refers to the purpose of the circuit we want to create, not the purpose of the circuit we want to cannibalize.
If !CIRCLAUNCH_NEED_UPTIME, prefer returning non-uptime circuits.
References origin_circuit_t::build_state, CIRCLAUNCH_IS_INTERNAL, CIRCLAUNCH_NEED_CAPACITY, CIRCLAUNCH_NEED_UPTIME, CIRCUIT_IS_ORIGIN, CIRCUIT_PURPOSE_C_GENERAL, CIRCUIT_STATE_OPEN, origin_circuit_t::cpath, DIGEST_LEN, crypt_path_t::extend_info, extend_info_t::identity_digest, cpath_build_state_t::is_internal, LD_CIRC, circuit_t::marked_for_close, cpath_build_state_t::need_capacity, cpath_build_state_t::need_uptime, crypt_path_t::next, circuit_t::next, circuit_t::purpose, origin_circuit_t::remaining_relay_early_cells, router_get_by_digest(), routers_in_same_family(), circuit_t::state, circuit_t::timestamp_dirty, and TO_ORIGIN_CIRCUIT().
Referenced by circuit_launch_by_extend_info().
static void circuit_free | ( | circuit_t * | circ | ) | [static] |
Deallocate space associated with circ.
References or_circuit_t::_base, origin_circuit_t::build_state, cell_queue_clear(), cpath_build_state_t::chosen_exit, circuit_free_cpath(), circuit_free_cpath_node(), CIRCUIT_IS_ORIGIN, circuit_set_n_circid_orconn(), circuit_set_p_circid_orconn(), origin_circuit_t::cpath, crypto_free_cipher_env(), crypto_free_digest_env(), crypto_free_pk_env(), extend_info_free(), get_options(), origin_circuit_t::intro_key, circuit_t::magic, circuit_t::n_conn_cells, circuit_t::n_conn_onionskin, or_circuit_t::n_crypto, or_circuit_t::n_digest, circuit_t::n_hop, or_circuit_t::p_conn_cells, or_circuit_t::p_crypto, or_circuit_t::p_digest, cpath_build_state_t::pending_final_cpath, origin_circuit_t::rend_data, rend_data_free(), or_circuit_t::rend_splice, rep_hist_buffer_stats_add_circ(), TO_OR_CIRCUIT(), TO_ORIGIN_CIRCUIT(), tor_assert, and tor_free.
Referenced by circuit_close_all_marked(), and circuit_free_all().
void circuit_free_all | ( | void | ) |
Release all storage held by circuits.
References circuit_free(), CIRCUIT_IS_ORIGIN, connection_free(), circuit_t::next, edge_connection_t::next_stream, or_circuit_t::resolving_streams, smartlist_free(), TO_CONN, and TO_OR_CIRCUIT().
Referenced by tor_free_all().
static void circuit_free_cpath | ( | crypt_path_t * | cpath | ) | [static] |
Deallocate space associated with the linked list cpath.
References circuit_free_cpath_node(), and crypt_path_t::next.
Referenced by circuit_free().
static void circuit_free_cpath_node | ( | crypt_path_t * | victim | ) | [static] |
Deallocate space associated with the cpath node victim.
References crypt_path_t::b_crypto, crypt_path_t::b_digest, crypto_dh_free(), crypto_free_cipher_env(), crypto_free_digest_env(), crypt_path_t::dh_handshake_state, crypt_path_t::extend_info, extend_info_free(), crypt_path_t::f_crypto, crypt_path_t::f_digest, and tor_free.
Referenced by circuit_free(), circuit_free_cpath(), and circuit_truncated().
void circuit_get_all_pending_on_or_conn | ( | smartlist_t * | out, | |
or_connection_t * | or_conn | |||
) |
Append to out all circuits in state OR_WAIT waiting for the given connection.
References or_connection_t::_base, connection_t::addr, CIRCUIT_STATE_OR_WAIT, DIGEST_LEN, or_connection_t::identity_digest, connection_t::port, smartlist_add(), tor_addr_eq, tor_assert, and tor_digest_is_zero().
Referenced by circuit_count_pending_on_or_conn(), and circuit_n_conn_done().
circuit_t* circuit_get_by_circid_orconn | ( | circid_t | circ_id, | |
or_connection_t * | conn | |||
) |
Return a circ such that:
References circuit_get_by_circid_orconn_impl(), and circuit_t::marked_for_close.
Referenced by command_process_created_cell(), command_process_destroy_cell(), command_process_relay_cell(), and connection_cpu_process_inbuf().
static INLINE circuit_t* circuit_get_by_circid_orconn_impl | ( | circid_t | circ_id, | |
or_connection_t * | conn | |||
) | [static] |
Return a circ such that:
References CIRCUIT_IS_ORIGIN, LD_BUG, circuit_t::n_circ_id, circuit_t::n_conn, circuit_t::next, or_circuit_t::p_circ_id, or_circuit_t::p_conn, and TO_OR_CIRCUIT().
Referenced by assert_circuit_ok(), circuit_get_by_circid_orconn(), and circuit_id_in_use_on_orconn().
circuit_t* circuit_get_by_edge_conn | ( | edge_connection_t * | conn | ) |
Return the circuit that a given edge connection is using.
References CIRCUIT_IS_ORIGIN, circuit_t::magic, edge_connection_t::on_circuit, and tor_assert.
Referenced by _connection_write_to_buf_impl(), connection_about_to_close_connection(), connection_ap_expire_beginning(), connection_edge_consider_sending_sendme(), connection_edge_end(), connection_edge_package_raw_inbuf(), connection_exit_connect(), control_event_stream_status(), dns_cancel_pending_resolve(), dns_found_answer(), getinfo_helper_events(), handle_control_attachstream(), and purge_expired_resolves().
origin_circuit_t* circuit_get_by_global_id | ( | uint32_t | id | ) |
Return the circuit whose global ID is id, or NULL if no such circuit exists.
References CIRCUIT_IS_ORIGIN, circuit_t::marked_for_close, circuit_t::next, and TO_ORIGIN_CIRCUIT().
Referenced by get_circ().
origin_circuit_t* circuit_get_by_rend_query_and_purpose | ( | const char * | rend_query, | |
uint8_t | purpose | |||
) |
Return a circ such that:
Return NULL if no such circuit exists.
References CIRCUIT_PURPOSE_IS_ORIGIN, circuit_t::marked_for_close, circuit_t::next, rend_data_t::onion_address, circuit_t::purpose, rend_cmp_service_ids(), origin_circuit_t::rend_data, TO_ORIGIN_CIRCUIT(), and tor_assert.
Referenced by rend_client_introduction_acked().
static or_circuit_t* circuit_get_by_rend_token_and_purpose | ( | uint8_t | purpose, | |
const char * | token, | |||
size_t | len | |||
) | [static] |
Return the first OR circuit in the global list whose purpose is purpose, and whose rend_token is the len-byte token.
References circuit_t::marked_for_close, circuit_t::next, circuit_t::purpose, and TO_OR_CIRCUIT().
Referenced by circuit_get_intro_point(), and circuit_get_rendezvous().
crypt_path_t* circuit_get_cpath_hop | ( | origin_circuit_t * | circ, | |
int | hopnum | |||
) |
Return the hopnumth hop in circ->cpath, or NULL if there aren't that many hops in the list.
References origin_circuit_t::cpath, and crypt_path_t::next.
Referenced by handle_control_attachstream().
int circuit_get_cpath_len | ( | origin_circuit_t * | circ | ) |
Return the number of hops in circuit's path.
References origin_circuit_t::cpath, and crypt_path_t::next.
Referenced by handle_control_attachstream(), and onion_extend_cpath().
or_circuit_t* circuit_get_intro_point | ( | const char * | digest | ) |
Return the circuit waiting for intro cells of the given digest. Return NULL if no such circuit is found.
References circuit_get_by_rend_token_and_purpose(), CIRCUIT_PURPOSE_INTRO_POINT, and DIGEST_LEN.
Referenced by rend_mid_establish_intro(), and rend_mid_introduce().
origin_circuit_t* circuit_get_next_by_pk_and_purpose | ( | origin_circuit_t * | start, | |
const char * | digest, | |||
uint8_t | purpose | |||
) |
Return the first circuit originating here in global_circuitlist after start whose purpose is purpose, and where digest (if set) matches the rend_pk_digest field. Return NULL if no circuit is found. If start is NULL, begin at the start of the list.
References CIRCUIT_PURPOSE_IS_ORIGIN, DIGEST_LEN, circuit_t::marked_for_close, circuit_t::next, circuit_t::purpose, TO_CIRCUIT, TO_ORIGIN_CIRCUIT(), and tor_assert.
Referenced by find_intro_circuit(), and router_perform_bandwidth_test().
or_circuit_t* circuit_get_rendezvous | ( | const char * | cookie | ) |
Return the circuit waiting for a rendezvous with the provided cookie. Return NULL if no such circuit is found.
References circuit_get_by_rend_token_and_purpose(), CIRCUIT_PURPOSE_REND_POINT_WAITING, and REND_COOKIE_LEN.
Referenced by rend_mid_establish_rendezvous(), and rend_mid_rendezvous().
int circuit_id_in_use_on_orconn | ( | circid_t | circ_id, | |
or_connection_t * | conn | |||
) |
Return true iff the circuit ID circ_id is currently used by a circuit, marked or not, on conn.
References circuit_get_by_circid_orconn_impl().
Referenced by command_process_create_cell(), and get_unique_circ_id_by_conn().
int32_t circuit_initial_package_window | ( | void | ) |
Pick a reasonable package_window to start out for our circuits. Originally this was hard-coded at 1000, but now the consensus votes on the answer. See proposal 168.
References CIRCWINDOW_START, and networkstatus_get_param().
Referenced by init_circuit_base(), onion_append_hop(), rend_client_receive_rendezvous(), and rend_service_rendezvous_has_opened().
void circuit_mark_all_unused_circs | ( | void | ) |
Go through the circuitlist; mark-for-close each circuit that starts at us but has not yet been used.
References CIRCUIT_IS_ORIGIN, circuit_t::marked_for_close, circuit_t::next, and circuit_t::timestamp_dirty.
Referenced by circuit_note_clock_jumped(), and options_act().
const char* circuit_purpose_to_controller_string | ( | uint8_t | purpose | ) |
Map a circuit purpose to a string suitable to be displayed to a controller.
References CIRCUIT_PURPOSE_C_ESTABLISH_REND, CIRCUIT_PURPOSE_C_GENERAL, CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT, CIRCUIT_PURPOSE_C_INTRODUCE_ACKED, CIRCUIT_PURPOSE_C_INTRODUCING, CIRCUIT_PURPOSE_C_REND_JOINED, CIRCUIT_PURPOSE_C_REND_READY, CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED, CIRCUIT_PURPOSE_CONTROLLER, CIRCUIT_PURPOSE_INTRO_POINT, CIRCUIT_PURPOSE_OR, CIRCUIT_PURPOSE_REND_ESTABLISHED, CIRCUIT_PURPOSE_REND_POINT_WAITING, CIRCUIT_PURPOSE_S_CONNECT_REND, CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, CIRCUIT_PURPOSE_S_INTRO, CIRCUIT_PURPOSE_S_REND_JOINED, CIRCUIT_PURPOSE_TESTING, and tor_snprintf().
Referenced by control_event_circuit_status(), and getinfo_helper_events().
void circuit_set_n_circid_orconn | ( | circuit_t * | circ, | |
circid_t | id, | |||
or_connection_t * | conn | |||
) |
Set the n_conn field of a circuit circ, along with the corresponding circuit ID, and add the circuit as appropriate to the (orconn,id)->circuit map.
References bool_eq, CELL_DIRECTION_OUT, cell_queue_t::n, circuit_t::n_conn_cells, circuit_t::next_active_on_n_conn, and tor_assert.
Referenced by circuit_deliver_create_cell(), circuit_free(), circuit_unlink_all_from_or_conn(), command_process_destroy_cell(), and connection_edge_process_relay_cell().
void circuit_set_p_circid_orconn | ( | or_circuit_t * | circ, | |
circid_t | id, | |||
or_connection_t * | conn | |||
) |
Set the p_conn field of a circuit circ, along with the corresponding circuit ID, and add the circuit as appropriate to the (orconn,id)->circuit map.
References bool_eq, CELL_DIRECTION_IN, cell_queue_t::n, or_circuit_t::next_active_on_p_conn, or_circuit_t::p_conn_cells, TO_CIRCUIT, and tor_assert.
Referenced by circuit_free(), circuit_unlink_all_from_or_conn(), command_process_destroy_cell(), and or_circuit_new().
void circuit_set_state | ( | circuit_t * | circ, | |
uint8_t | state | |||
) |
Change the state of circ to state, adding it to or removing it from lists as appropriate.
References CIRCUIT_STATE_OPEN, CIRCUIT_STATE_OR_WAIT, circuit_t::n_conn_onionskin, smartlist_add(), smartlist_create(), smartlist_remove(), circuit_t::state, and tor_assert.
Referenced by circuit_extend(), circuit_extend_to_new_exit(), circuit_n_conn_done(), circuit_send_next_onion_skin(), command_process_create_cell(), handle_control_extendcircuit(), onionskin_answer(), and origin_circuit_init().
const char* circuit_state_to_string | ( | int | state | ) |
Function to make circ->state human-readable
References CIRCUIT_STATE_BUILDING, CIRCUIT_STATE_ONIONSKIN_PENDING, CIRCUIT_STATE_OPEN, CIRCUIT_STATE_OR_WAIT, LD_BUG, and tor_snprintf().
Referenced by circuit_dump_details(), circuit_expire_building(), and rend_service_dump_stats().
void circuit_unlink_all_from_or_conn | ( | or_connection_t * | conn, | |
int | reason | |||
) |
For each circuit that has conn as n_conn or p_conn, unlink the circuit from the orconn,circid map, and mark it for close if it hasn't been marked already.
References CIRCUIT_IS_ORIGIN, circuit_set_n_circid_orconn(), circuit_set_p_circid_orconn(), connection_or_unlink_all_active_circs(), circuit_t::marked_for_close, circuit_t::n_conn, circuit_t::next, or_circuit_t::p_conn, and TO_OR_CIRCUIT().
Referenced by connection_about_to_close_connection().
static HT_HEAD | ( | HT_PROTOTYPE( | orconn_circid_map, | |
HT_PROTOTYPE( | orconn_circid_circuit_map_t | |||
) | [static] |
Map from [orconn,circid] to circuit.
References or_connection_t::_base, CELL_DIRECTION_OUT, connection_t::magic, make_circuit_active_on_conn(), make_circuit_inactive_on_conn(), cell_queue_t::n, or_connection_t::n_circuits, or_circuit_t::next_active_on_p_conn, or_circuit_t::p_circ_id, or_circuit_t::p_conn, or_circuit_t::p_conn_cells, TO_OR_CIRCUIT(), tor_assert, and tor_free.
static void init_circuit_base | ( | circuit_t * | circ | ) | [static] |
Initialize the common elements in a circuit_t, and add it to the global list.
References cell_ewma_t::cell_count, cell_ewma_get_tick(), circuit_add(), circuit_initial_package_window(), CIRCWINDOW_START, circuit_t::deliver_window, cell_ewma_t::heap_index, circuit_t::highres_created, cell_ewma_t::is_for_p_conn, cell_ewma_t::last_adjusted_tick, circuit_t::n_cell_ewma, circuit_t::package_window, circuit_t::timestamp_created, and tor_gettimeofday().
Referenced by or_circuit_new(), and origin_circuit_new().
or_circuit_t* or_circuit_new | ( | circid_t | p_circ_id, | |
or_connection_t * | p_conn | |||
) |
Allocate a new or_circuit_t, connected to p_conn as p_circ_id. If p_conn is NULL, the circuit is unattached.
References or_circuit_t::_base, cell_ewma_t::cell_count, cell_ewma_get_tick(), circuit_set_p_circid_orconn(), cell_ewma_t::heap_index, init_circuit_base(), cell_ewma_t::is_for_p_conn, cell_ewma_t::last_adjusted_tick, circuit_t::magic, MAX_RELAY_EARLY_CELLS_PER_CIRCUIT, or_circuit_t::p_cell_ewma, or_circuit_t::remaining_relay_early_cells, and TO_CIRCUIT.
Referenced by command_process_create_cell().
origin_circuit_t* origin_circuit_new | ( | void | ) |
Allocate space for a new circuit, initializing with p_circ_id and p_conn. Add it to the global circuit list.
References origin_circuit_t::_base, approx_time(), circ_times, crypto_rand_int(), origin_circuit_t::global_identifier, init_circuit_base(), circuit_build_times_t::last_circ_at, circuit_t::magic, MAX_RELAY_EARLY_CELLS_PER_CIRCUIT, origin_circuit_t::next_stream_id, origin_circuit_t::remaining_relay_early_cells, and TO_CIRCUIT.
Referenced by origin_circuit_init().
smartlist_t* circuits_pending_or_conns = NULL [static] |
A list of all the circuits in CIRCUIT_STATE_OR_WAIT.
circuit_t* global_circuitlist = NULL |
A global list of all circuits at this hop.