diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-12-11 19:12:45 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-12-11 19:12:45 +0000 |
commit | 29f5a65a166cd06879ef55b7b5a38ae88c40482f (patch) | |
tree | 6ce6bde4a2ca017cb3fa8af85cf6752062694a16 | |
parent | 4e69284e8926554acd01c3beab72e26609c89926 (diff) | |
download | tor-29f5a65a166cd06879ef55b7b5a38ae88c40482f.tar.gz tor-29f5a65a166cd06879ef55b7b5a38ae88c40482f.zip |
Change directory_get_from_dirserver to take a set of flags to be passed to pick_(trusted_)dirserver. This lets us make its interface smarter, and makes code that calls it a little more readable.
svn:r17592
-rw-r--r-- | src/or/directory.c | 21 | ||||
-rw-r--r-- | src/or/networkstatus.c | 6 | ||||
-rw-r--r-- | src/or/or.h | 2 | ||||
-rw-r--r-- | src/or/rendclient.c | 3 | ||||
-rw-r--r-- | src/or/routerlist.c | 8 |
5 files changed, 22 insertions, 18 deletions
diff --git a/src/or/directory.c b/src/or/directory.c index ee31cc6683..fd609ea9a6 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -290,19 +290,18 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, /** Start a connection to a random running directory server, using * connection purpose <b>dir_purpose</b>, intending to fetch descriptors * of purpose <b>router_purpose</b>, and requesting <b>resource</b>. - * If <b>retry_if_no_servers</b>, then if all the possible servers seem - * down, mark them up and try again. + * Use <b>pds_flags</b> as arguments to router_pick_directory_server + * or router_pick_trusteddirserver. */ void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, - const char *resource, int retry_if_no_servers) + const char *resource, int pds_flags) { routerstatus_t *rs = NULL; or_options_t *options = get_options(); int prefer_authority = directory_fetches_from_authorities(options); int get_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose); authority_type_t type; - int flags = retry_if_no_servers ? PDS_RETRY_IF_NO_SERVERS : 0; time_t if_modified_since = 0; /* FFFF we could break this switch into its own function, and call @@ -368,15 +367,15 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, } else { if (prefer_authority || type == BRIDGE_AUTHORITY) { /* only ask authdirservers, and don't ask myself */ - rs = router_pick_trusteddirserver(type, flags); + rs = router_pick_trusteddirserver(type, pds_flags); } if (!rs && type != BRIDGE_AUTHORITY) { /* anybody with a non-zero dirport will do */ - rs = router_pick_directory_server(type, flags); + rs = router_pick_directory_server(type, pds_flags); if (!rs) { log_info(LD_DIR, "No router found for %s; falling back to " "dirserver list.", dir_conn_purpose_to_string(dir_purpose)); - rs = router_pick_trusteddirserver(type, flags); + rs = router_pick_trusteddirserver(type, pds_flags); if (!rs) get_via_tor = 1; /* last resort: try routing it via Tor */ } @@ -386,12 +385,12 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, /* Never use fascistfirewall; we're going via Tor. */ if (dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) { /* only ask hidserv authorities, any of them will do */ - flags |= PDS_IGNORE_FASCISTFIREWALL|PDS_ALLOW_SELF; - rs = router_pick_trusteddirserver(HIDSERV_AUTHORITY, flags); + pds_flags |= PDS_IGNORE_FASCISTFIREWALL|PDS_ALLOW_SELF; + rs = router_pick_trusteddirserver(HIDSERV_AUTHORITY, pds_flags); } else { /* anybody with a non-zero dirport will do. Disregard firewalls. */ - flags |= PDS_IGNORE_FASCISTFIREWALL; - rs = router_pick_directory_server(type, flags); + pds_flags |= PDS_IGNORE_FASCISTFIREWALL; + rs = router_pick_directory_server(type, pds_flags); /* If we have any hope of building an indirect conn, we know some router * descriptors. If (rs==NULL), we can't build circuits anyway, so * there's no point in falling back to the authorities in this case. */ diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 8ed66f068f..aaf7d7c29d 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -1049,7 +1049,8 @@ update_v2_networkstatus_cache_downloads(time_t now) if (!connection_get_by_type_purpose(CONN_TYPE_DIR, DIR_PURPOSE_FETCH_NETWORKSTATUS)) directory_get_from_dirserver(DIR_PURPOSE_FETCH_NETWORKSTATUS, - ROUTER_PURPOSE_GENERAL, "all.z",1); + ROUTER_PURPOSE_GENERAL, "all.z", + PDS_RETRY_IF_NO_SERVERS); } } @@ -1092,7 +1093,8 @@ update_consensus_networkstatus_downloads(time_t now) log_info(LD_DIR, "Launching networkstatus consensus download."); directory_get_from_dirserver(DIR_PURPOSE_FETCH_CONSENSUS, - ROUTER_PURPOSE_GENERAL, NULL, 1); + ROUTER_PURPOSE_GENERAL, NULL, + PDS_RETRY_IF_NO_SERVERS); } /** Called when an attempt to download a consensus fails: note that the diff --git a/src/or/or.h b/src/or/or.h index 96af19e1f7..0335afef48 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3220,7 +3220,7 @@ void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, size_t payload_len, size_t extrainfo_len); void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, const char *resource, - int retry_if_no_servers); + int pds_flags); void directory_get_from_all_authorities(uint8_t dir_purpose, uint8_t router_purpose, const char *resource); diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 3f0068cf74..7964185fce 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -448,7 +448,8 @@ rend_client_refetch_renddesc(const char *query) } else { /* not one already; initiate a dir rend desc lookup */ directory_get_from_dirserver(DIR_PURPOSE_FETCH_RENDDESC, - ROUTER_PURPOSE_GENERAL, query, 1); + ROUTER_PURPOSE_GENERAL, query, + PDS_RETRY_IF_NO_SERVERS); } } diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 5ed8813f9a..032790cc6d 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -516,7 +516,7 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now) smartlist_free(fps); } directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0, - resource, 1); + resource, PDS_RETRY_IF_NO_SERVERS); done: tor_free(resource); @@ -3807,7 +3807,8 @@ initiate_descriptor_downloads(routerstatus_t *source, 0, /* not private */ resource, NULL, 0, 0); } else { - directory_get_from_dirserver(purpose, ROUTER_PURPOSE_GENERAL, resource, 1); + directory_get_from_dirserver(purpose, ROUTER_PURPOSE_GENERAL, resource, + PDS_RETRY_IF_NO_SERVERS); } tor_free(resource); } @@ -4193,7 +4194,8 @@ update_router_descriptor_downloads(time_t now) last_dummy_download + DUMMY_DOWNLOAD_INTERVAL < now) { last_dummy_download = now; directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC, - ROUTER_PURPOSE_GENERAL, "authority.z", 1); + ROUTER_PURPOSE_GENERAL, "authority.z", + PDS_RETRY_IF_NO_SERVERS); } } |