diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-09-23 16:51:05 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-09-23 16:51:05 +0100 |
commit | a59114820efe8abfc606da71b8e94c1759ceedab (patch) | |
tree | 997feddea031eb8b51c653c8da2346cb307c51a7 /src | |
parent | 011e790385be186d1bfe9f48bda906474e089f7b (diff) | |
download | rspamd-a59114820efe8abfc606da71b8e94c1759ceedab.tar.gz rspamd-a59114820efe8abfc606da71b8e94c1759ceedab.zip |
Rework pre-filters results processing.
Diffstat (limited to 'src')
-rw-r--r-- | src/libmime/filter.c | 1 | ||||
-rw-r--r-- | src/libmime/filter.h | 1 | ||||
-rw-r--r-- | src/libserver/protocol.c | 12 | ||||
-rw-r--r-- | src/lua/lua_task.c | 1 |
4 files changed, 13 insertions, 2 deletions
diff --git a/src/libmime/filter.c b/src/libmime/filter.c index 6ae51f769..540502a47 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -93,6 +93,7 @@ rspamd_create_metric_result (struct rspamd_task *task, const gchar *name) metric_res->score = 0; g_hash_table_insert (task->results, (gpointer) metric->name, metric_res); + metric_res->action = METRIC_ACTION_MAX; return metric_res; } diff --git a/src/libmime/filter.h b/src/libmime/filter.h index 69c20bdd1..3f01f2314 100644 --- a/src/libmime/filter.h +++ b/src/libmime/filter.h @@ -65,6 +65,7 @@ struct metric { struct metric_result { struct metric *metric; /**< pointer to metric structure */ double score; /**< total score */ + enum rspamd_metric_action action; /**< the current action */ GHashTable *symbols; /**< symbols of metric */ gboolean checked; /**< whether metric result is consolidated */ double grow_factor; /**< current grow factor */ diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index 9ecb3c642..7dadc65ec 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -648,8 +648,16 @@ rspamd_metric_result_ucl (struct rspamd_task *task, m = mres->metric; /* XXX: handle settings */ - action = rspamd_check_action_metric (task, mres->score, &required_score, m); + if (mres->action == METRIC_ACTION_MAX) { + mres->action = rspamd_check_action_metric (task, mres->score, + &required_score, m); + } + else { + required_score = mres->metric->actions[mres->action].score; + } + action = mres->action; is_spam = (action == METRIC_ACTION_REJECT); + if (task->is_skipped) { action_char = 'S'; } @@ -659,6 +667,7 @@ rspamd_metric_result_ucl (struct rspamd_task *task, else { action_char = 'F'; } + rspamd_printf_gstring (logbuf, "(%s: %c (%s): [%.2f/%.2f] [", m->name, action_char, rspamd_action_to_str (action), @@ -790,7 +799,6 @@ rspamd_protocol_http_reply (struct rspamd_http_message *msg, rspamd_http_message_add_header (msg, hn->str, hv->str); } - g_hash_table_iter_init (&hiter, task->results); top = ucl_object_typed_new (UCL_OBJECT); diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index d91774d1b..cb0d7325b 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -793,6 +793,7 @@ lua_task_set_pre_result (lua_State * L) mres = rspamd_create_metric_result (task, DEFAULT_METRIC); if (mres != NULL) { mres->score = mres->metric->actions[action].score; + mres->action = action; } task->pre_result.action = action; if (lua_gettop (L) >= 3) { |