libidav/webdav.c

changeset 40
a95ee94b9204
parent 39
3e55bed345f9
child 41
1c598ee0d3d9
--- 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;
         }

mercurial