tor  master
channel.h
Go to the documentation of this file.
1 /* * Copyright (c) 2012-2017, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
3 
9 #ifndef TOR_CHANNEL_H
10 #define TOR_CHANNEL_H
11 
12 #include "or.h"
13 #include "circuitmux.h"
14 #include "timers.h"
15 #include "handles.h"
16 
17 /* Channel handler function pointer typedefs */
18 typedef void (*channel_listener_fn_ptr)(channel_listener_t *, channel_t *);
19 typedef void (*channel_cell_handler_fn_ptr)(channel_t *, cell_t *);
20 typedef void (*channel_var_cell_handler_fn_ptr)(channel_t *, var_cell_t *);
21 
27 typedef enum {
28  CHANNEL_USED_NOT_USED_FOR_FULL_CIRCS = 0,
29  CHANNEL_USED_FOR_FULL_CIRCS,
30  CHANNEL_USED_FOR_USER_TRAFFIC,
32 
41 struct channel_s {
43  uint32_t magic;
44 
46  HT_ENTRY(channel_s) gidmap_node;
47 
49  HANDLE_ENTRY(channel, channel_s);
50 
52  channel_state_t state;
53 
58 
60  unsigned char registered:1;
61 
63  unsigned int has_been_open:1;
64 
74  unsigned int padding_enabled:1;
75 
78  unsigned int currently_padding:1;
79 
81  unsigned int pending_padding_callback:1;
82 
84  unsigned int is_canonical_to_peer:1;
85 
89 
92  monotime_coarse_t next_padding_time;
93 
97  struct channel_handle_t *timer_handle;
98 
117  uint16_t padding_timeout_high_ms;
118 
121  enum {
122  CHANNEL_NOT_CLOSING = 0,
123  CHANNEL_CLOSE_REQUESTED,
124  CHANNEL_CLOSE_FROM_BELOW,
125  CHANNEL_CLOSE_FOR_ERROR
127 
129  enum {
130  /*
131  * The channel is not open, or it has a full output buffer but no queued
132  * cells.
133  */
134  SCHED_CHAN_IDLE = 0,
135  /*
136  * The channel has space on its output buffer to write, but no queued
137  * cells.
138  */
139  SCHED_CHAN_WAITING_FOR_CELLS,
140  /*
141  * The scheduler has queued cells but no output buffer space to write.
142  */
143  SCHED_CHAN_WAITING_TO_WRITE,
144  /*
145  * The scheduler has both queued cells and output buffer space, and is
146  * eligible for the scheduler loop.
147  */
148  SCHED_CHAN_PENDING
149  } scheduler_state;
150 
153 
155  time_t timestamp_created; /* Channel created */
156  time_t timestamp_active; /* Any activity */
157 
168  monotime_coarse_t timestamp_xfer;
169 
170  /* Methods implemented by the lower layer */
171 
173  void (*free_fn)(channel_t *);
175  void (*close)(channel_t *);
177  const char * (*describe_transport)(channel_t *);
179  void (*dumpstats)(channel_t *, int);
180 
182  channel_cell_handler_fn_ptr cell_handler;
183  channel_var_cell_handler_fn_ptr var_cell_handler;
184 
185  /* Methods implemented by the lower layer */
186 
192  /*
193  * Ask the underlying transport what the remote endpoint address is, in
194  * a tor_addr_t. This is optional and subclasses may leave this NULL.
195  * If they implement it, they should write the address out to the
196  * provided tor_addr_t *, and return 1 if successful or 0 if no address
197  * available.
198  */
199  int (*get_remote_addr)(channel_t *, tor_addr_t *);
200  int (*get_transport_name)(channel_t *chan, char **transport_out);
201 
202 #define GRD_FLAG_ORIGINAL 1
203 #define GRD_FLAG_ADDR_ONLY 2
204 
210  const char * (*get_remote_descr)(channel_t *, int);
212  int (*has_queued_writes)(channel_t *);
219  int (*is_canonical)(channel_t *, int);
221  int (*matches_extend_info)(channel_t *, extend_info_t *);
223  int (*matches_target)(channel_t *, const tor_addr_t *);
224  /* Ask the lower layer how many bytes it has queued but not yet sent */
225  size_t (*num_bytes_queued)(channel_t *);
226  /* Ask the lower layer how many cells can be written */
227  int (*num_cells_writeable)(channel_t *);
228  /* Write a cell to an open channel */
229  int (*write_cell)(channel_t *, cell_t *);
231  int (*write_packed_cell)(channel_t *, packed_cell_t *);
233  int (*write_var_cell)(channel_t *, var_cell_t *);
234 
255 
260  TOR_LIST_ENTRY(channel_s) next_with_same_id;
261 
264 
271  circ_id_type_bitfield_t circ_id_type:2;
272  /* DOCDOC */
273  unsigned wide_circ_ids:1;
274 
276  unsigned int num_n_circuits, num_p_circuits;
277 
285  unsigned int is_bad_for_new_circs:1;
286 
290  unsigned int is_client:1;
291 
293  unsigned int is_incoming:1;
294 
300  unsigned int is_local:1;
301 
305 
307  time_t timestamp_client; /* Client used this, according to relay.c */
308  time_t timestamp_recv; /* Cell received from lower layer */
309  time_t timestamp_xmit; /* Cell sent to lower layer */
310 
315 
319  uint64_t dirreq_id;
320 
322  uint64_t n_cells_recved, n_bytes_recved;
323  uint64_t n_cells_xmitted, n_bytes_xmitted;
324 };
325 
327  /* Current channel listener state */
328  channel_listener_state_t state;
329 
330  /* Globally unique ID number for a channel over the lifetime of a Tor
331  * process.
332  */
333  uint64_t global_identifier;
334 
336  unsigned char registered:1;
337 
340  enum {
341  CHANNEL_LISTENER_NOT_CLOSING = 0,
342  CHANNEL_LISTENER_CLOSE_REQUESTED,
343  CHANNEL_LISTENER_CLOSE_FROM_BELOW,
344  CHANNEL_LISTENER_CLOSE_FOR_ERROR
346 
348  time_t timestamp_created; /* Channel created */
349  time_t timestamp_active; /* Any activity */
350 
351  /* Methods implemented by the lower layer */
352 
358  const char * (*describe_transport)(channel_listener_t *);
360  void (*dumpstats)(channel_listener_t *, int);
361 
363  channel_listener_fn_ptr listener;
364 
367 
370 
372  uint64_t n_accepted;
373 };
374 
375 /* Channel state manipulations */
376 
377 int channel_state_is_valid(channel_state_t state);
378 int channel_listener_state_is_valid(channel_listener_state_t state);
379 
380 int channel_state_can_transition(channel_state_t from, channel_state_t to);
381 int channel_listener_state_can_transition(channel_listener_state_t from,
382  channel_listener_state_t to);
383 
384 const char * channel_state_to_string(channel_state_t state);
385 const char *
386 channel_listener_state_to_string(channel_listener_state_t state);
387 
388 /* Abstract channel operations */
389 
392 
394 
395 /* Channel callback registrations */
396 
397 /* Listener callback */
399  channel_listener_fn_ptr listener);
400 
401 /* Incoming cell callbacks */
402 channel_cell_handler_fn_ptr channel_get_cell_handler(channel_t *chan);
403 
404 channel_var_cell_handler_fn_ptr
406 
408  channel_cell_handler_fn_ptr cell_handler,
409  channel_var_cell_handler_fn_ptr
410  var_cell_handler);
411 
412 /* Clean up closed channels and channel listeners periodically; these are
413  * called from run_scheduled_events() in main.c.
414  */
415 void channel_run_cleanup(void);
417 
418 /* Close all channels and deallocate everything */
419 void channel_free_all(void);
420 
421 /* Dump some statistics in the log */
422 void channel_dumpstats(int severity);
423 void channel_listener_dumpstats(int severity);
424 
425 #ifdef TOR_CHANNEL_INTERNAL_
426 
427 #ifdef CHANNEL_PRIVATE_
428 
429 STATIC void channel_add_to_digest_map(channel_t *chan);
430 
431 #endif /* defined(CHANNEL_PRIVATE_) */
432 
433 /* Channel operations for subclasses and internal use only */
434 
435 /* Initialize a newly allocated channel - do this first in subclass
436  * constructors.
437  */
438 
439 void channel_init(channel_t *chan);
441 
442 /* Channel registration/unregistration */
443 void channel_register(channel_t *chan);
444 void channel_unregister(channel_t *chan);
445 
446 /* Channel listener registration/unregistration */
449 
450 /* Close from below */
453 void channel_closed(channel_t *chan);
454 
455 /* Free a channel */
456 void channel_free_(channel_t *chan);
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))
461 
462 /* State/metadata setters */
463 
464 void channel_change_state(channel_t *chan, channel_state_t to_state);
468 void channel_mark_local(channel_t *chan);
469 void channel_mark_incoming(channel_t *chan);
470 void channel_mark_outgoing(channel_t *chan);
471 void channel_mark_remote(channel_t *chan);
473  const char *identity_digest,
474  const ed25519_public_key_t *ed_identity);
475 
477  channel_listener_state_t to_state);
478 
479 /* Timestamp updates */
484 
488 
489 /* Incoming channel handling */
492  channel_t *incoming);
493 
494 /* Incoming cell handling */
495 void channel_process_cell(channel_t *chan, cell_t *cell);
496 
497 /* Request from lower layer for more cells if available */
498 MOCK_DECL(ssize_t, channel_flush_some_cells,
499  (channel_t *chan, ssize_t num_cells));
500 
501 /* Query if data available on this channel */
502 MOCK_DECL(int, channel_more_to_flush, (channel_t *chan));
503 
504 /* Notify flushed outgoing for dirreq handling */
506 
507 /* Handle stuff we need to do on open like notifying circuits */
509 
510 #endif /* defined(TOR_CHANNEL_INTERNAL_) */
511 
512 /* Helper functions to perform operations on channels */
513 
514 int channel_send_destroy(circid_t circ_id, channel_t *chan,
515  int reason);
516 
517 /*
518  * Outside abstract interfaces that should eventually get turned into
519  * something transport/address format independent.
520  */
521 
522 channel_t * channel_connect(const tor_addr_t *addr, uint16_t port,
523  const char *rsa_id_digest,
524  const ed25519_public_key_t *ed_id);
525 
526 channel_t * channel_get_for_extend(const char *rsa_id_digest,
527  const ed25519_public_key_t *ed_id,
528  const tor_addr_t *target_addr,
529  const char **msg_out,
530  int *launch_out);
531 
532 /* Ask which of two channels is better for circuit-extension purposes */
534 
539 channel_t * channel_find_by_remote_identity(const char *rsa_id_digest,
540  const ed25519_public_key_t *ed_id);
541 
546 
547 /*
548  * Helper macros to lookup state of given channel.
549  */
550 
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), \
556  CHANNEL_STATE_OPEN))
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))
563 
564 #define CHANNEL_FINISHED(chan) (CHANNEL_IS_CLOSED(chan) || \
565  CHANNEL_IS_ERROR(chan))
566 
567 #define CHANNEL_CONDEMNED(chan) (CHANNEL_IS_CLOSING(chan) || \
568  CHANNEL_FINISHED(chan))
569 
570 #define CHANNEL_CAN_HANDLE_CELLS(chan) (CHANNEL_IS_OPENING(chan) || \
571  CHANNEL_IS_OPEN(chan) || \
572  CHANNEL_IS_MAINT(chan))
573 
574 static inline int
575 channel_is_in_state(channel_t *chan, channel_state_t state)
576 {
577  return chan->state == state;
578 }
579 
580 /*
581  * Metadata queries/updates
582  */
583 
584 const char * channel_describe_transport(channel_t *chan);
585 MOCK_DECL(void, channel_dump_statistics, (channel_t *chan, int severity));
586 void channel_dump_transport_statistics(channel_t *chan, int severity);
587 const char * channel_get_actual_remote_descr(channel_t *chan);
588 const char * channel_get_actual_remote_address(channel_t *chan);
589 MOCK_DECL(int, channel_get_addr_if_possible, (channel_t *chan,
590  tor_addr_t *addr_out));
597 int channel_is_client(const channel_t *chan);
598 int channel_is_local(channel_t *chan);
599 int channel_is_incoming(channel_t *chan);
600 int channel_is_outgoing(channel_t *chan);
601 void channel_mark_client(channel_t *chan);
602 void channel_clear_client(channel_t *chan);
603 int channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info);
605  const tor_addr_t *target);
606 unsigned int channel_num_circuits(channel_t *chan);
607 MOCK_DECL(void,channel_set_circid_type,(channel_t *chan,
608  crypto_pk_t *identity_rcvd,
609  int consider_identity));
611 
614  int severity);
616  int severity);
618 
619 void channel_update_bad_for_new_circs(const char *digest, int force);
620 
621 /* Flow control queries */
623 
624 /* Timestamp queries */
625 time_t channel_when_created(channel_t *chan);
626 time_t channel_when_last_client(channel_t *chan);
627 time_t channel_when_last_xmit(channel_t *chan);
628 
629 /* Counter queries */
631  const packed_cell_t *packed_cell,
632  circid_t *circid_out);
633 
634 /* Declare the handle helpers */
635 HANDLE_DECL(channel, channel_s,)
636 #define channel_handle_free(h) \
637  FREE_AND_NULL(channel_handle_t, channel_handle_free_, (h))
638 
639 #endif /* !defined(TOR_CHANNEL_H) */
640 
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
Definition: or.h:1177
Definition: address.h:56
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
Definition: or.h:1204
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
Definition: or.h:1185
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
Definition: util.h:318
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
Definition: channel.h:41
Definition: or.h:2838
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