libidav/resource.c

changeset 207
de23f8881e9f
parent 205
bf756f6c3581
child 208
1fb26aca5093
--- a/libidav/resource.c	Sun Mar 06 15:19:50 2016 +0100
+++ b/libidav/resource.c	Mon Mar 14 11:54:55 2016 +0100
@@ -584,9 +584,9 @@
                     0);
             
             // get sha256 hash
-            char sha[SHA256_DIGEST_LENGTH];
+            unsigned char sha[SHA256_DIGEST_LENGTH];
             dav_get_hash(&enc->sha256, sha);
-            char *enc_hash = aes_encrypt(sha, SHA256_DIGEST_LENGTH, sn->key);
+            char *enc_hash = aes_encrypt((char*)sha, SHA256_DIGEST_LENGTH, sn->key);
             
             aes_encrypter_close(enc);
             if(buf) {
@@ -682,10 +682,12 @@
     
     char *hash = NULL;
     if(dec) {
+        aes_decrypter_shutdown(dec); // get final bytes
+        
         // get hash
-        char sha[SHA256_DIGEST_LENGTH];
+        unsigned char sha[SHA256_DIGEST_LENGTH];
         dav_get_hash(&dec->sha256, sha);
-        hash = util_hexstr((unsigned char*)sha, 32);
+        hash = util_hexstr(sha, 32);
         
         aes_decrypter_close(dec);
     }
@@ -923,6 +925,54 @@
     return dav_cp_mv_url(res, url, false, override);
 }
 
+char* dav_lock(DavResource *res) {
+    DavSession *sn = res->session;
+    CURL *handle = sn->handle;
+    util_set_url(sn, dav_resource_get_href(res));
+    
+    UcxBuffer *request = create_lock_request();
+    UcxBuffer *response = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND);
+    CURLcode ret = do_lock_request(handle, request, response);
+    
+    //printf("\nlock\n");
+    //printf("%.*s\n\n", request->size, request->space);
+    //printf("%.*s\n\n", response->size, response->space);
+    
+    long status = 0;
+    curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
+    if(ret == CURLE_OK && (status >= 200 && status < 300)) {
+        LockDiscovery lock;
+        if(parse_lock_response(sn, response, &lock)) {
+            sn->error = DAV_ERROR;
+            return NULL;
+        }
+        
+        free(lock.timeout);
+        return lock.locktoken;
+    } else {
+        dav_session_set_error(sn, ret, status);
+        return NULL;
+    }
+}
+
+int dav_unlock(DavResource *res, char *locktoken) {
+    DavSession *sn = res->session;
+    CURL *handle = sn->handle;
+    util_set_url(sn, dav_resource_get_href(res));
+    
+    CURLcode ret = do_unlock_request(handle, locktoken);
+    long status = 0;
+    curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
+    if(ret == CURLE_OK && (status >= 200 && status < 300)) {
+        return 0;
+    } else {
+        dav_session_set_error(sn, ret, status);
+        return 1;
+    }
+    
+    return 0;
+}
+
 
 int resource_add_crypto_info(DavSession *sn, char *href, char *name, char *hash) {
     if(!DAV_IS_ENCRYPTED(sn)) {

mercurial