Commit cc0efa80 authored by Nick Mathewson's avatar Nick Mathewson 🥔
Browse files

Make authorities download consensuses if appropriate

An authority should never download a consensus if it has a live one,
but when it doesn't, it should admit that it's not going to get one,
and see if anybody else can give it one.

Fixes 1300, fix on 0.2.0.9-alpha
parent 2be5effe
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -1168,14 +1168,11 @@ update_v2_networkstatus_cache_downloads(time_t now)
static void
update_consensus_networkstatus_downloads(time_t now)
{
  or_options_t *options = get_options();
  int i;
  if (!networkstatus_get_live_consensus(now))
    time_to_download_next_consensus = now; /* No live consensus? Get one now!*/
  if (time_to_download_next_consensus > now)
    return; /* Wait until the current consensus is older. */
  if (authdir_mode_v3(options))
    return; /* Authorities never fetch a consensus */
  /* XXXXNM Microdescs: may need to download more types. */
  if (!download_status_is_ready(&consensus_dl_status[FLAV_NS], now,
                                CONSENSUS_NETWORKSTATUS_MAX_DL_TRIES))
@@ -1246,7 +1243,7 @@ update_consensus_networkstatus_fetch_time(time_t now)
       * is no longer fresh... */
      start = c->fresh_until + min_sec_before_caching;
      /* Some clients may need the consensus sooner than others. */
      if (options->FetchDirInfoExtraEarly) {
      if (options->FetchDirInfoExtraEarly || authdir_mode_v3(options)) {
        dl_interval = 60;
        if (min_sec_before_caching + dl_interval > interval)
          dl_interval = interval/2;