1085 char *etag = dav_get_string_property(res, "D:getetag"); |
1085 char *etag = dav_get_string_property(res, "D:getetag"); |
1086 SYS_STAT s; |
1086 SYS_STAT s; |
1087 memset(&s, 0, sizeof(SYS_STAT)); |
1087 memset(&s, 0, sizeof(SYS_STAT)); |
1088 |
1088 |
1089 char *blocksize_str = dav_get_string_property_ns(res, DAV_NS, "split"); |
1089 char *blocksize_str = dav_get_string_property_ns(res, DAV_NS, "split"); |
1090 int64_t blocksize = 0; |
1090 uint64_t blocksize = 0; |
1091 DavBool issplit = FALSE; |
1091 DavBool issplit = FALSE; |
1092 if(blocksize_str) { |
1092 if(blocksize_str) { |
1093 if(!util_strtouint(blocksize_str, &blocksize)) { |
1093 if(!util_strtouint(blocksize_str, &blocksize)) { |
1094 fprintf(stderr, "Error: split property does not contain an integer.\n"); |
1094 fprintf(stderr, "Error: split property does not contain an integer.\n"); |
1095 return 1; |
1095 return 1; |
3144 ucx_map_free(updated_parts_map); |
3144 ucx_map_free(updated_parts_map); |
3145 return NULL; |
3145 return NULL; |
3146 } |
3146 } |
3147 |
3147 |
3148 // set content-hash |
3148 // set content-hash |
3149 char content_hash[DAV_SHA256_DIGEST_LENGTH]; |
3149 unsigned char content_hash[DAV_SHA256_DIGEST_LENGTH]; |
3150 dav_hash_final(sha, content_hash); |
3150 dav_hash_final(sha, content_hash); |
3151 sync_set_content_hash(res, content_hash); |
3151 sync_set_content_hash(res, content_hash); |
3152 local->hash = util_hexstr(content_hash, DAV_SHA256_DIGEST_LENGTH); |
3152 local->hash = util_hexstr(content_hash, DAV_SHA256_DIGEST_LENGTH); |
3153 |
3153 |
3154 // get etags from uploaded resources |
3154 // get etags from uploaded resources |
4583 return dav_get_string_property_ns(res, DAV_NS, "content-hash"); |
4583 return dav_get_string_property_ns(res, DAV_NS, "content-hash"); |
4584 } |
4584 } |
4585 return NULL; |
4585 return NULL; |
4586 } |
4586 } |
4587 |
4587 |
4588 void sync_set_content_hash(DavResource *res, const char *hashdata) { |
4588 void sync_set_content_hash(DavResource *res, const unsigned char *hashdata) { |
4589 uint32_t flags = res->session->flags; |
4589 uint32_t flags = res->session->flags; |
4590 if((flags & DAV_SESSION_ENCRYPT_CONTENT) == DAV_SESSION_ENCRYPT_CONTENT) { |
4590 if((flags & DAV_SESSION_ENCRYPT_CONTENT) == DAV_SESSION_ENCRYPT_CONTENT) { |
4591 if(res->session->key) { |
4591 if(res->session->key) { |
4592 char *enc_hash = aes_encrypt(hashdata, DAV_SHA256_DIGEST_LENGTH, res->session->key); |
4592 char *enc_hash = aes_encrypt((const char*)hashdata, DAV_SHA256_DIGEST_LENGTH, res->session->key); |
4593 if(enc_hash) { |
4593 if(enc_hash) { |
4594 dav_set_string_property_ns(res, DAV_NS, "crypto-hash", enc_hash); |
4594 dav_set_string_property_ns(res, DAV_NS, "crypto-hash", enc_hash); |
4595 free(enc_hash); |
4595 free(enc_hash); |
4596 } |
4596 } |
4597 } |
4597 } |
4598 } else { |
4598 } else { |
4599 char *hex_hash = util_hexstr((const unsigned char*)hashdata, DAV_SHA256_DIGEST_LENGTH); |
4599 char *hex_hash = util_hexstr(hashdata, DAV_SHA256_DIGEST_LENGTH); |
4600 dav_set_string_property_ns(res, DAV_NS, "content-hash", hex_hash); |
4600 dav_set_string_property_ns(res, DAV_NS, "content-hash", hex_hash); |
4601 free(hex_hash); |
4601 free(hex_hash); |
4602 } |
4602 } |
4603 } |
4603 } |