]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r16115@catbus: nickm | 2007-10-24 21:52:33 -0400
authorNick Mathewson <nickm@torproject.org>
Thu, 25 Oct 2007 01:53:49 +0000 (01:53 +0000)
committerNick Mathewson <nickm@torproject.org>
Thu, 25 Oct 2007 01:53:49 +0000 (01:53 +0000)
 Tolerate a slightly dead consensus when deciding whether to download descriptors and build circuits.

svn:r12167

ChangeLog
src/or/networkstatus.c
src/or/or.h
src/or/routerlist.c

index 3e461cb88f5d226b8339d8bda582812558185a63..9e5ba0ef87af493f4481cde55ec875918eb39251 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,6 +42,9 @@ Changes in version 0.2.0.9-alpha - 2007-10-24
       consensus that we already have (or one that isn't valid) as a failure,
       and count failing to get the certificates after 20 minutes as a
       failure.
+    - Build circuits and download descriptors even if our consensus is a
+      little expired.  (This feature will go away once authorities are more
+      reliable.)
 
   o Minor features (router descriptor cache):
     - If we find a cached-routers file that's been sitting around for more
index b82b0be1732f80e266e15a8d787385351623c3c1..332e7b0ad2170623525c9efb169394b30c8e6b43 100644 (file)
@@ -1122,6 +1122,19 @@ networkstatus_get_live_consensus(time_t now)
     return NULL;
 }
 
+/* XXXX020 remove this in favor of get_live_consensus. */
+networkstatus_vote_t *
+networkstatus_get_reasonably_live_consensus(time_t now)
+{
+#define REASONABLY_LIVE_TIME (24*60*60)
+  if (current_consensus &&
+      current_consensus->valid_after <= now+REASONABLY_LIVE_TIME &&
+      now <= current_consensus->valid_until)
+    return current_consensus;
+  else
+    return NULL;
+}
+
 /** Copy all the ancillary information (like router download status and so on)
  * from <b>old_c</b> to <b>new_c</b>. */
 static void
index 57f657dcf988cbff24d66e4132feb4158a913d91..344745d8e7f2326ae0bbd90f8a38bb5e9cf861ae 100644 (file)
@@ -3112,6 +3112,7 @@ void update_certificate_downloads(time_t now);
 networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest);
 networkstatus_vote_t *networkstatus_get_latest_consensus(void);
 networkstatus_vote_t *networkstatus_get_live_consensus(time_t now);
+networkstatus_vote_t *networkstatus_get_reasonably_live_consensus(time_t now);
 int networkstatus_set_current_consensus(const char *consensus, int from_cache,
                                         int was_waiting_for_certs);
 void networkstatus_note_certs_arrived(void);
index 95e45fa425517cc715896c31c64af8d140ad6ba3..9da42a3a2ad59267f5226033244dc6688f00699e 100644 (file)
@@ -3685,7 +3685,8 @@ update_consensus_router_descriptor_downloads(time_t now)
   smartlist_t *downloadable = smartlist_create();
   int authdir = authdir_mode(options);
   int dirserver = dirserver_mode(options);
-  networkstatus_vote_t *consensus = networkstatus_get_live_consensus(now);
+  networkstatus_vote_t *consensus =
+    networkstatus_get_reasonably_live_consensus(now);
   int n_delayed=0, n_have=0, n_would_reject=0, n_wouldnt_use=0,
     n_inprogress=0;
 
@@ -3864,7 +3865,7 @@ update_router_have_minimum_dir_info(void)
   int res;
   or_options_t *options = get_options();
   const networkstatus_vote_t *consensus =
-    networkstatus_get_live_consensus(now);
+    networkstatus_get_reasonably_live_consensus(now);
 
   if (!consensus) {
     res = 0;