[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] pt: Use new address discovery interface when creating extrainfo



commit 9f61a6bdc3ba7d6ef623d9fce8486058c5cefdcd
Author: David Goulet <dgoulet@xxxxxxxxxxxxxx>
Date:   Tue Jul 14 11:03:24 2020 -0400

    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@xxxxxxxxxxxxxx>
---
 src/feature/client/transports.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c
index 2bdc0ae151..ecc952e2ac 100644
--- a/src/feature/client/transports.c
+++ b/src/feature/client/transports.c
@@ -1643,17 +1643,25 @@ pt_get_extra_info_descriptor_string(void)
 
     SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
       char *transport_args = NULL;
+      const char *addrport = NULL;
 
       /* If the transport proxy returned "0.0.0.0" as its address, and
        * we know our external IP address, use it. Otherwise, use the
        * returned address. */
-      const char *addrport = NULL;
-      uint32_t external_ip_address = 0;
-      if (tor_addr_is_null(&t->addr) &&
-          router_pick_published_address(get_options(),
-                                        &external_ip_address, 0) >= 0) {
+      if (tor_addr_is_null(&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);
       } else {
         addrport = fmt_addrport(&t->addr, t->port);



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits