mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 13:53:31 +01:00
Extract extend_info manipulation functions into a new file.
This commit is contained in:
parent
56e33f73f1
commit
8f362b7bce
@ -145,6 +145,7 @@ problem function-size /src/core/or/connection_or.c:connection_or_group_set_badne
|
||||
problem function-size /src/core/or/connection_or.c:connection_or_client_learned_peer_id() 142
|
||||
problem dependency-violation /src/core/or/connection_or.c 21
|
||||
problem dependency-violation /src/core/or/dos.c 6
|
||||
problem dependency-violation /src/core/or/extendinfo.c 6
|
||||
problem dependency-violation /src/core/or/onion.c 2
|
||||
problem file-size /src/core/or/or.h 1150
|
||||
problem include-count /src/core/or/or.h 48
|
||||
|
@ -31,7 +31,7 @@
|
||||
**/
|
||||
|
||||
#include "core/or/or.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/crypto/onion_crypto.h"
|
||||
#include "core/crypto/onion_fast.h"
|
||||
#include "core/crypto/onion_ntor.h"
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "core/or/command.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "core/or/connection_or.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/onion.h"
|
||||
#include "core/or/ocirc_event.h"
|
||||
#include "core/or/policies.h"
|
||||
@ -78,9 +79,6 @@
|
||||
#include "feature/nodelist/node_st.h"
|
||||
#include "core/or/or_circuit_st.h"
|
||||
#include "core/or/origin_circuit_st.h"
|
||||
#include "feature/nodelist/microdesc_st.h"
|
||||
#include "feature/nodelist/routerinfo_st.h"
|
||||
#include "feature/nodelist/routerstatus_st.h"
|
||||
|
||||
static int circuit_send_first_onion_skin(origin_circuit_t *circ);
|
||||
static int circuit_build_no_more_hops(origin_circuit_t *circ);
|
||||
@ -2462,143 +2460,6 @@ onion_extend_cpath(origin_circuit_t *circ)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Allocate a new extend_info object based on the various arguments. */
|
||||
extend_info_t *
|
||||
extend_info_new(const char *nickname,
|
||||
const char *rsa_id_digest,
|
||||
const ed25519_public_key_t *ed_id,
|
||||
crypto_pk_t *onion_key,
|
||||
const curve25519_public_key_t *ntor_key,
|
||||
const tor_addr_t *addr, uint16_t port)
|
||||
{
|
||||
extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t));
|
||||
memcpy(info->identity_digest, rsa_id_digest, DIGEST_LEN);
|
||||
if (ed_id && !ed25519_public_key_is_zero(ed_id))
|
||||
memcpy(&info->ed_identity, ed_id, sizeof(ed25519_public_key_t));
|
||||
if (nickname)
|
||||
strlcpy(info->nickname, nickname, sizeof(info->nickname));
|
||||
if (onion_key)
|
||||
info->onion_key = crypto_pk_dup_key(onion_key);
|
||||
if (ntor_key)
|
||||
memcpy(&info->curve25519_onion_key, ntor_key,
|
||||
sizeof(curve25519_public_key_t));
|
||||
tor_addr_copy(&info->addr, addr);
|
||||
info->port = port;
|
||||
return info;
|
||||
}
|
||||
|
||||
/** Allocate and return a new extend_info that can be used to build a
|
||||
* circuit to or through the node <b>node</b>. Use the primary address
|
||||
* of the node (i.e. its IPv4 address) unless
|
||||
* <b>for_direct_connect</b> is true, in which case the preferred
|
||||
* address is used instead. May return NULL if there is not enough
|
||||
* info about <b>node</b> to extend to it--for example, if the preferred
|
||||
* routerinfo_t or microdesc_t is missing, or if for_direct_connect is
|
||||
* true and none of the node's addresses is allowed by tor's firewall
|
||||
* and IP version config.
|
||||
**/
|
||||
extend_info_t *
|
||||
extend_info_from_node(const node_t *node, int for_direct_connect)
|
||||
{
|
||||
crypto_pk_t *rsa_pubkey = NULL;
|
||||
extend_info_t *info = NULL;
|
||||
tor_addr_port_t ap;
|
||||
int valid_addr = 0;
|
||||
|
||||
if (!node_has_preferred_descriptor(node, for_direct_connect)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Choose a preferred address first, but fall back to an allowed address. */
|
||||
if (for_direct_connect)
|
||||
fascist_firewall_choose_address_node(node, FIREWALL_OR_CONNECTION, 0, &ap);
|
||||
else {
|
||||
node_get_prim_orport(node, &ap);
|
||||
}
|
||||
valid_addr = tor_addr_port_is_valid_ap(&ap, 0);
|
||||
|
||||
if (valid_addr)
|
||||
log_debug(LD_CIRC, "using %s for %s",
|
||||
fmt_addrport(&ap.addr, ap.port),
|
||||
node->ri ? node->ri->nickname : node->rs->nickname);
|
||||
else
|
||||
log_warn(LD_CIRC, "Could not choose valid address for %s",
|
||||
node->ri ? node->ri->nickname : node->rs->nickname);
|
||||
|
||||
/* Every node we connect or extend to must support ntor */
|
||||
if (!node_has_curve25519_onion_key(node)) {
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_CIRC,
|
||||
"Attempted to create extend_info for a node that does not support "
|
||||
"ntor: %s", node_describe(node));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const ed25519_public_key_t *ed_pubkey = NULL;
|
||||
|
||||
/* Don't send the ed25519 pubkey unless the target node actually supports
|
||||
* authenticating with it. */
|
||||
if (node_supports_ed25519_link_authentication(node, 0)) {
|
||||
log_info(LD_CIRC, "Including Ed25519 ID for %s", node_describe(node));
|
||||
ed_pubkey = node_get_ed25519_id(node);
|
||||
} else if (node_get_ed25519_id(node)) {
|
||||
log_info(LD_CIRC, "Not including the ed25519 ID for %s, since it won't "
|
||||
"be able to authenticate it.",
|
||||
node_describe(node));
|
||||
}
|
||||
|
||||
/* Retrieve the curve25519 pubkey. */
|
||||
const curve25519_public_key_t *curve_pubkey =
|
||||
node_get_curve25519_onion_key(node);
|
||||
rsa_pubkey = node_get_rsa_onion_key(node);
|
||||
|
||||
if (valid_addr && node->ri) {
|
||||
info = extend_info_new(node->ri->nickname,
|
||||
node->identity,
|
||||
ed_pubkey,
|
||||
rsa_pubkey,
|
||||
curve_pubkey,
|
||||
&ap.addr,
|
||||
ap.port);
|
||||
} else if (valid_addr && node->rs && node->md) {
|
||||
info = extend_info_new(node->rs->nickname,
|
||||
node->identity,
|
||||
ed_pubkey,
|
||||
rsa_pubkey,
|
||||
curve_pubkey,
|
||||
&ap.addr,
|
||||
ap.port);
|
||||
}
|
||||
|
||||
crypto_pk_free(rsa_pubkey);
|
||||
return info;
|
||||
}
|
||||
|
||||
/** Release storage held by an extend_info_t struct. */
|
||||
void
|
||||
extend_info_free_(extend_info_t *info)
|
||||
{
|
||||
if (!info)
|
||||
return;
|
||||
crypto_pk_free(info->onion_key);
|
||||
tor_free(info);
|
||||
}
|
||||
|
||||
/** Allocate and return a new extend_info_t with the same contents as
|
||||
* <b>info</b>. */
|
||||
extend_info_t *
|
||||
extend_info_dup(extend_info_t *info)
|
||||
{
|
||||
extend_info_t *newinfo;
|
||||
tor_assert(info);
|
||||
newinfo = tor_malloc(sizeof(extend_info_t));
|
||||
memcpy(newinfo, info, sizeof(extend_info_t));
|
||||
if (info->onion_key)
|
||||
newinfo->onion_key = crypto_pk_dup_key(info->onion_key);
|
||||
else
|
||||
newinfo->onion_key = NULL;
|
||||
return newinfo;
|
||||
}
|
||||
|
||||
/** Return the node_t for the chosen exit router in <b>state</b>.
|
||||
* If there is no chosen exit, or if we don't know the node_t for
|
||||
* the chosen exit, return NULL.
|
||||
@ -2634,43 +2495,6 @@ build_state_get_exit_nickname(cpath_build_state_t *state)
|
||||
return state->chosen_exit->nickname;
|
||||
}
|
||||
|
||||
/** Return true iff the given address can be used to extend to. */
|
||||
int
|
||||
extend_info_addr_is_allowed(const tor_addr_t *addr)
|
||||
{
|
||||
tor_assert(addr);
|
||||
|
||||
/* Check if we have a private address and if we can extend to it. */
|
||||
if ((tor_addr_is_internal(addr, 0) || tor_addr_is_multicast(addr)) &&
|
||||
!get_options()->ExtendAllowPrivateAddresses) {
|
||||
goto disallow;
|
||||
}
|
||||
/* Allowed! */
|
||||
return 1;
|
||||
disallow:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Does ei have a valid TAP key? */
|
||||
int
|
||||
extend_info_supports_tap(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
/* Valid TAP keys are not NULL */
|
||||
return ei->onion_key != NULL;
|
||||
}
|
||||
|
||||
/* Does ei have a valid ntor key? */
|
||||
int
|
||||
extend_info_supports_ntor(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
/* Valid ntor keys have at least one non-zero byte */
|
||||
return !fast_mem_is_zero(
|
||||
(const char*)ei->curve25519_onion_key.public_key,
|
||||
CURVE25519_PUBKEY_LEN);
|
||||
}
|
||||
|
||||
/* Is circuit purpose allowed to use the deprecated TAP encryption protocol?
|
||||
* The hidden service protocol still uses TAP for some connections, because
|
||||
* ntor onion keys aren't included in HS descriptors or INTRODUCE cells. */
|
||||
@ -2705,15 +2529,6 @@ circuit_has_usable_onion_key(const origin_circuit_t *circ)
|
||||
circuit_can_use_tap(circ));
|
||||
}
|
||||
|
||||
/* Does ei have an onion key which it would prefer to use?
|
||||
* Currently, we prefer ntor keys*/
|
||||
int
|
||||
extend_info_has_preferred_onion_key(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
return extend_info_supports_ntor(ei);
|
||||
}
|
||||
|
||||
/** Find the circuits that are waiting to find out whether their guards are
|
||||
* usable, and if any are ready to become usable, mark them open and try
|
||||
* attaching streams as appropriate. */
|
||||
|
@ -42,23 +42,8 @@ MOCK_DECL(int, circuit_all_predicted_ports_handled, (time_t now,
|
||||
|
||||
int circuit_append_new_exit(origin_circuit_t *circ, extend_info_t *info);
|
||||
int circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *info);
|
||||
extend_info_t *extend_info_new(const char *nickname,
|
||||
const char *rsa_id_digest,
|
||||
const struct ed25519_public_key_t *ed_id,
|
||||
crypto_pk_t *onion_key,
|
||||
const struct curve25519_public_key_t *ntor_key,
|
||||
const tor_addr_t *addr, uint16_t port);
|
||||
extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect);
|
||||
extend_info_t *extend_info_dup(extend_info_t *info);
|
||||
void extend_info_free_(extend_info_t *info);
|
||||
#define extend_info_free(info) \
|
||||
FREE_AND_NULL(extend_info_t, extend_info_free_, (info))
|
||||
int extend_info_addr_is_allowed(const tor_addr_t *addr);
|
||||
int extend_info_supports_tap(const extend_info_t* ei);
|
||||
int extend_info_supports_ntor(const extend_info_t* ei);
|
||||
int circuit_can_use_tap(const origin_circuit_t *circ);
|
||||
int circuit_has_usable_onion_key(const origin_circuit_t *circ);
|
||||
int extend_info_has_preferred_onion_key(const extend_info_t* ei);
|
||||
const uint8_t *build_state_get_exit_rsa_id(cpath_build_state_t *state);
|
||||
MOCK_DECL(const node_t *,
|
||||
build_state_get_exit_node,(cpath_build_state_t *state));
|
||||
|
@ -64,6 +64,7 @@
|
||||
#include "core/or/circuitstats.h"
|
||||
#include "core/or/circuitpadding.h"
|
||||
#include "core/or/crypt_path.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/mainloop/connection.h"
|
||||
#include "app/config/config.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/circuitpadding.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/policies.h"
|
||||
#include "feature/client/addressmap.h"
|
||||
#include "feature/client/bridges.h"
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "core/crypto/onion_crypto.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
|
||||
#include "lib/crypt_ops/crypto_dh.h"
|
||||
#include "lib/crypt_ops/crypto_util.h"
|
||||
@ -259,4 +260,3 @@ cpath_get_n_hops(crypt_path_t **head_ptr)
|
||||
}
|
||||
|
||||
#endif /* defined(TOR_UNIT_TESTS) */
|
||||
|
||||
|
209
src/core/or/extendinfo.c
Normal file
209
src/core/or/extendinfo.c
Normal file
@ -0,0 +1,209 @@
|
||||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2020, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
* @file extendinfo.c
|
||||
* @brief Functions for creating and using extend_info_t objects.
|
||||
*
|
||||
* An extend_info_t is the information we hold about a relay in order to
|
||||
* extend a circuit to it.
|
||||
**/
|
||||
|
||||
#include "core/or/or.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
|
||||
#include "app/config/config.h"
|
||||
#include "core/or/policies.h"
|
||||
#include "feature/nodelist/describe.h"
|
||||
#include "feature/nodelist/nodelist.h"
|
||||
|
||||
#include "core/or/extend_info_st.h"
|
||||
#include "feature/nodelist/node_st.h"
|
||||
#include "feature/nodelist/routerinfo_st.h"
|
||||
#include "feature/nodelist/routerstatus_st.h"
|
||||
|
||||
/** Allocate a new extend_info object based on the various arguments. */
|
||||
extend_info_t *
|
||||
extend_info_new(const char *nickname,
|
||||
const char *rsa_id_digest,
|
||||
const ed25519_public_key_t *ed_id,
|
||||
crypto_pk_t *onion_key,
|
||||
const curve25519_public_key_t *ntor_key,
|
||||
const tor_addr_t *addr, uint16_t port)
|
||||
{
|
||||
extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t));
|
||||
memcpy(info->identity_digest, rsa_id_digest, DIGEST_LEN);
|
||||
if (ed_id && !ed25519_public_key_is_zero(ed_id))
|
||||
memcpy(&info->ed_identity, ed_id, sizeof(ed25519_public_key_t));
|
||||
if (nickname)
|
||||
strlcpy(info->nickname, nickname, sizeof(info->nickname));
|
||||
if (onion_key)
|
||||
info->onion_key = crypto_pk_dup_key(onion_key);
|
||||
if (ntor_key)
|
||||
memcpy(&info->curve25519_onion_key, ntor_key,
|
||||
sizeof(curve25519_public_key_t));
|
||||
tor_addr_copy(&info->addr, addr);
|
||||
info->port = port;
|
||||
return info;
|
||||
}
|
||||
|
||||
/** Allocate and return a new extend_info that can be used to build a
|
||||
* circuit to or through the node <b>node</b>. Use the primary address
|
||||
* of the node (i.e. its IPv4 address) unless
|
||||
* <b>for_direct_connect</b> is true, in which case the preferred
|
||||
* address is used instead. May return NULL if there is not enough
|
||||
* info about <b>node</b> to extend to it--for example, if the preferred
|
||||
* routerinfo_t or microdesc_t is missing, or if for_direct_connect is
|
||||
* true and none of the node's addresses is allowed by tor's firewall
|
||||
* and IP version config.
|
||||
**/
|
||||
extend_info_t *
|
||||
extend_info_from_node(const node_t *node, int for_direct_connect)
|
||||
{
|
||||
crypto_pk_t *rsa_pubkey = NULL;
|
||||
extend_info_t *info = NULL;
|
||||
tor_addr_port_t ap;
|
||||
int valid_addr = 0;
|
||||
|
||||
if (!node_has_preferred_descriptor(node, for_direct_connect)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Choose a preferred address first, but fall back to an allowed address. */
|
||||
if (for_direct_connect)
|
||||
fascist_firewall_choose_address_node(node, FIREWALL_OR_CONNECTION, 0, &ap);
|
||||
else {
|
||||
node_get_prim_orport(node, &ap);
|
||||
}
|
||||
valid_addr = tor_addr_port_is_valid_ap(&ap, 0);
|
||||
|
||||
if (valid_addr)
|
||||
log_debug(LD_CIRC, "using %s for %s",
|
||||
fmt_addrport(&ap.addr, ap.port),
|
||||
node->ri ? node->ri->nickname : node->rs->nickname);
|
||||
else
|
||||
log_warn(LD_CIRC, "Could not choose valid address for %s",
|
||||
node->ri ? node->ri->nickname : node->rs->nickname);
|
||||
|
||||
/* Every node we connect or extend to must support ntor */
|
||||
if (!node_has_curve25519_onion_key(node)) {
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_CIRC,
|
||||
"Attempted to create extend_info for a node that does not support "
|
||||
"ntor: %s", node_describe(node));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const ed25519_public_key_t *ed_pubkey = NULL;
|
||||
|
||||
/* Don't send the ed25519 pubkey unless the target node actually supports
|
||||
* authenticating with it. */
|
||||
if (node_supports_ed25519_link_authentication(node, 0)) {
|
||||
log_info(LD_CIRC, "Including Ed25519 ID for %s", node_describe(node));
|
||||
ed_pubkey = node_get_ed25519_id(node);
|
||||
} else if (node_get_ed25519_id(node)) {
|
||||
log_info(LD_CIRC, "Not including the ed25519 ID for %s, since it won't "
|
||||
"be able to authenticate it.",
|
||||
node_describe(node));
|
||||
}
|
||||
|
||||
/* Retrieve the curve25519 pubkey. */
|
||||
const curve25519_public_key_t *curve_pubkey =
|
||||
node_get_curve25519_onion_key(node);
|
||||
rsa_pubkey = node_get_rsa_onion_key(node);
|
||||
|
||||
if (valid_addr && node->ri) {
|
||||
info = extend_info_new(node->ri->nickname,
|
||||
node->identity,
|
||||
ed_pubkey,
|
||||
rsa_pubkey,
|
||||
curve_pubkey,
|
||||
&ap.addr,
|
||||
ap.port);
|
||||
} else if (valid_addr && node->rs && node->md) {
|
||||
info = extend_info_new(node->rs->nickname,
|
||||
node->identity,
|
||||
ed_pubkey,
|
||||
rsa_pubkey,
|
||||
curve_pubkey,
|
||||
&ap.addr,
|
||||
ap.port);
|
||||
}
|
||||
|
||||
crypto_pk_free(rsa_pubkey);
|
||||
return info;
|
||||
}
|
||||
|
||||
/** Release storage held by an extend_info_t struct. */
|
||||
void
|
||||
extend_info_free_(extend_info_t *info)
|
||||
{
|
||||
if (!info)
|
||||
return;
|
||||
crypto_pk_free(info->onion_key);
|
||||
tor_free(info);
|
||||
}
|
||||
|
||||
/** Allocate and return a new extend_info_t with the same contents as
|
||||
* <b>info</b>. */
|
||||
extend_info_t *
|
||||
extend_info_dup(extend_info_t *info)
|
||||
{
|
||||
extend_info_t *newinfo;
|
||||
tor_assert(info);
|
||||
newinfo = tor_malloc(sizeof(extend_info_t));
|
||||
memcpy(newinfo, info, sizeof(extend_info_t));
|
||||
if (info->onion_key)
|
||||
newinfo->onion_key = crypto_pk_dup_key(info->onion_key);
|
||||
else
|
||||
newinfo->onion_key = NULL;
|
||||
return newinfo;
|
||||
}
|
||||
|
||||
/* Does ei have a valid TAP key? */
|
||||
int
|
||||
extend_info_supports_tap(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
/* Valid TAP keys are not NULL */
|
||||
return ei->onion_key != NULL;
|
||||
}
|
||||
|
||||
/* Does ei have a valid ntor key? */
|
||||
int
|
||||
extend_info_supports_ntor(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
/* Valid ntor keys have at least one non-zero byte */
|
||||
return !fast_mem_is_zero(
|
||||
(const char*)ei->curve25519_onion_key.public_key,
|
||||
CURVE25519_PUBKEY_LEN);
|
||||
}
|
||||
|
||||
/* Does ei have an onion key which it would prefer to use?
|
||||
* Currently, we prefer ntor keys*/
|
||||
int
|
||||
extend_info_has_preferred_onion_key(const extend_info_t* ei)
|
||||
{
|
||||
tor_assert(ei);
|
||||
return extend_info_supports_ntor(ei);
|
||||
}
|
||||
|
||||
/** Return true iff the given address can be used to extend to. */
|
||||
int
|
||||
extend_info_addr_is_allowed(const tor_addr_t *addr)
|
||||
{
|
||||
tor_assert(addr);
|
||||
|
||||
/* Check if we have a private address and if we can extend to it. */
|
||||
if ((tor_addr_is_internal(addr, 0) || tor_addr_is_multicast(addr)) &&
|
||||
!get_options()->ExtendAllowPrivateAddresses) {
|
||||
goto disallow;
|
||||
}
|
||||
/* Allowed! */
|
||||
return 1;
|
||||
disallow:
|
||||
return 0;
|
||||
}
|
31
src/core/or/extendinfo.h
Normal file
31
src/core/or/extendinfo.h
Normal file
@ -0,0 +1,31 @@
|
||||
/* Copyright (c) 2001 Matej Pfajfar.
|
||||
* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2020, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
* @file extendinfo.h
|
||||
* @brief Header for core/or/extendinfo.c
|
||||
**/
|
||||
|
||||
#ifndef TOR_CORE_OR_EXTENDINFO_H
|
||||
#define TOR_CORE_OR_EXTENDINFO_H
|
||||
|
||||
extend_info_t *extend_info_new(const char *nickname,
|
||||
const char *rsa_id_digest,
|
||||
const struct ed25519_public_key_t *ed_id,
|
||||
crypto_pk_t *onion_key,
|
||||
const struct curve25519_public_key_t *ntor_key,
|
||||
const tor_addr_t *addr, uint16_t port);
|
||||
extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect);
|
||||
extend_info_t *extend_info_dup(extend_info_t *info);
|
||||
void extend_info_free_(extend_info_t *info);
|
||||
#define extend_info_free(info) \
|
||||
FREE_AND_NULL(extend_info_t, extend_info_free_, (info))
|
||||
int extend_info_addr_is_allowed(const tor_addr_t *addr);
|
||||
int extend_info_supports_tap(const extend_info_t* ei);
|
||||
int extend_info_supports_ntor(const extend_info_t* ei);
|
||||
int extend_info_has_preferred_onion_key(const extend_info_t* ei);
|
||||
|
||||
#endif /* !defined(TOR_CORE_OR_EXTENDINFO_H) */
|
@ -18,6 +18,7 @@ LIBTOR_APP_A_SOURCES += \
|
||||
src/core/or/connection_edge.c \
|
||||
src/core/or/connection_or.c \
|
||||
src/core/or/dos.c \
|
||||
src/core/or/extendinfo.c \
|
||||
src/core/or/onion.c \
|
||||
src/core/or/ocirc_event.c \
|
||||
src/core/or/or_periodic.c \
|
||||
@ -64,6 +65,7 @@ noinst_HEADERS += \
|
||||
src/core/or/destroy_cell_queue_st.h \
|
||||
src/core/or/dos.h \
|
||||
src/core/or/edge_connection_st.h \
|
||||
src/core/or/extendinfo.h \
|
||||
src/core/or/half_edge_st.h \
|
||||
src/core/or/entry_connection_st.h \
|
||||
src/core/or/entry_port_cfg_st.h \
|
||||
|
@ -56,6 +56,7 @@
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/circuitpadding.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "lib/compress/compress.h"
|
||||
#include "app/config/config.h"
|
||||
#include "core/mainloop/connection.h"
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "core/or/circuitstats.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "feature/client/addressmap.h"
|
||||
#include "feature/client/dnsserv.h"
|
||||
#include "feature/client/entrynodes.h"
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "core/or/policies.h"
|
||||
#include "core/or/relay.h"
|
||||
#include "core/or/crypt_path.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "feature/client/circpathbias.h"
|
||||
#include "feature/hs/hs_cell.h"
|
||||
#include "feature/hs/hs_circuit.h"
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/reasons.h"
|
||||
#include "feature/client/circpathbias.h"
|
||||
#include "feature/dirclient/dirclient.h"
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "app/config/config.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/policies.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "feature/dirauth/shared_random_state.h"
|
||||
#include "feature/hs/hs_cache.h"
|
||||
#include "feature/hs/hs_circuitmap.h"
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/relay.h"
|
||||
#include "feature/client/circpathbias.h"
|
||||
#include "feature/dirclient/dirclient.h"
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "core/or/channel.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/onion.h"
|
||||
#include "core/or/relay.h"
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/crypt_path_st.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/extend_info_st.h"
|
||||
#include "core/or/origin_circuit_st.h"
|
||||
#include "core/or/relay.h"
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/relay.h"
|
||||
#include "feature/client/circpathbias.h"
|
||||
#include "feature/control/control_events.h"
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "app/config/config.h"
|
||||
#include "feature/control/control_events.h"
|
||||
#include "lib/crypt_ops/crypto_rand.h"
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuituse.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/or/policies.h"
|
||||
#include "core/or/relay.h"
|
||||
#include "core/or/crypt_path.h"
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/circuitpadding.h"
|
||||
#include "core/or/circuitpadding_machines.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/mainloop/netstatus.h"
|
||||
#include "core/crypto/relay_crypto.h"
|
||||
#include "core/or/protover.h"
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "feature/rend/rendcache.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "core/mainloop/connection.h"
|
||||
#include "core/or/connection_edge.h"
|
||||
#include "feature/nodelist/networkstatus.h"
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "app/config/config.h"
|
||||
#include "core/or/circuitbuild.h"
|
||||
#include "core/or/policies.h"
|
||||
#include "core/or/extendinfo.h"
|
||||
#include "feature/dirparse/policy_parse.h"
|
||||
#include "feature/hs/hs_common.h"
|
||||
#include "feature/hs/hs_descriptor.h"
|
||||
|
Loading…
Reference in New Issue
Block a user