diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-08-24 14:41:15 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-08-24 14:41:15 +0000 |
commit | 7efc165095eb012ade29b635d02d5fb6356eca41 (patch) | |
tree | f6e73293e1779ccd4ce70a60679de39b612e16c9 | |
parent | b9d43e2685e809f0a31c7f35e9b2a003a8dd9e41 (diff) | |
download | tor-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
-rw-r--r-- | doc/spec/control-spec.txt | 4 | ||||
-rw-r--r-- | src/or/control.c | 17 |
2 files changed, 20 insertions, 1 deletions
diff --git a/doc/spec/control-spec.txt b/doc/spec/control-spec.txt index ed9e9c3cd1..fc9d3188d1 100644 --- a/doc/spec/control-spec.txt +++ b/doc/spec/control-spec.txt @@ -367,6 +367,10 @@ $Id$ "desc/id/<OR identity>" or "desc/name/<OR nickname>" -- the latest server descriptor for a given OR, NUL-terminated. + "extra-info/digest/<digest>" -- the extrainfo document whose digest (in + hex) is <digest>. Only available if we're downloading extra-info + documents. + "ns/id/<OR identity>" or "ns/name/<OR nickname>" -- the latest network status info for a given OR. Network status info is as given in dir-spec.txt, and reflects the current beliefs of this Tor about the 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, |