Add GETINFO md/id/* and md/name/* items for relay microdescs

This commit is contained in:
Robert Ransom 2011-11-07 15:32:33 -08:00
parent e26f5553ec
commit ef2b0bd528
2 changed files with 27 additions and 0 deletions

9
changes/bug3832 Normal file
View File

@ -0,0 +1,9 @@
o Major features:
- Allow Tor controllers like Vidalia to obtain the microdescriptor
for a relay by identity digest or nickname. Previously,
microdescriptors were only available by their own digests, so a
controller would have to ask for and parse the whole
microdescriptor consensus in order to look up a single relay's
microdesc. Fixes bug 3832; bugfix on 0.2.3.1-alpha.

View File

@ -1640,6 +1640,22 @@ getinfo_helper_dir(control_connection_t *control_conn,
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
} else if (!strcmpstart(question, "md/id/")) {
const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
const microdesc_t *md = NULL;
if (node) md = node->md;
if (md) {
tor_assert(md->body);
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "md/name/")) {
const node_t *node = node_get_by_nickname(question+strlen("md/name/"), 1);
const microdesc_t *md = NULL;
if (node) md = node->md;
if (md) {
tor_assert(md->body);
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "desc-annotations/id/")) {
ri = router_get_by_hexdigest(question+
strlen("desc-annotations/id/"));
@ -2034,6 +2050,8 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("desc/all-recent", dir,
"All non-expired, non-superseded router descriptors."),
ITEM("desc/all-recent-extrainfo-hack", dir, NULL), /* Hack. */
PREFIX("md/id/", dir, "Microdescriptors by ID"),
PREFIX("md/name/", dir, "Microdescriptors by name"),
PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."),
PREFIX("net/listeners/", listeners, "Bound addresses by type"),
ITEM("ns/all", networkstatus,