[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r11086: Cache v3 networkstatus consensuses on disk. (in tor/trunk: . doc src/or)
Author: nickm
Date: 2007-08-13 14:47:22 -0400 (Mon, 13 Aug 2007)
New Revision: 11086
Modified:
tor/trunk/
tor/trunk/ChangeLog
tor/trunk/doc/TODO
tor/trunk/src/or/dirvote.c
tor/trunk/src/or/main.c
tor/trunk/src/or/or.h
tor/trunk/src/or/routerlist.c
Log:
r14531@catbus: nickm | 2007-08-13 14:46:25 -0400
Cache v3 networkstatus consensuses on disk.
Property changes on: tor/trunk
___________________________________________________________________
svk:merge ticket from /tor/trunk [r14531] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/ChangeLog 2007-08-13 18:47:22 UTC (rev 11086)
@@ -11,6 +11,10 @@
- Fix compile on platforms without getaddrinfo: bug found by Li-Hui
Zhou.
+ o Minor features (directory voting):
+ - Store v3 consensus status consensuses on disk, and reload them
+ on startup.
+
o Minor featuers (security):
- Warn about unsafe ControlPort configurations.
Modified: tor/trunk/doc/TODO
===================================================================
--- tor/trunk/doc/TODO 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/doc/TODO 2007-08-13 18:47:22 UTC (rev 11086)
@@ -92,7 +92,7 @@
* Detect whether votes are really all for the same period.
- Push/pull documents as appropriate.
- Pull votes and signatures if we don't get them.
- - Store consensuses
+ o Store consensuses
- Cache votes and signatures on disk.
o Have clients know which authorities are v3 authorities, and what
their keys are.
Modified: tor/trunk/src/or/dirvote.c
===================================================================
--- tor/trunk/src/or/dirvote.c 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/src/or/dirvote.c 2007-08-13 18:47:22 UTC (rev 11086)
@@ -1400,7 +1400,7 @@
networkstatus_check_consensus_signature(pending_consensus)<0)
return -1;
- networkstatus_set_current_consensus(pending_consensus_body);
+ networkstatus_set_current_consensus(pending_consensus_body, 0);
return 0;
}
Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/src/or/main.c 2007-08-13 18:47:22 UTC (rev 11086)
@@ -1353,6 +1353,9 @@
if (router_reload_networkstatus()) {
return -1;
}
+ if (router_reload_consensus_networkstatus()) {
+ return -1;
+ }
directory_info_has_arrived(time(NULL),1);
if (authdir_mode_tests_reachability(get_options())) {
Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/src/or/or.h 2007-08-13 18:47:22 UTC (rev 11086)
@@ -3427,9 +3427,10 @@
const char *digest);
/* for consensuses. */
+int router_reload_consensus_networkstatus(void);
networkstatus_vote_t *networkstatus_get_latest_consensus(void);
networkstatus_vote_t *networkstatus_get_live_consensus(time_t now);
-int networkstatus_set_current_consensus(const char *consensus);
+int networkstatus_set_current_consensus(const char *consensus, int from_cache);
//routerstatus_t *routerstatus_get_by_hexdigest(const char *hexdigest);
int should_delay_dir_fetches(or_options_t *options);
Modified: tor/trunk/src/or/routerlist.c
===================================================================
--- tor/trunk/src/or/routerlist.c 2007-08-13 18:47:17 UTC (rev 11085)
+++ tor/trunk/src/or/routerlist.c 2007-08-13 18:47:22 UTC (rev 11086)
@@ -175,6 +175,27 @@
return 0;
}
+/**DOCDOC */
+int
+router_reload_consensus_networkstatus(void)
+{
+ char filename[512];
+ char *s;
+
+ tor_snprintf(filename,sizeof(filename),"%s"PATH_SEPARATOR"cached-consensus",
+ get_options()->DataDirectory);
+ s = read_file_to_str(filename, 0, NULL);
+ if (!s)
+ return 0;
+
+ if (networkstatus_set_current_consensus(s, 1)) {
+ log_warn(LD_FS, "Couldn't load consensus networkstatus from \"%s\"",
+ filename);
+ }
+ tor_free(s);
+ return 0;
+}
+
/** Reload the cached v3 key certificates from the cached-certs file in
* the data directory. Return 0 on success, -1 on failure. */
int
@@ -3837,8 +3858,9 @@
return current_consensus;
}
+/** DOCDOC */
int
-networkstatus_set_current_consensus(const char *consensus)
+networkstatus_set_current_consensus(const char *consensus, int from_cache)
{
networkstatus_vote_t *c;
/* Make sure it's parseable. */
@@ -3857,6 +3879,15 @@
current_consensus = c;
+ if (!from_cache) {
+ or_options_t *options = get_options();
+ char filename[512];
+ tor_snprintf(filename, sizeof(filename),
+ "%s"PATH_SEPARATOR"cached-consensus",
+ options->DataDirectory);
+ write_str_to_file(filename, consensus, 0);
+ }
+
if (get_options()->DirPort)
dirserv_set_cached_networkstatus_v3(consensus, c->valid_after);