diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/connection_edge.c | 9 | ||||
-rw-r--r-- | src/or/or.h | 2 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index acae44e61..4f0a25b99 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -106,7 +106,12 @@ int connection_edge_process_data_cell(cell_t *cell, circuit_t *circ, int edge_ty circuit_consider_sending_sendme(circ, edge_type); - for(conn = circ->p_conn; conn && conn->topic_id != topic_id; conn = conn->next_topic) ; + if(edge_type == EDGE_AP) + conn = circ->p_conn; + else + conn = circ->n_conn; + + for( ; conn && conn->topic_id != topic_id; conn = conn->next_topic) ; /* now conn is either NULL, in which case we don't recognize the topic_id, or * it is set, in which case cell is talking about this conn. @@ -247,7 +252,7 @@ int connection_edge_finished_flushing(connection_t *conn) { if(connection_wants_to_flush(conn)) /* in case there are any queued data cells */ connection_start_writing(conn); return - connection_exit_send_connected(conn) || /* deliver a 'connected' data cell back through the circuit. */ + connection_edge_send_command(conn, circuit_get_by_conn(conn), TOPIC_COMMAND_CONNECTED) || /* deliver a 'connected' data cell back through the circuit. */ connection_process_inbuf(conn); /* in case the server has written anything */ case AP_CONN_STATE_OPEN: case EXIT_CONN_STATE_OPEN: diff --git a/src/or/or.h b/src/or/or.h index df7d4085c..67606aae5 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -624,7 +624,7 @@ int connection_ap_handle_listener_read(connection_t *conn); /********************************* connection_edge.c ***************************/ int connection_edge_process_inbuf(connection_t *conn); -int connection_edge_send_command(connection_t *conn, int topic_command); +int connection_edge_send_command(connection_t *conn, circuit_t *circ, int topic_command); int connection_edge_process_data_cell(cell_t *cell, circuit_t *circ, int edge_type); int connection_edge_finished_flushing(connection_t *conn); |