Code that is related to SENDME cells both in terms of creating/parsing cells and handling the content.
More...
|
STATIC int | get_emit_min_version (void) |
|
STATIC int | get_accept_min_version (void) |
|
static uint8_t * | pop_first_cell_digest (const circuit_t *circ) |
|
static bool | v1_digest_matches (const uint8_t *circ_digest, const uint8_t *cell_digest) |
|
static bool | cell_v1_is_valid (const sendme_cell_t *cell, const uint8_t *circ_digest) |
|
STATIC bool | cell_version_can_be_handled (uint8_t cell_version) |
|
STATIC bool | sendme_is_valid (const circuit_t *circ, const uint8_t *cell_payload, size_t cell_payload_len) |
|
STATIC ssize_t | build_cell_payload_v1 (const uint8_t *cell_digest, uint8_t *payload) |
|
static int | send_circuit_level_sendme (circuit_t *circ, crypt_path_t *layer_hint, const uint8_t *cell_digest) |
|
static void | record_cell_digest_on_circ (circuit_t *circ, const uint8_t *sendme_digest) |
|
STATIC bool | circuit_sendme_cell_is_next (int deliver_window, int sendme_inc) |
|
void | sendme_connection_edge_consider_sending (edge_connection_t *conn) |
|
void | sendme_circuit_consider_sending (circuit_t *circ, crypt_path_t *layer_hint) |
|
int | sendme_process_circuit_level (crypt_path_t *layer_hint, circuit_t *circ, const uint8_t *cell_payload, uint16_t cell_payload_len) |
|
int | sendme_process_circuit_level_impl (crypt_path_t *layer_hint, circuit_t *circ) |
|
int | sendme_process_stream_level (edge_connection_t *conn, circuit_t *circ, uint16_t cell_body_len) |
|
int | sendme_circuit_data_received (circuit_t *circ, crypt_path_t *layer_hint) |
|
int | sendme_stream_data_received (edge_connection_t *conn) |
|
int | sendme_note_circuit_data_packaged (circuit_t *circ, crypt_path_t *layer_hint) |
|
int | sendme_note_stream_data_packaged (edge_connection_t *conn, size_t len) |
|
void | sendme_record_cell_digest_on_circ (circuit_t *circ, crypt_path_t *cpath) |
|
void | sendme_record_received_cell_digest (circuit_t *circ, crypt_path_t *cpath) |
|
void | sendme_record_sending_cell_digest (circuit_t *circ, crypt_path_t *cpath) |
|
Code that is related to SENDME cells both in terms of creating/parsing cells and handling the content.
Definition in file sendme.c.
STATIC bool circuit_sendme_cell_is_next |
( |
int |
deliver_window, |
|
|
int |
sendme_inc |
|
) |
| |
Return true iff the next cell for the given cell window is expected to be a SENDME.
We are able to know that because the package or inflight window value minus one cell (the possible SENDME cell) should be a multiple of the cells-per-sendme increment value (set via consensus parameter, negotiated for the circuit, and passed in as sendme_inc).
This function is used when recording a cell digest and this is done quite low in the stack when decrypting or encrypting a cell. The window is only updated once the cell is actually put in the outbuf.
Definition at line 342 of file sendme.c.
Called when we've just received a relay data cell, when we've just finished flushing all bytes to stream conn, or when we've flushed some bytes to the stream conn.
If conn->outbuf is not too full, and our deliver window is low, send back a suitable number of stream-level sendme cells.
Definition at line 373 of file sendme.c.
Referenced by connection_edge_finished_flushing().