From bf66ff915aa3b97922c3313542ed2f2f554d9c57 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Tue, 4 Feb 2014 19:33:48 -0500 Subject: fix longname returned in HS_DESC control events According to control spec, longname should not contain any spaces and is consists only of identy_digest + nickname added two functions: * node_get_verbose_nickname_by_id() * node_describe_longname_by_id() --- src/or/nodelist.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/or/nodelist.c') diff --git a/src/or/nodelist.c b/src/or/nodelist.c index d1a226e4f..b1464422a 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -646,7 +646,7 @@ node_get_purpose(const node_t *node) /** Compute the verbose ("extended") nickname of node and store it * into the MAX_VERBOSE_NICKNAME_LEN+1 character buffer at - * verbose_nickname_out */ + * verbose_name_out */ void node_get_verbose_nickname(const node_t *node, char *verbose_name_out) @@ -662,6 +662,25 @@ node_get_verbose_nickname(const node_t *node, strlcpy(verbose_name_out+1+HEX_DIGEST_LEN+1, nickname, MAX_NICKNAME_LEN+1); } +/** Compute the verbose ("extended") nickname of node with + * given id_digest and store it into the MAX_VERBOSE_NICKNAME_LEN+1 + * character buffer at verbose_name_out + * + * If node_get_by_id() returns NULL, base 16 encoding of + * id_digest is returned instead. */ +void +node_get_verbose_nickname_by_id(const char *id_digest, + char *verbose_name_out) +{ + const node_t *node = node_get_by_id(id_digest); + if (!node) { + verbose_name_out[0] = '$'; + base16_encode(verbose_name_out+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN); + } else { + node_get_verbose_nickname(node, verbose_name_out); + } +} + /** Return true iff it seems that node allows circuits to exit * through it directlry from the client. */ int -- cgit v1.2.3