aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libutil/upstream.c15
-rw-r--r--src/libutil/upstream.h13
2 files changed, 28 insertions, 0 deletions
diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c
index 3d0121572..a49a8a222 100644
--- a/src/libutil/upstream.c
+++ b/src/libutil/upstream.c
@@ -889,3 +889,18 @@ rspamd_upstream_get_data (struct upstream *up)
{
return up->data;
}
+
+
+void
+rspamd_upstreams_foreach (struct upstream_list *ups,
+ rspamd_upstream_traverse_func cb, void *ud)
+{
+ struct upstream *up;
+ guint i;
+
+ for (i = 0; i < ups->ups->len; i ++) {
+ up = g_ptr_array_index (ups->ups, i);
+
+ cb (up, ud);
+ }
+}
diff --git a/src/libutil/upstream.h b/src/libutil/upstream.h
index 79d88802d..c3cbf685a 100644
--- a/src/libutil/upstream.h
+++ b/src/libutil/upstream.h
@@ -130,6 +130,19 @@ gboolean rspamd_upstreams_parse_line (struct upstream_list *ups,
gboolean rspamd_upstreams_from_ucl (struct upstream_list *ups,
const ucl_object_t *in, guint16 def_port, void *data);
+
+typedef void (*rspamd_upstream_traverse_func) (struct upstream *up,
+ void *ud);
+
+/**
+ * Traverse upstreams list calling the function specified
+ * @param ups
+ * @param cb
+ * @param ud
+ */
+void rspamd_upstreams_foreach (struct upstream_list *ups,
+ rspamd_upstream_traverse_func cb, void *ud);
+
/**
* Returns the current IP address of the upstream
* @param up