dav/webdav.c

changeset 13
8a0cc4d90de7
parent 11
5db6178d8b58
child 15
182af08b4813
equal deleted inserted replaced
12:493128ef1b12 13:8a0cc4d90de7
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) {
333 } 351 }
334 node = node->next; 352 node = node->next;
335 } 353 }
336 354
337 set_davprops(res); 355 set_davprops(res);
356 } else {
357 session_set_error(sn, ret, status);
338 } 358 }
339 return 0; 359 return 0;
340 } 360 }
341 361
342 int dav_store(DavResource *res) { 362 int dav_store(DavResource *res) {
362 } 382 }
363 data->content = NULL; 383 data->content = NULL;
364 data->read = NULL; 384 data->read = NULL;
365 data->length = 0; 385 data->length = 0;
366 } else { 386 } else {
367 res->session->error = 1; 387 session_set_error(sn, ret, status);
368 return 1; 388 return 1;
369 } 389 }
370 } 390 }
371 391
372 // store properties 392 // store properties
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

mercurial