Tor
0.4.7.0-alpha-dev
|
Header file for relay.c. More...
Go to the source code of this file.
Macros | |
#define | CONTROL_CELL_ID 0 |
#define | relay_send_command_from_edge(stream_id, circ, relay_command, payload, payload_len, cpath_layer) |
#define | packed_cell_free(cell) FREE_AND_NULL(packed_cell_t, packed_cell_free_, (cell)) |
#define | update_circuit_on_cmux(circ, direction) update_circuit_on_cmux_((circ), (direction), SHORT_FILE__, __LINE__) |
Functions | |
void | relay_consensus_has_changed (const networkstatus_t *ns) |
int | circuit_receive_relay_cell (cell_t *cell, circuit_t *circ, cell_direction_t cell_direction) |
size_t | cell_queues_get_total_allocation (void) |
void | relay_header_pack (uint8_t *dest, const relay_header_t *src) |
void | relay_header_unpack (relay_header_t *dest, const uint8_t *src) |
int | relay_send_command_from_edge_ (streamid_t stream_id, circuit_t *circ, uint8_t relay_command, const char *payload, size_t payload_len, crypt_path_t *cpath_layer, const char *filename, int lineno) |
int | connection_edge_send_command (edge_connection_t *fromconn, uint8_t relay_command, const char *payload, size_t payload_len) |
int | connection_edge_package_raw_inbuf (edge_connection_t *conn, int package_partial, int *max_cells) |
void | connection_edge_consider_sending_sendme (edge_connection_t *conn) |
void | circuit_reset_sendme_randomness (circuit_t *circ) |
void | dump_cell_pool_usage (int severity) |
size_t | packed_cell_mem_cost (void) |
int | have_been_under_memory_pressure (void) |
void | packed_cell_free_ (packed_cell_t *cell) |
void | cell_queue_init (cell_queue_t *queue) |
void | cell_queue_clear (cell_queue_t *queue) |
void | cell_queue_append (cell_queue_t *queue, packed_cell_t *cell) |
void | cell_queue_append_packed_copy (circuit_t *circ, cell_queue_t *queue, int exitward, const cell_t *cell, int wide_circ_ids, int use_stats) |
void | append_cell_to_circuit_queue (circuit_t *circ, channel_t *chan, cell_t *cell, cell_direction_t direction, streamid_t fromstream) |
void | destroy_cell_queue_init (destroy_cell_queue_t *queue) |
void | destroy_cell_queue_clear (destroy_cell_queue_t *queue) |
void | destroy_cell_queue_append (destroy_cell_queue_t *queue, circid_t circid, uint8_t reason) |
void | channel_unlink_all_circuits (channel_t *chan, smartlist_t *detached_out) |
int | channel_flush_from_first_active_circuit (channel_t *chan, int max) |
int | circuit_package_relay_cell (cell_t *cell, circuit_t *circ, cell_direction_t cell_direction, crypt_path_t *layer_hint, streamid_t on_stream, const char *filename, int lineno) |
void | update_circuit_on_cmux_ (circuit_t *circ, cell_direction_t direction, const char *file, int lineno) |
int | append_address_to_payload (uint8_t *payload_out, const tor_addr_t *addr) |
const uint8_t * | decode_address_from_payload (tor_addr_t *addr_out, const uint8_t *payload, int payload_len) |
void | circuit_clear_cell_queue (circuit_t *circ, channel_t *chan) |
circid_t | packed_cell_get_circid (const packed_cell_t *cell, int wide_circ_ids) |
uint8_t | packed_cell_get_command (const packed_cell_t *cell, int wide_circ_ids) |
Variables | |
uint64_t | stats_n_relay_cells_relayed |
uint64_t | stats_n_relay_cells_delivered |
uint64_t | stats_n_circ_max_cell_reached |
uint64_t | stats_n_data_cells_packaged |
uint64_t | stats_n_data_bytes_packaged |
uint64_t | stats_n_data_cells_received |
uint64_t | stats_n_data_bytes_received |
uint64_t | oom_stats_n_bytes_removed_dns |
uint64_t | oom_stats_n_bytes_removed_cell |
uint64_t | oom_stats_n_bytes_removed_geoip |
uint64_t | oom_stats_n_bytes_removed_hsdir |
#define relay_send_command_from_edge | ( | stream_id, | |
circ, | |||
relay_command, | |||
payload, | |||
payload_len, | |||
cpath_layer | |||
) |
int append_address_to_payload | ( | uint8_t * | payload_out, |
const tor_addr_t * | addr | ||
) |
Append an encoded value of addr to payload_out, which must have at least 18 bytes of free space. The encoding is, as specified in tor-spec.txt: RESOLVED_TYPE_IPV4 or RESOLVED_TYPE_IPV6 [1 byte] LENGTH [1 byte] ADDRESS [length bytes] Return the number of bytes added, or -1 on error
void append_cell_to_circuit_queue | ( | circuit_t * | circ, |
channel_t * | chan, | ||
cell_t * | cell, | ||
cell_direction_t | direction, | ||
streamid_t | fromstream | ||
) |
void cell_queue_append | ( | cell_queue_t * | queue, |
packed_cell_t * | cell | ||
) |
Append cell to the end of queue.
Definition at line 2558 of file relay.c.
Referenced by cell_queue_append_packed_copy().
void cell_queue_append_packed_copy | ( | circuit_t * | circ, |
cell_queue_t * | queue, | ||
int | exitward, | ||
const cell_t * | cell, | ||
int | wide_circ_ids, | ||
int | use_stats | ||
) |
void cell_queue_clear | ( | cell_queue_t * | queue | ) |
Remove and free every cell in queue.
Definition at line 2593 of file relay.c.
Referenced by circuit_clear_cell_queue().
void cell_queue_init | ( | cell_queue_t * | queue | ) |
Initialize queue as an empty cell queue.
Definition at line 2585 of file relay.c.
Referenced by init_circuit_base().
int channel_flush_from_first_active_circuit | ( | channel_t * | chan, |
int | max | ||
) |
void channel_unlink_all_circuits | ( | channel_t * | chan, |
smartlist_t * | circuits_out | ||
) |
Remove all circuits from the cmux on chan.
If circuits_out is non-NULL, add all detached circuits to circuits_out.
Definition at line 2826 of file relay.c.
Referenced by circuit_unlink_all_from_channel().
Remove all the cells queued on circ for chan.
Definition at line 3257 of file relay.c.
Referenced by circuit_about_to_free_atexit().
int circuit_package_relay_cell | ( | cell_t * | cell, |
circuit_t * | circ, | ||
cell_direction_t | cell_direction, | ||
crypt_path_t * | layer_hint, | ||
streamid_t | on_stream, | ||
const char * | filename, | ||
int | lineno | ||
) |
int circuit_receive_relay_cell | ( | cell_t * | cell, |
circuit_t * | circ, | ||
cell_direction_t | cell_direction | ||
) |
Receive a relay cell:
Return -reason on failure.
void circuit_reset_sendme_randomness | ( | circuit_t * | circ | ) |
Called when initializing a circuit, or when we have reached the end of the window in which we need to send some randomness so that incoming sendme cells will be unpredictable. Resets the flags and picks a new window.
Definition at line 2070 of file relay.c.
Referenced by init_circuit_base().
int connection_edge_package_raw_inbuf | ( | edge_connection_t * | conn, |
int | package_partial, | ||
int * | max_cells | ||
) |
If conn has an entire relay payload of bytes on its inbuf (or package_partial is true), and the appropriate package windows aren't empty, grab a cell and send it down the circuit.
If *max_cells is given, package no more than max_cells. Decrement *max_cells by the number of cells packaged.
Return -1 (and send a RELAY_COMMAND_END cell if necessary) if conn should be marked for close, else return 0.
int connection_edge_send_command | ( | edge_connection_t * | fromconn, |
uint8_t | relay_command, | ||
const char * | payload, | ||
size_t | payload_len | ||
) |
Make a relay cell out of relay_command and payload, and send it onto the open circuit circ. fromconn is the stream that's sending the relay cell, or NULL if it's a control cell. cpath_layer is NULL for OR->OP cells, or the destination hop for OP->OR cells.
If you can't send the cell, mark the circuit for close and return -1. Else return 0.
const uint8_t* decode_address_from_payload | ( | tor_addr_t * | addr_out, |
const uint8_t * | payload, | ||
int | payload_len | ||
) |
Given payload_len bytes at payload, starting with an address encoded as by append_address_to_payload(), try to decode the address into *addr_out. Return the next byte in the payload after the address on success, or NULL on failure.
void destroy_cell_queue_append | ( | destroy_cell_queue_t * | queue, |
circid_t | circid, | ||
uint8_t | reason | ||
) |
void destroy_cell_queue_clear | ( | destroy_cell_queue_t * | queue | ) |
void destroy_cell_queue_init | ( | destroy_cell_queue_t * | queue | ) |
void dump_cell_pool_usage | ( | int | severity | ) |
Log current statistics for cell pool allocation at log level severity.
Definition at line 2531 of file relay.c.
Referenced by dumpmemusage().
int have_been_under_memory_pressure | ( | void | ) |
void packed_cell_free_ | ( | packed_cell_t * | cell | ) |
circid_t packed_cell_get_circid | ( | const packed_cell_t * | cell, |
int | wide_circ_ids | ||
) |
uint8_t packed_cell_get_command | ( | const packed_cell_t * | cell, |
int | wide_circ_ids | ||
) |
Extract the command from a packed cell.
Definition at line 2892 of file relay.c.
Referenced by write_packed_cell().
size_t packed_cell_mem_cost | ( | void | ) |
void relay_header_pack | ( | uint8_t * | dest, |
const relay_header_t * | src | ||
) |
Pack the relay_header_t host-order structure src into network-order in the buffer dest. See tor-spec.txt for details about the wire format.
Definition at line 478 of file relay.c.
Referenced by relay_set_digest().
void relay_header_unpack | ( | relay_header_t * | dest, |
const uint8_t * | src | ||
) |
Unpack the network-order buffer src into a host-order relay_header_t structure dest.
Definition at line 491 of file relay.c.
Referenced by connection_exit_begin_conn(), connection_exit_begin_resolve(), pathbias_check_probe_response(), pathbias_count_valid_cells(), relay_lookup_conn(), and relay_set_digest().
int relay_send_command_from_edge_ | ( | streamid_t | stream_id, |
circuit_t * | circ, | ||
uint8_t | relay_command, | ||
const char * | payload, | ||
size_t | payload_len, | ||
crypt_path_t * | cpath_layer, | ||
const char * | filename, | ||
int | lineno | ||
) |
Make a relay cell out of relay_command and payload, and send it onto the open circuit circ. stream_id is the ID on circ for the stream that's sending the relay cell, or 0 if it's a control cell. cpath_layer is NULL for OR->OP cells, or the destination hop for OP->OR cells.
If you can't send the cell, mark the circuit for close and return -1. Else return 0.
void update_circuit_on_cmux_ | ( | circuit_t * | circ, |
cell_direction_t | direction, | ||
const char * | file, | ||
int | lineno | ||
) |
|
extern |
|
extern |
Stats: how many circuits have we closed due to the cell queue limit being reached (see append_cell_to_circuit_queue())
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |