52 sn->pathcache = ucx_map_new_a(sn->mp->allocator, DAV_PATH_CACHE_SIZE); |
52 sn->pathcache = ucx_map_new_a(sn->mp->allocator, DAV_PATH_CACHE_SIZE); |
53 sn->key = NULL; |
53 sn->key = NULL; |
54 sn->errorstr = NULL; |
54 sn->errorstr = NULL; |
55 sn->error = DAV_OK; |
55 sn->error = DAV_OK; |
56 sn->flags = 0; |
56 sn->flags = 0; |
57 if(url.ptr[url.length - 1] == '/') { |
57 |
58 sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url)); |
58 dav_session_set_baseurl(sn, base_url); |
59 sn->base_url = url.ptr; |
59 |
60 } else { |
|
61 char *url_str = ucx_mempool_malloc(sn->mp, url.length + 2); |
|
62 memcpy(url_str, base_url, url.length); |
|
63 url_str[url.length] = '/'; |
|
64 url_str[url.length + 1] = '\0'; |
|
65 sn->base_url = url_str; |
|
66 } |
|
67 sn->handle = curl_easy_init(); |
60 sn->handle = curl_easy_init(); |
68 curl_easy_setopt(sn->handle, CURLOPT_FOLLOWLOCATION, 1L); |
61 curl_easy_setopt(sn->handle, CURLOPT_FOLLOWLOCATION, 1L); |
69 |
62 |
70 // create lock manager |
63 // create lock manager |
71 DavLockManager *locks = ucx_mempool_malloc(sn->mp, sizeof(DavLockManager)); |
64 DavLockManager *locks = ucx_mempool_malloc(sn->mp, sizeof(DavLockManager)); |
129 size_t upwdlen = ulen + plen + 2; |
122 size_t upwdlen = ulen + plen + 2; |
130 char *upwdbuf = malloc(upwdlen); |
123 char *upwdbuf = malloc(upwdlen); |
131 snprintf(upwdbuf, upwdlen, "%s:%s", user, password); |
124 snprintf(upwdbuf, upwdlen, "%s:%s", user, password); |
132 curl_easy_setopt(sn->handle, CURLOPT_USERPWD, upwdbuf); |
125 curl_easy_setopt(sn->handle, CURLOPT_USERPWD, upwdbuf); |
133 free(upwdbuf); |
126 free(upwdbuf); |
|
127 } |
|
128 } |
|
129 |
|
130 void dav_session_set_baseurl(DavSession *sn, char *base_url) { |
|
131 if(sn->base_url) { |
|
132 ucx_mempool_free(sn->mp, sn->base_url); |
|
133 } |
|
134 |
|
135 sstr_t url = sstr(base_url); |
|
136 if(url.ptr[url.length - 1] == '/') { |
|
137 sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url)); |
|
138 sn->base_url = url.ptr; |
|
139 } else { |
|
140 char *url_str = ucx_mempool_malloc(sn->mp, url.length + 2); |
|
141 memcpy(url_str, base_url, url.length); |
|
142 url_str[url.length] = '/'; |
|
143 url_str[url.length + 1] = '\0'; |
|
144 sn->base_url = url_str; |
134 } |
145 } |
135 } |
146 } |
136 |
147 |
137 void dav_session_enable_encryption(DavSession *sn, DavKey *key, int flags) { |
148 void dav_session_enable_encryption(DavSession *sn, DavKey *key, int flags) { |
138 sn->key = key; |
149 sn->key = key; |