diff options
Diffstat (limited to 'src/or/circuitbuild.c')
-rw-r--r-- | src/or/circuitbuild.c | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 0edb53367c..caed74c897 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -49,8 +49,7 @@ static int circuit_deliver_create_cell(circuit_t *circ, uint8_t cell_type, char *payload); static int onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit); static crypt_path_t *onion_next_hop_in_cpath(crypt_path_t *cpath); -static int onion_extend_cpath(uint8_t purpose, crypt_path_t **head_ptr, - cpath_build_state_t *state); +static int onion_extend_cpath(origin_circuit_t *circ); static int count_acceptable_routers(smartlist_t *routers); static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice); @@ -263,7 +262,7 @@ onion_populate_cpath(origin_circuit_t *circ) { int r; again: - r = onion_extend_cpath(circ->_base.purpose, &circ->cpath, circ->build_state); + r = onion_extend_cpath(circ); if (r < 0) { log_info(LD_CIRC,"Generating cpath hop failed."); return -1; @@ -1632,24 +1631,13 @@ onion_next_hop_in_cpath(crypt_path_t *cpath) * based on <b>state</b>. Append the hop info to head_ptr. */ static int -onion_extend_cpath(uint8_t purpose, crypt_path_t **head_ptr, - cpath_build_state_t *state) +onion_extend_cpath(origin_circuit_t *circ) { - int cur_len; - crypt_path_t *cpath; + uint8_t purpose = circ->_base.purpose; + cpath_build_state_t *state = circ->build_state; + int cur_len = circuit_get_cpath_len(circ); extend_info_t *info = NULL; - tor_assert(head_ptr); - - if (!*head_ptr) { - cur_len = 0; - } else { - cur_len = 1; - for (cpath = *head_ptr; cpath->next != *head_ptr; cpath = cpath->next) { - ++cur_len; - } - } - if (cur_len >= state->desired_path_len) { log_debug(LD_CIRC, "Path is complete: %d steps long", state->desired_path_len); @@ -1667,7 +1655,7 @@ onion_extend_cpath(uint8_t purpose, crypt_path_t **head_ptr, info = extend_info_from_router(r); } else { routerinfo_t *r = - choose_good_middle_server(purpose, state, *head_ptr, cur_len); + choose_good_middle_server(purpose, state, circ->cpath, cur_len); if (r) info = extend_info_from_router(r); } @@ -1681,7 +1669,7 @@ onion_extend_cpath(uint8_t purpose, crypt_path_t **head_ptr, log_debug(LD_CIRC,"Chose router %s for hop %d (exit is %s)", info->nickname, cur_len+1, build_state_get_exit_nickname(state)); - onion_append_hop(head_ptr, info); + onion_append_hop(&circ->cpath, info); extend_info_free(info); return 0; } |