|
Tor 0.4.9.3-alpha-dev
|
Header file for connection_or.c. More...
#include "core/or/orconn_event.h"Go to the source code of this file.
Macros | |
| #define | or_handshake_state_free(state) FREE_AND_NULL(or_handshake_state_t, or_handshake_state_free_, (state)) |
| #define | var_cell_free(cell) FREE_AND_NULL(var_cell_t, var_cell_free_, (cell)) |
| #define | MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4 |
| #define | MIN_LINK_PROTO_FOR_CHANNEL_PADDING 5 |
| #define | MAX_LINK_PROTO MIN_LINK_PROTO_FOR_CHANNEL_PADDING |
Header file for connection_or.c.
Definition in file connection_or.h.
| #define MAX_LINK_PROTO MIN_LINK_PROTO_FOR_CHANNEL_PADDING |
Definition at line 112 of file connection_or.h.
| #define MIN_LINK_PROTO_FOR_CHANNEL_PADDING 5 |
Definition at line 111 of file connection_or.h.
| #define MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4 |
Definition at line 110 of file connection_or.h.
| #define or_handshake_state_free | ( | state | ) | FREE_AND_NULL(or_handshake_state_t, or_handshake_state_free_, (state)) |
Definition at line 80 of file connection_or.h.
| #define var_cell_free | ( | cell | ) | FREE_AND_NULL(var_cell_t, var_cell_free_, (cell)) |
Definition at line 107 of file connection_or.h.
| void cell_pack | ( | packed_cell_t * | dst, |
| const cell_t * | src, | ||
| int | wide_circ_ids | ||
| ) |
Pack the cell_t host-order structure src into network-order in the buffer dest. See tor-spec.txt for details about the wire format.
Note that this function doesn't touch dst->next: the caller should set it or clear it as appropriate.
Definition at line 451 of file connection_or.c.
Referenced by connection_or_write_cell_to_buf(), destroy_cell_to_packed_cell(), or_handshake_state_record_cell(), and packed_cell_copy().
| void clear_broken_connection_map | ( | int | stop_recording | ) |
Forget all recorded states for failed connections. If stop_recording is true, don't record any more.
Definition at line 263 of file connection_or.c.
Referenced by circuit_build_no_more_hops(), and connection_free_all().
| int connection_init_or_handshake_state | ( | or_connection_t * | conn, |
| int | started_here | ||
| ) |
Allocate a new connection handshake state for the connection conn. Return 0 on success, -1 on failure.
Definition at line 1963 of file connection_or.c.
Referenced by connection_or_launch_v3_or_handshake(), and enter_v3_handshake_with_cell().
| void connection_or_about_to_close | ( | or_connection_t * | or_conn | ) |
Called when we're about to finally unlink and free an OR connection: perform necessary accounting and cleanup
Definition at line 755 of file connection_or.c.
Referenced by connection_about_to_close_connection().
| void connection_or_change_state | ( | or_connection_t * | conn, |
| uint8_t | state | ||
| ) |
Call this to change or_connection_t states, so the owning channel_tls_t can be notified.
Definition at line 417 of file connection_or.c.
Referenced by connection_or_connect(), connection_or_finished_connecting(), connection_or_launch_v3_or_handshake(), connection_or_set_state_open(), connection_tls_continue_handshake(), connection_tls_start_handshake(), and enter_v3_handshake_with_cell().
| void connection_or_clear_identity | ( | or_connection_t * | conn | ) |
Clear clear conn->identity_digest and update other data structures as appropriate.
Definition at line 124 of file connection_or.c.
Referenced by connection_free_(), connection_free_minimal(), connection_or_set_identity_digest(), and connection_unlink().
| void connection_or_clear_identity_map | ( | void | ) |
Clear all identities in OR conns.
Definition at line 132 of file connection_or.c.
Referenced by connection_free_all().
| time_t connection_or_client_used | ( | or_connection_t * | conn | ) |
Return when we last used this channel for client activity (origin circuits). This is called from connection.c, since client_used is now one of the timestamps in channel_t
Definition at line 1931 of file connection_or.c.
Referenced by connection_counts_as_relayed_traffic().
| void connection_or_close_for_error | ( | or_connection_t * | orconn, |
| int | flush | ||
| ) |
Mark orconn for close and transition the associated channel, if any, to the error state.
Definition at line 1615 of file connection_or.c.
Referenced by channel_tls_handle_cell(), channel_tls_handle_var_cell(), channel_tls_process_auth_challenge_cell(), channel_tls_process_certs_cell(), channel_tls_process_netinfo_cell(), channel_tls_process_versions_cell(), connection_handle_write_impl(), connection_init_accepted_conn(), connection_mark_for_close_(), connection_or_finished_connecting(), connection_or_finished_flushing(), connection_or_process_inbuf(), connection_write_to_buf_failed(), enter_v3_handshake_with_cell(), and kill_conn_list_for_oos().
| void connection_or_close_normally | ( | or_connection_t * | orconn, |
| int | flush | ||
| ) |
Mark orconn for close and transition the associated channel, if any, to the closing state.
It's safe to call this and connection_or_close_for_error() any time, and channel layer will treat it as a connection closing for reasons outside its control, like the remote end closing it. It can also be a local reason that's specific to connection_t/or_connection_t rather than the channel mechanism, such as expiration of old connections in run_connection_housekeeping(). If you want to close a channel_t from somewhere that logically works in terms of generic channels rather than connections, use channel_mark_for_close(); see also the comment on that function in channel.c.
Definition at line 1595 of file connection_or.c.
Referenced by channel_tls_close_method(), channel_tls_process_versions_cell(), connection_mark_all_noncontrol_connections(), connection_or_reached_eof(), hibernate_go_dormant(), and run_connection_housekeeping().
| void connection_or_connect_failed | ( | or_connection_t * | conn, |
| int | reason, | ||
| const char * | msg | ||
| ) |
conn is in the 'connecting' state, and it failed to complete a TCP connection. Send notifications appropriately.
reason specifies the or_conn_end_reason for the failure; msg specifies the strerror-style error message.
Definition at line 1394 of file connection_or.c.
Referenced by connection_or_connect(), connection_or_notify_error(), and run_connection_housekeeping().
| int connection_or_digest_is_known_relay | ( | const char * | id_digest | ) |
Return 1 if identity digest id_digest is known to be a currently or recently running relay. Otherwise return 0.
Definition at line 812 of file connection_or.c.
Referenced by channel_check_for_duplicates(), channel_tls_process_netinfo_cell(), channelpadding_update_padding_for_channel(), connection_exit_begin_conn(), connection_or_update_token_buckets_helper(), and rep_hist_record_mtbf_data().
| void connection_or_event_status | ( | or_connection_t * | conn, |
| or_conn_status_event_t | tp, | ||
| int | reason | ||
| ) |
Helper function to publish an OR connection status event
Publishes a messages to subscribers of ORCONN messages, and sends the control event.
Definition at line 371 of file connection_or.c.
Referenced by connection_ext_or_transition(), connection_init_accepted_conn(), connection_or_about_to_close(), connection_or_client_learned_peer_id(), connection_or_connect(), connection_or_connect_failed(), and connection_or_set_state_open().
| int connection_or_finished_connecting | ( | or_connection_t * | or_conn | ) |
Connected handler for OR connections: begin the TLS handshake.
Definition at line 719 of file connection_or.c.
Referenced by connection_finished_connecting(), and connection_or_connect().
| int connection_or_finished_flushing | ( | or_connection_t * | conn | ) |
Connection conn has finished writing and has no bytes left on its outbuf.
Otherwise it's in state "open": stop writing and return.
If conn is broken, mark it for close and return -1, else return 0.
Definition at line 675 of file connection_or.c.
Referenced by connection_finished_flushing().
| int connection_or_flushed_some | ( | or_connection_t * | conn | ) |
Called whenever we have flushed some data on an or_conn: add more data from active circuits.
Definition at line 623 of file connection_or.c.
Referenced by connection_flushed_some().
| const struct ed25519_public_key_t * connection_or_get_alleged_ed25519_id | ( | const or_connection_t * | conn | ) |
Return the Ed25519 identity of the peer for this connection (if any).
Note that this ID may not be the actual identity for the peer if authentication is not complete.
Definition at line 217 of file connection_or.c.
Referenced by connection_describe_peer_internal().
| int connection_or_get_num_circuits | ( | or_connection_t * | conn | ) |
Return the number of circuits using an or_connection_t; this used to be an or_connection_t field, but it got moved to channel_t and we shouldn't maintain two copies.
Definition at line 432 of file connection_or.c.
Referenced by control_event_or_conn_status(), and oos_victim_comparator_for_orconns().
| void connection_or_group_set_badness_ | ( | smartlist_t * | group, |
| int | force | ||
| ) |
Given a list of all the or_connections with a given identity, set elements of that list as is_bad_for_new_circs as appropriate. Helper for connection_or_set_bad_connections().
Specifically, we set the is_bad_for_new_circs flag on:
See channel_is_better() in channel.c for our idea of what makes one OR connection better than another.
Definition at line 1066 of file connection_or.c.
Referenced by channel_rsa_id_group_set_badness().
| void connection_or_notify_error | ( | or_connection_t * | conn, |
| int | reason, | ||
| const char * | msg | ||
| ) |
conn got an error in connection_handle_read_impl() or connection_handle_write_impl() and is going to die soon.
reason specifies the or_conn_end_reason for the failure; msg specifies the strerror-style error message.
Definition at line 1410 of file connection_or.c.
Referenced by connection_handle_read_impl(), and connection_handle_write_impl().
| ssize_t connection_or_num_cells_writeable | ( | or_connection_t * | conn | ) |
This is for channeltls.c to ask how many cells we could accept if they were available.
Definition at line 645 of file connection_or.c.
Referenced by channel_tls_handle_state_change_on_orconn().
| int connection_or_process_inbuf | ( | or_connection_t * | conn | ) |
Handle any new bytes that have come in on connection conn. If conn is in 'open' state, hand it to connection_or_process_cells_from_inbuf() (else do nothing).
Definition at line 564 of file connection_or.c.
Referenced by connection_process_inbuf().
| int connection_or_reached_eof | ( | or_connection_t * | conn | ) |
We've received an EOF from conn. Mark it for close and return.
Definition at line 548 of file connection_or.c.
Referenced by connection_reached_eof().
| void connection_or_report_broken_states | ( | int | severity, |
| int | domain | ||
| ) |
Report a list of the top states for failed OR connections at log level severity, in log domain domain.
Definition at line 331 of file connection_or.c.
Referenced by control_event_bootstrap_problem().
| int connection_or_send_netinfo | ( | or_connection_t * | conn | ) |
Send a NETINFO cell on conn, telling the other server what we know about their address, our address, and the current time.
Definition at line 2319 of file connection_or.c.
Referenced by channel_tls_process_auth_challenge_cell(), channel_tls_process_certs_cell(), channel_tls_process_netinfo_cell(), and channel_tls_process_versions_cell().
| int connection_or_send_versions | ( | or_connection_t * | conn, |
| int | v3_plus | ||
| ) |
Send a VERSIONS cell on conn, telling the other host about the link protocol versions that this Tor can support.
If v3_plus, this is part of a V3 protocol handshake, so only allow protocol version v3 or later. If not v3_plus, this is not part of a v3 protocol handshake, so don't allow protocol v3 or later.
Definition at line 2264 of file connection_or.c.
Referenced by channel_tls_process_versions_cell(), and connection_or_launch_v3_or_handshake().
| void connection_or_set_canonical | ( | or_connection_t * | or_conn, |
| int | is_canonical | ||
| ) |
Definition at line 878 of file connection_or.c.
| int connection_or_set_state_open | ( | or_connection_t * | conn | ) |
Set conn's state to OR_CONN_STATE_OPEN, and tell other subsystems as appropriate. Called when we are done with all TLS and OR handshaking.
Definition at line 2079 of file connection_or.c.
Referenced by channel_tls_process_netinfo_cell().
| int connection_or_single_set_badness_ | ( | time_t | now, |
| or_connection_t * | or_conn, | ||
| int | force | ||
| ) |
Expire an or_connection if it is too old. Helper for connection_or_group_set_badness_ and fast path for channel_rsa_id_group_set_badness.
Returns 1 if the connection was already expired, else 0.
Definition at line 1024 of file connection_or.c.
Referenced by channel_rsa_id_group_set_badness(), and connection_or_group_set_badness_().
| void connection_or_update_token_buckets | ( | smartlist_t * | conns, |
| const or_options_t * | options | ||
| ) |
Either our set of relays or our per-conn rate limits have changed. Go through all the OR connections and update their token buckets to make sure they don't exceed their maximum values.
Definition at line 864 of file connection_or.c.
Referenced by options_act_relay_bandwidth().
| void connection_or_write_cell_to_buf | ( | const cell_t * | cell, |
| or_connection_t * | conn | ||
| ) |
Pack cell into wire-format, and write it onto conn's outbuf. For cells that use or affect a circuit, this should only be called by connection_or_flush_from_first_active_circuit().
Definition at line 2102 of file connection_or.c.
Referenced by channel_tls_write_cell_method(), connection_or_send_netinfo(), and run_connection_housekeeping().
| void connection_or_write_var_cell_to_buf | ( | const var_cell_t * | cell, |
| or_connection_t * | conn | ||
| ) |
Pack a variable-length cell into wire-format, and write it onto conn's outbuf. Right now, this DOES NOT support cells that affect a circuit.
Definition at line 2141 of file connection_or.c.
Referenced by channel_tls_write_var_cell_method(), connection_or_send_auth_challenge_cell(), connection_or_send_authenticate_cell(), connection_or_send_certs_cell(), and connection_or_send_versions().
| int connection_tls_continue_handshake | ( | or_connection_t * | conn | ) |
Move forward with the tls handshake. If it finishes, hand conn to connection_tls_finish_handshake().
Return -1 if conn is broken, else return 0.
Definition at line 1685 of file connection_or.c.
Referenced by connection_buf_read_from_socket(), connection_handle_write_impl(), and connection_tls_start_handshake().
| int connection_tls_start_handshake | ( | or_connection_t * | conn, |
| int | receiving | ||
| ) |
Begin the tls handshake with conn. receiving is 0 if we initiated the connection, else it's 1.
Assign a new tls object to conn->tls, begin reading on conn, and pass conn to connection_tls_continue_handshake().
Return -1 if conn is broken, else return 0.
Definition at line 1640 of file connection_or.c.
Referenced by connection_ext_or_transition(), connection_init_accepted_conn(), connection_or_finished_connecting(), connection_or_finished_flushing(), and connection_or_process_inbuf().
| const or_connection_t * CONST_TO_OR_CONN | ( | const connection_t * | c | ) |
Cast a const connection_t * to a const or_connection_t *.
Exit with an assertion failure if the input is not an or_connection_t.
Definition at line 116 of file connection_or.c.
Referenced by connection_describe_peer_internal(), and control_event_bootstrap_problem().
| int is_or_protocol_version_known | ( | uint16_t | v | ) |
Return true iff v is a link protocol version that this Tor implementation believes it can support.
Definition at line 2245 of file connection_or.c.
Referenced by channel_tls_process_versions_cell().
| void or_handshake_state_free_ | ( | or_handshake_state_t * | state | ) |
Free all storage held by state.
Definition at line 1984 of file connection_or.c.
| void or_handshake_state_record_cell | ( | or_connection_t * | conn, |
| or_handshake_state_t * | state, | ||
| const cell_t * | cell, | ||
| int | incoming | ||
| ) |
Remember that cell has been transmitted (if incoming is false) or received (if incoming is true) during a V3 handshake using state.
(We don't record the cell, but we keep a digest of everything sent or received during the v3 handshake, and the client signs it in an authenticate cell.)
Definition at line 2006 of file connection_or.c.
Referenced by channel_tls_handle_cell(), and connection_or_write_cell_to_buf().
| void or_handshake_state_record_var_cell | ( | or_connection_t * | conn, |
| or_handshake_state_t * | state, | ||
| const var_cell_t * | cell, | ||
| int | incoming | ||
| ) |
Remember that a variable-length cell has been transmitted (if incoming is false) or received (if incoming is true) during a V3 handshake using state.
(We don't record the cell, but we keep a digest of everything sent or received during the v3 handshake, and the client signs it in an authenticate cell.)
Definition at line 2047 of file connection_or.c.
Referenced by channel_tls_handle_var_cell(), connection_or_write_var_cell_to_buf(), and enter_v3_handshake_with_cell().
| or_connection_t * TO_OR_CONN | ( | connection_t * | c | ) |
Cast a connection_t * to an or_connection_t *.
Exit with an assertion failure if the input is not an or_connection_t.
Definition at line 104 of file connection_or.c.
Referenced by assert_connection_ok(), conn_close_if_marked(), connection_about_to_close_connection(), connection_bucket_read_limit(), connection_bucket_refill_single(), connection_bucket_write_limit(), connection_buckets_decrement(), connection_buf_read_from_socket(), connection_consider_empty_read_buckets(), connection_consider_empty_write_buckets(), connection_counts_as_relayed_traffic(), connection_ext_or_auth_handle_client_hash(), connection_ext_or_auth_handle_client_nonce(), connection_finished_connecting(), connection_finished_flushing(), connection_flushed_some(), connection_free_(), connection_free_minimal(), connection_handle_read_impl(), connection_handle_write_impl(), connection_init_accepted_conn(), connection_mark_all_noncontrol_connections(), connection_mark_for_close_(), connection_or_update_token_buckets(), connection_process_inbuf(), connection_reached_eof(), connection_unlink(), connection_write_to_buf_failed(), CONST_TO_OR_CONN(), dumpstats(), getinfo_helper_events(), hibernate_go_dormant(), kill_conn_list_for_oos(), oos_victim_comparator(), and run_connection_housekeeping().
| var_cell_t * var_cell_copy | ( | const var_cell_t * | src | ) |
Copy a var_cell_t
Definition at line 522 of file connection_or.c.
| void var_cell_free_ | ( | var_cell_t * | cell | ) |
Release all space held by cell.
Definition at line 541 of file connection_or.c.
| var_cell_t * var_cell_new | ( | uint16_t | payload_len | ) |
Allocate and return a new var_cell_t with payload_len bytes of payload space.
Definition at line 508 of file connection_or.c.
Referenced by connection_or_compute_authenticate_cell_body(), connection_or_send_auth_challenge_cell(), connection_or_send_certs_cell(), connection_or_send_versions(), and fetch_var_cell_from_buf().
| int var_cell_pack_header | ( | const var_cell_t * | cell, |
| char * | hdr_out, | ||
| int | wide_circ_ids | ||
| ) |
Write the header of cell into the first VAR_CELL_MAX_HEADER_SIZE bytes of hdr_out. Returns number of bytes used.
Definition at line 488 of file connection_or.c.
Referenced by connection_or_write_var_cell_to_buf(), and or_handshake_state_record_var_cell().