aboutsummaryrefslogtreecommitdiffstats
path: root/src/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2013-09-30 16:43:52 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2013-09-30 16:43:52 +0100
commit0f3bef042e866e967e41848ebd8bae85a86fef73 (patch)
tree809b692999a1ee85d5e31d513088e517bad50c52 /src/cfg_rcl.c
parent3d218a89ecaf7ff265a26f922d99d74ef6ef6108 (diff)
downloadrspamd-0f3bef042e866e967e41848ebd8bae85a86fef73.tar.gz
rspamd-0f3bef042e866e967e41848ebd8bae85a86fef73.zip
Add rcl parsers for workers options.
Diffstat (limited to 'src/cfg_rcl.c')
-rw-r--r--src/cfg_rcl.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/cfg_rcl.c b/src/cfg_rcl.c
index 70f51f8cd..5c27a2516 100644
--- a/src/cfg_rcl.c
+++ b/src/cfg_rcl.c
@@ -388,7 +388,7 @@ rspamd_rcl_worker_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
}
wrk->type = qtype;
if (wrk->worker->worker_init_func) {
- wrk->ctx = wrk->worker->worker_init_func ();
+ wrk->ctx = wrk->worker->worker_init_func (cfg);
}
}
else {
@@ -897,3 +897,33 @@ rspamd_rcl_parse_struct_boolean (struct config_file *cfg, rspamd_cl_object_t *ob
return TRUE;
}
+
+void
+rspamd_rcl_register_worker_option (struct config_file *cfg, gint type, const gchar *name,
+ rspamd_rcl_handler_t handler, gpointer target, gsize offset, gint flags)
+{
+ struct rspamd_worker_param_parser *nhandler;
+ struct rspamd_worker_cfg_parser *nparser;
+
+ HASH_FIND_INT (cfg->wrk_parsers, &type, nparser);
+ if (nparser == NULL) {
+ /* Allocate new parser for this worker */
+ nparser = memory_pool_alloc0 (cfg->cfg_pool, sizeof (struct rspamd_worker_cfg_parser));
+ nparser->type = type;
+ HASH_ADD_INT (cfg->wrk_parsers, type, nparser);
+ }
+
+ HASH_FIND_STR (nparser->parsers, name, nhandler);
+ if (nhandler != NULL) {
+ msg_warn ("handler for parameter %s is already registered for worker type %s",
+ name, g_quark_to_string (type));
+ return;
+ }
+ nhandler = memory_pool_alloc0 (cfg->cfg_pool, sizeof (struct rspamd_worker_param_parser));
+ nhandler->name = name;
+ nhandler->parser.flags = flags;
+ nhandler->parser.offset = offset;
+ nhandler->parser.user_struct = target;
+ nhandler->handler = handler;
+ HASH_ADD_STR (nparser->parsers, name, nhandler);
+}