Include protocol versions in votes.
This commit is contained in:
parent
d97a385535
commit
f33b90324a
|
@ -24,6 +24,7 @@
|
|||
#include "networkstatus.h"
|
||||
#include "nodelist.h"
|
||||
#include "policies.h"
|
||||
#include "protover.h"
|
||||
#include "rephist.h"
|
||||
#include "router.h"
|
||||
#include "routerlist.h"
|
||||
|
@ -1795,6 +1796,7 @@ version_from_platform(const char *platform)
|
|||
*/
|
||||
char *
|
||||
routerstatus_format_entry(const routerstatus_t *rs, const char *version,
|
||||
const char *protocols,
|
||||
routerstatus_format_type_t format,
|
||||
const vote_routerstatus_t *vrs)
|
||||
{
|
||||
|
@ -1858,6 +1860,9 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version,
|
|||
if (version && strlen(version) < MAX_V_LINE_LEN - V_LINE_OVERHEAD) {
|
||||
smartlist_add_asprintf(chunks, "v %s\n", version);
|
||||
}
|
||||
if (protocols) {
|
||||
smartlist_add_asprintf(chunks, "proto %s\n", protocols);
|
||||
}
|
||||
|
||||
if (format != NS_V2) {
|
||||
const routerinfo_t* desc = router_get_by_id_digest(rs->identity_digest);
|
||||
|
@ -2836,6 +2841,12 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
|
|||
rs->is_flagged_running = 0;
|
||||
|
||||
vrs->version = version_from_platform(ri->platform);
|
||||
if (ri->protocol_list) {
|
||||
vrs->protocols = tor_strdup(ri->protocol_list);
|
||||
} else {
|
||||
vrs->protocols = tor_strdup(
|
||||
protover_compute_for_old_tor(vrs->version));
|
||||
}
|
||||
vrs->microdesc = dirvote_format_all_microdesc_vote_lines(ri, now,
|
||||
microdescriptors);
|
||||
|
||||
|
|
|
@ -96,7 +96,9 @@ size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs,
|
|||
size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed);
|
||||
|
||||
char *routerstatus_format_entry(
|
||||
const routerstatus_t *rs, const char *platform,
|
||||
const routerstatus_t *rs,
|
||||
const char *version,
|
||||
const char *protocols,
|
||||
routerstatus_format_type_t format,
|
||||
const vote_routerstatus_t *vrs);
|
||||
void dirserv_free_all(void);
|
||||
|
|
|
@ -244,7 +244,8 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
|
|||
char *rsf;
|
||||
vote_microdesc_hash_t *h;
|
||||
rsf = routerstatus_format_entry(&vrs->status,
|
||||
vrs->version, NS_V3_VOTE, vrs);
|
||||
vrs->version, vrs->protocols,
|
||||
NS_V3_VOTE, vrs);
|
||||
if (rsf)
|
||||
smartlist_add(chunks, rsf);
|
||||
|
||||
|
@ -2007,7 +2008,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
|||
char *buf;
|
||||
/* Okay!! Now we can write the descriptor... */
|
||||
/* First line goes into "buf". */
|
||||
buf = routerstatus_format_entry(&rs_out, NULL, rs_format, NULL);
|
||||
buf = routerstatus_format_entry(&rs_out, NULL, NULL, rs_format, NULL);
|
||||
if (buf)
|
||||
smartlist_add(chunks, buf);
|
||||
}
|
||||
|
|
|
@ -230,6 +230,7 @@ vote_routerstatus_free(vote_routerstatus_t *rs)
|
|||
if (!rs)
|
||||
return;
|
||||
tor_free(rs->version);
|
||||
tor_free(rs->protocols);
|
||||
tor_free(rs->status.exitsummary);
|
||||
for (h = rs->microdesc; h; h = next) {
|
||||
tor_free(h->microdesc_hash_line);
|
||||
|
@ -2095,7 +2096,7 @@ signed_descs_update_status_from_consensus_networkstatus(smartlist_t *descs)
|
|||
char *
|
||||
networkstatus_getinfo_helper_single(const routerstatus_t *rs)
|
||||
{
|
||||
return routerstatus_format_entry(rs, NULL, NS_CONTROL_PORT, NULL);
|
||||
return routerstatus_format_entry(rs, NULL, NULL, NS_CONTROL_PORT, NULL);
|
||||
}
|
||||
|
||||
/** Alloc and return a string describing routerstatuses for the most
|
||||
|
|
|
@ -2408,6 +2408,8 @@ typedef struct vote_routerstatus_t {
|
|||
* networkstatus_t.known_flags. */
|
||||
char *version; /**< The version that the authority says this router is
|
||||
* running. */
|
||||
char *protocols; /**< The protocols that this authority says this router
|
||||
* provides. */
|
||||
unsigned int has_measured_bw:1; /**< The vote had a measured bw */
|
||||
/** True iff the vote included an entry for ed25519 ID, or included
|
||||
* "id ed25519 none" to indicate that there was no ed25519 ID. */
|
||||
|
|
Loading…
Reference in New Issue