]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
prop224: Function to inc/decrement num rendezvous stream
authorGeorge Kadianakis <desnacked@riseup.net>
Mon, 31 Jul 2017 14:59:12 +0000 (17:59 +0300)
committerNick Mathewson <nickm@torproject.org>
Wed, 9 Aug 2017 00:29:35 +0000 (20:29 -0400)
Add a common function for both legacy and prop224 hidden service to increment
and decrement the rendezvous stream counter on an origin circuit.

Signed-off-by: David Goulet <dgoulet@torproject.org>
src/or/circuituse.c
src/or/connection_edge.c
src/or/hs_common.c
src/or/hs_common.h

index 66006542d040cd898261de66003a8193ab68624c..21cc9c540f44a5a8339df41ec0aa6e1b747e859f 100644 (file)
@@ -1383,8 +1383,7 @@ circuit_detach_stream(circuit_t *circ, edge_connection_t *conn)
        * number of streams on the circuit associated with the rend service.
        */
       if (circ->purpose == CIRCUIT_PURPOSE_S_REND_JOINED) {
-        tor_assert(origin_circ->rend_data);
-        origin_circ->rend_data->nr_streams--;
+        hs_dec_rdv_stream_counter(origin_circ);
       }
       return;
     }
index 9f0cc061e15379698b206eb72a26c4f3fe4a6d45..12ddc7e8291bf096e41798e61135f31cbfdcea3c 100644 (file)
@@ -3139,15 +3139,7 @@ handle_hs_exit_conn(circuit_t *circ, edge_connection_t *conn)
   conn->on_circuit = circ;
   assert_circuit_ok(circ);
 
-  if (origin_circ->rend_data) {
-    origin_circ->rend_data->nr_streams++;
-  } else if (origin_circ->hs_ident) {
-    origin_circ->hs_ident->num_rdv_streams++;
-  } else {
-    /* The previous if/else at the start of the function guarantee that we'll
-     * never end up in a else situation unless it's freed in between. */
-    tor_assert(0);
-  }
+  hs_inc_rdv_stream_counter(origin_circ);
 
   /* Connect tor to the hidden service destination. */
   connection_exit_connect(conn);
index 2b637eb780cc4badad5d6c920f82b8349ce0390d..0d3d41b7cd2faaa9e8a50deaf22c0e83111a019c 100644 (file)
@@ -1333,3 +1333,37 @@ hs_free_all(void)
   hs_cache_free_all();
 }
 
+/* For the given origin circuit circ, decrement the number of rendezvous
+ * stream counter. This handles every hidden service version. */
+void
+hs_dec_rdv_stream_counter(origin_circuit_t *circ)
+{
+  tor_assert(circ);
+
+  if (circ->rend_data) {
+    circ->rend_data->nr_streams--;
+  } else if (circ->hs_ident) {
+    circ->hs_ident->num_rdv_streams--;
+  } else {
+    /* Should not be called if this circuit is not for hidden service. */
+    tor_assert_nonfatal_unreached();
+  }
+}
+
+/* For the given origin circuit circ, increment the number of rendezvous
+ * stream counter. This handles every hidden service version. */
+void
+hs_inc_rdv_stream_counter(origin_circuit_t *circ)
+{
+  tor_assert(circ);
+
+  if (circ->rend_data) {
+    circ->rend_data->nr_streams++;
+  } else if (circ->hs_ident) {
+    circ->hs_ident->num_rdv_streams++;
+  } else {
+    /* Should not be called if this circuit is not for hidden service. */
+    tor_assert_nonfatal_unreached();
+  }
+}
+
index 5004e020881b593325a7e29977ebe1741c66658c..fd2a1f4e3213761aebd6aede44b5dcfa416eccbc 100644 (file)
@@ -222,6 +222,9 @@ void hs_get_responsible_hsdirs(const ed25519_public_key_t *blinded_pk,
 
 int hs_set_conn_addr_port(const smartlist_t *ports, edge_connection_t *conn);
 
+void hs_inc_rdv_stream_counter(origin_circuit_t *circ);
+void hs_dec_rdv_stream_counter(origin_circuit_t *circ);
+
 #ifdef HS_COMMON_PRIVATE
 
 STATIC void get_disaster_srv(uint64_t time_period_num, uint8_t *srv_out);