131 curl_easy_setopt(sn->handle, CURLOPT_USERPWD, upwdbuf); |
131 curl_easy_setopt(sn->handle, CURLOPT_USERPWD, upwdbuf); |
132 free(upwdbuf); |
132 free(upwdbuf); |
133 } |
133 } |
134 } |
134 } |
135 |
135 |
|
136 void session_set_error(DavSession *sn, CURLcode c, int status) { |
|
137 if(status > 0) { |
|
138 switch(status) { |
|
139 default: sn->error = DAV_ERROR; break; |
|
140 case 401: sn->error = DAV_UNAUTHORIZED; break; |
|
141 case 403: sn->error = DAV_FORBIDDEN; break; |
|
142 case 404: sn->error = DAV_NOT_FOUND; break; |
|
143 } |
|
144 } else { |
|
145 sn->error = DAV_ERROR; |
|
146 } |
|
147 } |
|
148 |
136 DavResource* dav_get(DavSession *sn, char *path, char *properties) { |
149 DavResource* dav_get(DavSession *sn, char *path, char *properties) { |
137 char *url = util_concat_path(sn->base_url, path); |
150 char *url = util_concat_path(sn->base_url, path); |
138 |
151 |
139 CURL *handle = sn->handle; |
152 CURL *handle = sn->handle; |
140 curl_easy_setopt(handle, CURLOPT_URL, url); |
153 curl_easy_setopt(handle, CURLOPT_URL, url); |
155 int status = 0; |
168 int status = 0; |
156 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
169 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
157 if(ret == CURLE_OK && status == 207) { |
170 if(ret == CURLE_OK && status == 207) { |
158 //printf("response\n%s\n", rpbuf->space); |
171 //printf("response\n%s\n", rpbuf->space); |
159 resource = parse_propfind_response(sn, rpbuf); |
172 resource = parse_propfind_response(sn, rpbuf); |
|
173 sn->error = DAV_OK; |
|
174 } else { |
|
175 session_set_error(sn, ret, status); |
160 } |
176 } |
161 return resource; |
177 return resource; |
162 } |
178 } |
163 |
179 |
164 UcxList* parse_properties_string(DavContext *context, sstr_t str) { |
180 UcxList* parse_properties_string(DavContext *context, sstr_t str) { |
313 |
329 |
314 //fwrite(rpbuf->space, 1, rpbuf->size, stdout); |
330 //fwrite(rpbuf->space, 1, rpbuf->size, stdout); |
315 //printf("\n"); |
331 //printf("\n"); |
316 |
332 |
317 CURLcode ret = do_propfind_request(handle, rqbuf, rpbuf); |
333 CURLcode ret = do_propfind_request(handle, rqbuf, rpbuf); |
|
334 int status = 0; |
|
335 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
318 if(ret == CURLE_OK) { |
336 if(ret == CURLE_OK) { |
319 //printf("response\n%s\n", rpbuf->space); |
337 //printf("response\n%s\n", rpbuf->space); |
320 // TODO: use parse_propfind_response() |
338 // TODO: use parse_propfind_response() |
321 xmlDoc *doc = xmlReadMemory(rpbuf->space, rpbuf->size, url, NULL, 0); |
339 xmlDoc *doc = xmlReadMemory(rpbuf->space, rpbuf->size, url, NULL, 0); |
322 if(!doc) { |
340 if(!doc) { |
382 // TODO: parse response |
402 // TODO: parse response |
383 // TODO: cleanup node data correctly |
403 // TODO: cleanup node data correctly |
384 data->set = NULL; |
404 data->set = NULL; |
385 data->remove = NULL; |
405 data->remove = NULL; |
386 } else { |
406 } else { |
387 res->session->error = 1; |
407 session_set_error(sn, ret, status); |
388 return 1; |
408 return 1; |
389 } |
409 } |
390 } |
410 } |
391 |
411 sn->error = DAV_OK; |
392 return 0; |
412 return 0; |
393 } |
413 } |
394 |
414 |
395 char* dav_get_property_ns(DavResource *res, char *ns, char *name) { |
415 char* dav_get_property_ns(DavResource *res, char *ns, char *name) { |
396 char *property = resource_get_property(res, ns, name); |
416 char *property = resource_get_property(res, ns, name); |
463 CURLcode ret = curl_easy_perform(handle); |
483 CURLcode ret = curl_easy_perform(handle); |
464 |
484 |
465 int status = 0; |
485 int status = 0; |
466 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
486 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
467 if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
487 if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
|
488 res->session->error = DAV_OK; |
468 return 0; |
489 return 0; |
469 } else { |
490 } else { |
|
491 session_set_error(res->session, ret, status); |
470 return 1; |
492 return 1; |
471 } |
493 } |
472 } |
494 } |
473 |
495 |