Browse Source

start remembering X-Your-Address-Is hints even if you're
a client, so you can become a server more smoothly.


svn:r8359

Roger Dingledine 18 years ago
parent
commit
e56dbb810f
2 changed files with 8 additions and 7 deletions
  1. 5 6
      src/or/directory.c
  2. 3 1
      src/or/router.c

+ 5 - 6
src/or/directory.c

@@ -822,6 +822,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
   int skewed=0;
   int allow_partial = conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC;
   int was_compressed=0;
+  char *guess;
 
   switch (fetch_from_buf_http(conn->_base.inbuf,
                               &headers, MAX_HEADERS_SIZE,
@@ -855,12 +856,10 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
             escaped(reason));
 
   /* now check if it's got any hints for us about our IP address. */
-  if (server_mode(get_options())) {
-    char *guess = http_get_header(headers, X_ADDRESS_HEADER);
-    if (guess) {
-      router_new_address_suggestion(guess);
-      tor_free(guess);
-    }
+  guess = http_get_header(headers, X_ADDRESS_HEADER);
+  if (guess) {
+    router_new_address_suggestion(guess);
+    tor_free(guess);
   }
 
   if (date_header > 0) {

+ 3 - 1
src/or/router.c

@@ -970,6 +970,7 @@ router_new_address_suggestion(const char *suggestion)
 {
   uint32_t addr, cur;
   struct in_addr in;
+  or_options_t *options = get_options();
 
   /* first, learn what the IP address actually is */
   if (!tor_inet_aton(suggestion, &in)) {
@@ -980,7 +981,8 @@ router_new_address_suggestion(const char *suggestion)
 
   log_debug(LD_DIR, "Got X-Your-Address-Is: %s.", suggestion);
 
-  if (resolve_my_address(LOG_INFO, get_options(), &cur, NULL) >= 0) {
+  if (!server_mode(options) ||
+      resolve_my_address(LOG_INFO, options, &cur, NULL) >= 0) {
     /* We're all set -- we already know our address. Great. */
     last_guessed_ip = cur; /* store it in case we need it later */
     return;