diff options
author | Nick Mathewson <nickm@torproject.org> | 2004-04-06 21:19:59 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2004-04-06 21:19:59 +0000 |
commit | 8b371c2aa536c30926bcf48e1ff2a756e139a08d (patch) | |
tree | b33b19f97f8e1d897e0b48df797a2009ab921ad6 /src | |
parent | 2fc106d2101edd80a7ba8cdcc9f49522619ba9cf (diff) | |
download | tor-8b371c2aa536c30926bcf48e1ff2a756e139a08d.tar.gz tor-8b371c2aa536c30926bcf48e1ff2a756e139a08d.zip |
router_choose_random_node wants a smartlist of routers, not of nicknames.
svn:r1510
Diffstat (limited to 'src')
-rw-r--r-- | src/common/util.c | 5 | ||||
-rw-r--r-- | src/common/util.h | 1 | ||||
-rw-r--r-- | src/or/rendservice.c | 9 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/common/util.c b/src/common/util.c index 6ba9260865..6df6853aba 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -208,6 +208,11 @@ void smartlist_set_capacity(smartlist_t *sl, int n) { } } +/* Remove all elements from the list. */ +void smartlist_clear(smartlist_t *sl) { + sl->num_used = 0; +} + /* add element to the list, but only if there's room */ void smartlist_add(smartlist_t *sl, void *element) { if (sl->num_used >= sl->capacity) { diff --git a/src/common/util.h b/src/common/util.h index 48f06e4244..0500b1fe1c 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -102,6 +102,7 @@ typedef struct smartlist_t smartlist_t; smartlist_t *smartlist_create(); void smartlist_free(smartlist_t *sl); void smartlist_set_capacity(smartlist_t *sl, int n); +void smartlist_clear(smartlist_t *sl); void smartlist_add(smartlist_t *sl, void *element); void smartlist_remove(smartlist_t *sl, void *element); int smartlist_isin(smartlist_t *sl, void *element); diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 4325ec9e7a..6029ad89dd 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -651,10 +651,13 @@ int rend_services_init(void) { rend_service_t *service; char *desc, *intro; int changed, prev_intro_nodes, desc_len; + smartlist_t *intro_routers; router_get_routerlist(&rl); + intro_routers = smartlist_create(); for (i=0; i< smartlist_len(rend_service_list); ++i) { + smartlist_clear(intro_routers); service = smartlist_get(rend_service_list, i); assert(service); @@ -667,6 +670,7 @@ int rend_services_init(void) { smartlist_del(service->intro_nodes,j--); changed = 1; } + smartlist_add(intro_routers, router); } /* We have enough intro points, and the intro points we thought we had were @@ -683,13 +687,14 @@ int rend_services_init(void) { router = router_choose_random_node(rl, service->intro_prefer_nodes, service->intro_exclude_nodes, - service->intro_nodes); + intro_routers); if (!router) { log_fn(LOG_WARN, "Can't establish more than %d introduction points", smartlist_len(service->intro_nodes)); break; } changed = 1; + smartlist_add(intro_routers, router); smartlist_add(service->intro_nodes, tor_strdup(router->nickname)); } @@ -719,6 +724,8 @@ int rend_services_init(void) { } } } + smartlist_free(intro_routers); + return 0; } |