diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-02-22 16:02:13 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-02-22 16:02:13 +0000 |
commit | c49ea0960c5a1926defa93adec1c5fe1397ce500 (patch) | |
tree | 9f20d9cb585846195457f77b16297a3b821f73ca /src | |
parent | b2a070946a1374ce07d05f1fb78b7fca0bd919ae (diff) | |
download | rspamd-c49ea0960c5a1926defa93adec1c5fe1397ce500.tar.gz rspamd-c49ea0960c5a1926defa93adec1c5fe1397ce500.zip |
[Feature] Allow to sort urls for Lua
Diffstat (limited to 'src')
-rw-r--r-- | src/lua/lua_task.c | 29 | ||||
-rw-r--r-- | src/lua/lua_url.c | 6 | ||||
-rw-r--r-- | src/lua/lua_url.h | 1 |
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); |