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;
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);
/* 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);
+ });
}
}
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);
+ }
+ });
}
}
}
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;
}
}
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");
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);