libidav/methods.c

changeset 315
7db4dbf4e6f9
parent 236
6b4ce32d0c4e
child 331
9ca1e4706acc
--- a/libidav/methods.c	Fri Sep 22 20:42:33 2017 +0200
+++ b/libidav/methods.c	Sat Sep 23 11:45:03 2017 +0200
@@ -111,7 +111,7 @@
     return ret;
 }
 
-UcxBuffer* create_allprop_propfind_request() {
+UcxBuffer* create_allprop_propfind_request(void) {
     UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOFREE);
     sstr_t s;
     
@@ -247,7 +247,7 @@
     return buf;
 }
 
-UcxBuffer* create_basic_propfind_request() {
+UcxBuffer* create_basic_propfind_request(void) {
     UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND);
     sstr_t s;
     
@@ -1077,7 +1077,7 @@
 }
 
 
-UcxBuffer* create_lock_request() {
+UcxBuffer* create_lock_request(void) {
     UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND);
     sstr_t s;
     
@@ -1156,13 +1156,24 @@
     return ret;
 }
 
-CURLcode do_lock_request(CURL *handle, UcxBuffer *request, UcxBuffer *response) { 
+CURLcode do_lock_request(CURL *handle, UcxBuffer *request, UcxBuffer *response, time_t timeout) { 
     curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, "LOCK");  
     curl_easy_setopt(handle, CURLOPT_UPLOAD, 1L);
     request->pos = 0;
     
-    // clear headers
+    // clear headers    
     struct curl_slist *headers = NULL;
+    
+    if(timeout != 0) {
+        sstr_t thdr;
+        if(timeout < 0) {
+            thdr = ucx_sprintf("%s", "Timeout: Infinite");
+        } else {
+            thdr = ucx_sprintf("Timeout: Second-%u", (unsigned int)timeout);
+        }
+        headers = curl_slist_append(headers, thdr.ptr);
+        free(thdr.ptr);
+    }
     curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
     
     curl_easy_setopt(handle, CURLOPT_UPLOAD, 1); 
@@ -1175,6 +1186,10 @@
     
     CURLcode ret = curl_easy_perform(handle);
     
+    if(headers) {
+        curl_slist_free_all(headers);
+    }
+    
     return ret;
 }
 

mercurial