mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Clearly mark directory footer so we parse the new weight line.
This commit is contained in:
parent
931e073a4f
commit
87a0430a74
@ -111,6 +111,7 @@ format_networkstatus_vote(crypto_pk_env_t *private_signing_key,
|
||||
len = 8192;
|
||||
len += strlen(version_lines);
|
||||
len += (RS_ENTRY_LEN+MICRODESC_LINE_LEN)*smartlist_len(rl->routers);
|
||||
len += strlen("\ndirectory-footer\n");
|
||||
len += v3_ns->cert->cache_info.signed_descriptor_len;
|
||||
|
||||
status = tor_malloc(len);
|
||||
@ -199,6 +200,9 @@ format_networkstatus_vote(crypto_pk_env_t *private_signing_key,
|
||||
}
|
||||
} SMARTLIST_FOREACH_END(vrs);
|
||||
|
||||
tor_snprintf(outp, endp-outp, "directory-footer\n");
|
||||
outp += strlen(outp);
|
||||
|
||||
{
|
||||
char signing_key_fingerprint[FINGERPRINT_LEN+1];
|
||||
if (tor_snprintf(outp, endp-outp, "directory-signature ")<0) {
|
||||
@ -1672,6 +1676,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
||||
tor_free(measured_bws);
|
||||
}
|
||||
|
||||
if (consensus_method >= 9) {
|
||||
/* Starting with consensus method 9, we clearly mark the directory
|
||||
* footer region */
|
||||
smartlist_add(chunks, tor_strdup("directory-footer\n"));
|
||||
}
|
||||
|
||||
if (consensus_method >= 9) {
|
||||
int64_t weight_scale = BW_WEIGHT_SCALE;
|
||||
char *bw_weight_param = NULL;
|
||||
|
@ -1870,22 +1870,30 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
|
||||
|
||||
/** Helper: given a string <b>s</b>, return the start of the next router-status
|
||||
* object (starting with "r " at the start of a line). If none is found,
|
||||
* return the start of the next directory signature. If none is found, return
|
||||
* the end of the string. */
|
||||
* return the start of the directory footer, or the next directory signature.
|
||||
* If none is found, return the end of the string. */
|
||||
static INLINE const char *
|
||||
find_start_of_next_routerstatus(const char *s)
|
||||
{
|
||||
const char *eos = strstr(s, "\nr ");
|
||||
if (eos) {
|
||||
const char *eos2 = tor_memstr(s, eos-s, "\ndirectory-signature");
|
||||
const char *eos2 = tor_memstr(s, eos-s, "\ndirectory-footer\n");
|
||||
if (eos2) eos2 += strlen("\ndirectory-footer");
|
||||
else eos2 = tor_memstr(s, eos-s, "\ndirectory-signature");
|
||||
/* Technically we are returning either the start of the next
|
||||
* routerstatus AFTER the \n, or the start of the next consensus
|
||||
* line AT the \n. This seems asymmetric, but leaving it that way
|
||||
* for now for stability. */
|
||||
if (eos2 && eos2 < eos)
|
||||
return eos2;
|
||||
else
|
||||
return eos+1;
|
||||
} else {
|
||||
if ((eos = strstr(s, "\ndirectory-footer\n")))
|
||||
return eos+strlen("\ndirectory-footer\n");
|
||||
if ((eos = strstr(s, "\ndirectory-signature")))
|
||||
return eos+1;
|
||||
return s + strlen(s);
|
||||
return s + strlen(s);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user