diff -r 8722a668fb2a -r 7db4dbf4e6f9 libidav/methods.c --- 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; }