diff -r 65ac1342ba1f -r 3dfbd0b91950 src/server/daemon/config.c --- a/src/server/daemon/config.c Thu Jan 20 16:04:58 2022 +0100 +++ b/src/server/daemon/config.c Sat Jan 22 11:06:11 2022 +0100 @@ -48,6 +48,7 @@ #include "threadpools.h" #include "ldap_auth.h" #include "configmanager.h" +#include "resourcepool.h" #include "vserver.h" #include "../util/pblock.h" @@ -268,6 +269,13 @@ } ucx_list_free(list); + list = serverconfig_get_node_list(serverconf->root, CONFIG_NODE_OBJECT, SC("ResourcePool")); + UCX_FOREACH(elm, list) { + ConfigNode *scfgobj = elm->data; + if(cfg_handle_resourcepool(serverconfig, scfgobj)) { + return NULL; + } + } // set VirtualServer for all listeners UcxList *ls = serverconfig->listeners; @@ -416,6 +424,18 @@ return create_event_handler(&evcfg); } +int cfg_handle_resourcepool(ServerConfiguration *cfg, ConfigNode *obj) { + scstr_t name = serverconfig_directive_value(obj, SC("Name")); + scstr_t type = serverconfig_directive_value(obj, SC("Type")); + + int ret = 0; + if(resourcepool_new(cfg, name, type, obj)) { + ret = 1; + } + + return ret; +} + int cfg_handle_accesslog(ServerConfiguration *cfg, ConfigNode *obj) { // TODO: use a name to identify the log file @@ -890,3 +910,15 @@ return ret; } + +pblock* config_obj2pblock(pool_handle_t *pool, ConfigNode *obj) { + pblock *pb = pblock_create_pool(pool, 8); + UCX_FOREACH(elm, obj->children) { + ConfigNode *d = elm->data; + if(d->type == CONFIG_NODE_DIRECTIVE && d->name.length > 0 && ucx_list_size(d->args) == 1) { + ConfigArg *arg = d->args->data; + pblock_nvlinsert(d->name.ptr, d->name.length, arg->value.ptr, arg->value.length, pb); + } + } + return pb; +}