summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2021-02-22 16:02:13 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2021-02-22 16:02:13 +0000
commitc49ea0960c5a1926defa93adec1c5fe1397ce500 (patch)
tree9f20d9cb585846195457f77b16297a3b821f73ca /src
parentb2a070946a1374ce07d05f1fb78b7fca0bd919ae (diff)
downloadrspamd-c49ea0960c5a1926defa93adec1c5fe1397ce500.tar.gz
rspamd-c49ea0960c5a1926defa93adec1c5fe1397ce500.zip
[Feature] Allow to sort urls for Lua
Diffstat (limited to 'src')
-rw-r--r--src/lua/lua_task.c29
-rw-r--r--src/lua/lua_url.c6
-rw-r--r--src/lua/lua_url.h1
3 files changed, 33 insertions, 3 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index 31694df36..1095d1a60 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -2407,9 +2407,32 @@ lua_task_get_urls (lua_State * L)
lua_createtable (L, sz, 0);
- kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
- lua_tree_url_callback (u, u, &cb);
- });
+ if (cb.sort) {
+ struct rspamd_url **urls_sorted;
+ gint i = 0;
+
+ urls_sorted = g_new0 (struct rspamd_url *, sz);
+
+ kh_foreach_key (MESSAGE_FIELD(task, urls), u, {
+ if (i < sz) {
+ urls_sorted[i] = u;
+ i ++;
+ }
+ });
+
+ qsort (urls_sorted, i, sizeof (struct rspamd_url *), rspamd_url_cmp_qsort);
+
+ for (int j = 0; j < i; j ++) {
+ lua_tree_url_callback (urls_sorted[j], urls_sorted[j], &cb);
+ }
+
+ g_free (urls_sorted);
+ }
+ else {
+ kh_foreach_key (MESSAGE_FIELD(task, urls), u, {
+ lua_tree_url_callback(u, u, &cb);
+ });
+ }
lua_url_cbdata_dtor (&cb);
}
diff --git a/src/lua/lua_url.c b/src/lua/lua_url.c
index 945f3dbf4..7909444d5 100644
--- a/src/lua/lua_url.c
+++ b/src/lua/lua_url.c
@@ -1119,6 +1119,12 @@ lua_url_cbdata_fill (lua_State *L,
max_urls = lua_tonumber (L, -1);
}
lua_pop (L, 1);
+
+ lua_getfield (L, pos, "sort");
+ if (lua_isboolean (L, -1)) {
+ cbd->sort = TRUE;
+ }
+ lua_pop (L, 1);
}
else {
/* Plain table of the protocols */
diff --git a/src/lua/lua_url.h b/src/lua/lua_url.h
index c074a579a..705fe1615 100644
--- a/src/lua/lua_url.h
+++ b/src/lua/lua_url.h
@@ -35,6 +35,7 @@ struct lua_tree_cb_data {
gsize max_urls;
gdouble skip_prob;
guint64 xoroshiro_state[4];
+ gboolean sort;
};
void lua_tree_url_callback (gpointer key, gpointer value, gpointer ud);