[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] conn: Add a function to return a list of connection by state



commit 6222eae8cabd7ab99e634ad7463a8c38d414fa19
Author: David Goulet <dgoulet@xxxxxxxxxxxxxx>
Date:   Tue Jul 18 11:41:41 2017 -0400

    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@xxxxxxxxxxxxxx>
---
 src/or/connection.c | 21 +++++++++++++++++++++
 src/or/connection.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/src/or/connection.c b/src/or/connection.c
index 5c65e886c..31a682387 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -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)               \
diff --git a/src/or/connection.h b/src/or/connection.h
index 36e45aef3..0bcf0ccdc 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -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);



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits