summaryrefslogtreecommitdiff
path: root/src/or/control.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-08-24 14:41:15 +0000
committerNick Mathewson <nickm@torproject.org>2007-08-24 14:41:15 +0000
commit7efc165095eb012ade29b635d02d5fb6356eca41 (patch)
treef6e73293e1779ccd4ce70a60679de39b612e16c9 /src/or/control.c
parentb9d43e2685e809f0a31c7f35e9b2a003a8dd9e41 (diff)
downloadtor-7efc165095eb012ade29b635d02d5fb6356eca41.tar.gz
tor-7efc165095eb012ade29b635d02d5fb6356eca41.zip
r14204@Kushana: nickm | 2007-08-24 10:24:36 -0400
Fix a bug in last patch; add support for getting extrainfo documents by the control port (since it is silly to tell tools to do it without actually giving them an interface). svn:r11270
Diffstat (limited to 'src/or/control.c')
-rw-r--r--src/or/control.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/or/control.c b/src/or/control.c
index d7674c80c5..a6e14b4c85 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1316,7 +1316,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
{
const char *body = signed_descriptor_get_body(&ri->cache_info);
signed_descriptor_t *ei = extrainfo_get_by_descriptor_digest(
- ri->cache_info.signed_descriptor_digest);
+ ri->cache_info.extra_info_digest);
if (ei && body) {
smartlist_add(sl, munge_extrainfo_into_routerinfo(body,
&ri->cache_info, ei));
@@ -1399,7 +1399,21 @@ getinfo_helper_dir(control_connection_t *control_conn,
list_server_status(routerlist->routers, answer, verbose ? 2 : 1) < 0) {
return -1;
}
+ } else if (!strcmpstart(question, "extra-info/digest/")) {
+ question += strlen("extra-info/digest/");
+ if (strlen(question) == HEX_DIGEST_LEN) {
+ char d[DIGEST_LEN];
+ signed_descriptor_t *sd;
+ base16_decode(d, sizeof(d), question, strlen(question));
+ sd = extrainfo_get_by_descriptor_digest(d);
+ if (sd) {
+ const char *body = signed_descriptor_get_body(sd);
+ if (body)
+ *answer = tor_strndup(body, sd->signed_descriptor_len);
+ }
+ }
}
+
return 0;
}
@@ -1649,6 +1663,7 @@ 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("extrainfo/digest/", dir, "Extra-info documents by digest."),
ITEM("ns/all", networkstatus,
"Brief summary of router status (v2 directory format)"),
PREFIX("ns/id/", networkstatus,