libidav/resource.c

branch
v1.2
changeset 481
ff477f1f7765
parent 480
7bb47ddc1b5e
child 593
3d02420c4392
equal deleted inserted replaced
480:7bb47ddc1b5e 481:ff477f1f7765
223 data->properties = ucx_map_new_a(sn->mp->allocator, 32); 223 data->properties = ucx_map_new_a(sn->mp->allocator, 32);
224 data->set = NULL; 224 data->set = NULL;
225 data->remove = NULL; 225 data->remove = NULL;
226 data->content = NULL; 226 data->content = NULL;
227 data->read = NULL; 227 data->read = NULL;
228 data->seek = NULL;
228 data->length = 0; 229 data->length = 0;
229 return data; 230 return data;
230 } 231 }
231 232
232 char* dav_resource_get_href(DavResource *resource) { 233 char* dav_resource_get_href(DavResource *resource) {
598 599
599 return names; 600 return names;
600 } 601 }
601 602
602 603
603 void dav_set_content(DavResource *res, void *stream, dav_read_func read_func) { 604 void dav_set_content(DavResource *res, void *stream, dav_read_func read_func, dav_seek_func seek_func) {
604 DavResourceData *data = res->data; 605 DavResourceData *data = res->data;
605 data->content = stream; 606 data->content = stream;
606 data->read = read_func; 607 data->read = read_func;
608 data->seek = seek_func;
607 data->length = 0; 609 data->length = 0;
608 } 610 }
609 611
610 void dav_set_content_data(DavResource *res, char *content, size_t length) { 612 void dav_set_content_data(DavResource *res, char *content, size_t length) {
611 DavSession *sn = res->session; 613 DavSession *sn = res->session;
612 DavResourceData *data = res->data; 614 DavResourceData *data = res->data;
613 data->content = dav_session_malloc(sn, length); 615 data->content = dav_session_malloc(sn, length);
614 memcpy(data->content, content, length); 616 memcpy(data->content, content, length);
615 data->read = NULL; 617 data->read = NULL;
618 data->seek = NULL;
616 data->length = length; 619 data->length = length;
617 } 620 }
618 621
619 void dav_set_content_length(DavResource *res, size_t length) { 622 void dav_set_content_length(DavResource *res, size_t length) {
620 DavResourceData *data = res->data; 623 DavResourceData *data = res->data;
669 CURLcode ret; 672 CURLcode ret;
670 if(encryption) { 673 if(encryption) {
671 AESEncrypter *enc = NULL; 674 AESEncrypter *enc = NULL;
672 UcxBuffer *buf = NULL; 675 UcxBuffer *buf = NULL;
673 if(data->read) { 676 if(data->read) {
674 enc = aes_encrypter_new(sn->key, data->content, data->read); 677 enc = aes_encrypter_new(
678 sn->key,
679 data->content,
680 data->read,
681 data->seek);
675 } else { 682 } else {
676 buf = ucx_buffer_new(data->content, data->length, 0); 683 buf = ucx_buffer_new(data->content, data->length, 0);
677 buf->size = data->length; 684 buf->size = data->length;
678 enc = aes_encrypter_new( 685 enc = aes_encrypter_new(
679 sn->key, 686 sn->key,
680 buf, 687 buf,
681 (dav_read_func)ucx_buffer_read); 688 (dav_read_func)ucx_buffer_read,
689 (dav_seek_func)dav_buffer_seek);
682 } 690 }
683 691
684 // put resource 692 // put resource
685 ret = do_put_request( 693 ret = do_put_request(
686 sn, 694 sn,
687 locktoken, 695 locktoken,
688 TRUE, 696 TRUE,
689 enc, 697 enc,
690 (dav_read_func)aes_read, 698 (dav_read_func)aes_read,
699 (dav_seek_func)aes_encrypter_reset,
691 0); 700 0);
692 701
693 // get sha256 hash 702 // get sha256 hash
694 unsigned char sha[DAV_SHA256_DIGEST_LENGTH]; 703 unsigned char sha[DAV_SHA256_DIGEST_LENGTH];
695 dav_get_hash(&enc->sha256, sha); 704 dav_get_hash(&enc->sha256, sha);
713 sn, 722 sn,
714 locktoken, 723 locktoken,
715 TRUE, 724 TRUE,
716 data->content, 725 data->content,
717 data->read, 726 data->read,
727 data->seek,
718 data->length); 728 data->length);
719 } 729 }
720 730
721 long status = 0; 731 long status = 0;
722 curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &status); 732 curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &status);
975 985
976 CURLcode code; 986 CURLcode code;
977 if(res->iscollection) { 987 if(res->iscollection) {
978 code = do_mkcol_request(sn, locktoken); 988 code = do_mkcol_request(sn, locktoken);
979 } else { 989 } else {
980 code = do_put_request(sn, locktoken, TRUE, "", NULL, 0); 990 code = do_put_request(sn, locktoken, TRUE, "", NULL, NULL, 0);
981 } 991 }
982 long s = 0; 992 long s = 0;
983 curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &s); 993 curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &s);
984 *status = s; 994 *status = s;
985 if(code == CURLE_OK && (s >= 200 && s < 300)) { 995 if(code == CURLE_OK && (s >= 200 && s < 300)) {

mercurial