Merge remote-tracking branch 'sysrqb/bug9859_5'

This commit is contained in:
Nick Mathewson
2013-11-20 11:03:37 -05:00
4 changed files with 35 additions and 1 deletions
+6
View File
@@ -0,0 +1,6 @@
o Minor Feature
- Assign status flags to bridges based on thresholds calculated
over all bridges. Fixes bug 9859.
- Add threshold cutoffs to the networkstatus document created by
the Bridge Authority. Fixes bug 1117.
+19
View File
@@ -1957,6 +1957,10 @@ dirserv_compute_performance_thresholds(routerlist_t *rl,
/* Now, fill in the arrays. */
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), node_t *, node) {
if (options->BridgeAuthoritativeDir &&
node->ri &&
node->ri->purpose != ROUTER_PURPOSE_BRIDGE)
continue;
if (router_counts_toward_thresholds(node, now, omit_as_sybil,
require_mbw)) {
routerinfo_t *ri = node->ri;
@@ -2071,6 +2075,21 @@ dirserv_compute_performance_thresholds(routerlist_t *rl,
tor_free(wfus);
}
/* Use dirserv_compute_performance_thresholds() to compute the thresholds
* for the status flags, specifically for bridges.
*
* This is only called by a Bridge Authority from
* networkstatus_getinfo_by_purpose().
*/
void
dirserv_compute_bridge_flag_thresholds(routerlist_t *rl)
{
digestmap_t *omit_as_sybil = digestmap_new();
dirserv_compute_performance_thresholds(rl, omit_as_sybil);
digestmap_free(omit_as_sybil, NULL);
}
/** Measured bandwidth cache entry */
typedef struct mbw_cache_entry_s {
long mbw_kb;
+1
View File
@@ -51,6 +51,7 @@ int list_server_status_v1(smartlist_t *routers, char **router_status_out,
int dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_t *private_key);
char *dirserv_get_flag_thresholds_line(void);
void dirserv_compute_bridge_flag_thresholds(routerlist_t *rl);
int directory_fetches_from_authorities(const or_options_t *options);
int directory_fetches_dir_info_early(const or_options_t *options);
+9 -1
View File
@@ -2171,9 +2171,17 @@ networkstatus_dump_bridge_status_to_file(time_t now)
char *status = networkstatus_getinfo_by_purpose("bridge", now);
const or_options_t *options = get_options();
char *fname = NULL;
char *thresholds = NULL, *thresholds_and_status = NULL;
routerlist_t *rl = router_get_routerlist();
dirserv_compute_bridge_flag_thresholds(rl);
thresholds = dirserv_get_flag_thresholds_line();
tor_asprintf(&thresholds_and_status, "flag-thresholds %s\n%s",
thresholds, status);
tor_asprintf(&fname, "%s"PATH_SEPARATOR"networkstatus-bridges",
options->DataDirectory);
write_str_to_file(fname,status,0);
write_str_to_file(fname,thresholds_and_status,0);
tor_free(thresholds);
tor_free(thresholds_and_status);
tor_free(fname);
tor_free(status);
}