If we're using bridges or have strictentrynodes set, and our
chosen exit is in the same family as all our bridges/entry guards, then be flexible about families. svn:r12514
This commit is contained in:
parent
b669fb7344
commit
d09439872d
|
@ -16,6 +16,9 @@ Changes in version 0.2.0.12-alpha - 2007-11-??
|
|||
the bridge authority could help us (for example, we don't know
|
||||
a digest, or there is no bridge authority), don't be so eager to
|
||||
fall back to asking the bridge authority.
|
||||
- If we're using bridges or have strictentrynodes set, and our
|
||||
chosen exit is in the same family as all our bridges/entry guards,
|
||||
then be flexible about families.
|
||||
|
||||
o Minor features:
|
||||
- When we negotiate a v2 OR connection (not yet implemented), accept
|
||||
|
|
|
@ -2443,10 +2443,12 @@ choose_random_entry(cpath_build_state_t *state)
|
|||
routerinfo_t *r = NULL;
|
||||
int need_uptime = state ? state->need_uptime : 0;
|
||||
int need_capacity = state ? state->need_capacity : 0;
|
||||
int consider_exit_family = 0;
|
||||
|
||||
if (chosen_exit) {
|
||||
smartlist_add(exit_family, chosen_exit);
|
||||
routerlist_add_family(exit_family, chosen_exit);
|
||||
consider_exit_family = 1;
|
||||
}
|
||||
|
||||
if (!entry_guards)
|
||||
|
@ -2465,7 +2467,7 @@ choose_random_entry(cpath_build_state_t *state)
|
|||
SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
|
||||
{
|
||||
r = entry_is_live(entry, need_uptime, need_capacity, 0);
|
||||
if (r && !smartlist_isin(exit_family, r)) {
|
||||
if (r && (!consider_exit_family || !smartlist_isin(exit_family, r))) {
|
||||
smartlist_add(live_entry_guards, r);
|
||||
if (!entry->made_contact) {
|
||||
/* Always start with the first not-yet-contacted entry
|
||||
|
@ -2504,6 +2506,13 @@ choose_random_entry(cpath_build_state_t *state)
|
|||
need_capacity = 0;
|
||||
goto retry;
|
||||
}
|
||||
if (!r && !can_grow_entry_list(options) && consider_exit_family) {
|
||||
/* still no? if we're using bridges or have strictentrynodes
|
||||
* set, and our chosen exit is in the same family as all our
|
||||
* bridges/entry guards, then be flexible about families. */
|
||||
consider_exit_family = 0;
|
||||
goto retry;
|
||||
}
|
||||
/* live_entry_guards may be empty below. Oh well, we tried. */
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue