[tor-commits] [tor/maint-0.2.2] Merge remote branch 'arma/bug2510' into maint-0.2.2

nickm at torproject.org nickm at torproject.org
Mon Mar 14 20:15:40 UTC 2011


commit 0588330c1d66960353c412812d1d073fdb37e310
Merge: b639add cb101c4
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Mar 14 16:14:54 2011 -0400

    Merge remote branch 'arma/bug2510' into maint-0.2.2

 changes/bug2510       |    8 ++++++++
 changes/bug2511       |    6 ++++++
 src/or/circuitbuild.c |   25 +++++++++++++++++++++++++
 src/or/or.h           |    1 +
 src/or/routerlist.c   |   17 ++++++++++++++++-
 5 files changed, 56 insertions(+), 1 deletions(-)

diff --combined src/or/circuitbuild.c
index 6be27d2,d1cb547..a54f232
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@@ -4063,6 -4063,7 +4063,6 @@@ choose_random_entry(cpath_build_state_
    int preferred_min, consider_exit_family = 0;
  
    if (chosen_exit) {
 -    smartlist_add(exit_family, chosen_exit);
      routerlist_add_family(exit_family, chosen_exit);
      consider_exit_family = 1;
    }
@@@ -4085,8 -4086,6 +4085,8 @@@
        r = entry_is_live(entry, need_uptime, need_capacity, 0, &msg);
        if (!r)
          continue; /* down, no point */
 +      if (r == chosen_exit)
 +        continue; /* don't pick the same node for entry and exit */
        if (consider_exit_family && smartlist_isin(exit_family, r))
          continue; /* avoid relays that are family members of our exit */
        if (options->EntryNodes &&
@@@ -4671,6 -4670,29 +4671,29 @@@ fetch_bridge_descriptors(or_options_t *
    SMARTLIST_FOREACH_END(bridge);
  }
  
+ /** If our <b>bridge</b> is configured to be a different address than
+  * the bridge gives in its routerinfo <b>ri</b>, rewrite the routerinfo
+  * we received to use the address we meant to use. Now we handle
+  * multihomed bridges better.
+  */
+ static void
+ rewrite_routerinfo_address_for_bridge(bridge_info_t *bridge, routerinfo_t *ri)
+ {
+   tor_addr_t addr;
+   tor_addr_from_ipv4h(&addr, ri->addr);
+ 
+   if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+       bridge->port == ri->or_port)
+     return; /* they match, so no need to do anything */
+ 
+   ri->addr = tor_addr_to_ipv4h(&bridge->addr);
+   tor_free(ri->address);
+   ri->address = tor_dup_ip(ri->addr);
+   ri->or_port = bridge->port;
+   log_info(LD_DIR, "Adjusted bridge '%s' to match configured address %s:%d.",
+            ri->nickname, ri->address, ri->or_port);
+ }
+ 
  /** We just learned a descriptor for a bridge. See if that
   * digest is in our entry guard list, and add it if not. */
  void
@@@ -4689,6 -4711,8 +4712,8 @@@ learned_bridge_descriptor(routerinfo_t 
        if (!from_cache)
          download_status_reset(&bridge->fetch_status);
  
+       rewrite_routerinfo_address_for_bridge(bridge, ri);
+ 
        add_an_entry_guard(ri, 1);
        log_notice(LD_DIR, "new bridge descriptor '%s' (%s)", ri->nickname,
                   from_cache ? "cached" : "fresh");
@@@ -4728,8 -4752,7 +4753,8 @@@ any_pending_bridge_descriptor_fetches(v
          conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC &&
          TO_DIR_CONN(conn)->router_purpose == ROUTER_PURPOSE_BRIDGE &&
          !conn->marked_for_close &&
 -        conn->linked && !conn->linked_conn->marked_for_close) {
 +        conn->linked &&
 +        conn->linked_conn && !conn->linked_conn->marked_for_close) {
        log_debug(LD_DIR, "found one: %s", conn->address);
        return 1;
      }
diff --combined src/or/or.h
index 3ce1425,e899f60..910bf8d
--- a/src/or/or.h
+++ b/src/or/or.h
@@@ -2345,9 -2345,6 +2345,9 @@@ typedef struct 
    config_line_t *Logs; /**< New-style list of configuration lines
                          * for logs */
  
 +  int LogMessageDomains; /**< Boolean: Should we log the domain(s) in which
 +                          * each log message occurs? */
 +
    char *DebugLogFile; /**< Where to send verbose log messages. */
    char *DataDirectory; /**< OR only: where to store long-term data. */
    char *Nickname; /**< OR only: nickname of this onion router. */
@@@ -2841,11 -2838,6 +2841,11 @@@
     */
    double CircuitPriorityHalflife;
  
 +  /** Set to true if the TestingTorNetwork configuration option is set.
 +   * This is used so that options_validate() has a chance to realize that
 +   * the defaults have changed. */
 +  int _UsingTestNetworkDefaults;
 +
  } or_options_t;
  
  /** Persistent state for an onion router, as saved to disk. */
@@@ -2877,25 -2869,19 +2877,25 @@@ typedef struct 
     * bandwidth usage. The "Interval" fields hold the granularity, in seconds,
     * of the entries of Values.  The "Values" lists hold decimal string
     * representations of the number of bytes read or written in each
 -   * interval. */
 +   * interval. The "Maxima" list holds decimal strings describing the highest
 +   * rate achieved during the interval.
 +   */
    time_t      BWHistoryReadEnds;
    int         BWHistoryReadInterval;
    smartlist_t *BWHistoryReadValues;
 +  smartlist_t *BWHistoryReadMaxima;
    time_t      BWHistoryWriteEnds;
    int         BWHistoryWriteInterval;
    smartlist_t *BWHistoryWriteValues;
 +  smartlist_t *BWHistoryWriteMaxima;
    time_t      BWHistoryDirReadEnds;
    int         BWHistoryDirReadInterval;
    smartlist_t *BWHistoryDirReadValues;
 +  smartlist_t *BWHistoryDirReadMaxima;
    time_t      BWHistoryDirWriteEnds;
    int         BWHistoryDirWriteInterval;
    smartlist_t *BWHistoryDirWriteValues;
 +  smartlist_t *BWHistoryDirWriteMaxima;
  
    /** Build time histogram */
    config_line_t * BuildtimeHistogram;
@@@ -3513,6 -3499,7 +3513,7 @@@ typedef enum was_router_added_t 
    ROUTER_NOT_IN_CONSENSUS = -3,
    ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS = -4,
    ROUTER_AUTHDIR_REJECTS = -5,
+   ROUTER_WAS_NOT_WANTED = -6
  } was_router_added_t;
  
  /********************************* routerparse.c ************************/



More information about the tor-commits mailing list