if (circ->purpose == new_purpose) return;
- /* Take specific actions if we are repurposing a hidden service circuit. */
- if (circuit_purpose_is_hidden_service(circ->purpose) &&
- !circuit_purpose_is_hidden_service(new_purpose)) {
- hs_circ_repurpose(circ);
- }
-
if (CIRCUIT_IS_ORIGIN(circ)) {
char old_purpose_desc[80] = "";
#include "feature/nodelist/describe.h"
#include "feature/nodelist/nodelist.h"
#include "feature/rend/rendservice.h"
-#include "feature/rend/rendcommon.h"
#include "feature/stats/rephist.h"
#include "lib/crypt_ops/crypto_dh.h"
#include "lib/crypt_ops/crypto_rand.h"
hs_circuitmap_remove_circuit(circ);
}
}
-
-/* The given circuit will be repurposed so take the appropriate actions. A
- * cleanup from the HS maps and of all HS related structures is done.
- *
- * Once this function returns, the circuit can be safely repurposed. */
-void
-hs_circ_repurpose(circuit_t *circ)
-{
- origin_circuit_t *origin_circ;
-
- tor_assert(circ);
-
- /* Only repurposing an origin circuit is possible for HS. */
- if (!CIRCUIT_IS_ORIGIN(circ)) {
- return;
- }
- origin_circ = TO_ORIGIN_CIRCUIT(circ);
-
- /* First, cleanup the circuit from the HS maps. */
- hs_circ_cleanup(circ);
-
- /* Depending on the version, different cleanup is done. */
- if (origin_circ->rend_data) {
- /* v2. */
- rend_circ_cleanup(origin_circ);
- } else if (origin_circ->hs_ident) {
- /* v3. */
- hs_ident_circuit_free(origin_circ->hs_ident);
- }
-}
/* Cleanup function when the circuit is closed or/and freed. */
void hs_circ_cleanup(circuit_t *circ);
-void hs_circ_repurpose(circuit_t *circ);
/* Circuit API. */
int hs_circ_service_intro_has_opened(hs_service_t *service,
match:
return 1;
}
-
-/* Cleanup the given circuit of all HS v2 data structure. */
-void
-rend_circ_cleanup(origin_circuit_t *circ)
-{
- tor_assert(circ);
-
- /* Both fields are set to NULL with these. */
- crypto_pk_free(circ->intro_key);
- rend_data_free(circ->rend_data);
-}
void assert_circ_anonymity_ok(const origin_circuit_t *circ,
const or_options_t *options);
-void rend_circ_cleanup(origin_circuit_t *circ);
-
#ifdef RENDCOMMON_PRIVATE
STATIC int