]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
prop224: Use the client-side circuitmap in hs_client.c
authorGeorge Kadianakis <desnacked@riseup.net>
Tue, 25 Jul 2017 09:17:20 +0000 (12:17 +0300)
committerDavid Goulet <dgoulet@torproject.org>
Thu, 24 Aug 2017 17:03:28 +0000 (13:03 -0400)
Signed-off-by: David Goulet <dgoulet@torproject.org>
src/or/circuitlist.c
src/or/circuitlist.h
src/or/hs_circuit.c
src/or/hs_client.c

index c2d947beae5795b28d9b366a464ed3ed8e6a1bc7..d891c89f38e584f55b7f9e6e6ab47b7f2215f4a2 100644 (file)
@@ -1498,33 +1498,6 @@ circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data)
   return NULL;
 }
 
-/* Return an origin circuit such that:
- *  - Identifier identity key matches,
- *  - Rendezvous cookie matches
- *  - Circuit is not marked for close
- *  - Circuit has purpose CIRCUIT_PURPOSE_C_REND_READY.
- *
- * Return NULL if no such circuit exits. */
-origin_circuit_t *
-circuit_get_ready_rend_by_hs_ident(const hs_ident_circuit_t *ident)
-{
-  SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) {
-    if (!circ->marked_for_close &&
-        circ->purpose == CIRCUIT_PURPOSE_C_REND_READY) {
-      origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
-      if (ocirc->hs_ident &&
-          ed25519_pubkey_eq(&ident->identity_pk,
-                            &ocirc->hs_ident->identity_pk) &&
-          tor_memeq(ident->rendezvous_cookie,
-                    ocirc->hs_ident->rendezvous_cookie,
-                    HS_REND_COOKIE_LEN)) {
-        return ocirc;
-      }
-    }
-  } SMARTLIST_FOREACH_END(circ);
-  return NULL;
-}
-
 /** Return the first service introduction circuit originating from the global
  * circuit list after <b>start</b> or at the start of the list if <b>start</b>
  * is NULL. Return NULL if no circuit is found.
index f2a3c4313410a4a6655310b4064c9de7431a6997..b882b2c6a8fdc097ea23e622def1936811ca9745 100644 (file)
@@ -46,8 +46,6 @@ void circuit_unlink_all_from_channel(channel_t *chan, int reason);
 origin_circuit_t *circuit_get_by_global_id(uint32_t id);
 origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data(
   const rend_data_t *rend_data);
-origin_circuit_t *circuit_get_ready_rend_by_hs_ident(
-  const hs_ident_circuit_t *ident);
 origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
                                      const uint8_t *digest, uint8_t purpose);
 origin_circuit_t *circuit_get_next_service_intro_circ(origin_circuit_t *start);
index ee453d0d522b6e25337391666677955ee06bd309..819d254327cae538440c28a84cd74f1d6e488cf5 100644 (file)
@@ -1070,6 +1070,10 @@ hs_circ_send_introduce1(origin_circuit_t *intro_circ,
     goto done;
   }
 
+  /* Register rend circuit in circuitmap */
+  hs_circuitmap_register_rend_circ_client_side(rend_circ,
+                              rend_circ->hs_ident->rendezvous_cookie);
+
   /* Success. */
   ret = 0;
   goto done;
index 337c7477d3255bd2ca4d3011a6e34551974d9c3a..56295507651c271f745fcee0dc84fc7534a9c165 100644 (file)
@@ -503,9 +503,9 @@ handle_introduce_ack_success(origin_circuit_t *intro_circ)
 
   log_info(LD_REND, "Received INTRODUCE_ACK ack! Informing rendezvous");
 
-  /* Get the rendezvous circuit matching this intro point circuit.
-   * XXX Replace this by our hs circuitmap to support client? */
-  rend_circ = circuit_get_ready_rend_by_hs_ident(intro_circ->hs_ident);
+  /* Get the rendezvous circuit for this rendezvous cookie. */
+  uint8_t *rendezvous_cookie = intro_circ->hs_ident->rendezvous_cookie;
+  rend_circ = hs_circuitmap_get_rend_circ_client_side(rendezvous_cookie);
   if (rend_circ == NULL) {
     log_warn(LD_REND, "Can't find any rendezvous circuit. Stopping");
     goto end;