aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRobert Ransom <rransom.8774@gmail.com>2011-12-22 07:15:24 -0800
committerRobert Ransom <rransom.8774@gmail.com>2011-12-22 23:46:09 -0800
commit4c3a23b283774f02fbc35f70c72256c6469071d3 (patch)
tree6888a3030d50cd73141d9a3176adf7190a911646 /src/or
parent66f77561c0bb93bf768b2764137ab1b5e4fc04a4 (diff)
downloadtor-4c3a23b283774f02fbc35f70c72256c6469071d3.tar
tor-4c3a23b283774f02fbc35f70c72256c6469071d3.tar.gz
Look up the rend circ whose INTRODUCE1 is being ACKed correctly
This change cannibalizes circuit_get_by_rend_query_and_purpose because it had exactly one caller.
Diffstat (limited to 'src/or')
-rw-r--r--src/or/circuitlist.c22
-rw-r--r--src/or/circuitlist.h4
-rw-r--r--src/or/rendclient.c3
3 files changed, 16 insertions, 13 deletions
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 25b80f11f..350d8edc0 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -873,26 +873,30 @@ circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason)
}
}
-/** Return a circ such that:
- * - circ-\>rend_data-\>onion_address is equal to <b>rend_query</b>, and
- * - circ-\>purpose is equal to <b>purpose</b>.
+/** Return a circ such that
+ * - circ-\>rend_data-\>onion_address is equal to
+ * <b>rend_data</b>-\>onion_address,
+ * - circ-\>rend_data-\>rend_cookie is equal to
+ * <b>rend_data</b>-\>rend_cookie, and
+ * - circ-\>purpose is equal to CIRCUIT_PURPOSE_C_REND_READY.
*
* Return NULL if no such circuit exists.
*/
origin_circuit_t *
-circuit_get_by_rend_query_and_purpose(const char *rend_query, uint8_t purpose)
+circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data)
{
circuit_t *circ;
- tor_assert(CIRCUIT_PURPOSE_IS_ORIGIN(purpose));
-
for (circ = global_circuitlist; circ; circ = circ->next) {
if (!circ->marked_for_close &&
- circ->purpose == purpose) {
+ circ->purpose == CIRCUIT_PURPOSE_C_REND_READY) {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
if (ocirc->rend_data &&
- !rend_cmp_service_ids(rend_query,
- ocirc->rend_data->onion_address))
+ !rend_cmp_service_ids(rend_data->onion_address,
+ ocirc->rend_data->onion_address) &&
+ tor_memeq(ocirc->rend_data->rend_cookie,
+ rend_data->rend_cookie,
+ REND_COOKIE_LEN))
return ocirc;
}
}
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index 7b01ca3ae..dea2813ca 100644
--- a/src/or/circuitlist.h
+++ b/src/or/circuitlist.h
@@ -32,8 +32,8 @@ int circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn);
circuit_t *circuit_get_by_edge_conn(edge_connection_t *conn);
void circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason);
origin_circuit_t *circuit_get_by_global_id(uint32_t id);
-origin_circuit_t *circuit_get_by_rend_query_and_purpose(const char *rend_query,
- uint8_t purpose);
+origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data(
+ const rend_data_t *rend_data);
origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
const char *digest, uint8_t purpose);
or_circuit_t *circuit_get_rendezvous(const char *cookie);
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index d9b210ae3..84a9d4950 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -350,8 +350,7 @@ rend_client_introduction_acked(origin_circuit_t *circ,
* and tell it.
*/
log_info(LD_REND,"Received ack. Telling rend circ...");
- rendcirc = circuit_get_by_rend_query_and_purpose(
- circ->rend_data->onion_address, CIRCUIT_PURPOSE_C_REND_READY);
+ rendcirc = circuit_get_ready_rend_circ_by_rend_data(circ->rend_data);
if (rendcirc) { /* remember the ack */
#ifndef NON_ANONYMOUS_MODE_ENABLED
tor_assert(!(rendcirc->build_state->onehop_tunnel));