New function to grab a directory connection fetching a resource

We need this to tell if a given consensus flavor is being downloaded
or not.
This commit is contained in:
Nick Mathewson 2010-09-20 11:24:01 -04:00
parent af7fab020a
commit 4bfc64ba1c
2 changed files with 29 additions and 0 deletions

View File

@ -3397,6 +3397,33 @@ connection_get_by_type_state_rendquery(int type, int state,
return NULL; return NULL;
} }
/** Return a directory connection (if any one exists) that is fetching
* the item described by <b>state</b>/<b>resource</b> */
dir_connection_t *
connection_dir_get_by_purpose_and_resource(int purpose,
const char *resource)
{
smartlist_t *conns = get_connection_array();
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
dir_connection_t *dirconn;
if (conn->type != CONN_TYPE_DIR || conn->marked_for_close ||
conn->purpose != purpose)
continue;
dirconn = TO_DIR_CONN(conn);
if (dirconn->requested_resource == NULL) {
if (resource == NULL)
return dirconn;
} else if (resource) {
if (0 == strcmp(resource, dirconn->requested_resource))
return dirconn;
}
} SMARTLIST_FOREACH_END(conn);
return NULL;
}
/** Return an open, non-marked connection of a given type and purpose, or NULL /** Return an open, non-marked connection of a given type and purpose, or NULL
* if no such connection exists. */ * if no such connection exists. */
connection_t * connection_t *

View File

@ -124,6 +124,8 @@ connection_t *connection_get_by_type_addr_port_purpose(int type,
connection_t *connection_get_by_type_state(int type, int state); connection_t *connection_get_by_type_state(int type, int state);
connection_t *connection_get_by_type_state_rendquery(int type, int state, connection_t *connection_get_by_type_state_rendquery(int type, int state,
const char *rendquery); const char *rendquery);
dir_connection_t *connection_dir_get_by_purpose_and_resource(
int state, const char *resource);
#define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR) #define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR)
int connection_is_listener(connection_t *conn); int connection_is_listener(connection_t *conn);