diff -r 3e55bed345f9 -r a95ee94b9204 libidav/utils.c --- a/libidav/utils.c Sat Sep 07 14:08:43 2013 +0200 +++ b/libidav/utils.c Mon Mar 17 18:42:01 2014 +0100 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -41,6 +42,7 @@ #include #include "utils.h" +#include "webdav.h" time_t util_parse_creationdate(char *str) { @@ -173,6 +175,51 @@ return url.ptr; } +void util_set_url(DavSession *sn, char *path) { + if(path) { + char *url = util_path_to_url(sn, path); + curl_easy_setopt(sn->handle, CURLOPT_URL, url); + free(url); + } else { + curl_easy_setopt(sn->handle, CURLOPT_URL, sn->base_url); + } +} + +char* util_path_to_url(DavSession *sn, char *path) { + UcxBuffer *url = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND); + + // add base url + ucx_buffer_write(sn->base_url, 1, strlen(sn->base_url), url); + // remove trailing slash + ucx_buffer_seek(url, -1, SEEK_CUR); + + sstr_t p = sstr(path); + size_t ntk = 0; + sstr_t *tks = sstrsplit(p, S("/"), &ntk); + + for(int i=0;i 0) { + // TODO: implement file name encryption + char *esc = curl_easy_escape(sn->handle, node.ptr, node.length); + ucx_buffer_putc(url, '/'); + ucx_buffer_write(esc, 1, strlen(esc), url); + curl_free(esc); + free(node.ptr); + } + } + free(tks); + if(path[p.length-1] == '/') { + ucx_buffer_putc(url, '/'); + } + ucx_buffer_putc(url, 0); + + // only free the buffer struct and return the buffer space + char *space = url->space; + free(url); + return space; +} + char* util_parent_path(char *path) { char *name = util_resource_name(path); size_t namelen = strlen(name);