[tor-commits] [tor/master] get rid of the new caching notion in resolve_my_address()

nickm at torproject.org nickm at torproject.org
Thu Feb 14 20:01:09 UTC 2013


commit 178599f026d9c7575a2b790c7cb5ccfba7ba1635
Author: Roger Dingledine <arma at torproject.org>
Date:   Tue Feb 12 04:25:42 2013 -0500

    get rid of the new caching notion in resolve_my_address()
    
    and replace it with the good old-fashioned two functions approach
---
 src/or/config.c     |   27 +++++++++------------------
 src/or/config.h     |    4 ++--
 src/or/dirserv.c    |    4 ++--
 src/or/router.c     |   10 +++++++---
 src/or/routerlist.c |    2 +-
 5 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/src/or/config.c b/src/or/config.c
index e37b148..a11c44b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -1893,6 +1893,13 @@ list_torrc_options(void)
 
 /** Last value actually set by resolve_my_address. */
 static uint32_t last_resolved_addr = 0;
+
+/** Accessor for last_resolved_addr from outside this file. */
+uint32_t get_last_resolved_addr(void)
+{
+  return last_resolved_addr;
+}
+
 /**
  * Use <b>options-\>Address</b> to guess our public IP address.
  *
@@ -1908,16 +1915,12 @@ static uint32_t last_resolved_addr = 0;
  *     holding that hostname. (If we didn't get our address by resolving a
  *     hostname, set *<b>hostname_out</b> to NULL.)
  *
- * If <b>use_cached_addr</b> is true, and we have a plausible answer,
- * provide that answer and return.
- *
  * XXXX ipv6
  */
 int
 resolve_my_address(int warn_severity, const or_options_t *options,
                    uint32_t *addr_out,
-                   const char **method_out, char **hostname_out,
-                   int use_cached_addr)
+                   const char **method_out, char **hostname_out)
 {
   struct in_addr in;
   uint32_t addr; /* host order */
@@ -1935,18 +1938,6 @@ resolve_my_address(int warn_severity, const or_options_t *options,
   tor_assert(addr_out);
 
   /*
-   * Step zero: if used_cached_addr is true, and we have a cached answer,
-   * just return it and be done.
-   */
-
-  if (use_cached_addr && last_resolved_addr) {
-    *addr_out = last_resolved_addr;
-    if (method_out)
-      *method_out = "CACHED";
-    return 0;
-  }
-
-  /*
    * Step one: Fill in 'hostname' to be our best guess.
    */
 
@@ -2359,7 +2350,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
   if (authdir_mode(options)) {
     /* confirm that our address isn't broken, so we can complain now */
     uint32_t tmp;
-    if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL, 0) < 0)
+    if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL) < 0)
       REJECT("Failed to resolve/guess local address. See logs for details.");
   }
 
diff --git a/src/or/config.h b/src/or/config.h
index 7ec52e3..ef4acac 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -26,10 +26,10 @@ const char *get_short_version(void);
 setopt_err_t options_trial_assign(config_line_t *list, int use_defaults,
                                   int clear_first, char **msg);
 
+uint32_t get_last_resolved_addr(void);
 int resolve_my_address(int warn_severity, const or_options_t *options,
                        uint32_t *addr_out,
-                       const char **method_out, char **hostname_out,
-                       int use_cached_addr);
+                       const char **method_out, char **hostname_out);
 int is_local_addr(const tor_addr_t *addr);
 void options_init(or_options_t *options);
 char *options_dump(const or_options_t *options, int minimal);
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 280c6b4..0819d4b 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -2750,7 +2750,7 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
   tor_assert(private_key);
   tor_assert(cert);
 
-  if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname, 0)<0) {
+  if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname)<0) {
     log_warn(LD_NET, "Couldn't resolve my hostname");
     return NULL;
   }
@@ -2960,7 +2960,7 @@ generate_v2_networkstatus_opinion(void)
 
   private_key = get_server_identity_key();
 
-  if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname, 0)<0) {
+  if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname)<0) {
     log_warn(LD_NET, "Couldn't resolve my hostname");
     goto done;
   }
diff --git a/src/or/router.c b/src/or/router.c
index a668c24..7b1fdc0 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1712,7 +1712,9 @@ static int router_guess_address_from_dir_headers(uint32_t *guess);
 int
 router_pick_published_address(const or_options_t *options, uint32_t *addr)
 {
-  if (resolve_my_address(LOG_INFO, options, addr, NULL, NULL, 1) < 0) {
+  *addr = get_last_resolved_addr();
+  if (!*addr &&
+      resolve_my_address(LOG_INFO, options, addr, NULL, NULL) < 0) {
     log_info(LD_CONFIG, "Could not determine our address locally. "
              "Checking if directory headers provide any hints.");
     if (router_guess_address_from_dir_headers(addr) < 0) {
@@ -2103,7 +2105,7 @@ check_descriptor_ipaddress_changed(time_t now)
 
   /* XXXX ipv6 */
   prev = desc_routerinfo->addr;
-  if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname, 0) < 0) {
+  if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) {
     log_info(LD_CONFIG,"options->Address didn't resolve into an IP.");
     return;
   }
@@ -2159,7 +2161,9 @@ router_new_address_suggestion(const char *suggestion,
   }
 
   /* XXXX ipv6 */
-  if (resolve_my_address(LOG_INFO, options, &cur, NULL, NULL, 1) >= 0) {
+  cur = get_last_resolved_addr();
+  if (cur ||
+      resolve_my_address(LOG_INFO, options, &cur, NULL, NULL) >= 0) {
     /* We're all set -- we already know our address. Great. */
     tor_addr_from_ipv4h(&last_guessed_ip, cur); /* store it in case we
                                                    need it later */
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 2dde89b..2f08167 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -3952,7 +3952,7 @@ trusted_dir_server_new(const char *nickname, const char *address,
 
   if (!address) { /* The address is us; we should guess. */
     if (resolve_my_address(LOG_WARN, get_options(),
-                           &a, NULL, &hostname, 0) < 0) {
+                           &a, NULL, &hostname) < 0) {
       log_warn(LD_CONFIG,
                "Couldn't find a suitable address when adding ourself as a "
                "trusted directory server.");





More information about the tor-commits mailing list