Browse Source

Add workers handler function for rcl.

tags/0.6.0
Vsevolod Stakhov 10 years ago
parent
commit
2fa167601a
1 changed files with 47 additions and 0 deletions
  1. 47
    0
      src/cfg_rcl.c

+ 47
- 0
src/cfg_rcl.c View File

@@ -372,6 +372,41 @@ rspamd_rcl_metric_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
return TRUE;
}

static gboolean
rspamd_rcl_worker_handler (struct config_file *cfg, rspamd_cl_object_t *obj,
gpointer ud, struct rspamd_rcl_section *section, GError **err)
{
rspamd_cl_object_t *val, *lobj;
const gchar *worker_type;
GQuark qtype;
struct worker_conf *wrk;

lobj = obj->value.ov;

HASH_FIND_STR (lobj, "type", val);
if (val != NULL && rspamd_cl_obj_tostring_safe (val, &worker_type)) {
qtype = g_quark_try_string (worker_type);
if (qtype != 0) {
wrk = memory_pool_alloc0 (cfg->cfg_pool, sizeof (struct worker_conf));
wrk->worker = get_worker_by_type (qtype);
if (wrk->worker == NULL) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "unknown worker type: %s", worker_type);
return FALSE;
}
wrk->type = qtype;
if (wrk->worker->worker_init_func) {
wrk->ctx = wrk->worker->worker_init_func ();
}
}
}
else {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "undefined worker type");
return FALSE;
}

return rspamd_rcl_section_parse_defaults (section, cfg, obj, wrk, err);
}

/**
* Fake handler to parse default options only, uses struct cfg_file as pointer
* for default handlers
@@ -509,6 +544,18 @@ rspamd_rcl_config_init (void)
sub = rspamd_rcl_add_section (new, "metric", rspamd_rcl_metric_handler, RSPAMD_CL_OBJECT,
FALSE, TRUE);

/**
* Worker section
*/
sub = rspamd_rcl_add_section (new, "worker", rspamd_rcl_worker_handler, RSPAMD_CL_OBJECT,
FALSE, TRUE);
rspamd_rcl_add_default_handler (sub, "count", rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct worker_conf, count), RSPAMD_CL_FLAG_INT_16);
rspamd_rcl_add_default_handler (sub, "max_files", rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct worker_conf, rlimit_nofile), RSPAMD_CL_FLAG_INT_32);
rspamd_rcl_add_default_handler (sub, "max_core", rspamd_rcl_parse_struct_integer,
G_STRUCT_OFFSET (struct worker_conf, rlimit_maxcore), RSPAMD_CL_FLAG_INT_32);

return new;
}


Loading…
Cancel
Save