mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 02:09:24 +01:00
only choose routers for the onion that are currently connected to us
svn:r72
This commit is contained in:
parent
cd0760ddda
commit
c42c2b6640
@ -100,8 +100,8 @@ unsigned int *new_route(double cw, routerinfo_t **rarray, size_t rarray_len, siz
|
||||
unsigned int *route = NULL;
|
||||
unsigned int oldchoice, choice;
|
||||
|
||||
if ( (cw >= 0) && (cw < 1) && (rarray) && (rlen) ) /* valid parameters */
|
||||
{
|
||||
assert((cw >= 0) && (cw < 1) && (rarray) && (rlen) ); /* valid parameters */
|
||||
|
||||
routelen = chooselen(cw);
|
||||
if (routelen == -1)
|
||||
{
|
||||
@ -110,6 +110,9 @@ unsigned int *new_route(double cw, routerinfo_t **rarray, size_t rarray_len, siz
|
||||
}
|
||||
log(LOG_DEBUG,"new_route(): Chosen route length %u.",routelen);
|
||||
|
||||
/* FIXME need to figure out how many routers we can actually choose from.
|
||||
* We can get into an infinite loop if there are too few. */
|
||||
|
||||
/* allocate memory for the new route */
|
||||
route = (unsigned int *)malloc(routelen * sizeof(unsigned int));
|
||||
if (!route)
|
||||
@ -132,8 +135,11 @@ unsigned int *new_route(double cw, routerinfo_t **rarray, size_t rarray_len, siz
|
||||
choice = choice % (rarray_len);
|
||||
log(LOG_DEBUG,"new_route() : Chosen router %u.",choice);
|
||||
if (choice == oldchoice ||
|
||||
(oldchoice < rarray_len && !pkey_cmp(rarray[choice]->pkey, rarray[oldchoice]->pkey))) {
|
||||
/* same router, or router twin. try again. */
|
||||
(oldchoice < rarray_len && !pkey_cmp(rarray[choice]->pkey, rarray[oldchoice]->pkey)) ||
|
||||
!connection_twin_get_by_addr_port(rarray[choice]->addr, rarray[choice]->or_port)) {
|
||||
/* Same router as last choice, or router twin,
|
||||
* or no routers with that key are connected to us.
|
||||
* Try again. */
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
@ -143,9 +149,6 @@ unsigned int *new_route(double cw, routerinfo_t **rarray, size_t rarray_len, siz
|
||||
|
||||
*rlen = routelen;
|
||||
return route;
|
||||
} /* valid parameters */
|
||||
else /* invalid parameters */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* creates a new onion from route, stores it and its length into bufp and lenp respectively */
|
||||
|
Loading…
Reference in New Issue
Block a user