Also cache the protover summary in the routerinfo_t, if we're using that

This commit is contained in:
Nick Mathewson 2018-01-24 13:49:15 -05:00
parent 7792be2d44
commit 92496a739a
2 changed files with 19 additions and 5 deletions

View File

@ -2299,6 +2299,9 @@ typedef struct {
* this routerinfo. Used only during voting. */ * this routerinfo. Used only during voting. */
unsigned int omit_from_vote:1; unsigned int omit_from_vote:1;
/** Flags to summarize the protocol versions for this routerinfo_t. */
protover_summary_flags_t pv;
/** Tor can use this router for general positions in circuits; we got it /** Tor can use this router for general positions in circuits; we got it
* from a directory server as usual, or we're an authority and a server * from a directory server as usual, or we're an authority and a server
* uploaded it. */ * uploaded it. */

View File

@ -379,6 +379,10 @@ static int check_signature_token(const char *digest,
int flags, int flags,
const char *doctype); const char *doctype);
static void summarize_protover_flags(protover_summary_flags_t *out,
const char *protocols,
const char *version);
#undef DEBUG_AREA_ALLOC #undef DEBUG_AREA_ALLOC
#ifdef DEBUG_AREA_ALLOC #ifdef DEBUG_AREA_ALLOC
@ -1895,12 +1899,19 @@ router_parse_entry_from_string(const char *s, const char *end,
} }
} }
if ((tok = find_opt_by_keyword(tokens, K_PLATFORM))) { {
router->platform = tor_strdup(tok->args[0]); const char *version = NULL, *protocols = NULL;
} if ((tok = find_opt_by_keyword(tokens, K_PLATFORM))) {
router->platform = tor_strdup(tok->args[0]);
version = tok->args[0];
}
if ((tok = find_opt_by_keyword(tokens, K_PROTO))) { if ((tok = find_opt_by_keyword(tokens, K_PROTO))) {
router->protocol_list = tor_strdup(tok->args[0]); router->protocol_list = tor_strdup(tok->args[0]);
protocols = tok->args[0];
}
summarize_protover_flags(&router->pv, protocols, version);
} }
if ((tok = find_opt_by_keyword(tokens, K_CONTACT))) { if ((tok = find_opt_by_keyword(tokens, K_CONTACT))) {