mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Change a dumb interface. Also, increment trusted_dir_server_t.n_networkstatus_failures when an all.z download fails entirely or partially.
svn:r6345
This commit is contained in:
parent
06c30fb8b7
commit
e258276c2b
@ -89,7 +89,7 @@ directory_post_to_dirservers(uint8_t purpose, const char *payload,
|
||||
int post_via_tor;
|
||||
int post_to_v1_only;
|
||||
|
||||
router_get_trusted_dir_servers(&dirservers);
|
||||
dirservers = router_get_trusted_dir_servers();
|
||||
tor_assert(dirservers);
|
||||
/* Only old dirservers handle rendezvous descriptor publishing. */
|
||||
post_to_v1_only = (purpose == DIR_PURPOSE_UPLOAD_RENDDESC);
|
||||
@ -296,6 +296,9 @@ connection_dir_download_networkstatus_failed(connection_t *conn)
|
||||
}
|
||||
if (!strcmpstart(conn->requested_resource, "all")) {
|
||||
/* We're a non-authoritative directory cache; try again. */
|
||||
smartlist_t *trusted_dirs = router_get_trusted_dir_servers();
|
||||
SMARTLIST_FOREACH(trusted_dirs, trusted_dir_server_t *, ds,
|
||||
++ds->n_networkstatus_failures);
|
||||
directory_get_from_dirserver(conn->purpose, "all.z",
|
||||
0 /* don't retry_if_no_servers */);
|
||||
} else if (!strcmpstart(conn->requested_resource, "fp/")) {
|
||||
@ -993,6 +996,16 @@ connection_dir_client_reached_eof(connection_t *conn)
|
||||
which = smartlist_create();
|
||||
dir_split_resource_into_fingerprints(conn->requested_resource+3,
|
||||
which, NULL, 0);
|
||||
} else if (conn->requested_resource &&
|
||||
!strcmpstart(conn->requested_resource, "all")) {
|
||||
which = smartlist_create();
|
||||
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
|
||||
trusted_dir_server_t *, ds,
|
||||
{
|
||||
char *cp = tor_malloc(HEX_DIGEST_LEN+1);
|
||||
base16_encode(cp, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
|
||||
smartlist_add(which, cp);
|
||||
});
|
||||
}
|
||||
cp = body;
|
||||
while (*cp) {
|
||||
|
@ -969,7 +969,7 @@ dirserv_set_cached_networkstatus_v2(const char *networkstatus,
|
||||
digestmap_remove(cached_v2_networkstatus, identity);
|
||||
}
|
||||
|
||||
router_get_trusted_dir_servers(&trusted_dirs);
|
||||
trusted_dirs = router_get_trusted_dir_servers();
|
||||
if (digestmap_size(cached_v2_networkstatus) >
|
||||
smartlist_len(trusted_dirs) + MAX_UNTRUSTED_NETWORKSTATUSES) {
|
||||
/* We need to remove the oldest untrusted networkstatus. */
|
||||
|
@ -2290,7 +2290,7 @@ typedef struct trusted_dir_server_t {
|
||||
|
||||
int router_reload_router_list(void);
|
||||
int router_reload_networkstatus(void);
|
||||
void router_get_trusted_dir_servers(smartlist_t **outp);
|
||||
smartlist_t *router_get_trusted_dir_servers(void);
|
||||
routerstatus_t *router_pick_directory_server(int requireother,
|
||||
int fascistfirewall,
|
||||
int for_v2_directory,
|
||||
|
@ -306,17 +306,17 @@ router_reload_router_list(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Set *<b>outp</b> to a smartlist containing a list of
|
||||
* trusted_dir_server_t * for all known trusted dirservers. Callers
|
||||
* must not modify the list or its contents.
|
||||
/** Return a smartlist containing a list of trusted_dir_server_t * for all
|
||||
* known trusted dirservers. Callers must not modify the list or its
|
||||
* contents.
|
||||
*/
|
||||
void
|
||||
router_get_trusted_dir_servers(smartlist_t **outp)
|
||||
smartlist_t *
|
||||
router_get_trusted_dir_servers(void)
|
||||
{
|
||||
if (!trusted_dir_servers)
|
||||
trusted_dir_servers = smartlist_create();
|
||||
|
||||
*outp = trusted_dir_servers;
|
||||
return trusted_dir_servers;
|
||||
}
|
||||
|
||||
/** Try to find a running dirserver. If there are no running dirservers
|
||||
|
Loading…
Reference in New Issue
Block a user