aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorJacob Appelbaum <jacob@appelbaum.net>2009-07-11 18:43:33 -0700
committerJacob Appelbaum <jacob@appelbaum.net>2009-07-13 16:30:42 -0700
commite7576f92dec47ffb48f481b7a92b3fc0c76105eb (patch)
tree166faf0f827cf8d7da58311258c287aeac68447b /src/or
parent041a7b989630c846fa087628145920198da001f6 (diff)
downloadtor-e7576f92dec47ffb48f481b7a92b3fc0c76105eb.tar.gz
tor-e7576f92dec47ffb48f481b7a92b3fc0c76105eb.zip
Add support for a new option: FetchDirInfoExtraEarly
This new option will allow clients to download the newest fresh consensus much sooner than they normally would do so, even if they previously set FetchDirInfoEarly. This includes a proper ChangeLog entry and an updated man page.
Diffstat (limited to 'src/or')
-rw-r--r--src/or/config.c5
-rw-r--r--src/or/networkstatus.c9
-rw-r--r--src/or/or.h3
3 files changed, 15 insertions, 2 deletions
diff --git a/src/or/config.c b/src/or/config.c
index 5137f74792..5495b252cb 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -214,6 +214,7 @@ static config_var_t _option_vars[] = {
V(FirewallPorts, CSV, ""),
V(FastFirstHopPK, BOOL, "1"),
V(FetchDirInfoEarly, BOOL, "0"),
+ V(FetchDirInfoExtraEarly, BOOL, "0"),
V(FetchServerDescriptors, BOOL, "1"),
V(FetchHidServDescriptors, BOOL, "1"),
V(FetchUselessDescriptors, BOOL, "0"),
@@ -3181,6 +3182,10 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("HSAuthorityRecordStats is set but we're not running as "
"a hidden service authority.");
+ if (options->FetchDirInfoExtraEarly && !options->FetchDirInfoEarly)
+ REJECT("FetchDirInfoExtraEarly requires that you also set "
+ "FetchDirInfoEarly");
+
if (options->ConnLimit <= 0) {
r = tor_snprintf(buf, sizeof(buf),
"ConnLimit must be greater than 0, but was set to %d",
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 573197a53f..df17f49548 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1133,8 +1133,13 @@ update_consensus_networkstatus_fetch_time(time_t now)
/* We want to cache the next one at some point after this one
* is no longer fresh... */
start = c->fresh_until + CONSENSUS_MIN_SECONDS_BEFORE_CACHING;
- /* But only in the first half-interval after that. */
- dl_interval = interval/2;
+ /* Some clients may need the consensus sooner than others. */
+ if (options->FetchDirInfoExtraEarly) {
+ dl_interval = 60;
+ } else {
+ /* But only in the first half-interval after that. */
+ dl_interval = interval/2;
+ }
} else {
/* We're an ordinary client or a bridge. Give all the caches enough
* time to download the consensus. */
diff --git a/src/or/or.h b/src/or/or.h
index f298d53c27..e38cf81cfd 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -2444,6 +2444,9 @@ typedef struct {
* means directly from the authorities) no matter our other config? */
int FetchDirInfoEarly;
+ /** Should we fetch our dir info at the start of the consensus period? */
+ int FetchDirInfoExtraEarly;
+
char *VirtualAddrNetwork; /**< Address and mask to hand out for virtual
* MAPADDRESS requests. */
int ServerDNSSearchDomains; /**< Boolean: If set, we don't force exit