Loading src/feature/client/entrynodes.c +22 −14 Original line number Original line Diff line number Diff line Loading @@ -3932,7 +3932,7 @@ guard_selection_free_(guard_selection_t *gs) /**********************************************************************/ /**********************************************************************/ /** Layer2 guard subsystem used for client-side onion service circuits. */ /** Layer2 guard subsystem used for onion service circuits. */ /** A simple representation of a layer2 guard. We just need its identity so /** A simple representation of a layer2 guard. We just need its identity so * that we feed it into a routerset, and a sampled timestamp to do expiration * that we feed it into a routerset, and a sampled timestamp to do expiration Loading Loading @@ -4057,13 +4057,17 @@ maintain_layer2_guards(void) new_guards_needed_n); new_guards_needed_n); /* Add required guards to the list */ /* Add required guards to the list */ smartlist_t *excluded = smartlist_new(); for (int i = 0; i < new_guards_needed_n; i++) { for (int i = 0; i < new_guards_needed_n; i++) { const node_t *choice = NULL; const node_t *choice = NULL; const or_options_t *options = get_options(); const or_options_t *options = get_options(); /* Pick Stable nodes */ /* Pick Stable nodes */ router_crn_flags_t flags = CRN_NEED_DESC|CRN_NEED_UPTIME; router_crn_flags_t flags = CRN_NEED_DESC|CRN_NEED_UPTIME; choice = router_choose_random_node(NULL, options->ExcludeNodes, flags); choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); if (choice) { if (!choice) { break; } /* We found our node: create an L2 guard out of it */ /* We found our node: create an L2 guard out of it */ layer2_guard_t *layer2_guard = tor_malloc_zero(sizeof(layer2_guard_t)); layer2_guard_t *layer2_guard = tor_malloc_zero(sizeof(layer2_guard_t)); memcpy(layer2_guard->identity, choice->identity, DIGEST_LEN); memcpy(layer2_guard->identity, choice->identity, DIGEST_LEN); Loading @@ -4075,8 +4079,12 @@ maintain_layer2_guards(void) // Nickname can also be None here because it is looked up later // Nickname can also be None here because it is looked up later control_event_guard("None", layer2_guard->identity, control_event_guard("None", layer2_guard->identity, "GOOD_L2"); "GOOD_L2"); /* Exclude this node and its family so that we don't double-pick. */ nodelist_add_node_and_family(excluded, choice); } } } /* Some cleanup */ smartlist_free(excluded); /* Now that the list is up to date, synchronize the routerset */ /* Now that the list is up to date, synchronize the routerset */ routerset_free(layer2_routerset); routerset_free(layer2_routerset); Loading Loading
src/feature/client/entrynodes.c +22 −14 Original line number Original line Diff line number Diff line Loading @@ -3932,7 +3932,7 @@ guard_selection_free_(guard_selection_t *gs) /**********************************************************************/ /**********************************************************************/ /** Layer2 guard subsystem used for client-side onion service circuits. */ /** Layer2 guard subsystem used for onion service circuits. */ /** A simple representation of a layer2 guard. We just need its identity so /** A simple representation of a layer2 guard. We just need its identity so * that we feed it into a routerset, and a sampled timestamp to do expiration * that we feed it into a routerset, and a sampled timestamp to do expiration Loading Loading @@ -4057,13 +4057,17 @@ maintain_layer2_guards(void) new_guards_needed_n); new_guards_needed_n); /* Add required guards to the list */ /* Add required guards to the list */ smartlist_t *excluded = smartlist_new(); for (int i = 0; i < new_guards_needed_n; i++) { for (int i = 0; i < new_guards_needed_n; i++) { const node_t *choice = NULL; const node_t *choice = NULL; const or_options_t *options = get_options(); const or_options_t *options = get_options(); /* Pick Stable nodes */ /* Pick Stable nodes */ router_crn_flags_t flags = CRN_NEED_DESC|CRN_NEED_UPTIME; router_crn_flags_t flags = CRN_NEED_DESC|CRN_NEED_UPTIME; choice = router_choose_random_node(NULL, options->ExcludeNodes, flags); choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); if (choice) { if (!choice) { break; } /* We found our node: create an L2 guard out of it */ /* We found our node: create an L2 guard out of it */ layer2_guard_t *layer2_guard = tor_malloc_zero(sizeof(layer2_guard_t)); layer2_guard_t *layer2_guard = tor_malloc_zero(sizeof(layer2_guard_t)); memcpy(layer2_guard->identity, choice->identity, DIGEST_LEN); memcpy(layer2_guard->identity, choice->identity, DIGEST_LEN); Loading @@ -4075,8 +4079,12 @@ maintain_layer2_guards(void) // Nickname can also be None here because it is looked up later // Nickname can also be None here because it is looked up later control_event_guard("None", layer2_guard->identity, control_event_guard("None", layer2_guard->identity, "GOOD_L2"); "GOOD_L2"); /* Exclude this node and its family so that we don't double-pick. */ nodelist_add_node_and_family(excluded, choice); } } } /* Some cleanup */ smartlist_free(excluded); /* Now that the list is up to date, synchronize the routerset */ /* Now that the list is up to date, synchronize the routerset */ routerset_free(layer2_routerset); routerset_free(layer2_routerset); Loading