aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2017-07-31 17:59:12 +0300
committerNick Mathewson <nickm@torproject.org>2017-08-08 20:29:35 -0400
commit5c4f4acedb8600769889cdff0940806c27b679bd (patch)
treed0baa9c76f9f1319643ff2b3b38607f87cbab716
parent400ba2f636edf5afb14fe3b57f23d80e433d893d (diff)
downloadtor-5c4f4acedb8600769889cdff0940806c27b679bd.tar.gz
tor-5c4f4acedb8600769889cdff0940806c27b679bd.zip
prop224: Function to inc/decrement num rendezvous stream
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>
-rw-r--r--src/or/circuituse.c3
-rw-r--r--src/or/connection_edge.c10
-rw-r--r--src/or/hs_common.c34
-rw-r--r--src/or/hs_common.h3
4 files changed, 39 insertions, 11 deletions
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 66006542d0..21cc9c540f 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -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;
}
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 9f0cc061e1..12ddc7e829 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -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);
diff --git a/src/or/hs_common.c b/src/or/hs_common.c
index 2b637eb780..0d3d41b7cd 100644
--- a/src/or/hs_common.c
+++ b/src/or/hs_common.c
@@ -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();
+ }
+}
+
diff --git a/src/or/hs_common.h b/src/or/hs_common.h
index 5004e02088..fd2a1f4e32 100644
--- a/src/or/hs_common.h
+++ b/src/or/hs_common.h
@@ -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);