|
Tor 0.4.9.3-alpha-dev
|
Header file for channel.c. More...
#include "core/or/or.h"#include "core/or/circuitmux.h"#include "lib/container/handles.h"#include "lib/crypt_ops/crypto_ed25519.h"#include "ext/ht.h"#include "tor_queue.h"Go to the source code of this file.
Data Structures | |
| struct | channel_t |
| struct | channel_listener_t |
Macros | |
| #define | tor_timer_t timeout |
| #define | circ_id_type_bitfield_t ENUM_BF(circ_id_type_t) |
| #define | CHANNEL_IS_CLOSED(chan) |
| #define | CHANNEL_IS_OPENING(chan) |
| #define | CHANNEL_IS_OPEN(chan) |
| #define | CHANNEL_IS_MAINT(chan) |
| #define | CHANNEL_IS_CLOSING(chan) |
| #define | CHANNEL_IS_ERROR(chan) |
| #define | CHANNEL_FINISHED(chan) |
| #define | CHANNEL_CONDEMNED(chan) |
| #define | CHANNEL_CAN_HANDLE_CELLS(chan) |
| #define | channel_handle_free(h) FREE_AND_NULL(channel_handle_t, channel_handle_free_, (h)) |
Typedefs | |
| typedef void(* | channel_listener_fn_ptr) (channel_listener_t *, channel_t *) |
| typedef void(* | channel_cell_handler_fn_ptr) (channel_t *, cell_t *) |
Enumerations | |
| enum | channel_usage_info_t { CHANNEL_USED_NOT_USED_FOR_FULL_CIRCS = 0 , CHANNEL_USED_FOR_FULL_CIRCS , CHANNEL_USED_FOR_USER_TRAFFIC } |
| enum | circ_id_type_t { CIRC_ID_TYPE_LOWER =0 , CIRC_ID_TYPE_HIGHER =1 , CIRC_ID_TYPE_NEITHER =2 } |
| enum | channel_state_t { CHANNEL_STATE_CLOSED = 0 , CHANNEL_STATE_OPENING , CHANNEL_STATE_OPEN , CHANNEL_STATE_MAINT , CHANNEL_STATE_CLOSING , CHANNEL_STATE_ERROR , CHANNEL_STATE_LAST } |
| enum | channel_listener_state_t { CHANNEL_LISTENER_STATE_CLOSED = 0 , CHANNEL_LISTENER_STATE_LISTENING , CHANNEL_LISTENER_STATE_CLOSING , CHANNEL_LISTENER_STATE_ERROR , CHANNEL_LISTENER_STATE_LAST } |
| #define CHANNEL_CAN_HANDLE_CELLS | ( | chan | ) |
| #define CHANNEL_CONDEMNED | ( | chan | ) |
| #define CHANNEL_FINISHED | ( | chan | ) |
| #define channel_handle_free | ( | h | ) | FREE_AND_NULL(channel_handle_t, channel_handle_free_, (h)) |
| #define CHANNEL_IS_CLOSED | ( | chan | ) |
| #define CHANNEL_IS_CLOSING | ( | chan | ) |
| #define CHANNEL_IS_ERROR | ( | chan | ) |
| #define CHANNEL_IS_MAINT | ( | chan | ) |
| #define CHANNEL_IS_OPEN | ( | chan | ) |
| #define CHANNEL_IS_OPENING | ( | chan | ) |
| #define circ_id_type_bitfield_t ENUM_BF(circ_id_type_t) |
| typedef void(* channel_listener_fn_ptr) (channel_listener_t *, channel_t *) |
| enum channel_state_t |
| enum channel_usage_info_t |
This enum is used by channelpadding to decide when to pad channels. Don't add values to it without updating the checks in channelpadding_decide_to_pad_channel().
| enum circ_id_type_t |
| void channel_check_for_duplicates | ( | void | ) |
Relays run this once an hour to look over our list of channels to other relays. It prints out some statistics if there are multiple connections to many relays.
This function is similar to connection_or_set_bad_connections(), and probably could be adapted to replace it, if it was modified to actually take action on any of these connections.
| void channel_clear_client | ( | channel_t * | chan | ) |
| const char * channel_describe_peer | ( | channel_t * | chan | ) |
Return text description of the remote endpoint canonical address.
This function returns a human-readable string for logging; nothing should parse it or rely on a particular format.
Subsequent calls to this function may invalidate its return value.
Definition at line 2839 of file channel.c.
Referenced by channel_dump_statistics(), channel_tls_process_netinfo_cell(), channelpadding_send_padding_cell_for_callback(), channelpadding_update_padding_for_channel(), circuit_build_failed(), circuit_count_pending_on_channel(), circuit_expire_building(), circuit_extend(), circuit_n_chan_done(), command_process_create_cell(), command_process_destroy_cell(), command_process_relay_cell(), and connection_exit_begin_conn().
| const char * channel_describe_transport | ( | channel_t * | chan | ) |
Describe the transport subclass for a channel.
Invoke a method to get a string description of the lower-layer transport for this channel.
Definition at line 2514 of file channel.c.
Referenced by channel_dump_statistics().
| void channel_dump_statistics | ( | channel_t * | chan, |
| int | severity | ||
| ) |
Dump channel statistics.
Dump statistics for one channel to the log.
Definition at line 2543 of file channel.c.
Referenced by channel_dumpstats(), and get_unique_circ_id_by_chan().
| void channel_dump_transport_statistics | ( | channel_t * | chan, |
| int | severity | ||
| ) |
Invoke transport-specific stats dump for channel.
If there is a lower-layer statistics dump method, invoke it.
Definition at line 2809 of file channel.c.
Referenced by channel_dump_statistics().
| void channel_dumpstats | ( | int | severity | ) |
Dump channel statistics to the log.
This is called from dumpstats() in main.c and spams the log with statistics on channels.
Definition at line 2077 of file channel.c.
Referenced by dumpstats().
| channel_t * channel_find_by_global_id | ( | uint64_t | global_identifier | ) |
Channel lookups
Find channel by global ID.
This function searches for a channel by the global_identifier assigned at initialization time. This identifier is unique for the lifetime of the Tor process.
Definition at line 651 of file channel.c.
Referenced by circuitmux_detach_all_circuits(), and circuitmux_set_policy().
| void channel_free_all | ( | void | ) |
Close all channels and free everything.
This gets called from tor_free_all() in main.c to clean up on exit. It will close all registered channels and free associated storage, then free the all_channels, active_channels, listening_channels and finished_channels lists and also channel_identity_map.
Definition at line 2252 of file channel.c.
Referenced by tor_free_all().
| int channel_get_addr_if_possible | ( | const channel_t * | chan, |
| tor_addr_t * | addr_out | ||
| ) |
Get the remote address for this channel, if possible.
Write the remote address out to a tor_addr_t if the underlying transport supports this operation, and return 1. Return 0 if the underlying transport doesn't let us do this.
Always returns the "real" address of the peer – the one we're connected to on the internet.
Definition at line 2859 of file channel.c.
Referenced by channel_do_open_actions(), channel_dump_statistics(), circuit_synchronize_written_or_bandwidth(), connection_exit_begin_conn(), and onionskin_answer().
| channel_cell_handler_fn_ptr channel_get_cell_handler | ( | channel_t * | chan | ) |
| int channel_has_queued_writes | ( | channel_t * | chan | ) |
| int channel_is_bad_for_new_circs | ( | channel_t * | chan | ) |
Check the is_bad_for_new_circs flag.
This function returns the is_bad_for_new_circs flag of the specified channel.
Definition at line 2889 of file channel.c.
Referenced by channel_dump_statistics(), channel_get_for_extend(), channel_is_better(), connection_or_is_bad_for_new_circs(), and run_connection_housekeeping().
Decide which of two channels to prefer for extending a circuit.
This function is called while extending a circuit and returns true iff a is 'better' than b. The most important criterion here is that a canonical channel is always better than a non-canonical one, but the number of circuits and the age are used as tie-breakers.
This is based on the former connection_or_is_better() of connection_or.c
Definition at line 2343 of file channel.c.
Referenced by channel_get_for_extend(), and connection_or_group_set_badness_().
| int channel_is_canonical | ( | channel_t * | chan | ) |
Get the canonical flag for a channel.
This returns the is_canonical for a channel; this flag is determined by the lower layer and can't be set in a transport-independent way.
Definition at line 2957 of file channel.c.
Referenced by channel_dump_statistics(), channel_get_for_extend(), channel_is_better(), and channel_tls_process_netinfo_cell().
| int channel_is_client | ( | const channel_t * | chan | ) |
Get the client flag.
This returns the client flag of a channel, which will be set if command_process_create_cell() in command.c thinks this is a connection from a client.
Definition at line 2917 of file channel.c.
Referenced by assign_onionskin_to_cpuworker(), channel_do_open_actions(), channel_dump_statistics(), channel_get_for_extend(), circuit_expire_old_circuits_serverside(), circuit_is_suitable_for_introduce1(), circuit_update_channel_usage(), command_process_create_cell(), connection_dir_is_anonymous(), connection_exit_begin_conn(), onion_pending_add(), and rend_mid_establish_rendezvous().
|
inlinestatic |
| int channel_is_incoming | ( | channel_t * | chan | ) |
Test incoming flag.
This function gets the incoming flag; this is set when a listener spawns a channel. If this returns true the channel was remotely initiated.
Definition at line 2972 of file channel.c.
Referenced by channel_dump_statistics().
| int channel_is_local | ( | channel_t * | chan | ) |
Test local flag.
This function gets the local flag; the lower layer should set this when setting up the channel if is_local_addr() is true for all of the destinations it will communicate with on behalf of this channel. It's used to decide whether to declare the network reachable when seeing incoming traffic on the channel.
Definition at line 3003 of file channel.c.
Referenced by channel_dump_statistics(), channel_tls_update_marks(), and onionskin_answer().
| int channel_is_outgoing | ( | channel_t * | chan | ) |
Test outgoing flag.
This function gets the outgoing flag; this is the inverse of the incoming bit set when a listener spawns a channel. If this returns true the channel was locally initiated.
Definition at line 3049 of file channel.c.
Referenced by channel_do_open_actions(), channel_set_circid_type(), command_process_create_cell(), and onionskin_answer().
| const char * channel_listener_describe_transport | ( | channel_listener_t * | chan_l | ) |
Describe the transport subclass for a channel listener.
Invoke a method to get a string description of the lower-layer transport for this channel listener.
Definition at line 2529 of file channel.c.
Referenced by channel_listener_dump_statistics().
| void channel_listener_dump_statistics | ( | channel_listener_t * | chan_l, |
| int | severity | ||
| ) |
Dump channel listener statistics.
Dump statistics for one channel listener to the log.
Definition at line 2743 of file channel.c.
Referenced by channel_listener_dumpstats().
| void channel_listener_dump_transport_statistics | ( | channel_listener_t * | chan_l, |
| int | severity | ||
| ) |
Invoke transport-specific stats dump for channel listener.
If there is a lower-layer statistics dump method, invoke it.
Definition at line 2822 of file channel.c.
Referenced by channel_listener_dump_statistics().
| void channel_listener_dumpstats | ( | int | severity | ) |
Dump channel listener statistics to the log.
This is called from dumpstats() in main.c and spams the log with statistics on channel listeners.
Definition at line 2108 of file channel.c.
Referenced by dumpstats().
| void channel_listener_mark_for_close | ( | channel_listener_t * | chan_l | ) |
Mark a channel listener for closure.
This function tries to close a channel_listener_t; it will go into the CLOSING state, and eventually the lower layer should put it into the CLOSED or ERROR state. Then, channel_run_cleanup() will eventually free it.
Definition at line 1181 of file channel.c.
Referenced by channel_listener_free_list(), and channel_tls_free_all().
| void channel_listener_run_cleanup | ( | void | ) |
Clean up channel listeners.
This gets called periodically from run_scheduled_events() in main.c; it cleans up after closed channel listeners.
Definition at line 2165 of file channel.c.
Referenced by postloop_cleanup_cb().
| void channel_listener_set_listener_fn | ( | channel_listener_t * | chan_l, |
| channel_listener_fn_ptr | listener | ||
| ) |
Set the listener for a channel listener.
This function sets the handler for new incoming channels on a channel listener.
Definition at line 1067 of file channel.c.
Referenced by command_setup_listener().
| int channel_listener_state_can_transition | ( | channel_listener_state_t | from, |
| channel_listener_state_t | to | ||
| ) |
Indicate whether a channel listener state transition is valid.
This function takes two channel listener states and indicates whether a transition between them is permitted (see the state definitions and transition table in or.h at the channel_listener_state_t typedef).
Definition at line 284 of file channel.c.
Referenced by channel_listener_change_state().
| int channel_listener_state_is_valid | ( | channel_listener_state_t | state | ) |
Indicate whether a given channel listener state is valid.
Definition at line 211 of file channel.c.
Referenced by channel_listener_change_state().
| const char * channel_listener_state_to_string | ( | channel_listener_state_t | state | ) |
Return a human-readable description for a channel listener state.
Definition at line 351 of file channel.c.
Referenced by channel_listener_change_state(), channel_listener_dump_statistics(), channel_listener_free_list(), and channel_listener_register().
| void channel_mark_as_used_for_origin_circuit | ( | channel_t * | chan | ) |
Set the potentially_used_for_bootstrapping flag on the or_connection_t corresponding to the provided channel.
This flag indicates that if the connection fails, it might be interesting to the bootstrapping subsystem. (The bootstrapping system only cares about channels that we have tried to use for our own circuits. Other channels may have been launched in response to EXTEND cells from somebody else, and if they fail, it won't necessarily indicate a bootstrapping problem.)
Definition at line 391 of file channeltls.c.
Referenced by channel_get_for_extend(), and circuit_handle_first_hop().
| void channel_mark_bad_for_new_circs | ( | channel_t * | chan | ) |
| void channel_mark_client | ( | channel_t * | chan | ) |
Set the client flag.
Mark a channel as being from a client.
Definition at line 2930 of file channel.c.
Referenced by connection_or_set_state_open(), and mark_channel_tls_endpoint_as_client().
| void channel_mark_for_close | ( | channel_t * | chan | ) |
Mark a channel for closure.
This function tries to close a channel_t; it will go into the CLOSING state, and eventually the lower layer should put it into the CLOSED or ERROR state. Then, channel_run_cleanup() will eventually free it.
Definition at line 1142 of file channel.c.
Referenced by channel_flush_from_first_active_circuit(), channel_free_list(), channel_listener_force_xfree(), and channel_tls_listener_close_method().
| int channel_matches_extend_info | ( | channel_t * | chan, |
| extend_info_t * | extend_info | ||
| ) |
Check if a channel matches an extend_info_t.
This function calls the lower layer and asks if this channel matches a given extend_info_t.
NOTE that this function only checks for an address/port match, and should be used only when no identity is available.
Definition at line 3294 of file channel.c.
Referenced by circuit_get_all_pending_on_channel(), and circuit_n_chan_done().
For things returned by channel_find_by_remote_digest(), walk the list. The RSA key will match for all returned elements; the Ed25519 key might not.
Get next channel with digest.
This function takes a channel and finds the next channel in the list with the same digest.
Definition at line 732 of file channel.c.
Referenced by channel_check_for_duplicates(), channel_find_by_remote_identity(), and channel_get_for_extend().
| int channel_num_cells_writeable | ( | channel_t * | chan | ) |
| unsigned int channel_num_circuits | ( | channel_t * | chan | ) |
Return the total number of circuits used by a channel.
| chan | Channel to query |
Definition at line 3340 of file channel.c.
Referenced by channel_is_better(), connection_or_get_num_circuits(), and run_connection_housekeeping().
| int channel_remote_identity_matches | ( | const channel_t * | chan, |
| const char * | rsa_id_digest, | ||
| const ed25519_public_key_t * | ed_id | ||
| ) |
Return true iff chan matches rsa_id_digest and ed_id. as its identity keys. If either is NULL, do not check for a match.
Definition at line 668 of file channel.c.
Referenced by channel_find_by_remote_identity(), channel_get_for_extend(), and circuit_n_chan_done().
| void channel_run_cleanup | ( | void | ) |
Clean up channels.
This gets called periodically from run_scheduled_events() in main.c; it cleans up after closed channels.
Definition at line 2139 of file channel.c.
Referenced by postloop_cleanup_cb().
Send destroy cell on a channel.
Write a destroy cell with circ ID circ_id and reason reason onto channel chan. Don't perform range-checking on reason: we may want to propagate reasons from other cells.
Definition at line 2037 of file channel.c.
Referenced by circuit_about_to_free(), command_process_create_cell(), and handle_relay_msg().
| void channel_set_cell_handlers | ( | channel_t * | chan, |
| channel_cell_handler_fn_ptr | cell_handler | ||
| ) |
Set both cell handlers for a channel.
This function sets both the fixed-length and variable length cell handlers for a channel.
Definition at line 1107 of file channel.c.
Referenced by command_setup_channel().
| void channel_set_circid_type | ( | channel_t * | chan, |
| crypto_pk_t * | identity_rcvd, | ||
| int | consider_identity | ||
| ) |
Set up circuit ID generation.
This is called when setting up a channel and replaces the old connection_or_set_circid_type().
Definition at line 3357 of file channel.c.
Referenced by channel_tls_process_authenticate_cell(), channel_tls_process_certs_cell(), and mark_channel_tls_endpoint_as_client().
| int channel_state_can_transition | ( | channel_state_t | from, |
| channel_state_t | to | ||
| ) |
Indicate whether a channel state transition is valid.
This function takes two channel states and indicates whether a transition between them is permitted (see the state definitions and transition table in or.h at the channel_state_t typedef).
Definition at line 238 of file channel.c.
Referenced by channel_change_state_().
| int channel_state_is_valid | ( | channel_state_t | state | ) |
Indicate whether a given channel state is valid.
Definition at line 186 of file channel.c.
Referenced by channel_change_state_().
| const char * channel_state_to_string | ( | channel_state_t | state | ) |
Return a human-readable description for a channel state.
Definition at line 316 of file channel.c.
Referenced by channel_add_to_digest_map(), channel_change_state_(), channel_dump_statistics(), channel_free_list(), channel_register(), channel_remove_from_digest_map(), channel_send_destroy(), channel_tls_handle_cell(), channel_tls_handle_var_cell(), circuit_deliver_create_cell(), and circuit_expire_building().
| void channel_timestamp_client | ( | channel_t * | chan | ) |
Update client timestamp.
This function is called by relay.c to timestamp a channel that appears to be used as a client.
Definition at line 3197 of file channel.c.
Referenced by circuit_deliver_create_cell(), command_process_relay_cell(), and relay_send_command_from_edge_().
| void channel_update_bad_for_new_circs | ( | const char * | digest, |
| int | force | ||
| ) |
Go through all the channels (or if digest is non-NULL, just the OR connections with that digest), and set the is_bad_for_new_circs flag based on the rules in connection_or_group_set_badness() (or just always set it if force is true).
Definition at line 3462 of file channel.c.
Referenced by second_elapsed_callback().
| time_t channel_when_created | ( | channel_t * | chan | ) |
Query created timestamp for a channel.
Definition at line 3255 of file channel.c.
Referenced by channel_is_better(), and command_process_create_cell().
| time_t channel_when_last_client | ( | channel_t * | chan | ) |
Query client timestamp.
Definition at line 3266 of file channel.c.
Referenced by connection_or_client_used().
| time_t channel_when_last_xmit | ( | channel_t * | chan | ) |
Query xmit timestamp.
Definition at line 3277 of file channel.c.
Referenced by circuit_expire_old_circuits_serverside().
| int channel_write_packed_cell | ( | channel_t * | chan, |
| packed_cell_t * | cell | ||
| ) |
Write a packed cell to a channel.
Write a packed cell to a channel using the write_cell() method. This is called by the transport-independent code to deliver a packed cell to a channel for transmission.
Return 0 on success else a negative value. In both cases, the caller should not access the cell anymore, it is freed both on success and error.
Definition at line 1489 of file channel.c.
Referenced by channel_flush_from_first_active_circuit().
| int packed_cell_is_destroy | ( | channel_t * | chan, |
| const packed_cell_t * | packed_cell, | ||
| circid_t * | circid_out | ||
| ) |
If packed_cell on chan is a destroy cell, then set *circid_out to its circuit ID, and return true. Otherwise, return false.
Definition at line 2011 of file channel.c.
Referenced by write_packed_cell().