Fix dirserv_get_networkstatus_v2's api: its function comments

did not at all match its behavior, and I can't think of a case
when it should return anything other than 0.

This fix may allow getinfo dir/status/foo to work.


svn:r6285
This commit is contained in:
Roger Dingledine 2006-04-01 22:00:49 +00:00
parent e754664d62
commit 6fb27741ba
4 changed files with 7 additions and 17 deletions

View File

@ -1509,11 +1509,8 @@ handle_getinfo_helper(const char *question, char **answer)
if (!get_options()->DirPort) if (!get_options()->DirPort)
return 0; return 0;
status_list = smartlist_create(); status_list = smartlist_create();
if (!dirserv_get_networkstatus_v2(status_list, dirserv_get_networkstatus_v2(status_list,
question+strlen("dir/status/"))) { question+strlen("dir/status/"));
smartlist_free(status_list);
return 0;
}
len = 0; len = 0;
SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len); SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
cp = *answer = tor_malloc(len+1); cp = *answer = tor_malloc(len+1);

View File

@ -1430,10 +1430,7 @@ directory_handle_command_get(connection_t *conn, char *headers,
const char *key = url + strlen("/tor/status/"); const char *key = url + strlen("/tor/status/");
if (deflated) if (deflated)
url[url_len-2] = '\0'; url[url_len-2] = '\0';
if (dirserv_get_networkstatus_v2(dir_objs, key)) { dirserv_get_networkstatus_v2(dir_objs, key);
smartlist_free(dir_objs);
return 0;
}
if (!strcmpstart(key, "fp/")) if (!strcmpstart(key, "fp/"))
request_type = deflated?"/tor/status/fp.z":"/tor/status/fp"; request_type = deflated?"/tor/status/fp.z":"/tor/status/fp";
else if (!strcmpstart(key, "authority")) else if (!strcmpstart(key, "authority"))

View File

@ -1454,12 +1454,9 @@ generate_v2_networkstatus(void)
/** Look for a network status object as specified by <b>key</b>, which should /** Look for a network status object as specified by <b>key</b>, which should
* be either "authority" (to find a network status generated by us), a hex * be either "authority" (to find a network status generated by us), a hex
* identity digest (to find a network status generated by given directory), or * identity digest (to find a network status generated by given directory), or
* "all" (to return all the v2 network status objects we have, concatenated). * "all" (to return all the v2 network status objects we have).
* If <b>compress</b>, find the version compressed with zlib. Return 0 if
* nothing was found; otherwise set *<b>directory</b> to the matching network
* status and return its length.
*/ */
int void
dirserv_get_networkstatus_v2(smartlist_t *result, dirserv_get_networkstatus_v2(smartlist_t *result,
const char *key) const char *key)
{ {
@ -1468,7 +1465,7 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
if (!cached_v2_networkstatus) if (!cached_v2_networkstatus)
cached_v2_networkstatus = digestmap_new(); cached_v2_networkstatus = digestmap_new();
if (!(strcmp(key,"authority"))) { if (!strcmp(key,"authority")) {
if (get_options()->AuthoritativeDir) { if (get_options()->AuthoritativeDir) {
cached_dir_t *d = cached_dir_t *d =
dirserv_pick_cached_dir_obj(NULL, dirserv_pick_cached_dir_obj(NULL,
@ -1518,7 +1515,6 @@ dirserv_get_networkstatus_v2(smartlist_t *result,
}); });
smartlist_free(digests); smartlist_free(digests);
} }
return 0;
} }
/** Add a signed_descriptor_t to <b>descs_out</b> for each router matching /** Add a signed_descriptor_t to <b>descs_out</b> for each router matching

View File

@ -1924,7 +1924,7 @@ void dirserv_set_cached_directory(const char *directory, time_t when,
void dirserv_set_cached_networkstatus_v2(const char *directory, void dirserv_set_cached_networkstatus_v2(const char *directory,
const char *identity, const char *identity,
time_t published); time_t published);
int dirserv_get_networkstatus_v2(smartlist_t *result, const char *key); void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key);
int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key, int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
const char **msg); const char **msg);
void dirserv_orconn_tls_done(const char *address, void dirserv_orconn_tls_done(const char *address,