commit ef2b0bd528880ec7b1a56a79a988a1e92fbb1b15 Author: Robert Ransom rransom.8774@gmail.com Date: Mon Nov 7 15:32:33 2011 -0800
Add GETINFO md/id/* and md/name/* items for relay microdescs --- changes/bug3832 | 9 +++++++++ src/or/control.c | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/changes/bug3832 b/changes/bug3832 new file mode 100644 index 0000000..230f0d7 --- /dev/null +++ b/changes/bug3832 @@ -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. + diff --git a/src/or/control.c b/src/or/control.c index 1fdbac2..52af4a0 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -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,