diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-09-20 11:24:01 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-09-27 18:04:43 -0400 |
commit | 4bfc64ba1c23da0bd6f5165a788cc07d934c9a9b (patch) | |
tree | d6980bd91e2a64aca5ecee2b77f884757d624416 /src/or/connection.c | |
parent | af7fab020accd31f95ba2037ccd25c65e3290571 (diff) | |
download | tor-4bfc64ba1c23da0bd6f5165a788cc07d934c9a9b.tar tor-4bfc64ba1c23da0bd6f5165a788cc07d934c9a9b.tar.gz |
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.
Diffstat (limited to 'src/or/connection.c')
-rw-r--r-- | src/or/connection.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index 80144c4d3..9c6166df3 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -3397,6 +3397,33 @@ connection_get_by_type_state_rendquery(int type, int state, 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 * if no such connection exists. */ connection_t * |