aboutsummaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/hs/hs_circuit.c16
-rw-r--r--src/feature/hs/hs_client.c5
2 files changed, 21 insertions, 0 deletions
diff --git a/src/feature/hs/hs_circuit.c b/src/feature/hs/hs_circuit.c
index f8a0e06d90..6c4e315e4e 100644
--- a/src/feature/hs/hs_circuit.c
+++ b/src/feature/hs/hs_circuit.c
@@ -131,6 +131,12 @@ finalize_rend_circuit(origin_circuit_t *circ, crypt_path_t *hop,
* so we can actually use it. */
circ->hs_circ_has_timed_out = 0;
+ /* If congestion control, transfer ccontrol onto the cpath. */
+ if (TO_CIRCUIT(circ)->ccontrol) {
+ hop->ccontrol = TO_CIRCUIT(circ)->ccontrol;
+ TO_CIRCUIT(circ)->ccontrol = NULL;
+ }
+
/* Append the hop to the cpath of this circuit */
cpath_extend_linked_list(&circ->cpath, hop);
@@ -416,6 +422,11 @@ launch_rendezvous_point_circuit,(const hs_service_t *service,
.sendme_inc_cells = congestion_control_sendme_inc(),
};
+ /* It is setup on the circuit in order to indicate that congestion control
+ * is enabled. It will be transferred to the RP crypt_path_t once the
+ * handshake is finalized in finalize_rend_circuit() because the final hop
+ * is not available until then. */
+
/* Initialize ccontrol for appropriate path type */
if (service->config.is_single_onion) {
TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params,
@@ -533,6 +544,11 @@ retry_service_rendezvous_point(const origin_circuit_t *circ)
.sendme_inc_cells = TO_CIRCUIT(circ)->ccontrol->sendme_inc,
};
+ /* It is setup on the circuit in order to indicate that congestion control
+ * is enabled. It will be transferred to the RP crypt_path_t once the
+ * handshake is finalized in finalize_rend_circuit() because the final hop
+ * is not available until then. */
+
/* As per above, in this case, we are a full 3 hop rend, even if we're a
* single-onion service */
if (get_options()->HSLayer3Nodes) {
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c
index eb68adfd76..c845a5a945 100644
--- a/src/feature/hs/hs_client.c
+++ b/src/feature/hs/hs_client.c
@@ -826,6 +826,11 @@ setup_rendezvous_circ_congestion_control(origin_circuit_t *circ)
if (circ_params.cc_enabled) {
circ_params.sendme_inc_cells = desc->encrypted_data.sendme_inc;
+ /* It is setup on the circuit in order to indicate that congestion control
+ * is enabled. It will be transferred to the RP crypt_path_t once the
+ * handshake is finalized in finalize_rend_circuit() because the final hop
+ * is not available until then. */
+
if (desc->encrypted_data.single_onion_service) {
TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params,
CC_PATH_ONION_SOS);