libidav/methods.c

branch
dav-2
changeset 891
4d58cbcc9efa
parent 886
da79af4baec8
--- a/libidav/methods.c	Sun Dec 07 20:16:59 2025 +0100
+++ b/libidav/methods.c	Fri Dec 19 17:53:18 2025 +0100
@@ -74,7 +74,7 @@
     curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, cxBufferWrite);
     curl_easy_setopt(handle, CURLOPT_WRITEDATA, response);
     CxMap *respheaders = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 32);
-    cxDefineDestructor(respheaders, free);
+    cxSetDestructor(respheaders, free);
     util_capture_header(handle, respheaders);
     
     for(int i=0;i<maxretry;i++) {
@@ -122,39 +122,39 @@
 }
 
 CxBuffer* create_allprop_propfind_request(void) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:propfind xmlns:D=\"DAV:\">\n");
+    s = cx_str("<D:propfind xmlns:D=\"DAV:\">\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:allprop/></D:propfind>\n");
+    s = cx_str("<D:allprop/></D:propfind>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     return buf;
 }
 
 CxBuffer* create_cryptoprop_propfind_request(void) {
-    CxBuffer *buf = cxBufferCreate(NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 256, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:propfind xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n");
+    s = cx_str("<D:propfind xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:prop><idav:crypto-prop/></D:prop></D:propfind>\n");
+    s = cx_str("<D:prop><idav:crypto-prop/></D:prop></D:propfind>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     return buf;
 }
 
 CxBuffer* create_propfind_request(DavSession *sn, CxList *properties, char *rootelm, DavBool nocrypt) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
     int add_crypto_name = 1;
@@ -193,7 +193,7 @@
         cxMapPut(namespaces, cx_hash_key_str("idav"), &idav_ns);
     }
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // write root element and namespaces
@@ -201,31 +201,31 @@
     
     CxMapIterator mapi = cxMapIteratorValues(namespaces);
     cx_foreach(DavNamespace*, ns, mapi) {
-        s = CX_STR(" xmlns:");
+        s = cx_str(" xmlns:");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         s = cx_str(ns->prefix);
         cxBufferWrite(s.ptr, 1, s.length, buf);
-        s = CX_STR("=\"");
+        s = cx_str("=\"");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         s = cx_str(ns->name);
         cxBufferWrite(s.ptr, 1, s.length, buf);
-        s = CX_STR("\"");
+        s = cx_str("\"");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
-    s = CX_STR(">\n");
+    s = cx_str(">\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // default properties
-    s = CX_STR("<D:prop>\n");
+    s = cx_str("<D:prop>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:creationdate />\n<D:getlastmodified />\n");
+    s = cx_str("<D:creationdate />\n<D:getlastmodified />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:getcontentlength />\n<D:getcontenttype />\n");
+    s = cx_str("<D:getcontentlength />\n<D:getcontenttype />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:resourcetype />\n");
+    s = cx_str("<D:resourcetype />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // crypto properties
@@ -233,19 +233,19 @@
         if(add_crypto_name) {
             cxBufferPut(buf, '<');
             cxBufferPutString(buf, crypto_ns);
-            s = CX_STR(":crypto-name />\n");
+            s = cx_str(":crypto-name />\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
         if(add_crypto_key) {
             cxBufferPut(buf, '<');
             cxBufferPutString(buf, crypto_ns);
-            s = CX_STR(":crypto-key />\n");
+            s = cx_str(":crypto-key />\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
         if(add_crypto_hash) {
             cxBufferPut(buf, '<');
             cxBufferPutString(buf, crypto_ns);
-            s = CX_STR(":crypto-hash />\n");
+            s = cx_str(":crypto-hash />\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
     }
@@ -254,15 +254,15 @@
     if(properties) {
         CxIterator i = cxListIterator(properties);
         cx_foreach(DavProperty*, prop, i) {
-            s = CX_STR("<");
+            s = cx_str("<");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(prop->ns->prefix);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(":");
+            s = cx_str(":");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(prop->name);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(" />\n");
+            s = cx_str(" />\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
     }
@@ -275,35 +275,35 @@
 }
 
 CxBuffer* create_basic_propfind_request(void) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:propfind xmlns:D=\"DAV:\" xmlns:i=\"");
+    s = cx_str("<D:propfind xmlns:D=\"DAV:\" xmlns:i=\"");
     cxBufferWrite(s.ptr, 1, s.length, buf);  
-    s = CX_STR(DAV_NS);
+    s = cx_str(DAV_NS);
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("\" >\n");
+    s = cx_str("\" >\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // properties
-    s = CX_STR("<D:prop>\n");
+    s = cx_str("<D:prop>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("<D:resourcetype />\n");
+    s = cx_str("<D:resourcetype />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("<i:crypto-key />\n");
+    s = cx_str("<i:crypto-key />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("<i:crypto-name />\n");
+    s = cx_str("<i:crypto-name />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("<i:crypto-hash />\n");
+    s = cx_str("<i:crypto-hash />\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
-    s = CX_STR("</D:prop>\n");
+    s = cx_str("</D:prop>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // end
-    s = CX_STR("</D:propfind>\n");
+    s = cx_str("</D:propfind>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     return buf;
@@ -356,7 +356,7 @@
     char *crypto_name = NULL; // name set by crypto-name property
     char *crypto_key = NULL;
     
-    result->properties = cxLinkedListCreateSimple(CX_STORE_POINTERS); // xmlNode list
+    result->properties = cxLinkedListCreate(NULL, CX_STORE_POINTERS); // xmlNode list
     
     xmlNode *node = parser->current->children;
     while(node) {
@@ -389,7 +389,7 @@
                                 return -1;
                             }
                             status_str = cx_strsubsl(status_str, 9, 3);
-                            if(!cx_strcmp(status_str, CX_STR("200"))) {
+                            if(!cx_strcmp(status_str, cx_str("200"))) {
                                 ok = 1;
                             }
                         }
@@ -590,7 +590,7 @@
     //DavResource *res = resource;
     DavResource *res = NULL;
     const char *href = NULL;
-    CxList *properties = cxLinkedListCreateSimple(CX_STORE_POINTERS); // xmlNode list
+    CxList *properties = cxLinkedListCreate(NULL, CX_STORE_POINTERS); // xmlNode list
     char *crypto_name = NULL; // name set by crypto-name property
     char *crypto_key = NULL;
     
@@ -639,7 +639,7 @@
                                 return 1;
                             }
                             status_str = cx_strsubsl(status_str, 9, 3);
-                            if(!cx_strcmp(status_str, CX_STR("200"))) {
+                            if(!cx_strcmp(status_str, cx_str("200"))) {
                                 ok = 1;
                             }
                         }
@@ -822,11 +822,11 @@
 }
 
 CxBuffer* create_proppatch_request(DavResourceData *data) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
     CxMap *namespaces = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8);
-    cxDefineDestructor(namespaces, free);
+    cxSetDestructor(namespaces, free);
 
     {
         char prefix[8];
@@ -851,30 +851,30 @@
         }
     }
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // write root element and namespaces
-    s = CX_STR("<D:propertyupdate xmlns:D=\"DAV:\"");
+    s = cx_str("<D:propertyupdate xmlns:D=\"DAV:\"");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     CxMapIterator mapi = cxMapIterator(namespaces);
     cx_foreach(CxMapEntry*, entry, mapi) {
-        s = CX_STR(" xmlns:");
+        s = cx_str(" xmlns:");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         s = cx_str(entry->value);
         cxBufferWrite(s.ptr, 1, s.length, buf);
-        s = CX_STR("=\"");
+        s = cx_str("=\"");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         s = cx_strn(entry->key->data, entry->key->len);
         cxBufferWrite(s.ptr, 1, s.length, buf);
-        s = CX_STR("\"");
+        s = cx_str("\"");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
-    s = CX_STR(">\n");
+    s = cx_str(">\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     if(data->set) {
-        s = CX_STR("<D:set>\n<D:prop>\n");
+        s = cx_str("<D:set>\n<D:prop>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         CxIterator i = cxListIterator(data->set);
         cx_foreach(DavProperty*, property, i) {
@@ -884,15 +884,15 @@
             }
             
             // begin tag
-            s = CX_STR("<");
+            s = cx_str("<");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(prefix);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(":");
+            s = cx_str(":");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(property->name);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(">");
+            s = cx_str(">");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             
             // content
@@ -904,43 +904,43 @@
             }
             
             // end tag
-            s = CX_STR("</");
+            s = cx_str("</");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(prefix);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(":");
+            s = cx_str(":");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(property->name);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(">\n");
+            s = cx_str(">\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
-        s = CX_STR("</D:prop>\n</D:set>\n");
+        s = cx_str("</D:prop>\n</D:set>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
     if(data->remove) {
-        s = CX_STR("<D:remove>\n<D:prop>\n");
+        s = cx_str("<D:remove>\n<D:prop>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         CxIterator i = cxListIterator(data->remove);
         cx_foreach(DavProperty*, property, i) {
             char *prefix = cxMapGet(namespaces, cx_hash_key_str(property->ns->name));
             
-            s = CX_STR("<");
+            s = cx_str("<");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(prefix);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(":");
+            s = cx_str(":");
             cxBufferWrite(s.ptr, 1, s.length, buf);
             s = cx_str(property->name);
             cxBufferWrite(s.ptr, 1, s.length, buf);
-            s = CX_STR(" />\n");
+            s = cx_str(" />\n");
             cxBufferWrite(s.ptr, 1, s.length, buf);
         }
-        s = CX_STR("</D:prop>\n</D:remove>\n");
+        s = cx_str("</D:prop>\n</D:remove>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
     
-    s = CX_STR("</D:propertyupdate>\n");
+    s = cx_str("</D:propertyupdate>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     // cleanup namespace map
@@ -950,43 +950,43 @@
 }
 
 CxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, const char *name, const char *hash) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:propertyupdate xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n");
+    s = cx_str("<D:propertyupdate xmlns:D=\"DAV:\" xmlns:idav=\"" DAV_NS "\">\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:set>\n<D:prop>\n");
+    s = cx_str("<D:set>\n<D:prop>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     if(DAV_ENCRYPT_NAME(sn)) {
-        s = CX_STR("<idav:crypto-name>");
+        s = cx_str("<idav:crypto-name>");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         char *crname = aes_encrypt(name, strlen(name), key);
         cxBufferPutString(buf, crname);
         free(crname);
-        s = CX_STR("</idav:crypto-name>\n");
+        s = cx_str("</idav:crypto-name>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
     
-    s = CX_STR("<idav:crypto-key>");
+    s = cx_str("<idav:crypto-key>");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     cxBufferPutString(buf, key->name);
-    s = CX_STR("</idav:crypto-key>\n");
+    s = cx_str("</idav:crypto-key>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     if(hash) {
-        s = CX_STR("<idav:crypto-hash>");
+        s = cx_str("<idav:crypto-hash>");
         cxBufferWrite(s.ptr, 1, s.length, buf);
         cxBufferPutString(buf, hash);
-        s = CX_STR("</idav:crypto-hash>\n");
+        s = cx_str("</idav:crypto-hash>\n");
         cxBufferWrite(s.ptr, 1, s.length, buf);
     }
     
-    s = CX_STR("</D:prop>\n</D:set>\n</D:propertyupdate>\n");
+    s = cx_str("</D:prop>\n</D:set>\n</D:propertyupdate>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     return buf;
@@ -1025,7 +1025,7 @@
     
     CxBuffer *buf = NULL;
     if(!read_func) {
-        buf = cxBufferCreate(data, length, cxDefaultAllocator, 0);
+        buf = cxBufferCreate(cxDefaultAllocator, data, length, 0);
         buf->size = length;
         data = buf;
         read_func = (dav_read_func)cxBufferRead;
@@ -1148,7 +1148,7 @@
         free(ltheader);
     }
     //cxstring deststr = ucx_sprintf("Destination: %s", dest);
-    cxmutstr deststr = cx_strcat(2, CX_STR("Destination: "), cx_str(dest));
+    cxmutstr deststr = cx_strcat(2, cx_str("Destination: "), cx_str(dest));
     headers = curl_slist_append(headers, deststr.ptr);
     if(override) {
         headers = curl_slist_append(headers, "Overwrite: T");
@@ -1167,19 +1167,19 @@
 
 
 CxBuffer* create_lock_request(void) {
-    CxBuffer *buf = cxBufferCreate(NULL, 512, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
+    CxBuffer *buf = cxBufferCreate(cxDefaultAllocator, NULL, 512, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND);
     cxstring s;
     
-    s = CX_STR("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
+    s = cx_str("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("<D:lockinfo xmlns:D=\"DAV:\">\n"
+    s = cx_str("<D:lockinfo xmlns:D=\"DAV:\">\n"
           "<D:lockscope><D:exclusive/></D:lockscope>\n"
           "<D:locktype><D:write/></D:locktype>\n"
           "<D:owner><D:href>http://davutils.org/libidav/</D:href></D:owner>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
-    s = CX_STR("</D:lockinfo>\n");
+    s = cx_str("</D:lockinfo>\n");
     cxBufferWrite(s.ptr, 1, s.length, buf);
     
     return buf;

mercurial