src/server/daemon/config.c

branch
webdav
changeset 269
3dfbd0b91950
parent 260
4779a6fb4fbe
child 270
4cfaa02055cd
--- 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;
+}

mercurial