aboutsummaryrefslogtreecommitdiff
path: root/src/or/connection.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2010-09-20 11:24:01 -0400
committerNick Mathewson <nickm@torproject.org>2010-09-27 18:04:43 -0400
commit4bfc64ba1c23da0bd6f5165a788cc07d934c9a9b (patch)
treed6980bd91e2a64aca5ecee2b77f884757d624416 /src/or/connection.c
parentaf7fab020accd31f95ba2037ccd25c65e3290571 (diff)
downloadtor-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.c27
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 *