diff --git a/src/or/circuit.c b/src/or/circuit.c index cd87d59c7a..81944fd03b 100644 --- a/src/or/circuit.c +++ b/src/or/circuit.c @@ -334,7 +334,7 @@ circuit_t *circuit_get_newest(connection_t *conn, * the list. */ circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *start, - const char *digest, int purpose) + const char *digest, uint8_t purpose) { circuit_t *circ; if (start == NULL) diff --git a/src/or/connection.c b/src/or/connection.c index b6ed726c3e..3f0e5cbb5c 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -1026,8 +1026,9 @@ void assert_connection_ok(connection_t *conn, time_t now) } else { assert(!conn->socks_request); } - if(conn->type != CONN_TYPE_DIR) { - assert(!conn->purpose); /* only used for dir types currently */ + if(conn->type != CONN_TYPE_DIR && + conn->type != CONN_TYPE_AP) { + assert(!conn->purpose); /* only used for dir and ap types currently */ } switch(conn->type) diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index a253b77bd7..135ed98df6 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -817,8 +817,9 @@ int connection_ap_handshake_attach_circuit(connection_t *conn) { /* is one already on the way? */ circ = circuit_launch_new(desired_circuit_purpose, NULL); /* depending on purpose, store stuff into circ */ - if (desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL || - desired_circuit_purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND) { + if(circ && + (desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL || + desired_circuit_purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND)) { /* then write the service_id into circ */ strcpy(circ->rend_query, conn->rend_query); } @@ -964,6 +965,7 @@ int connection_ap_make_bridge(char *address, uint16_t port) { } conn->state = AP_CONN_STATE_CIRCUIT_WAIT; + conn->purpose = AP_PURPOSE_GENERAL; connection_start_reading(conn); /* attaching to a dirty circuit is fine */ diff --git a/src/or/or.h b/src/or/or.h index 43ca18bae6..bfff91be5b 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -176,7 +176,7 @@ #define AP_PURPOSE_RENDDESC_WAIT 2 #define AP_PURPOSE_RENDPOINT_WAIT 3 #define AP_PURPOSE_INTROPOINT_WAIT 4 -#define _AP_PURPOSE_MAX 3 +#define _AP_PURPOSE_MAX 4 #define _DIR_CONN_STATE_MIN 1 #define DIR_CONN_STATE_CONNECTING 1 @@ -699,7 +699,7 @@ circuit_t *circuit_get_by_conn(connection_t *conn); circuit_t *circuit_get_newest(connection_t *conn, int must_be_open, uint8_t conn_purpose); circuit_t *circuit_get_next_by_pk_and_purpose(circuit_t *circuit, - const char *servid, int purpose); + const char *servid, uint8_t purpose); circuit_t *circuit_get_rendezvous(const char *cookie); void circuit_expire_building(void); diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 8f8aa26795..bd775b4f6a 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -9,7 +9,7 @@ void rend_client_introcirc_is_ready(connection_t *apconn, circuit_t *circ) { - + log_fn(LOG_WARN,"introcirc is ready"); } /* send the rendezvous cell */ @@ -18,6 +18,7 @@ rend_client_rendcirc_is_ready(connection_t *apconn, circuit_t *circ) { + log_fn(LOG_WARN,"rendcirc is ready"); } /* bob sent us a rendezvous cell, join the circs. */