src/server/webdav/webdav.c

branch
webdav
changeset 222
5f05e56cb8e2
parent 221
ff5826fc6a6c
child 227
3c23855f7b46
--- a/src/server/webdav/webdav.c	Tue Dec 31 16:31:29 2019 +0100
+++ b/src/server/webdav/webdav.c	Tue Jan 14 20:05:18 2020 +0100
@@ -214,7 +214,8 @@
     WebdavResponse *response = (WebdavResponse*)ms;
     
     WebdavOperation *op = webdav_operation_create(
-            sn->pool,
+            sn,
+            rq,
             dav,
             requestObjects,
             response);
@@ -268,6 +269,15 @@
         ret = REQ_ABORTED;
     }
     
+    // if propfind was successful, send the result to the client
+    if(ret == REQ_PROCEED && multistatus_send(ms, sn->csd)) {
+        ret = REQ_ABORTED;
+        // TODO: log error
+    } else {
+        // TODO: log error
+        // TODO: error response
+    }
+    
     return ret;
 }
 
@@ -563,6 +573,44 @@
     return 0;
 }
 
+int webdav_property_add_nsdef(
+        WebdavProperty *property, 
+        pool_handle_t *pool,
+        const char *prefix,
+        const char *nsuri)
+{
+    // because we're using a memory pool, we don't free in case stuff in
+    // case of an error (OOM) - stuff will be freed by destroyinig the pool
+    
+    WebdavNSList *new_def = pool_malloc(pool, sizeof(WebdavNSList));
+    if(!new_def) {
+        return 1;
+    }
+    WSNamespace *new_ns = pool_malloc(pool, sizeof(WSNamespace));
+    if(!new_ns) {
+        return 1;
+    }
+    ZERO(new_ns, sizeof(WSNamespace));
+    
+    new_ns->prefix = (xmlChar*)pool_strdup(pool, prefix);
+    new_ns->href = (xmlChar*)pool_strdup(pool, nsuri);
+    if(!new_ns->prefix || !new_ns->href) {
+        return 1;
+    }
+    
+    new_def->namespace = new_ns;
+    new_def->prev = NULL;
+    new_def->next = NULL;
+    
+    if(property->nsdef) {
+        property->nsdef->prev = new_def;
+        new_def->next = property->nsdef;
+    }
+    property->nsdef = new_def;
+    
+    return 0;
+}
+
 WebdavVFSProperties webdav_vfs_properties(
         WebdavPropfindRequest *rq,
         WSBool removefromlist,

mercurial