From 42a8b2da0117555109c35a9b6e44e73d605a0bd6 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 11 Apr 2019 14:48:09 +0100 Subject: [PATCH] [Minor] Cleanup various stuff --- src/libserver/rspamd_symcache.h | 38 ++++++------- src/libserver/task.h | 98 ++++++++++++++++----------------- src/libserver/url.h | 58 +++++++++---------- src/lua/lua_common.h | 2 +- src/lua/lua_task.c | 34 +++++++++++- 5 files changed, 131 insertions(+), 99 deletions(-) diff --git a/src/libserver/rspamd_symcache.h b/src/libserver/rspamd_symcache.h index 0228e4f5a..afdda7e79 100644 --- a/src/libserver/rspamd_symcache.h +++ b/src/libserver/rspamd_symcache.h @@ -32,25 +32,25 @@ typedef void (*symbol_func_t)(struct rspamd_task *task, gpointer user_data); enum rspamd_symbol_type { - SYMBOL_TYPE_NORMAL = (1 << 0), - SYMBOL_TYPE_VIRTUAL = (1 << 1), - SYMBOL_TYPE_CALLBACK = (1 << 2), - SYMBOL_TYPE_GHOST = (1 << 3), - SYMBOL_TYPE_SKIPPED = (1 << 4), - SYMBOL_TYPE_COMPOSITE = (1 << 5), - SYMBOL_TYPE_CLASSIFIER = (1 << 6), - SYMBOL_TYPE_FINE = (1 << 7), - SYMBOL_TYPE_EMPTY = (1 << 8), /* Allow execution on empty tasks */ - SYMBOL_TYPE_PREFILTER = (1 << 9), - SYMBOL_TYPE_POSTFILTER = (1 << 10), - SYMBOL_TYPE_NOSTAT = (1 << 11), /* Skip as statistical symbol */ - SYMBOL_TYPE_IDEMPOTENT = (1 << 12), /* Symbol cannot change metric */ - SYMBOL_TYPE_SQUEEZED = (1 << 13), /* Symbol is squeezed inside Lua */ - SYMBOL_TYPE_TRIVIAL = (1 << 14), /* Symbol is trivial */ - SYMBOL_TYPE_MIME_ONLY = (1 << 15), /* Symbol is mime only */ - SYMBOL_TYPE_EXPLICIT_DISABLE = (1 << 16), /* Symbol should be disabled explicitly only */ - SYMBOL_TYPE_IGNORE_PASSTHROUGH = (1 << 17), /* Symbol ignores passthrough result */ - SYMBOL_TYPE_USE_CORO = (1 << 18), /* Symbol uses lua coroutines */ + SYMBOL_TYPE_NORMAL = (1u << 0u), + SYMBOL_TYPE_VIRTUAL = (1u << 1u), + SYMBOL_TYPE_CALLBACK = (1u << 2u), + SYMBOL_TYPE_GHOST = (1u << 3u), + SYMBOL_TYPE_SKIPPED = (1u << 4u), + SYMBOL_TYPE_COMPOSITE = (1u << 5u), + SYMBOL_TYPE_CLASSIFIER = (1u << 6u), + SYMBOL_TYPE_FINE = (1u << 7u), + SYMBOL_TYPE_EMPTY = (1u << 8u), /* Allow execution on empty tasks */ + SYMBOL_TYPE_PREFILTER = (1u << 9u), + SYMBOL_TYPE_POSTFILTER = (1u << 10u), + SYMBOL_TYPE_NOSTAT = (1u << 11u), /* Skip as statistical symbol */ + SYMBOL_TYPE_IDEMPOTENT = (1u << 12u), /* Symbol cannot change metric */ + SYMBOL_TYPE_SQUEEZED = (1u << 13u), /* Symbol is squeezed inside Lua */ + SYMBOL_TYPE_TRIVIAL = (1u << 14u), /* Symbol is trivial */ + SYMBOL_TYPE_MIME_ONLY = (1u << 15u), /* Symbol is mime only */ + SYMBOL_TYPE_EXPLICIT_DISABLE = (1u << 16u), /* Symbol should be disabled explicitly only */ + SYMBOL_TYPE_IGNORE_PASSTHROUGH = (1u << 17u), /* Symbol ignores passthrough result */ + SYMBOL_TYPE_USE_CORO = (1u << 18u), /* Symbol uses lua coroutines */ }; /** diff --git a/src/libserver/task.h b/src/libserver/task.h index b97f91eb4..763866987 100644 --- a/src/libserver/task.h +++ b/src/libserver/task.h @@ -37,24 +37,24 @@ enum rspamd_command { }; enum rspamd_task_stage { - RSPAMD_TASK_STAGE_CONNECT = (1 << 0), - RSPAMD_TASK_STAGE_ENVELOPE = (1 << 1), - RSPAMD_TASK_STAGE_READ_MESSAGE = (1 << 2), - RSPAMD_TASK_STAGE_PRE_FILTERS = (1 << 3), - RSPAMD_TASK_STAGE_PROCESS_MESSAGE = (1 << 4), - RSPAMD_TASK_STAGE_FILTERS = (1 << 5), - RSPAMD_TASK_STAGE_CLASSIFIERS_PRE = (1 << 6), - RSPAMD_TASK_STAGE_CLASSIFIERS = (1 << 7), - RSPAMD_TASK_STAGE_CLASSIFIERS_POST = (1 << 8), - RSPAMD_TASK_STAGE_COMPOSITES = (1 << 9), - RSPAMD_TASK_STAGE_POST_FILTERS = (1 << 10), - RSPAMD_TASK_STAGE_LEARN_PRE = (1 << 11), - RSPAMD_TASK_STAGE_LEARN = (1 << 12), - RSPAMD_TASK_STAGE_LEARN_POST = (1 << 13), - RSPAMD_TASK_STAGE_COMPOSITES_POST = (1 << 14), - RSPAMD_TASK_STAGE_IDEMPOTENT = (1 << 15), - RSPAMD_TASK_STAGE_DONE = (1 << 16), - RSPAMD_TASK_STAGE_REPLIED = (1 << 17) + RSPAMD_TASK_STAGE_CONNECT = (1u << 0u), + RSPAMD_TASK_STAGE_ENVELOPE = (1u << 1u), + RSPAMD_TASK_STAGE_READ_MESSAGE = (1u << 2u), + RSPAMD_TASK_STAGE_PRE_FILTERS = (1u << 3u), + RSPAMD_TASK_STAGE_PROCESS_MESSAGE = (1u << 4u), + RSPAMD_TASK_STAGE_FILTERS = (1u << 5u), + RSPAMD_TASK_STAGE_CLASSIFIERS_PRE = (1u << 6u), + RSPAMD_TASK_STAGE_CLASSIFIERS = (1u << 7u), + RSPAMD_TASK_STAGE_CLASSIFIERS_POST = (1u << 8u), + RSPAMD_TASK_STAGE_COMPOSITES = (1u << 9u), + RSPAMD_TASK_STAGE_POST_FILTERS = (1u << 10u), + RSPAMD_TASK_STAGE_LEARN_PRE = (1u << 11u), + RSPAMD_TASK_STAGE_LEARN = (1u << 12u), + RSPAMD_TASK_STAGE_LEARN_POST = (1u << 13u), + RSPAMD_TASK_STAGE_COMPOSITES_POST = (1u << 14u), + RSPAMD_TASK_STAGE_IDEMPOTENT = (1u << 15u), + RSPAMD_TASK_STAGE_DONE = (1u << 16u), + RSPAMD_TASK_STAGE_REPLIED = (1u << 17u) }; #define RSPAMD_TASK_PROCESS_ALL (RSPAMD_TASK_STAGE_CONNECT | \ @@ -86,37 +86,37 @@ enum rspamd_task_stage { RSPAMD_TASK_STAGE_LEARN_POST | \ RSPAMD_TASK_STAGE_DONE) -#define RSPAMD_TASK_FLAG_MIME (1 << 0) -#define RSPAMD_TASK_FLAG_JSON (1 << 1) -#define RSPAMD_TASK_FLAG_SKIP_PROCESS (1 << 2) -#define RSPAMD_TASK_FLAG_SKIP (1 << 3) -#define RSPAMD_TASK_FLAG_EXT_URLS (1 << 4) -#define RSPAMD_TASK_FLAG_SPAMC (1 << 5) -#define RSPAMD_TASK_FLAG_PASS_ALL (1 << 6) -#define RSPAMD_TASK_FLAG_NO_LOG (1 << 7) -#define RSPAMD_TASK_FLAG_NO_IP (1 << 8) -#define RSPAMD_TASK_FLAG_HAS_CONTROL (1 << 9) -#define RSPAMD_TASK_FLAG_PROCESSING (1 << 10) -#define RSPAMD_TASK_FLAG_GTUBE (1 << 11) -#define RSPAMD_TASK_FLAG_FILE (1 << 12) -#define RSPAMD_TASK_FLAG_NO_STAT (1 << 13) -#define RSPAMD_TASK_FLAG_UNLEARN (1 << 14) -#define RSPAMD_TASK_FLAG_ALREADY_LEARNED (1 << 15) -#define RSPAMD_TASK_FLAG_LEARN_SPAM (1 << 16) -#define RSPAMD_TASK_FLAG_LEARN_HAM (1 << 17) -#define RSPAMD_TASK_FLAG_LEARN_AUTO (1 << 18) -#define RSPAMD_TASK_FLAG_BROKEN_HEADERS (1 << 19) -#define RSPAMD_TASK_FLAG_HAS_SPAM_TOKENS (1 << 20) -#define RSPAMD_TASK_FLAG_HAS_HAM_TOKENS (1 << 21) -#define RSPAMD_TASK_FLAG_EMPTY (1 << 22) -#define RSPAMD_TASK_FLAG_LOCAL_CLIENT (1 << 23) -#define RSPAMD_TASK_FLAG_COMPRESSED (1 << 24) -#define RSPAMD_TASK_FLAG_PROFILE (1 << 25) -#define RSPAMD_TASK_FLAG_GREYLISTED (1 << 26) -#define RSPAMD_TASK_FLAG_OWN_POOL (1 << 27) -#define RSPAMD_TASK_FLAG_MILTER (1 << 28) -#define RSPAMD_TASK_FLAG_SSL (1 << 29) -#define RSPAMD_TASK_FLAG_BAD_UNICODE (1 << 30) +#define RSPAMD_TASK_FLAG_MIME (1u << 0u) +#define RSPAMD_TASK_FLAG_JSON (1u << 1u) +#define RSPAMD_TASK_FLAG_SKIP_PROCESS (1u << 2u) +#define RSPAMD_TASK_FLAG_SKIP (1u << 3u) +#define RSPAMD_TASK_FLAG_EXT_URLS (1u << 4u) +#define RSPAMD_TASK_FLAG_SPAMC (1u << 5u) +#define RSPAMD_TASK_FLAG_PASS_ALL (1u << 6u) +#define RSPAMD_TASK_FLAG_NO_LOG (1u << 7u) +#define RSPAMD_TASK_FLAG_NO_IP (1u << 8u) +#define RSPAMD_TASK_FLAG_HAS_CONTROL (1u << 9u) +#define RSPAMD_TASK_FLAG_PROCESSING (1u << 10u) +#define RSPAMD_TASK_FLAG_GTUBE (1u << 11u) +#define RSPAMD_TASK_FLAG_FILE (1u << 12u) +#define RSPAMD_TASK_FLAG_NO_STAT (1u << 13u) +#define RSPAMD_TASK_FLAG_UNLEARN (1u << 14u) +#define RSPAMD_TASK_FLAG_ALREADY_LEARNED (1u << 15u) +#define RSPAMD_TASK_FLAG_LEARN_SPAM (1u << 16u) +#define RSPAMD_TASK_FLAG_LEARN_HAM (1u << 17u) +#define RSPAMD_TASK_FLAG_LEARN_AUTO (1u << 18u) +#define RSPAMD_TASK_FLAG_BROKEN_HEADERS (1u << 19u) +#define RSPAMD_TASK_FLAG_HAS_SPAM_TOKENS (1u << 20u) +#define RSPAMD_TASK_FLAG_HAS_HAM_TOKENS (1u << 21u) +#define RSPAMD_TASK_FLAG_EMPTY (1u << 22u) +#define RSPAMD_TASK_FLAG_LOCAL_CLIENT (1u << 23u) +#define RSPAMD_TASK_FLAG_COMPRESSED (1u << 24u) +#define RSPAMD_TASK_FLAG_PROFILE (1u << 25u) +#define RSPAMD_TASK_FLAG_GREYLISTED (1u << 26u) +#define RSPAMD_TASK_FLAG_OWN_POOL (1u << 27u) +#define RSPAMD_TASK_FLAG_MILTER (1u << 28u) +#define RSPAMD_TASK_FLAG_SSL (1u << 29u) +#define RSPAMD_TASK_FLAG_BAD_UNICODE (1u << 30u) #define RSPAMD_TASK_IS_SKIPPED(task) (((task)->flags & RSPAMD_TASK_FLAG_SKIP)) #define RSPAMD_TASK_IS_JSON(task) (((task)->flags & RSPAMD_TASK_FLAG_JSON)) diff --git a/src/libserver/url.h b/src/libserver/url.h index 2243534dc..e724d44ff 100644 --- a/src/libserver/url.h +++ b/src/libserver/url.h @@ -10,25 +10,25 @@ struct rspamd_task; struct rspamd_mime_text_part; enum rspamd_url_flags { - RSPAMD_URL_FLAG_PHISHED = 1 << 0, - RSPAMD_URL_FLAG_NUMERIC = 1 << 1, - RSPAMD_URL_FLAG_OBSCURED = 1 << 2, - RSPAMD_URL_FLAG_REDIRECTED = 1 << 3, - RSPAMD_URL_FLAG_HTML_DISPLAYED = 1 << 4, - RSPAMD_URL_FLAG_FROM_TEXT = 1 << 5, - RSPAMD_URL_FLAG_SUBJECT = 1 << 6, - RSPAMD_URL_FLAG_HOSTENCODED = 1 << 7, - RSPAMD_URL_FLAG_SCHEMAENCODED = 1 << 8, - RSPAMD_URL_FLAG_PATHENCODED = 1 << 9, - RSPAMD_URL_FLAG_QUERYENCODED = 1 << 10, - RSPAMD_URL_FLAG_MISSINGSLASHES = 1 << 11, - RSPAMD_URL_FLAG_IDN = 1 << 12, - RSPAMD_URL_FLAG_HAS_PORT = 1 << 13, - RSPAMD_URL_FLAG_HAS_USER = 1 << 14, - RSPAMD_URL_FLAG_SCHEMALESS = 1 << 15, - RSPAMD_URL_FLAG_UNNORMALISED = 1 << 16, - RSPAMD_URL_FLAG_ZW_SPACES = 1 << 17, - RSPAMD_URL_FLAG_DISPLAY_URL = 1 << 18, + RSPAMD_URL_FLAG_PHISHED = 1u << 0u, + RSPAMD_URL_FLAG_NUMERIC = 1u << 1u, + RSPAMD_URL_FLAG_OBSCURED = 1u << 2u, + RSPAMD_URL_FLAG_REDIRECTED = 1u << 3u, + RSPAMD_URL_FLAG_HTML_DISPLAYED = 1u << 4u, + RSPAMD_URL_FLAG_FROM_TEXT = 1u << 5u, + RSPAMD_URL_FLAG_SUBJECT = 1u << 6u, + RSPAMD_URL_FLAG_HOSTENCODED = 1u << 7u, + RSPAMD_URL_FLAG_SCHEMAENCODED = 1u << 8u, + RSPAMD_URL_FLAG_PATHENCODED = 1u << 9u, + RSPAMD_URL_FLAG_QUERYENCODED = 1u << 10u, + RSPAMD_URL_FLAG_MISSINGSLASHES = 1u << 11u, + RSPAMD_URL_FLAG_IDN = 1u << 12u, + RSPAMD_URL_FLAG_HAS_PORT = 1u << 13u, + RSPAMD_URL_FLAG_HAS_USER = 1u << 14u, + RSPAMD_URL_FLAG_SCHEMALESS = 1u << 15u, + RSPAMD_URL_FLAG_UNNORMALISED = 1u << 16u, + RSPAMD_URL_FLAG_ZW_SPACES = 1u << 17u, + RSPAMD_URL_FLAG_DISPLAY_URL = 1u << 18u, }; struct rspamd_url_tag { @@ -81,19 +81,19 @@ enum uri_errno { }; enum rspamd_url_protocol { - PROTOCOL_FILE = 1u << 0, - PROTOCOL_FTP = 1u << 1, - PROTOCOL_HTTP = 1u << 2, - PROTOCOL_HTTPS = 1u << 3, - PROTOCOL_MAILTO = 1u << 4, - PROTOCOL_TELEPHONE = 1u << 5, - PROTOCOL_UNKNOWN = 1u << 31, + PROTOCOL_FILE = 1u << 0u, + PROTOCOL_FTP = 1u << 1u, + PROTOCOL_HTTP = 1u << 2u, + PROTOCOL_HTTPS = 1u << 3u, + PROTOCOL_MAILTO = 1u << 4u, + PROTOCOL_TELEPHONE = 1u << 5u, + PROTOCOL_UNKNOWN = 1u << 31u, }; enum rspamd_url_parse_flags { - RSPAMD_URL_PARSE_TEXT = 0, - RSPAMD_URL_PARSE_HREF = (1u << 0), - RSPAMD_URL_PARSE_CHECK = (1 << 1), + RSPAMD_URL_PARSE_TEXT = 0u, + RSPAMD_URL_PARSE_HREF = (1u << 0u), + RSPAMD_URL_PARSE_CHECK = (1u << 1u), }; enum rspamd_url_find_type { diff --git a/src/lua/lua_common.h b/src/lua/lua_common.h index ca0d0c591..2aaf670a4 100644 --- a/src/lua/lua_common.h +++ b/src/lua/lua_common.h @@ -486,7 +486,7 @@ extern ucl_object_t *lua_traces; func_obj->value.iv ++; \ } while(0) #else -#define LUA_TRACE_POINT +#define LUA_TRACE_POINT do {} while(0) #endif #endif /* WITH_LUA */ diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index d809c6ab1..d647c4a1d 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -99,6 +99,11 @@ LUA_FUNCTION_DEF (task, get_mempool); * @return {rspamd_session} session object */ LUA_FUNCTION_DEF (task, get_session); +/*** + * @method task:set_session(session) + * Sets new async session for a task + */ +LUA_FUNCTION_DEF (task, set_session); /*** * @method task:get_ev_base() * Return asynchronous event base for using in callbacks and resolver. @@ -1026,6 +1031,7 @@ static const struct luaL_reg tasklib_m[] = { LUA_INTERFACE_DEF (task, get_cfg), LUA_INTERFACE_DEF (task, get_mempool), LUA_INTERFACE_DEF (task, get_session), + LUA_INTERFACE_DEF (task, set_session), LUA_INTERFACE_DEF (task, get_ev_base), LUA_INTERFACE_DEF (task, get_worker), LUA_INTERFACE_DEF (task, insert_result), @@ -1514,6 +1520,7 @@ lua_task_create (lua_State * L) LUA_TRACE_POINT; struct rspamd_task *task = NULL, **ptask; struct rspamd_config *cfg = NULL; + struct event_base *ev_base = NULL; if (lua_type (L, 1) == LUA_TUSERDATA) { gpointer p; @@ -1524,7 +1531,16 @@ lua_task_create (lua_State * L) } } - task = rspamd_task_new (NULL, cfg, NULL, NULL, NULL); + if (lua_type (L, 2) == LUA_TUSERDATA) { + gpointer p; + p = rspamd_lua_check_udata_maybe (L, 2, "rspamd{ev_base}"); + + if (p) { + ev_base = *(struct event_base **)p; + } + } + + task = rspamd_task_new (NULL, cfg, NULL, NULL, ev_base); task->flags |= RSPAMD_TASK_FLAG_EMPTY; ptask = lua_newuserdata (L, sizeof (*ptask)); @@ -1571,6 +1587,22 @@ lua_task_get_session (lua_State * L) return 1; } +static int +lua_task_set_session (lua_State * L) +{ + LUA_TRACE_POINT; + struct rspamd_async_session *session = lua_check_session (L, 2); + struct rspamd_task *task = lua_check_task (L, 1); + + if (task != NULL && session != NULL) { + task->s = session; + } + else { + return luaL_error (L, "invalid arguments"); + } + return 1; +} + static int lua_task_get_ev_base (lua_State * L) { -- 2.39.5