summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2006-03-15 00:10:13 +0000
committerRoger Dingledine <arma@torproject.org>2006-03-15 00:10:13 +0000
commit903183ea28726dd51af89c6e661dafc82099eaed (patch)
tree29155705c56b5be336d09c3239a60c136fc82766
parenta4ec555228153801a1b866a1eb93c633b391a88e (diff)
downloadtor-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
-rw-r--r--src/or/main.c3
-rw-r--r--src/or/or.h1
-rw-r--r--src/or/routerlist.c11
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)