src/server/webdav/webdav.c

branch
webdav
changeset 366
47bc686fafe4
parent 352
d0a7ef49db0f
child 373
f78a585e1a2f
--- a/src/server/webdav/webdav.c	Sun May 15 08:56:00 2022 +0200
+++ b/src/server/webdav/webdav.c	Sun Aug 07 13:46:43 2022 +0200
@@ -85,19 +85,38 @@
     default_backend.instance = NULL;
 }
 
-int webdav_register_backend(const char *name, webdav_create_func webdavCreate) {
-    return ucx_map_cstr_put(webdav_type_map, name, webdavCreate);
+int webdav_register_backend(const char *name, webdav_init_func webdavInit, webdav_create_func webdavCreate) {
+    WebdavType *webdavType = malloc(sizeof(WebdavType));
+    webdavType->init = webdavInit;
+    webdavType->create = webdavCreate;
+    return ucx_map_cstr_put(webdav_type_map, name, webdavType);
+}
+
+WebdavType* webdav_get_type(scstr_t dav_class) {
+    return ucx_map_sstr_get(webdav_type_map, dav_class);
 }
 
+void* webdav_init_backend(ServerConfiguration *cfg, pool_handle_t *pool, WebdavType *dav_class, WSConfigNode *config, int *error) {
+    *error = 0;
+    if(dav_class->init) {
+        void *initData = dav_class->init(cfg, pool, config);
+        if(!initData) {
+            *error = 1;
+        }
+        return initData;
+    } else {
+        return NULL;
+    }
+}
 
-WebdavBackend* webdav_create(Session *sn, Request *rq, const char *dav_class, pblock *pb) {
-    webdav_create_func createDav = ucx_map_cstr_get(webdav_type_map, dav_class);
-    if(!createDav) {
+WebdavBackend* webdav_create(Session *sn, Request *rq, const char *dav_class, pblock *pb, void *initData) {
+    WebdavType *webdavType = ucx_map_cstr_get(webdav_type_map, dav_class);
+    if(!webdavType) {
         log_ereport(LOG_MISCONFIG, "webdav_create: unkown dav type %s", dav_class);
         return NULL;
     }
     
-    return createDav(sn, rq, pb);
+    return webdavType->create(sn, rq, pb, initData);
 }
 
 static WSBool webdav_is_initialized = FALSE;

mercurial