diff options
author | Roger Dingledine <arma@torproject.org> | 2006-03-15 00:10:13 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2006-03-15 00:10:13 +0000 |
commit | 903183ea28726dd51af89c6e661dafc82099eaed (patch) | |
tree | 29155705c56b5be336d09c3239a60c136fc82766 /src | |
parent | a4ec555228153801a1b866a1eb93c633b391a88e (diff) | |
download | tor-903183ea28726dd51af89c6e661dafc82099eaed.tar.gz tor-903183ea28726dd51af89c6e661dafc82099eaed.zip |
if we as a directory mirror don't know of any v1 directory
authorities, then don't try to cache any v1 directories.
svn:r6162
Diffstat (limited to 'src')
-rw-r--r-- | src/or/main.c | 3 | ||||
-rw-r--r-- | src/or/or.h | 1 | ||||
-rw-r--r-- | src/or/routerlist.c | 11 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/or/main.c b/src/or/main.c index 0fe663b193..c961d3414d 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -826,7 +826,8 @@ run_scheduled_events(time_t now) if (options->DirPort && !options->V1AuthoritativeDir) { /* XXX actually, we should only do this if we want to advertise * our dirport. not simply if we configured one. -RD */ - directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 1); + if (any_trusted_dir_supports_v1()) + directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL, 1); } time_to_fetch_directory = now + get_dir_fetch_period(options); diff --git a/src/or/or.h b/src/or/or.h index 49c47caa30..bc4bce0071 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2341,6 +2341,7 @@ void add_trusted_dir_server(const char *nickname, const char *address, uint16_t port, const char *digest, int supports_v1); void clear_trusted_dir_servers(void); +int any_trusted_dir_supports_v1(void); networkstatus_t *networkstatus_get_by_digest(const char *digest); local_routerstatus_t *router_get_combined_status_by_digest(const char *digest); void update_networkstatus_downloads(time_t now); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 9cb1807265..1aaebb4468 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2678,6 +2678,17 @@ clear_trusted_dir_servers(void) } } +/** Return 1 if any trusted dir server supports v1 directories, + * else return 0. */ +int +any_trusted_dir_supports_v1(void) +{ + if (trusted_dir_servers) + SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent, + if (ent->is_v1_authority) return 1); + return 0; +} + /** Return the network status with a given identity digest. */ networkstatus_t * networkstatus_get_by_digest(const char *digest) |