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:
Nick Mathewson 2006-04-10 01:35:56 +00:00
parent 06c30fb8b7
commit e258276c2b
4 changed files with 22 additions and 9 deletions

View File

@ -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) {

View File

@ -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. */

View File

@ -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,

View File

@ -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