DIGEST256MAP_FOREACH(desc->intro_points.map, key,
const hs_service_intro_point_t *, ip) {
circuit_t *circ;
- origin_circuit_t *ocirc;
- if (ip->base.is_only_legacy) {
- uint8_t digest[DIGEST_LEN];
- if (BUG(crypto_pk_get_digest(ip->legacy_key, (char *) digest) < 0)) {
- continue;
- }
- ocirc = hs_circuitmap_get_intro_circ_v2_service_side(digest);
- } else {
- ocirc =
- hs_circuitmap_get_intro_circ_v3_service_side(&ip->auth_key_kp.pubkey);
- }
+ origin_circuit_t *ocirc = hs_circ_service_get_intro_circ(ip);
if (ocirc == NULL) {
continue;
}
/* Public API */
/* ========== */
+/* Return an introduction point circuit matching the given intro point object.
+ * NULL is returned is no such circuit can be found. */
+origin_circuit_t *
+hs_circ_service_get_intro_circ(const hs_service_intro_point_t *ip)
+{
+ origin_circuit_t *circ = NULL;
+
+ tor_assert(ip);
+
+ if (ip->base.is_only_legacy) {
+ uint8_t digest[DIGEST_LEN];
+ if (BUG(crypto_pk_get_digest(ip->legacy_key, (char *) digest) < 0)) {
+ goto end;
+ }
+ circ = hs_circuitmap_get_intro_circ_v2_service_side(digest);
+ } else {
+ circ = hs_circuitmap_get_intro_circ_v3_service_side(
+ &ip->auth_key_kp.pubkey);
+ }
+ end:
+ return circ;
+}
+
/* Called when we fail building a rendezvous circuit at some point other than
* the last hop: launches a new circuit to the same rendezvous point. This
* supports legacy service. */
const uint8_t *rendezvous_cookie);
void hs_circ_retry_service_rendezvous_point(origin_circuit_t *circ);
+origin_circuit_t *hs_circ_service_get_intro_circ(
+ const hs_service_intro_point_t *ip);
+
/* Cell API. */
int hs_circ_handle_intro_established(const hs_service_t *service,
const hs_service_intro_point_t *ip,
return info;
}
-/* Return an introduction point circuit matching the given intro point object.
- * NULL is returned is no such circuit can be found. */
-static origin_circuit_t *
-get_intro_circuit(const hs_service_intro_point_t *ip)
-{
- origin_circuit_t *circ = NULL;
-
- tor_assert(ip);
-
- if (ip->base.is_only_legacy) {
- uint8_t digest[DIGEST_LEN];
- if (BUG(crypto_pk_get_digest(ip->legacy_key, (char *) digest) < 0)) {
- goto end;
- }
- circ = hs_circuitmap_get_intro_circ_v2_service_side(digest);
- } else {
- circ = hs_circuitmap_get_intro_circ_v3_service_side(
- &ip->auth_key_kp.pubkey);
- }
- end:
- return circ;
-}
-
/* Return the number of introduction points that are established for the
* given descriptor. */
static unsigned int
DIGEST256MAP_FOREACH(intro_points->map, key,
const hs_service_intro_point_t *, ip) {
- origin_circuit_t *ocirc = get_intro_circuit(ip);
+ origin_circuit_t *ocirc = hs_circ_service_get_intro_circ(ip);
if (ocirc) {
/* Reason is FINISHED because service has been removed and thus the
* circuit is considered old/uneeded. When freed, the circuit is removed
DIGEST256MAP_FOREACH_MODIFY(desc->intro_points.map, key,
hs_service_intro_point_t *, ip) {
const node_t *node = get_node_from_intro_point(ip);
- origin_circuit_t *ocirc = get_intro_circuit(ip);
+ origin_circuit_t *ocirc = hs_circ_service_get_intro_circ(ip);
int has_expired = intro_point_should_expire(ip, now);
/* We cleanup an intro point if it has expired or if we do not know the
/* Skip the intro point that already has an existing circuit
* (established or not). */
- if (get_intro_circuit(ip)) {
+ if (hs_circ_service_get_intro_circ(ip)) {
continue;
}