Merge commit 'origin/maint-0.2.1'

This commit is contained in:
Nick Mathewson
2009-06-22 14:08:19 -04:00
2 changed files with 25 additions and 4 deletions
+7
View File
@@ -44,6 +44,13 @@ Changes in version 0.2.1.17-?? - 2009-??-??
- Serve the DirPortFrontPage page even when we have been approaching
our quotas recently. Fixes bug 1013; bugfix on 0.2.1.8-alpha.
o Major features:
- Clients now use the bandwidth values in the consensus, rather than
the bandwidth values in each relay descriptor. This approach opens
the door to more accurate bandwidth estimates once the directory
authorities start doing active measurements. Implements more of
proposal 141.
Changes in version 0.2.1.16-rc - 2009-06-20
o Security fixes:
+18 -4
View File
@@ -1591,28 +1591,42 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,
int32_t flags = 0;
uint32_t this_bw = 0;
if (statuses) {
/* need to extract router info */
status = smartlist_get(sl, i);
if (router_digest_is_me(status->identity_digest))
me_idx = i;
router = router_get_by_digest(status->identity_digest);
is_exit = status->is_exit;
is_guard = status->is_possible_guard;
if (router) {
this_bw = router_get_advertised_bandwidth(router);
if (status->has_bandwidth) {
this_bw = status->bandwidth*1000;
} else { /* guess */
/* XXX022 once consensuses always list bandwidths, we can take
* this guessing business out. -RD */
is_known = 0;
flags = status->is_fast ? 1 : 0;
flags |= is_exit ? 2 : 0;
flags |= is_guard ? 4 : 0;
}
} else {
routerstatus_t *rs;
router = smartlist_get(sl, i);
rs = router_get_consensus_status_by_id(
router->cache_info.identity_digest);
if (router_digest_is_me(router->cache_info.identity_digest))
me_idx = i;
is_exit = router->is_exit;
is_guard = router->is_possible_guard;
this_bw = router_get_advertised_bandwidth(router);
if (rs && rs->has_bandwidth) {
this_bw = rs->bandwidth*1000;
} else if (rs) { /* guess; don't trust the descriptor */
/* XXX022 once consensuses always list bandwidths, we can take
* this guessing business out. -RD */
is_known = 0;
flags = router->is_fast ? 1 : 0;
flags |= is_exit ? 2 : 0;
flags |= is_guard ? 4 : 0;
} else /* bridge or other descriptor not in our consensus */
this_bw = router_get_advertised_bandwidth(router);
}
if (is_exit)
bitarray_set(exit_bits, i);