mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
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:
parent
af7fab020a
commit
4bfc64ba1c
@ -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 *
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user