aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstat/stat_internal.h1
-rw-r--r--src/libstat/stat_process.c32
2 files changed, 32 insertions, 1 deletions
diff --git a/src/libstat/stat_internal.h b/src/libstat/stat_internal.h
index 54f7e13d9..985472d2c 100644
--- a/src/libstat/stat_internal.h
+++ b/src/libstat/stat_internal.h
@@ -31,6 +31,7 @@
struct rspamd_statfile_runtime {
struct rspamd_statfile_config *st;
+ struct rspamd_stat_backend *backend;
gpointer backend_runtime;
guint64 hits;
guint64 total_hits;
diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c
index fcc068e5b..0151bb979 100644
--- a/src/libstat/stat_process.c
+++ b/src/libstat/stat_process.c
@@ -46,11 +46,40 @@ preprocess_init_stat_token (gpointer k, gpointer v, gpointer d)
{
rspamd_token_t *t = (rspamd_token_t *)v;
struct preprocess_cb_data *cbdata = (struct preprocess_cb_data *)d;
+ struct rspamd_statfile_runtime *st_runtime;
+ struct rspamd_classifier_runtime *cl_runtime;
+ struct rspamd_token_result *res;
+ GList *cur, *curst;
+ gint i = 0;
t->results = g_array_sized_new (FALSE, TRUE,
sizeof (struct rspamd_token_result), cbdata->results_count);
- /* TODO: add filling of results array */
+ cur = g_list_first (cbdata->classifier_runtimes);
+
+ while (cur) {
+ cl_runtime = (struct rspamd_classifier_runtime *)cur->data;
+ res = &g_array_index (t->results, struct rspamd_token_result, i);
+
+ curst = res->cl_runtime->st_runtime;
+
+ while (curst) {
+ st_runtime = (struct rspamd_statfile_runtime *)curst->data;
+
+ res->cl_runtime = cl_runtime;
+ res->st_runtime = st_runtime;
+
+ if (st_runtime->backend->process_token (t, res,
+ st_runtime->backend->ctx)) {
+ cl_runtime->processed_tokens ++;
+ }
+
+ i ++;
+ curst = g_list_next (curst);
+ }
+ cur = g_list_next (cur);
+ }
+
return FALSE;
}
@@ -120,6 +149,7 @@ rspamd_stat_preprocess (struct rspamd_stat_ctx *st_ctx,
sizeof (*st_runtime));
st_runtime->st = stcf;
st_runtime->backend_runtime = backend_runtime;
+ st_runtime->backend = bk;
cl_runtime->st_runtime = g_list_prepend (cl_runtime->st_runtime,
st_runtime);