diff --git a/src/or/directory.c b/src/or/directory.c index 91f538a1c8..e41b790e60 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2182,25 +2182,24 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, smartlist_add(items, (char*)item); } else if (!strcmp(url, "authority")) { const cached_dir_t *d; - if ((d=dirvote_get_vote(NULL, 1, current, !current))) + int flags = DGV_BY_ID | + (current ? DGV_INCLUDE_PREVIOUS : DGV_INCLUDE_PENDING); + if ((d=dirvote_get_vote(NULL, flags))) smartlist_add(dir_items, (cached_dir_t*)d); } else { const cached_dir_t *d; smartlist_t *fps = smartlist_create(); - int by_id, include_pending, include_previous; + int flags; if (!strcmpstart(url, "d/")) { url += 2; - by_id = 0; - include_pending = include_previous = 1; + flags = DGV_BY_ID | DGV_INCLUDE_PENDING | DGV_INCLUDE_PREVIOUS; } else { - by_id = 1; - include_pending = current; - include_previous = !current; + flags = DGV_BY_ID | + (current ? DGV_INCLUDE_PREVIOUS : DGV_INCLUDE_PENDING); } dir_split_resource_into_fingerprints(url, fps, NULL, 1, 1); SMARTLIST_FOREACH(fps, char *, fp, { - if ((d = dirvote_get_vote(fp, by_id, - include_pending, include_previous))) + if ((d = dirvote_get_vote(fp, flags))) smartlist_add(dir_items, (cached_dir_t*)d); tor_free(fp); }); diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 43d0b108f1..6a96eb91fe 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -1235,7 +1235,8 @@ dirvote_fetch_missing_votes(void) { if (!(ds->type & V3_AUTHORITY)) continue; - if (!dirvote_get_vote(ds->v3_identity_digest, 1, 0, 1)) { + if (!dirvote_get_vote(ds->v3_identity_digest, + DGV_BY_ID|DGV_INCLUDE_PENDING)) { char *cp = tor_malloc(HEX_DIGEST_LEN+1); base16_encode(cp, HEX_DIGEST_LEN+1, ds->v3_identity_digest, DIGEST_LEN); @@ -1744,9 +1745,12 @@ dirvote_get_pending_detached_signatures(void) * consensus that's in progress. May return NULL if we have no vote for the * authority in question. */ const cached_dir_t * -dirvote_get_vote(const char *fp, int by_id, int include_previous, - int include_pending) +dirvote_get_vote(const char *fp, int flags) { + int by_id = flags & DGV_BY_ID; + const int include_pending = flags & DGV_INCLUDE_PENDING; + const int include_previous = flags & DGV_INCLUDE_PREVIOUS; + if (!pending_vote_list && !previous_vote_list) return NULL; if (fp == NULL) { diff --git a/src/or/or.h b/src/or/or.h index 931900091f..a2016a1203 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2944,9 +2944,10 @@ int dirvote_add_signatures(const char *detached_signatures_body); /* Item access */ const char *dirvote_get_pending_consensus(void); const char *dirvote_get_pending_detached_signatures(void); -const cached_dir_t *dirvote_get_vote(const char *fp, int by_id, - int include_pending, - int include_previous); +#define DGV_BY_ID 1 +#define DGV_INCLUDE_PENDING 2 +#define DGV_INCLUDE_PREVIOUS 4 +const cached_dir_t *dirvote_get_vote(const char *fp, int flags); #ifdef DIRVOTE_PRIVATE int networkstatus_check_voter_signature(networkstatus_vote_t *consensus,