mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Stop discarding consensus flavors and descriptors we wanted to fetch
Instead, fetch and store consensus flavors and descriptors we wanted to fetch. And serve them if we are a directory cache (or authority).
This commit is contained in:
parent
4614f8e681
commit
e5c608e535
@ -2029,7 +2029,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
|
||||
} else if (!strcmpstart(question, "dir/status/")) {
|
||||
*answer = tor_strdup("");
|
||||
} else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */
|
||||
if (directory_caches_dir_info(get_options())) {
|
||||
if (we_want_to_fetch_flavor(get_options(), FLAV_NS)) {
|
||||
const cached_dir_t *consensus = dirserv_get_consensus("ns");
|
||||
if (consensus)
|
||||
*answer = tor_strdup(consensus->dir);
|
||||
|
@ -1078,11 +1078,14 @@ directory_caches_unknown_auth_certs(const or_options_t *options)
|
||||
return dir_server_mode(options) || options->BridgeRelay;
|
||||
}
|
||||
|
||||
/** Return 1 if we want to keep descriptors, networkstatuses, etc around.
|
||||
/** Return 1 if we want to fetch and serve descriptors, networkstatuses, etc
|
||||
* Else return 0.
|
||||
* Check options->DirPort_set and directory_permits_begindir_requests()
|
||||
* to see if we are willing to serve these directory documents to others via
|
||||
* the DirPort and begindir-over-ORPort, respectively.
|
||||
*
|
||||
* To check if we should fetch documents, use we_want_to_fetch_flavor and
|
||||
* we_want_to_fetch_unknown_auth_certs instead of this function.
|
||||
*/
|
||||
int
|
||||
directory_caches_dir_info(const or_options_t *options)
|
||||
|
@ -814,8 +814,11 @@ networkstatus_nickname_is_unnamed(const char *nickname)
|
||||
#define NONAUTHORITY_NS_CACHE_INTERVAL (60*60)
|
||||
|
||||
/** Return true iff, given the options listed in <b>options</b>, <b>flavor</b>
|
||||
* is the flavor of a consensus networkstatus that we would like to fetch. */
|
||||
static int
|
||||
* is the flavor of a consensus networkstatus that we would like to fetch.
|
||||
*
|
||||
* For certificate fetches, use we_want_to_fetch_unknown_auth_certs, and
|
||||
* for serving fetched documents, use directory_caches_dir_info. */
|
||||
int
|
||||
we_want_to_fetch_flavor(const or_options_t *options, int flavor)
|
||||
{
|
||||
if (flavor < 0 || flavor > N_CONSENSUS_FLAVORS) {
|
||||
@ -1728,9 +1731,9 @@ networkstatus_set_current_consensus(const char *consensus,
|
||||
}
|
||||
|
||||
if (flav != usable_consensus_flavor() &&
|
||||
!directory_caches_dir_info(options)) {
|
||||
/* This consensus is totally boring to us: we won't use it, and we won't
|
||||
* serve it. Drop it. */
|
||||
!we_want_to_fetch_flavor(options, flav)) {
|
||||
/* This consensus is totally boring to us: we won't use it, we didn't want
|
||||
* it, and we won't serve it. Drop it. */
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -1932,7 +1935,7 @@ networkstatus_set_current_consensus(const char *consensus,
|
||||
download_status_failed(&consensus_dl_status[flav], 0);
|
||||
}
|
||||
|
||||
if (directory_caches_dir_info(options)) {
|
||||
if (we_want_to_fetch_flavor(options, flav)) {
|
||||
dirserv_set_cached_consensus_networkstatus(consensus,
|
||||
flavor,
|
||||
&c->digests,
|
||||
|
@ -66,6 +66,7 @@ const routerstatus_t *router_get_consensus_status_by_nickname(
|
||||
int warn_if_unnamed);
|
||||
const char *networkstatus_get_router_digest_by_nickname(const char *nickname);
|
||||
int networkstatus_nickname_is_unnamed(const char *nickname);
|
||||
int we_want_to_fetch_flavor(const or_options_t *options, int flavor);
|
||||
void networkstatus_consensus_download_failed(int status_code,
|
||||
const char *flavname);
|
||||
void update_consensus_networkstatus_fetch_time(time_t now);
|
||||
|
@ -5154,7 +5154,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
|
||||
++n_would_reject;
|
||||
continue; /* We would throw it out immediately. */
|
||||
}
|
||||
if (!directory_caches_dir_info(options) &&
|
||||
if (!we_want_to_fetch_flavor(options, consensus->flavor) &&
|
||||
!client_would_use_router(rs, now, options)) {
|
||||
++n_wouldnt_use;
|
||||
continue; /* We would never use it ourself. */
|
||||
|
Loading…
Reference in New Issue
Block a user