--- a/libidav/webdav.c Sat Sep 07 14:08:43 2013 +0200 +++ b/libidav/webdav.c Mon Mar 17 18:42:01 2014 +0100 @@ -53,6 +53,7 @@ free(context); return NULL; } + context->keys = ucx_map_new(16); DavNamespace *davns = malloc(sizeof(DavNamespace)); if(!davns) { ucx_map_free(context->namespaces); @@ -87,6 +88,14 @@ free(ctx); } +void dav_context_add_key(DavContext *context, DavKey *key) { + ucx_map_cstr_put(context->keys, key->name, key); +} + +DavKey* dav_context_get_key(DavContext *context, char *name) { + return ucx_map_cstr_get(context->keys, name); +} + int dav_add_namespace(DavContext *context, char *prefix, char *name) { DavNamespace *namespace = malloc(sizeof(DavNamespace)); if(!namespace) { @@ -135,11 +144,12 @@ return NULL; } DavSession *sn = malloc(sizeof(DavSession)); + sn->key = NULL; sn->errorstr = NULL; sn->error = DAV_OK; sn->flags = 0; if(url.ptr[url.length - 1] == '/') { - sn->base_url = strdup(base_url); + sn->base_url = strdup(base_url); // TODO: mempool } else { char *url_str = malloc(url.length + 2); memcpy(url_str, base_url, url.length); @@ -178,7 +188,6 @@ curl_easy_setopt(sn->handle, CURLOPT_URL, base_url); sn->mp = ucx_mempool_new(1024); - sn->allocator = ucx_mempool_allocator(sn->mp); context->sessions = ucx_list_append(context->sessions, sn); @@ -250,32 +259,25 @@ void* dav_session_malloc(DavSession *sn, size_t size) { - UcxAllocator *a = sn->allocator; - return a->malloc(a->pool, size); + return ucx_mempool_malloc(sn->mp, size); } void* dav_session_calloc(DavSession *sn, size_t nelm, size_t size) { - UcxAllocator *a = sn->allocator; - return a->calloc(a->pool, nelm, size); + return ucx_mempool_calloc(sn->mp, nelm, size); } void* dav_session_realloc(DavSession *sn, void *ptr, size_t size) { - UcxAllocator *a = sn->allocator; - return a->realloc(a->pool, ptr, size); + return ucx_mempool_realloc(sn->mp, ptr, size); } void dav_session_free(DavSession *sn, void *ptr) { - UcxAllocator *a = sn->allocator; - a->free(a->pool, ptr); + ucx_mempool_free(sn->mp, ptr); } -DavResource* dav_get(DavSession *sn, char *path, char *properties) { - char *url = util_concat_path(sn->base_url, path); - +DavResource* dav_get(DavSession *sn, char *path, char *properties) { CURL *handle = sn->handle; - curl_easy_setopt(handle, CURLOPT_URL, url); - free(url); + util_set_url(sn, path); UcxList *proplist = NULL; if(properties) { @@ -302,10 +304,8 @@ } DavResource* dav_propfind(DavSession *sn, DavResource *root, UcxBuffer *rqbuf, char *path, DavQOp *cond, size_t len) { - char *url = util_concat_path(sn->base_url, path); CURL *handle = sn->handle; - curl_easy_setopt(handle, CURLOPT_URL, url); - free(url); + util_set_url(sn, path); UcxBuffer *rpbuf = ucx_buffer_new(NULL, 4096, UCX_BUFFER_AUTOEXTEND); DavResource *resource = root; @@ -334,7 +334,7 @@ return stack; } -DavResource* dav_get2(DavSession *sn, DavGetQuery *query) { +DavResource* dav_query_get(DavSession *sn, DavGetQuery *query) { char *path; int depth = 0; if(parse_path_query(query->from, &path, &depth)) { @@ -360,7 +360,7 @@ free(path); int error = 0; if(resource && depth == -1) { - UcxList *stack = NULL; // stack with davResource* elements + UcxList *stack = NULL; // stack with DavResource* elements stack = propfind_stack_push(stack, resource->children); while(stack) { DavResource *sr = stack->data; // get first element from the stack @@ -416,7 +416,7 @@ DavResource *res = NULL; switch(q.command) { case DAV_QUERY_GET: { - res = dav_get2(sn, q.command_data); + res = dav_query_get(sn, q.command_data); free_get_query(q.command_data); break; }