summaryrefslogtreecommitdiff
path: root/src/or/circuitbuild.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/circuitbuild.c')
-rw-r--r--src/or/circuitbuild.c28
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;
}