28 CHANNEL_USED_NOT_USED_FOR_FULL_CIRCS = 0,
29 CHANNEL_USED_FOR_FULL_CIRCS,
30 CHANNEL_USED_FOR_USER_TRAFFIC,
117 uint16_t padding_timeout_high_ms;
122 CHANNEL_NOT_CLOSING = 0,
123 CHANNEL_CLOSE_REQUESTED,
124 CHANNEL_CLOSE_FROM_BELOW,
125 CHANNEL_CLOSE_FOR_ERROR
139 SCHED_CHAN_WAITING_FOR_CELLS,
143 SCHED_CHAN_WAITING_TO_WRITE,
156 time_t timestamp_active;
183 channel_var_cell_handler_fn_ptr var_cell_handler;
200 int (*get_transport_name)(
channel_t *chan,
char **transport_out);
202 #define GRD_FLAG_ORIGINAL 1 203 #define GRD_FLAG_ADDR_ONLY 2 225 size_t (*num_bytes_queued)(channel_t *);
227 int (*num_cells_writeable)(channel_t *);
229 int (*write_cell)(channel_t *,
cell_t *);
273 unsigned wide_circ_ids:1;
308 time_t timestamp_recv;
309 time_t timestamp_xmit;
323 uint64_t n_cells_xmitted, n_bytes_xmitted;
328 channel_listener_state_t
state;
341 CHANNEL_LISTENER_NOT_CLOSING = 0,
342 CHANNEL_LISTENER_CLOSE_REQUESTED,
343 CHANNEL_LISTENER_CLOSE_FROM_BELOW,
344 CHANNEL_LISTENER_CLOSE_FOR_ERROR
349 time_t timestamp_active;
363 channel_listener_fn_ptr listener;
377 int channel_state_is_valid(channel_state_t
state);
382 channel_listener_state_t to);
399 channel_listener_fn_ptr listener);
404 channel_var_cell_handler_fn_ptr
409 channel_var_cell_handler_fn_ptr
425 #ifdef TOR_CHANNEL_INTERNAL_ 427 #ifdef CHANNEL_PRIVATE_ 457 #define channel_free(chan) FREE_AND_NULL(channel_t, channel_free_, (chan)) 459 #define channel_listener_free(chan_l) \ 460 FREE_AND_NULL(channel_listener_t, channel_listener_free_, (chan_l)) 477 channel_listener_state_t to_state);
498 MOCK_DECL(ssize_t, channel_flush_some_cells,
523 const char *rsa_id_digest,
529 const char **msg_out,
551 #define CHANNEL_IS_CLOSED(chan) (channel_is_in_state((chan), \ 552 CHANNEL_STATE_CLOSED)) 553 #define CHANNEL_IS_OPENING(chan) (channel_is_in_state((chan), \ 554 CHANNEL_STATE_OPENING)) 555 #define CHANNEL_IS_OPEN(chan) (channel_is_in_state((chan), \ 557 #define CHANNEL_IS_MAINT(chan) (channel_is_in_state((chan), \ 558 CHANNEL_STATE_MAINT)) 559 #define CHANNEL_IS_CLOSING(chan) (channel_is_in_state((chan), \ 560 CHANNEL_STATE_CLOSING)) 561 #define CHANNEL_IS_ERROR(chan) (channel_is_in_state((chan), \ 562 CHANNEL_STATE_ERROR)) 564 #define CHANNEL_FINISHED(chan) (CHANNEL_IS_CLOSED(chan) || \ 565 CHANNEL_IS_ERROR(chan)) 567 #define CHANNEL_CONDEMNED(chan) (CHANNEL_IS_CLOSING(chan) || \ 568 CHANNEL_FINISHED(chan)) 570 #define CHANNEL_CAN_HANDLE_CELLS(chan) (CHANNEL_IS_OPENING(chan) || \ 571 CHANNEL_IS_OPEN(chan) || \ 572 CHANNEL_IS_MAINT(chan)) 609 int consider_identity));
636 #define channel_handle_free(h) \ 637 FREE_AND_NULL(channel_handle_t, channel_handle_free_, (h)) enum channel_s::@10 scheduler_state
int(* has_queued_writes)(channel_t *)
Definition: channel.h:212
void channel_timestamp_recv(channel_t *chan)
Definition: channel.c:3227
int channel_listener_state_can_transition(channel_listener_state_t from, channel_listener_state_t to)
Definition: channel.c:279
circ_id_type_bitfield_t circ_id_type
Definition: channel.h:271
int channel_write_packed_cell(channel_t *chan, packed_cell_t *cell)
Definition: channel.c:1466
#define DIGEST_LEN
Definition: crypto_digest.h:22
void channel_change_state(channel_t *chan, channel_state_t to_state)
Definition: channel.c:1594
int(* matches_target)(channel_t *, const tor_addr_t *)
Definition: channel.h:223
const char * channel_listener_describe_transport(channel_listener_t *chan_l)
Definition: channel.c:2508
channel_cell_handler_fn_ptr cell_handler
Definition: channel.h:182
void channel_mark_client(channel_t *chan)
Definition: channel.c:2929
unsigned int has_been_open
Definition: channel.h:63
void channel_update_bad_for_new_circs(const char *digest, int force)
Definition: channel.c:3458
void channel_timestamp_active(channel_t *chan)
Definition: channel.c:3160
void channel_listener_dumpstats(int severity)
Definition: channel.c:2091
void channel_change_state_open(channel_t *chan)
Definition: channel.c:1604
void channel_close_for_error(channel_t *chan)
Definition: channel.c:1237
Definition: crypto_ed25519.h:23
const char * channel_state_to_string(channel_state_t state)
Definition: channel.c:311
int channel_is_incoming(channel_t *chan)
Definition: channel.c:2986
void channel_set_cell_handlers(channel_t *chan, channel_cell_handler_fn_ptr cell_handler, channel_var_cell_handler_fn_ptr var_cell_handler)
Definition: channel.c:1089
unsigned int padding_enabled
Definition: channel.h:74
unsigned int channel_num_circuits(channel_t *chan)
Definition: channel.c:3338
channel_t * channel_next_with_rsa_identity(channel_t *chan)
Definition: channel.c:727
int channel_send_destroy(circid_t circ_id, channel_t *chan, int reason)
Definition: channel.c:2020
unsigned int is_local
Definition: channel.h:300
time_t channel_when_last_xmit(channel_t *chan)
Definition: channel.c:3291
unsigned char registered
Definition: channel.h:336
void channel_timestamp_client(channel_t *chan)
Definition: channel.c:3211
void channel_listener_timestamp_active(channel_listener_t *chan_l)
Definition: channel.c:3177
HT_ENTRY(channel_s) gidmap_node
unsigned char registered
Definition: channel.h:60
Definition: timeout.h:115
void channel_close_from_lower_layer(channel_t *chan)
Definition: channel.c:1209
HANDLE_ENTRY(channel, channel_s)
void channel_dump_transport_statistics(channel_t *chan, int severity)
Definition: channel.c:2774
monotime_coarse_t timestamp_xfer
Definition: channel.h:168
Macros for C weak-handle implementation.
uint16_t padding_timeout_low_ms
Definition: channel.h:116
uint32_t magic
Definition: channel.h:43
void channel_check_for_duplicates(void)
Definition: channel.c:744
MOCK_DECL(int, router_have_minimum_dir_info,(void))
monotime_coarse_t next_padding_time
Definition: channel.h:92
void channel_free_(channel_t *chan)
Definition: channel.c:872
int channel_matches_target_addr_for_extend(channel_t *chan, const tor_addr_t *target)
Definition: channel.c:3321
Definition: container.h:18
time_t timestamp_last_had_circuits
Definition: channel.h:314
struct channel_handle_t * timer_handle
Definition: channel.h:97
int(* matches_extend_info)(channel_t *, extend_info_t *)
Definition: channel.h:221
time_t channel_when_last_client(channel_t *chan)
Definition: channel.c:3280
void channel_listener_timestamp_created(channel_listener_t *chan_l)
Definition: channel.c:3140
TOR_LIST_ENTRY(channel_s) next_with_same_id
int packed_cell_is_destroy(channel_t *chan, const packed_cell_t *packed_cell, circid_t *circid_out)
Definition: channel.c:1994
int(* write_packed_cell)(channel_t *, packed_cell_t *)
Definition: channel.h:231
channel_usage_info_t
Definition: channel.h:27
unsigned int is_canonical_to_peer
Definition: channel.h:84
char identity_digest[DIGEST_LEN]
Definition: channel.h:244
void channel_listener_mark_for_close(channel_listener_t *chan_l)
Definition: channel.c:1169
channel_var_cell_handler_fn_ptr channel_get_var_cell_handler(channel_t *chan)
Definition: channel.c:1072
uint64_t dirreq_id
Definition: channel.h:319
const char * channel_get_actual_remote_address(channel_t *chan)
Definition: channel.c:2822
void channel_process_cell(channel_t *chan, cell_t *cell)
Definition: channel.c:1965
int sched_heap_idx
Definition: channel.h:152
int channel_is_local(channel_t *chan)
Definition: channel.c:3017
void channel_listener_run_cleanup(void)
Definition: channel.c:2148
void channel_mark_for_close(channel_t *chan)
Definition: channel.c:1130
void channel_listener_dump_statistics(channel_listener_t *chan_l, int severity)
Definition: channel.c:2708
void channel_mark_incoming(channel_t *chan)
Definition: channel.c:3000
int channel_is_better(channel_t *a, channel_t *b)
Definition: channel.c:2326
enum channel_s::@9 reason_for_closing
ratelim_t last_warned_circ_ids_exhausted
Definition: channel.h:304
int channel_is_outgoing(channel_t *chan)
Definition: channel.c:3063
void channel_mark_bad_for_new_circs(channel_t *chan)
Definition: channel.c:2901
int channel_is_canonical(channel_t *chan)
Definition: channel.c:2956
STATIC void channel_add_to_digest_map(channel_t *chan)
Definition: channel.c:556
circuitmux_t * cmux
Definition: channel.h:263
unsigned int is_bad_for_new_circs
Definition: channel.h:285
channel_t * channel_find_by_global_id(uint64_t global_identifier)
Definition: channel.c:646
void channel_listener_queue_incoming(channel_listener_t *listener, channel_t *incoming)
Definition: channel.c:1914
Master header file for Tor-specific functionality.
channel_state_t state
Definition: channel.h:52
void channel_listener_free_(channel_listener_t *chan_l)
Definition: channel.c:924
const char * channel_listener_state_to_string(channel_listener_state_t state)
Definition: channel.c:346
double(* get_overhead_estimate)(channel_t *)
Definition: channel.h:191
unsigned int is_client
Definition: channel.h:290
void channel_mark_remote(channel_t *chan)
Definition: channel.c:3048
int(* write_var_cell)(channel_t *, var_cell_t *)
Definition: channel.h:233
void channel_listener_change_state(channel_listener_t *chan_l, channel_listener_state_t to_state)
Definition: channel.c:1621
time_t channel_when_created(channel_t *chan)
Definition: channel.c:3269
void channel_listener_timestamp_accepted(channel_listener_t *chan_l)
Definition: channel.c:3194
int channel_is_bad_for_new_circs(channel_t *chan)
Definition: channel.c:2888
int(* is_canonical)(channel_t *, int)
Definition: channel.h:219
uint64_t global_identifier
Definition: channel.h:57
const char * channel_describe_transport(channel_t *chan)
Definition: channel.c:2493
void channel_clear_identity_digest(channel_t *chan)
Definition: channel.c:1295
void channel_listener_process_incoming(channel_listener_t *listener)
Definition: channel.c:1789
void channel_clear_remote_end(channel_t *chan)
Definition: channel.c:1383
void channel_do_open_actions(channel_t *chan)
Definition: channel.c:1841
void channel_init_listener(channel_listener_t *chan_l)
Definition: channel.c:856
void channel_notify_flushed(channel_t *chan)
Definition: channel.c:1772
void(* dumpstats)(channel_t *, int)
Definition: channel.h:179
void channel_register(channel_t *chan)
Definition: channel.c:382
void channel_mark_local(channel_t *chan)
Definition: channel.c:3032
int channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info)
Definition: channel.c:3305
uint64_t n_cells_recved
Definition: channel.h:322
Definition: channel.h:326
channel_t * channel_connect(const tor_addr_t *addr, uint16_t port, const char *rsa_id_digest, const ed25519_public_key_t *ed_id)
Definition: channel.c:2308
int channel_listener_state_is_valid(channel_listener_state_t state)
Definition: channel.c:206
channel_t * channel_get_for_extend(const char *rsa_id_digest, const ed25519_public_key_t *ed_id, const tor_addr_t *target_addr, const char **msg_out, int *launch_out)
Definition: channel.c:2386
uint64_t n_accepted
Definition: channel.h:372
void channel_init(channel_t *chan)
Definition: channel.c:819
void channel_mark_outgoing(channel_t *chan)
Definition: channel.c:3077
time_t timestamp_accepted
Definition: channel.h:369
Header file for circuitmux.c.
void channel_listener_dump_transport_statistics(channel_listener_t *chan_l, int severity)
Definition: channel.c:2787
unsigned int pending_padding_callback
Definition: channel.h:81
void channel_listener_set_listener_fn(channel_listener_t *chan, channel_listener_fn_ptr listener)
Definition: channel.c:1032
tor_timer_t * padding_timer
Definition: channel.h:95
time_t timestamp_client
Definition: channel.h:307
void channel_listener_unregister(channel_listener_t *chan_l)
Definition: channel.c:520
uint32_t circid_t
Definition: or.h:1030
channel_cell_handler_fn_ptr channel_get_cell_handler(channel_t *chan)
Definition: channel.c:1055
void channel_dumpstats(int severity)
Definition: channel.c:2060
Definition: crypto_rsa.c:41
smartlist_t * incoming_list
Definition: channel.h:366
const char * channel_get_actual_remote_descr(channel_t *chan)
Definition: channel.c:2806
void channel_free_all(void)
Definition: channel.c:2235
channel_usage_info_t channel_usage
Definition: channel.h:88
time_t timestamp_created
Definition: channel.h:155
void(* close)(channel_t *)
Definition: channel.h:175
int channel_is_canonical_is_reliable(channel_t *chan)
Definition: channel.c:2971
int channel_has_queued_writes(channel_t *chan)
Definition: channel.c:2872
Definition: circuitmux.c:105
time_t timestamp_created
Definition: channel.h:348
channel_t * channel_find_by_remote_identity(const char *rsa_id_digest, const ed25519_public_key_t *ed_id)
Definition: channel.c:693
int channel_state_can_transition(channel_state_t from, channel_state_t to)
Definition: channel.c:233
void channel_unregister(channel_t *chan)
Definition: channel.c:440
void channel_timestamp_created(channel_t *chan)
Definition: channel.c:3124
void channel_timestamp_xmit(channel_t *chan)
Definition: channel.c:3247
void channel_run_cleanup(void)
Definition: channel.c:2122
void channel_set_identity_digest(channel_t *chan, const char *identity_digest, const ed25519_public_key_t *ed_identity)
Definition: channel.c:1324
void channel_clear_client(channel_t *chan)
Definition: channel.c:2942
const char * channel_get_canonical_remote_descr(channel_t *chan)
Definition: channel.c:2839
ed25519_public_key_t ed25519_identity
Definition: channel.h:254
unsigned int is_incoming
Definition: channel.h:293
void channel_closed(channel_t *chan)
Definition: channel.c:1264
int channel_num_cells_writeable(channel_t *chan)
Definition: channel.c:3094
unsigned int num_n_circuits
Definition: channel.h:276
int channel_is_client(const channel_t *chan)
Definition: channel.c:2916
void(* free_fn)(channel_t *)
Definition: channel.h:173
unsigned int currently_padding
Definition: channel.h:78
void channel_listener_register(channel_listener_t *chan_l)
Definition: channel.c:479