mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-09-22 05:54:58 +02:00
pt: Use new address discovery interface when creating extrainfo
In case the transport has no usable address configured (likely 0.0.0.0 or [::]), attempt to find the IPv4 and on failure, fallback to the IPv6. If none are found, a log error is emitted and the transport is skiped. Related to #40025 Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
b239f178a2
commit
9f61a6bdc3
@ -1643,17 +1643,25 @@ pt_get_extra_info_descriptor_string(void)
|
|||||||
|
|
||||||
SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
|
SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
|
||||||
char *transport_args = NULL;
|
char *transport_args = NULL;
|
||||||
|
const char *addrport = NULL;
|
||||||
|
|
||||||
/* If the transport proxy returned "0.0.0.0" as its address, and
|
/* If the transport proxy returned "0.0.0.0" as its address, and
|
||||||
* we know our external IP address, use it. Otherwise, use the
|
* we know our external IP address, use it. Otherwise, use the
|
||||||
* returned address. */
|
* returned address. */
|
||||||
const char *addrport = NULL;
|
if (tor_addr_is_null(&t->addr)) {
|
||||||
uint32_t external_ip_address = 0;
|
|
||||||
if (tor_addr_is_null(&t->addr) &&
|
|
||||||
router_pick_published_address(get_options(),
|
|
||||||
&external_ip_address, 0) >= 0) {
|
|
||||||
tor_addr_t addr;
|
tor_addr_t addr;
|
||||||
tor_addr_from_ipv4h(&addr, external_ip_address);
|
/* Attempt to find the IPv4 and then attempt to find the IPv6 if we
|
||||||
|
* can't find it. */
|
||||||
|
bool found = relay_find_addr_to_publish(get_options(), AF_INET, 0,
|
||||||
|
&addr);
|
||||||
|
if (!found) {
|
||||||
|
found = relay_find_addr_to_publish(get_options(), AF_INET6, 0,
|
||||||
|
&addr);
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
log_err(LD_PT, "Unable to find address for transport %s", t->name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
addrport = fmt_addrport(&addr, t->port);
|
addrport = fmt_addrport(&addr, t->port);
|
||||||
} else {
|
} else {
|
||||||
addrport = fmt_addrport(&t->addr, t->port);
|
addrport = fmt_addrport(&t->addr, t->port);
|
||||||
|
Loading…
Reference in New Issue
Block a user