Browse Source

[Rework] Urls: update lua libraries

tags/2.5
Vsevolod Stakhov 4 years ago
parent
commit
d1aa388f92
2 changed files with 31 additions and 36 deletions
  1. 1
    1
      src/libserver/url.c
  2. 30
    35
      src/lua/lua_task.c

+ 1
- 1
src/libserver/url.c View File

@@ -3122,7 +3122,7 @@ rspamd_url_text_part_callback (struct rspamd_url *url, gsize start_offset,
struct rspamd_process_exception *ex;
struct rspamd_task *task;
gchar *url_str = NULL;
struct rspamd_url *query_url, *existing;
struct rspamd_url *query_url;
gint rc;
gboolean prefix_added;


+ 30
- 35
src/lua/lua_task.c View File

@@ -2249,6 +2249,7 @@ lua_task_get_urls (lua_State * L)
static const gint default_mask = PROTOCOL_HTTP|PROTOCOL_HTTPS|
PROTOCOL_FILE|PROTOCOL_FTP;
const gchar *cache_name = "emails+urls";
struct rspamd_url *u;
gboolean need_images = FALSE;
gsize sz, max_urls = 0;

@@ -2336,8 +2337,7 @@ lua_task_get_urls (lua_State * L)
cache_name = "emails+urls";
}

sz = g_hash_table_size (MESSAGE_FIELD (task, urls)) +
g_hash_table_size (MESSAGE_FIELD (task, emails));
sz = kh_size (MESSAGE_FIELD (task, urls));

sz = lua_task_urls_adjust_skip_prob (task, &cb, sz, max_urls);

@@ -2345,20 +2345,17 @@ lua_task_get_urls (lua_State * L)
/* Can use cached version */
if (!lua_task_get_cached (L, task, cache_name)) {
lua_createtable (L, sz, 0);
g_hash_table_foreach (MESSAGE_FIELD (task, urls),
lua_tree_url_callback, &cb);
g_hash_table_foreach (MESSAGE_FIELD (task, emails),
lua_tree_url_callback, &cb);

kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
lua_tree_url_callback (u, u, &cb);
});
lua_task_set_cached (L, task, cache_name, -1);
}
}
else {
lua_createtable (L, sz, 0);
g_hash_table_foreach (MESSAGE_FIELD (task, urls),
lua_tree_url_callback, &cb);
g_hash_table_foreach (MESSAGE_FIELD (task, emails),
lua_tree_url_callback, &cb);
kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
lua_tree_url_callback (u, u, &cb);
});
}

}
@@ -2370,21 +2367,27 @@ lua_task_get_urls (lua_State * L)
cache_name = "urls";
}

sz = g_hash_table_size (MESSAGE_FIELD (task, urls));
sz = kh_size (MESSAGE_FIELD (task, urls));
sz = lua_task_urls_adjust_skip_prob (task, &cb, sz, max_urls);

if (protocols_mask == (default_mask)) {
if (!lua_task_get_cached (L, task, cache_name)) {
lua_createtable (L, sz, 0);
g_hash_table_foreach (MESSAGE_FIELD (task, urls),
lua_tree_url_callback, &cb);
kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
if (!(u->protocol & PROTOCOL_MAILTO)) {
lua_tree_url_callback (u, u, &cb);
}
});
lua_task_set_cached (L, task, cache_name, -1);
}
}
else {
lua_createtable (L, sz, 0);
g_hash_table_foreach (MESSAGE_FIELD (task, urls),
lua_tree_url_callback, &cb);
kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
if (!(u->protocol & PROTOCOL_MAILTO)) {
lua_tree_url_callback (u, u, &cb);
}
});
}
}
}
@@ -2409,13 +2412,8 @@ lua_task_has_urls (lua_State * L)
need_emails = lua_toboolean (L, 2);
}

if (g_hash_table_size (MESSAGE_FIELD (task, urls)) > 0) {
sz += g_hash_table_size (MESSAGE_FIELD (task, urls));
ret = TRUE;
}

if (need_emails && g_hash_table_size (MESSAGE_FIELD (task, emails)) > 0) {
sz += g_hash_table_size (MESSAGE_FIELD (task, emails));
if (kh_size (MESSAGE_FIELD (task, urls)) > 0) {
sz += kh_size (MESSAGE_FIELD (task, urls));
ret = TRUE;
}
}
@@ -2438,15 +2436,7 @@ lua_task_inject_url (lua_State * L)
struct rspamd_lua_url *url = lua_check_url (L, 2);

if (task && task->message && url && url->url) {
struct rspamd_url *existing;

if ((existing = g_hash_table_lookup (MESSAGE_FIELD (task, urls),
url->url)) == NULL) {
g_hash_table_insert (MESSAGE_FIELD (task, urls), url->url, url->url);
}
else {
existing->count ++;
}
rspamd_url_set_add_or_increase (MESSAGE_FIELD (task, urls), url->url);
}
else {
return luaL_error (L, "invalid arguments");
@@ -2538,16 +2528,21 @@ lua_task_get_emails (lua_State * L)
LUA_TRACE_POINT;
struct rspamd_task *task = lua_check_task (L, 1);
struct lua_tree_cb_data cb;
struct rspamd_url *u;

if (task) {
if (task->message) {
lua_createtable (L, g_hash_table_size (MESSAGE_FIELD (task, emails)), 0);
lua_createtable (L, kh_size (MESSAGE_FIELD (task, urls)), 0);
memset (&cb, 0, sizeof (cb));
cb.i = 1;
cb.L = L;
cb.mask = PROTOCOL_MAILTO;
g_hash_table_foreach (MESSAGE_FIELD (task, emails),
lua_tree_url_callback, &cb);

kh_foreach_key (MESSAGE_FIELD (task, urls), u, {
if ((u->protocol & PROTOCOL_MAILTO)) {
lua_tree_url_callback (u, u, &cb);
}
});
}
else {
lua_newtable (L);

Loading…
Cancel
Save