Skip to content
  • juga's avatar
    chg: When an exit fail to exit, check CC · dc06bbdc
    juga authored
    before selecting other exits as helpers.
    In #40136 we forgot to consider the corner case in #40041, discovered
    thanks to analysis#36.
    This was causing that sometimes a CC circuit was built when
    bwscanner_cc wasn't equal or greater than 1 or the other way around.
    
    We didn't realize about this cause this part of the code is very
    confusing. To don't make it even more confusing, i've changed the
    internal API:
    - `select_helper_candidates`: split funtion into one to select the
      helper candidates, knowing whether to use the relay as exit or not
      and other function `use_relay_as_entry` to decide whether to use the
      relay as entry or not checking CC params.
      Also pass a new arg `relay_as_entry`.
    - `create_path_relay`: rewmove not used `cb` arg, add `candidates` arg
      to stop having to select them again later on. Move the no
      `candidates` condition here instead of checking it in
      `pick_ideal_second_hop`.
    - `_pick_ideal_second_hope: remove unneded `dest` and `cont arguments,
      rename `is_exit` to `helper_is_exit`. Use the candidates instead of
      selecting them again.
    - `measure_relay`: in the case an exit fails to exit, select the
      candidates knowing that they have to be exits and checking CC.
    - `only_relays_with_bandwidth`: remove unneded arg `controller` so
      that there is no need to pass it through several functions.
    
    Closes #40138
    dc06bbdc