gboolean single = !!(flags & RSPAMD_SYMBOL_INSERT_SINGLE);
gchar *sym_cpy;
- metric_res = rspamd_create_metric_result (task);
+ metric_res = task->result;
if (!isfinite (weight)) {
msg_warn_task ("detected %s score for symbol %s, replace it with zero",
rspamd_ptr_hash_func,
rspamd_ptr_equal_func);
struct rspamd_metric_result {
- double score; /**< total score */
+ double score; /**< total score */
double grow_factor; /**< current grow factor */
+
khash_t(rspamd_symbols_hash) *symbols; /**< symbols of metric */
khash_t(rspamd_symbols_group_hash) *sym_groups; /**< groups of symbols */
gdouble actions_limits[METRIC_ACTION_MAX]; /**< set of actions for this metric */
if (act != METRIC_ACTION_NOACTION) {
struct rspamd_metric_result *mres;
- mres = rspamd_create_metric_result (task);
+ mres = task->result;
if (mres != NULL) {
if (act == METRIC_ACTION_REJECT) {
checkpoint->pass = RSPAMD_CACHE_PASS_INIT;
task->checkpoint = checkpoint;
- task->result = rspamd_create_metric_result (task);
+ task->result = task->result;
return checkpoint;
}
new_task->sock = -1;
new_task->flags |= (RSPAMD_TASK_FLAG_MIME|RSPAMD_TASK_FLAG_JSON);
- new_task->pre_result.action = METRIC_ACTION_MAX;
+ new_task->result = rspamd_create_metric_result (new_task);
new_task->message_id = new_task->queue_id = "undef";
new_task->messages = ucl_object_typed_new (UCL_OBJECT);
struct event *guard_ev; /**< Event for input sanity guard */
gpointer checkpoint; /**< Opaque checkpoint data */
-
- struct {
- gint action; /**< Action of pre filters */
- gchar *str; /**< String describing action */
- } pre_result; /**< Result of pre-filters */
-
ucl_object_t *settings; /**< Settings applied to task */
const gchar *classifier; /**< Classifier to learn (if needed) */
if (action < METRIC_ACTION_MAX && action >= METRIC_ACTION_REJECT) {
/* We also need to set the default metric to that result */
- if (!task->result) {
- task->result = rspamd_create_metric_result (task);
- }
task->pre_result.action = action;
/* Adjust desired actions */
mres = task->result;
- if (mres == NULL) {
- mres = rspamd_create_metric_result (task);
- }
-
for (i = 0; i < METRIC_ACTION_MAX; i++) {
elt = ucl_object_lookup_any (act, rspamd_action_to_str (i),
rspamd_action_to_str_alt (i), NULL);
enum rspamd_action_type action;
if (task) {
- if ((metric_res = task->result) == NULL) {
- metric_res = rspamd_create_metric_result (task);
- }
+ metric_res = task->result;
action = rspamd_check_action_metric (task, metric_res);
lua_pushstring (L, rspamd_action_to_str (action));