Loading src/feature/hs/hs_circuit.c +44 −42 Original line number Diff line number Diff line Loading @@ -416,30 +416,10 @@ launch_rendezvous_point_circuit,(const hs_service_t *service, tor_assert(circ->hs_ident); } /* Setup congestion control if asked by the client from the INTRO cell. */ if (data->cc_enabled) { circuit_params_t circ_params = { .cc_enabled = data->cc_enabled, .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, CC_PATH_ONION_SOS); } else { if (get_options()->HSLayer3Nodes) { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } hs_circ_setup_congestion_control(circ, congestion_control_sendme_inc(), service->config.is_single_onion); } end: Loading Loading @@ -538,26 +518,13 @@ retry_service_rendezvous_point(const origin_circuit_t *circ) new_circ->build_state->expiry_time = bstate->expiry_time; new_circ->hs_ident = hs_ident_circuit_dup(circ->hs_ident); if (TO_CIRCUIT(circ)->ccontrol != NULL) { circuit_params_t circ_params = { .cc_enabled = 1, .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. */ /* Setup congestion control if asked by the client from the INTRO cell. */ if (TO_CIRCUIT(circ)->ccontrol) { /* 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) { TO_CIRCUIT(new_circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(new_circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_SOS); } * single-onion service. */ hs_circ_setup_congestion_control(new_circ, TO_CIRCUIT(circ)->ccontrol->sendme_inc, false); } done: Loading Loading @@ -646,6 +613,41 @@ cleanup_on_free_client_circ(circuit_t *circ) /* Public API */ /* ========== */ /** Setup on the given circuit congestion control with the given parameters. * * This function assumes that congestion control is enabled on the network and * so it is the caller responsability to make sure of it. */ void hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, uint8_t sendme_inc, bool is_single_onion) { circuit_t *circ = NULL; circuit_params_t circ_params = {0}; tor_assert(origin_circ); /* Ease our lives */ circ = TO_CIRCUIT(origin_circ); circ_params.cc_enabled = true; circ_params.sendme_inc_cells = 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() for both client and service * because the final hop is not available until then. */ if (is_single_onion) { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_SOS); } else { if (get_options()->HSLayer3Nodes) { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } } /** Return an introduction point circuit matching the given intro point object. * NULL is returned is no such circuit can be found. */ origin_circuit_t * Loading src/feature/hs/hs_circuit.h +4 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,10 @@ int hs_circuit_setup_e2e_rend_circ_legacy_client(origin_circuit_t *circ, bool hs_circ_is_rend_sent_in_intro1(const origin_circuit_t *circ); void hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, uint8_t sendme_inc, bool is_single_onion); #ifdef HS_CIRCUIT_PRIVATE struct hs_ntor_rend_cell_keys_t; Loading src/feature/hs/hs_client.c +6 −24 Original line number Diff line number Diff line Loading @@ -801,8 +801,6 @@ client_intro_circ_has_opened(origin_circuit_t *circ) static void setup_rendezvous_circ_congestion_control(origin_circuit_t *circ) { circuit_params_t circ_params = {0}; tor_assert(circ); /* Setup congestion control parameters on the circuit. */ Loading @@ -821,29 +819,13 @@ setup_rendezvous_circ_congestion_control(origin_circuit_t *circ) return; } /* Take values from the consensus. */ circ_params.cc_enabled = congestion_control_enabled(); 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); } else { if (get_options()->HSLayer3Nodes) { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } /* If network doesn't enable it, do not setup. */ if (!congestion_control_enabled()) { return; } hs_circ_setup_congestion_control(circ, desc->encrypted_data.sendme_inc, desc->encrypted_data.single_onion_service); } /** Called when a rendezvous circuit has opened. */ Loading Loading
src/feature/hs/hs_circuit.c +44 −42 Original line number Diff line number Diff line Loading @@ -416,30 +416,10 @@ launch_rendezvous_point_circuit,(const hs_service_t *service, tor_assert(circ->hs_ident); } /* Setup congestion control if asked by the client from the INTRO cell. */ if (data->cc_enabled) { circuit_params_t circ_params = { .cc_enabled = data->cc_enabled, .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, CC_PATH_ONION_SOS); } else { if (get_options()->HSLayer3Nodes) { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } hs_circ_setup_congestion_control(circ, congestion_control_sendme_inc(), service->config.is_single_onion); } end: Loading Loading @@ -538,26 +518,13 @@ retry_service_rendezvous_point(const origin_circuit_t *circ) new_circ->build_state->expiry_time = bstate->expiry_time; new_circ->hs_ident = hs_ident_circuit_dup(circ->hs_ident); if (TO_CIRCUIT(circ)->ccontrol != NULL) { circuit_params_t circ_params = { .cc_enabled = 1, .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. */ /* Setup congestion control if asked by the client from the INTRO cell. */ if (TO_CIRCUIT(circ)->ccontrol) { /* 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) { TO_CIRCUIT(new_circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(new_circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_SOS); } * single-onion service. */ hs_circ_setup_congestion_control(new_circ, TO_CIRCUIT(circ)->ccontrol->sendme_inc, false); } done: Loading Loading @@ -646,6 +613,41 @@ cleanup_on_free_client_circ(circuit_t *circ) /* Public API */ /* ========== */ /** Setup on the given circuit congestion control with the given parameters. * * This function assumes that congestion control is enabled on the network and * so it is the caller responsability to make sure of it. */ void hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, uint8_t sendme_inc, bool is_single_onion) { circuit_t *circ = NULL; circuit_params_t circ_params = {0}; tor_assert(origin_circ); /* Ease our lives */ circ = TO_CIRCUIT(origin_circ); circ_params.cc_enabled = true; circ_params.sendme_inc_cells = 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() for both client and service * because the final hop is not available until then. */ if (is_single_onion) { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_SOS); } else { if (get_options()->HSLayer3Nodes) { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { circ->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } } /** Return an introduction point circuit matching the given intro point object. * NULL is returned is no such circuit can be found. */ origin_circuit_t * Loading
src/feature/hs/hs_circuit.h +4 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,10 @@ int hs_circuit_setup_e2e_rend_circ_legacy_client(origin_circuit_t *circ, bool hs_circ_is_rend_sent_in_intro1(const origin_circuit_t *circ); void hs_circ_setup_congestion_control(origin_circuit_t *origin_circ, uint8_t sendme_inc, bool is_single_onion); #ifdef HS_CIRCUIT_PRIVATE struct hs_ntor_rend_cell_keys_t; Loading
src/feature/hs/hs_client.c +6 −24 Original line number Diff line number Diff line Loading @@ -801,8 +801,6 @@ client_intro_circ_has_opened(origin_circuit_t *circ) static void setup_rendezvous_circ_congestion_control(origin_circuit_t *circ) { circuit_params_t circ_params = {0}; tor_assert(circ); /* Setup congestion control parameters on the circuit. */ Loading @@ -821,29 +819,13 @@ setup_rendezvous_circ_congestion_control(origin_circuit_t *circ) return; } /* Take values from the consensus. */ circ_params.cc_enabled = congestion_control_enabled(); 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); } else { if (get_options()->HSLayer3Nodes) { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION_VG); } else { TO_CIRCUIT(circ)->ccontrol = congestion_control_new(&circ_params, CC_PATH_ONION); } } /* If network doesn't enable it, do not setup. */ if (!congestion_control_enabled()) { return; } hs_circ_setup_congestion_control(circ, desc->encrypted_data.sendme_inc, desc->encrypted_data.single_onion_service); } /** Called when a rendezvous circuit has opened. */ Loading