mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
conn: Add a function to return a list of connection by state
This will be useful to the hidden service subsystem that needs to go over all connections of a certain state to attach them to a hidden service circuit. Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
6eb9de1b8c
commit
6222eae8ca
@ -4102,6 +4102,27 @@ connection_write_to_buf_impl_,(const char *string, size_t len,
|
||||
}
|
||||
}
|
||||
|
||||
#define CONN_GET_ALL_TEMPLATE(var, test) \
|
||||
STMT_BEGIN \
|
||||
smartlist_t *conns = get_connection_array(); \
|
||||
smartlist_t *ret_conns = smartlist_new(); \
|
||||
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, var) { \
|
||||
if (var && (test) && !var->marked_for_close) \
|
||||
smartlist_add(ret_conns, var); \
|
||||
} SMARTLIST_FOREACH_END(var); \
|
||||
return ret_conns; \
|
||||
STMT_END
|
||||
|
||||
/* Return a list of connections that aren't close and matches the given state.
|
||||
* The returned list can be empty and must be freed using smartlist_free().
|
||||
* The caller does NOT have owernship of the objects in the list so it must
|
||||
* not free them nor reference them as they can disapear. */
|
||||
smartlist_t *
|
||||
connection_list_by_type_state(int type, int state)
|
||||
{
|
||||
CONN_GET_ALL_TEMPLATE(conn, (conn->type == type && conn->state == state));
|
||||
}
|
||||
|
||||
/** Return a connection_t * from get_connection_array() that satisfies test on
|
||||
* var, and that is not marked for close. */
|
||||
#define CONN_GET_TEMPLATE(var, test) \
|
||||
|
@ -182,6 +182,7 @@ MOCK_DECL(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_rendquery(int type, int state,
|
||||
const char *rendquery);
|
||||
smartlist_t *connection_list_by_type_state(int type, int state);
|
||||
smartlist_t *connection_dir_list_by_purpose_and_resource(
|
||||
int purpose,
|
||||
const char *resource);
|
||||
|
Loading…
Reference in New Issue
Block a user