mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
create a separate connection_edge_destroy() function
svn:r1176
This commit is contained in:
parent
62d3df8633
commit
195ee8c845
@ -661,12 +661,12 @@ void circuit_close(circuit_t *circ) {
|
||||
if(circ->n_conn)
|
||||
connection_send_destroy(circ->n_circ_id, circ->n_conn);
|
||||
for(conn=circ->n_streams; conn; conn=conn->next_stream) {
|
||||
connection_send_destroy(circ->n_circ_id, conn);
|
||||
connection_edge_destroy(circ->n_circ_id, conn);
|
||||
}
|
||||
if(circ->p_conn)
|
||||
connection_send_destroy(circ->n_circ_id, circ->p_conn);
|
||||
for(conn=circ->p_streams; conn; conn=conn->next_stream) {
|
||||
connection_send_destroy(circ->p_circ_id, conn);
|
||||
connection_edge_destroy(circ->p_circ_id, conn);
|
||||
}
|
||||
if (circ->state == CIRCUIT_STATE_BUILDING ||
|
||||
circ->state == CIRCUIT_STATE_OR_WAIT) {
|
||||
|
@ -752,17 +752,7 @@ int connection_send_destroy(uint16_t circ_id, connection_t *conn) {
|
||||
cell_t cell;
|
||||
|
||||
assert(conn);
|
||||
|
||||
if(!connection_speaks_cells(conn)) {
|
||||
log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
|
||||
circ_id);
|
||||
conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */
|
||||
/* XXX really, we should separate this function into two functions.
|
||||
* one of them actually sends the destroy cell, as this function's name
|
||||
* implies, and another one destroys a stream. Yes/no? -RD */
|
||||
connection_mark_for_close(conn, END_STREAM_REASON_DESTROY);
|
||||
return 0;
|
||||
}
|
||||
assert(connection_speaks_cells(conn));
|
||||
|
||||
memset(&cell, 0, sizeof(cell_t));
|
||||
cell.circ_id = circ_id;
|
||||
|
@ -88,6 +88,16 @@ int connection_edge_process_inbuf(connection_t *conn) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int connection_edge_destroy(uint16_t circ_id, connection_t *conn) {
|
||||
assert(conn->type == CONN_TYPE_AP || conn->type == CONN_TYPE_EXIT);
|
||||
|
||||
log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
|
||||
circ_id);
|
||||
conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */
|
||||
connection_mark_for_close(conn, END_STREAM_REASON_DESTROY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *connection_edge_end_reason(char *payload, uint16_t length) {
|
||||
if(length < 1) {
|
||||
log_fn(LOG_WARN,"End cell arrived with length 0. Should be at least 1.");
|
||||
|
@ -698,6 +698,7 @@ void assert_connection_ok(connection_t *conn, time_t now);
|
||||
void relay_header_pack(char *dest, const relay_header_t *src);
|
||||
void relay_header_unpack(relay_header_t *dest, const char *src);
|
||||
int connection_edge_process_inbuf(connection_t *conn);
|
||||
int connection_edge_destroy(uint16_t circ_id, connection_t *conn);
|
||||
int connection_edge_end(connection_t *conn, char reason, crypt_path_t *cpath_layer);
|
||||
|
||||
int connection_edge_send_command(connection_t *fromconn, circuit_t *circ, int relay_command,
|
||||
|
Loading…
Reference in New Issue
Block a user