libidav/session.c

changeset 497
411bd1098175
parent 496
5979ea04175e
child 505
481802342fdf
equal deleted inserted replaced
496:5979ea04175e 497:411bd1098175
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;

mercurial