Commit 6606e676 authored by George Kadianakis's avatar George Kadianakis Committed by Nick Mathewson
Browse files

Don't do directory fetches before all PTs have been configured.

parent 0b7a66fa
Loading
Loading
Loading
Loading

changes/bug11156

0 → 100644
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes (clients):
    - Fix a bug where we would attempt to connect to bridges before
      our pluggable transports were configured, which resulted in some
      erroneous log messages. Fixes bug 11156; bugfix on
      0.2.3.2-alpha.
+1 −1
Original line number Diff line number Diff line
@@ -721,7 +721,7 @@ update_microdesc_downloads(time_t now)
  smartlist_t *missing;
  digestmap_t *pending;

  if (should_delay_dir_fetches(options))
  if (should_delay_dir_fetches(options, NULL))
    return;
  if (directory_too_idle_to_fetch_descriptors(options, now))
    return;
+30 −6
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
#include "transports.h"

/** Map from lowercase nickname to identity digest of named server, if any. */
static strmap_t *named_server_map = NULL;
@@ -884,14 +885,37 @@ update_consensus_networkstatus_fetch_time(time_t now)

/** Return 1 if there's a reason we shouldn't try any directory
 * fetches yet (e.g. we demand bridges and none are yet known).
 * Else return 0. */
 * Else return 0.

 * If we return 1 and <b>msg_out</b> is provided, set <b>msg_out</b>
 * to an explanation of why directory fetches are delayed. (If we
 * return 0, we set msg_out to NULL.)
 */
int
should_delay_dir_fetches(const or_options_t *options)
should_delay_dir_fetches(const or_options_t *options, const char **msg_out)
{
  if (options->UseBridges && !any_bridge_descriptors_known()) {
    log_info(LD_DIR, "delaying dir fetches (no running bridges known)");
  if (msg_out) {
    *msg_out = NULL;
  }

  if (options->UseBridges) {
    if (!any_bridge_descriptors_known()) {
      if (msg_out) {
        *msg_out = "No running bridges";
      }
      log_info(LD_DIR, "Delaying dir fetches (no running bridges known)");
      return 1;
    }

    if (pt_proxies_configuration_pending()) {
      if (msg_out) {
        *msg_out = "Pluggable transport proxies still configuring";
      }
      log_info(LD_DIR, "Delaying dir fetches (pt proxies still configuring)");
      return 1;
    }
  }

  return 0;
}

@@ -901,7 +925,7 @@ void
update_networkstatus_downloads(time_t now)
{
  const or_options_t *options = get_options();
  if (should_delay_dir_fetches(options))
  if (should_delay_dir_fetches(options, NULL))
    return;
  update_consensus_networkstatus_downloads(now);
  update_certificate_downloads(now);
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ int networkstatus_nickname_is_unnamed(const char *nickname);
void networkstatus_consensus_download_failed(int status_code,
                                             const char *flavname);
void update_consensus_networkstatus_fetch_time(time_t now);
int should_delay_dir_fetches(const or_options_t *options);
int should_delay_dir_fetches(const or_options_t *options,const char **msg_out);
void update_networkstatus_downloads(time_t now);
void update_certificate_downloads(time_t now);
int consensus_is_waiting_for_certs(void);
+4 −4
Original line number Diff line number Diff line
@@ -1477,6 +1477,7 @@ update_router_have_minimum_dir_info(void)
  const networkstatus_t *consensus =
    networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
  int using_md;
  const char *delay_fetches_msg = NULL;

  if (!consensus) {
    if (!networkstatus_get_latest_consensus())
@@ -1489,10 +1490,9 @@ update_router_have_minimum_dir_info(void)
    goto done;
  }

  if (should_delay_dir_fetches(get_options())) {
    log_notice(LD_DIR, "no known bridge descriptors running yet; stalling");
    strlcpy(dir_info_status, "No live bridge descriptors.",
            sizeof(dir_info_status));
  if (should_delay_dir_fetches(get_options(), &delay_fetches_msg)) {
    log_notice(LD_DIR, "Delaying dir fetches: %s", delay_fetches_msg);
    strlcpy(dir_info_status, "%s",  sizeof(dir_info_status));
    res = 0;
    goto done;
  }
Loading