src/server/plugins/postgresql/webdav.c

branch
webdav
changeset 303
ad9ba51c8634
parent 300
0e3f275b2492
child 306
e03737cea6e2
--- a/src/server/plugins/postgresql/webdav.c	Tue Apr 19 19:15:23 2022 +0200
+++ b/src/server/plugins/postgresql/webdav.c	Tue Apr 19 20:32:45 2022 +0200
@@ -39,9 +39,53 @@
     NULL, // opt_delete
     NULL, // opt_delete_finish
     0,
+    NULL,
     NULL
 };
 
+WebdavBackend* pg_webdav_create(Session *sn, Request *rq, pblock *pb) {
+    // resourcepool is required
+    char *resource_pool = pblock_findval("resourcepool", pb);
+    if(!resource_pool) {
+        log_ereport(LOG_MISCONFIG, "pg_webdav_create: missing resourcepool parameter");
+        return NULL;
+    }
+    
+    // get the resource first (should only fail in case of misconfig)
+    ResourceData *resdata = resourcepool_lookup(sn, rq, resource_pool, 0);
+    if(!resdata) {
+        log_ereport(LOG_MISCONFIG, "postgresql webdav: resource pool %s not found", resource_pool);
+        return NULL;
+    }
+    
+    return pg_webdav_create_from_resdata(sn, rq, resdata);
+}
+
+WebdavBackend* pg_webdav_create_from_resdata(Session *sn, Request *rq, ResourceData *resdata) {
+    WebdavBackend *webdav = pool_malloc(sn->pool, sizeof(WebdavBackend));
+    if(!webdav) {
+        return NULL;
+    }
+    *webdav = pg_webdav_backend;
+    
+    PgWebdavBackend *instance = pool_malloc(sn->pool, sizeof(PgWebdavBackend));
+    if(instance) {
+        pool_free(sn->pool, webdav);
+        return NULL;
+    }
+    webdav->instance = instance;
+    
+    instance->pg_resource = resdata;
+    instance->connection = resdata->data;
+    
+    return webdav;
+}
+
+WebdavBackend* pg_webdav_prop_create(Session *sn, Request *rq, pblock *pb) {
+    return NULL;
+}
+
+
 int pg_dav_propfind_init(
         WebdavPropfindRequest *rq,
         const char *path,

mercurial