libidav/webdav.c

changeset 41
1c598ee0d3d9
parent 40
a95ee94b9204
child 43
03076907b58a
equal deleted inserted replaced
40:a95ee94b9204 41:1c598ee0d3d9
142 sstr_t url = sstr(base_url); 142 sstr_t url = sstr(base_url);
143 if(url.length == 0) { 143 if(url.length == 0) {
144 return NULL; 144 return NULL;
145 } 145 }
146 DavSession *sn = malloc(sizeof(DavSession)); 146 DavSession *sn = malloc(sizeof(DavSession));
147 sn->mp = ucx_mempool_new(1024);
147 sn->key = NULL; 148 sn->key = NULL;
148 sn->errorstr = NULL; 149 sn->errorstr = NULL;
149 sn->error = DAV_OK; 150 sn->error = DAV_OK;
150 sn->flags = 0; 151 sn->flags = 0;
151 if(url.ptr[url.length - 1] == '/') { 152 if(url.ptr[url.length - 1] == '/') {
152 sn->base_url = strdup(base_url); // TODO: mempool 153 sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url));
154 sn->base_url = url.ptr;
153 } else { 155 } else {
154 char *url_str = malloc(url.length + 2); 156 char *url_str = malloc(url.length + 2);
155 memcpy(url_str, base_url, url.length); 157 memcpy(url_str, base_url, url.length);
156 url_str[url.length] = '/'; 158 url_str[url.length] = '/';
157 url_str[url.length + 1] = '\0'; 159 url_str[url.length + 1] = '\0';
159 } 161 }
160 sn->context = context; 162 sn->context = context;
161 sn->handle = curl_easy_init(); 163 sn->handle = curl_easy_init();
162 //curl_easy_setopt(sn->handle, CURLOPT_VERBOSE, 1L); 164 //curl_easy_setopt(sn->handle, CURLOPT_VERBOSE, 1L);
163 //curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr); 165 //curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr);
166 curl_easy_setopt(sn->handle, CURLOPT_FOLLOWLOCATION, 1L);
164 167
165 // set proxy 168 // set proxy
166 DavProxy *proxy = sstrprefix(url, S("https")) ? context->https_proxy 169 DavProxy *proxy = sstrprefix(url, S("https")) ? context->https_proxy
167 : context->http_proxy; 170 : context->http_proxy;
168 171
185 } 188 }
186 189
187 // set url 190 // set url
188 curl_easy_setopt(sn->handle, CURLOPT_URL, base_url); 191 curl_easy_setopt(sn->handle, CURLOPT_URL, base_url);
189 192
190 sn->mp = ucx_mempool_new(1024);
191
192 context->sessions = ucx_list_append(context->sessions, sn); 193 context->sessions = ucx_list_append(context->sessions, sn);
193 194
194 return sn; 195 return sn;
195 } 196 }
196 197
251 } 252 }
252 } 253 }
253 254
254 ucx_mempool_destroy(sn->mp); 255 ucx_mempool_destroy(sn->mp);
255 curl_easy_cleanup(sn->handle); 256 curl_easy_cleanup(sn->handle);
256 free(sn->base_url);
257 free(sn); 257 free(sn);
258 } 258 }
259 259
260 260
261 void* dav_session_malloc(DavSession *sn, size_t size) { 261 void* dav_session_malloc(DavSession *sn, size_t size) {

mercurial