summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/or/directory.c17
-rw-r--r--src/or/dirvote.c10
-rw-r--r--src/or/or.h7
3 files changed, 19 insertions, 15 deletions
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,