mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Add ability to parse one or more m line from a vote.
This commit is contained in:
parent
bdf4839395
commit
a7ba02f3f1
14
src/or/or.h
14
src/or/or.h
@ -1557,6 +1557,14 @@ typedef struct routerstatus_t {
|
|||||||
|
|
||||||
} routerstatus_t;
|
} routerstatus_t;
|
||||||
|
|
||||||
|
/**DOCDOC*/
|
||||||
|
typedef struct microdescriptor_t {
|
||||||
|
crypto_pk_env_t *onion_pkey;
|
||||||
|
smartlist_t *family;
|
||||||
|
char *exitsummary; /**< exit policy summary -
|
||||||
|
* XXX weasel: this probably should not stay a string. */
|
||||||
|
} microdescriptor_t;
|
||||||
|
|
||||||
/** How many times will we try to download a router's descriptor before giving
|
/** How many times will we try to download a router's descriptor before giving
|
||||||
* up? */
|
* up? */
|
||||||
#define MAX_ROUTERDESC_DOWNLOAD_FAILURES 8
|
#define MAX_ROUTERDESC_DOWNLOAD_FAILURES 8
|
||||||
@ -1599,6 +1607,11 @@ typedef struct networkstatus_v2_t {
|
|||||||
* sorted by identity_digest. */
|
* sorted by identity_digest. */
|
||||||
} networkstatus_v2_t;
|
} networkstatus_v2_t;
|
||||||
|
|
||||||
|
typedef struct vote_microdesc_hash_t {
|
||||||
|
struct vote_microdesc_hash_t *next;
|
||||||
|
char *microdesc_hash_line;
|
||||||
|
} vote_microdesc_hash_t;
|
||||||
|
|
||||||
/** The claim about a single router, made in a vote. */
|
/** The claim about a single router, made in a vote. */
|
||||||
typedef struct vote_routerstatus_t {
|
typedef struct vote_routerstatus_t {
|
||||||
routerstatus_t status; /**< Underlying 'status' object for this router.
|
routerstatus_t status; /**< Underlying 'status' object for this router.
|
||||||
@ -1607,6 +1620,7 @@ typedef struct vote_routerstatus_t {
|
|||||||
* networkstatus_t.known_flags. */
|
* networkstatus_t.known_flags. */
|
||||||
char *version; /**< The version that the authority says this router is
|
char *version; /**< The version that the authority says this router is
|
||||||
* running. */
|
* running. */
|
||||||
|
vote_microdesc_hash_t *microdesc;
|
||||||
} vote_routerstatus_t;
|
} vote_routerstatus_t;
|
||||||
|
|
||||||
/** Information about a single voter in a vote or a consensus. */
|
/** Information about a single voter in a vote or a consensus. */
|
||||||
|
@ -55,6 +55,7 @@ typedef enum {
|
|||||||
K_S,
|
K_S,
|
||||||
K_V,
|
K_V,
|
||||||
K_W,
|
K_W,
|
||||||
|
K_M,
|
||||||
K_EVENTDNS,
|
K_EVENTDNS,
|
||||||
K_EXTRA_INFO,
|
K_EXTRA_INFO,
|
||||||
K_EXTRA_INFO_DIGEST,
|
K_EXTRA_INFO_DIGEST,
|
||||||
@ -321,6 +322,7 @@ static token_rule_t rtrstatus_token_table[] = {
|
|||||||
T1( "s", K_S, ARGS, NO_OBJ ),
|
T1( "s", K_S, ARGS, NO_OBJ ),
|
||||||
T01("v", K_V, CONCAT_ARGS, NO_OBJ ),
|
T01("v", K_V, CONCAT_ARGS, NO_OBJ ),
|
||||||
T01("w", K_W, ARGS, NO_OBJ ),
|
T01("w", K_W, ARGS, NO_OBJ ),
|
||||||
|
T0N("m", K_M, CONCAT_ARGS, NO_OBJ ),
|
||||||
T0N("opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
|
T0N("opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
|
||||||
END_OF_TABLE
|
END_OF_TABLE
|
||||||
};
|
};
|
||||||
@ -2050,6 +2052,18 @@ routerstatus_parse_entry_from_string(memarea_t *area,
|
|||||||
rs->has_exitsummary = 1;
|
rs->has_exitsummary = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vote_rs) {
|
||||||
|
SMARTLIST_FOREACH_BEGIN(tokens, directory_token_t *, t) {
|
||||||
|
if (t->tp == K_M && t->n_args) {
|
||||||
|
vote_microdesc_hash_t *line =
|
||||||
|
tor_malloc(sizeof(vote_microdesc_hash_t));
|
||||||
|
line->next = vote_rs->microdesc;
|
||||||
|
line->microdesc_hash_line = tor_strdup(t->args[0]);
|
||||||
|
vote_rs->microdesc = line;
|
||||||
|
}
|
||||||
|
} SMARTLIST_FOREACH_END(t);
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcasecmp(rs->nickname, UNNAMED_ROUTER_NICKNAME))
|
if (!strcasecmp(rs->nickname, UNNAMED_ROUTER_NICKNAME))
|
||||||
rs->is_named = 0;
|
rs->is_named = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user