libidav/resource.c

changeset 223
cbbdf207e67e
parent 222
7b73058d782e
child 225
a297c2e28fa1
equal deleted inserted replaced
222:7b73058d782e 223:cbbdf207e67e
581 581
582 // put resource 582 // put resource
583 ret = do_put_request( 583 ret = do_put_request(
584 sn->handle, 584 sn->handle,
585 locktoken, 585 locktoken,
586 FALSE,
586 enc, 587 enc,
587 (dav_read_func)aes_read, 588 (dav_read_func)aes_read,
588 0); 589 0);
589 590
590 // get sha256 hash 591 // get sha256 hash
607 free(enc_hash); 608 free(enc_hash);
608 } else { 609 } else {
609 ret = do_put_request( 610 ret = do_put_request(
610 sn->handle, 611 sn->handle,
611 locktoken, 612 locktoken,
613 FALSE,
612 data->content, 614 data->content,
613 data->read, 615 data->read,
614 data->length); 616 data->length);
615 } 617 }
616 618
630 return 1; 632 return 1;
631 } 633 }
632 } 634 }
633 635
634 // store properties 636 // store properties
637 int r = 0;
638 sn->error = DAV_OK;
635 if(data->set || data->remove) { 639 if(data->set || data->remove) {
636 UcxBuffer *request = create_proppatch_request(data); 640 UcxBuffer *request = create_proppatch_request(data);
637 UcxBuffer *response = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND); 641 UcxBuffer *response = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND);
638 //printf("request:\n%.*s\n\n", request->pos, request->space); 642 //printf("request:\n%.*s\n\n", request->pos, request->space);
639 643
646 // TODO: cleanup node data correctly 650 // TODO: cleanup node data correctly
647 data->set = NULL; 651 data->set = NULL;
648 data->remove = NULL; 652 data->remove = NULL;
649 } else { 653 } else {
650 dav_session_set_error(sn, ret, status); 654 dav_session_set_error(sn, ret, status);
651 return 1; 655 r = -1;
652 } 656 }
653 } 657
654 sn->error = DAV_OK; 658 ucx_buffer_free(request);
655 return 0; 659 ucx_buffer_free(response);
660 }
661
662 return r;
656 } 663 }
657 664
658 int dav_get_content(DavResource *res, void *stream, dav_write_func write_fnc) { 665 int dav_get_content(DavResource *res, void *stream, dav_write_func write_fnc) {
659 DavSession *sn = res->session; 666 DavSession *sn = res->session;
660 CURL *handle = sn->handle; 667 CURL *handle = sn->handle;
755 762
756 UcxBuffer *response = ucx_buffer_new(NULL, 4096, UCX_BUFFER_AUTOEXTEND); 763 UcxBuffer *response = ucx_buffer_new(NULL, 4096, UCX_BUFFER_AUTOEXTEND);
757 CURLcode ret = do_delete_request(handle, locktoken, response); 764 CURLcode ret = do_delete_request(handle, locktoken, response);
758 long status = 0; 765 long status = 0;
759 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); 766 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
767 int r = 0;
760 if(ret == CURLE_OK && (status >= 200 && status < 300)) { 768 if(ret == CURLE_OK && (status >= 200 && status < 300)) {
761 res->session->error = DAV_OK; 769 res->session->error = DAV_OK;
762 770
763 // TODO: parse response 771 // TODO: parse response
764 // TODO: free res 772 // TODO: free res
765
766 return 0;
767 } else { 773 } else {
768 dav_session_set_error(res->session, ret, status); 774 dav_session_set_error(res->session, ret, status);
769 return 1; 775 r = 1;
770 } 776 }
777
778 ucx_buffer_free(response);
779 return r;
771 } 780 }
772 781
773 static int create_ancestors(DavSession *sn, char *href, char *path) { 782 static int create_ancestors(DavSession *sn, char *href, char *path) {
774 CURL *handle = sn->handle; 783 CURL *handle = sn->handle;
775 CURLcode code; 784 CURLcode code;
833 842
834 CURLcode code; 843 CURLcode code;
835 if(res->iscollection) { 844 if(res->iscollection) {
836 code = do_mkcol_request(handle, locktoken); 845 code = do_mkcol_request(handle, locktoken);
837 } else { 846 } else {
838 code = do_put_request(handle, locktoken, "", NULL, 0); 847 code = do_put_request(handle, locktoken, TRUE, "", NULL, 0);
839 } 848 }
840 long s = 0; 849 long s = 0;
841 curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &s); 850 curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &s);
842 *status = s; 851 *status = s;
843 if(code == CURLE_OK && (s >= 200 && s < 300)) { 852 if(code == CURLE_OK && (s >= 200 && s < 300)) {

mercurial