summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonncha O'Cearbhaill <donncha@donncha.is>2015-07-29 15:11:56 +0200
committerDonncha O'Cearbhaill <donncha@donncha.is>2015-09-08 12:33:56 +0200
commit580673cf9487389a55c9c0efea54b818ec272d9c (patch)
treeb90f2300750bd739e05fbc9c5877150531d84fe4
parent1d205163e8584a5e59237b69540b699fde87e7ce (diff)
downloadtor-580673cf9487389a55c9c0efea54b818ec272d9c.tar.gz
tor-580673cf9487389a55c9c0efea54b818ec272d9c.zip
Add GETINFO hs/service/desc/id/ control command
Adds a control command to fetch a local service descriptor from the service descriptor cache. The local service descriptor cache is referenced by the onion address of the service. This control command is documented in the control spec.
-rw-r--r--src/or/control.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/or/control.c b/src/or/control.c
index fb74d7d6f3..900162e3e2 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1927,6 +1927,22 @@ getinfo_helper_dir(control_connection_t *control_conn,
*errmsg = "Not found in cache";
return -1;
}
+ } else if (!strcmpstart(question, "hs/service/desc/id/")) {
+ rend_cache_entry_t *e = NULL;
+
+ question += strlen("hs/service/desc/id/");
+ if (strlen(question) != REND_SERVICE_ID_LEN_BASE32) {
+ *errmsg = "Invalid address";
+ return -1;
+ }
+
+ if (!rend_cache_lookup_entry(question, -1, &e, 1)) {
+ /* Descriptor found in cache */
+ *answer = tor_strdup(e->desc);
+ } else {
+ *errmsg = "Not found in cache";
+ return -1;
+ }
} else if (!strcmpstart(question, "md/id/")) {
const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
const microdesc_t *md = NULL;
@@ -2481,6 +2497,8 @@ static const getinfo_item_t getinfo_items[] = {
PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."),
PREFIX("hs/client/desc/id", dir,
"Hidden Service descriptor in client's cache by onion."),
+ PREFIX("hs/service/desc/id/", dir,
+ "Hidden Service descriptor in services's cache by onion."),
PREFIX("net/listeners/", listeners, "Bound addresses by type"),
ITEM("ns/all", networkstatus,
"Brief summary of router status (v2 directory format)"),