UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2018 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef DAV_SESSION_H 30 #define DAV_SESSION_H 31 32 #include <cx/buffer.h> 33 #include "webdav.h" 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 // initial size of the session mempool 40 #define DAV_SESSION_MEMPOOL_SIZE 1024 41 // initial size of the path cache map 42 #define DAV_PATH_CACHE_SIZE 32 43 44 #define DAV_ENCRYPT_NAME(sn) \ 45 (((sn)->flags & DAV_SESSION_ENCRYPT_NAME) == DAV_SESSION_ENCRYPT_NAME) 46 47 #define DAV_DECRYPT_NAME(sn) \ 48 (((sn)->flags & DAV_SESSION_DECRYPT_NAME) == DAV_SESSION_DECRYPT_NAME) 49 50 #define DAV_ENCRYPT_CONTENT(sn) \ 51 (((sn)->flags & DAV_SESSION_ENCRYPT_CONTENT) == DAV_SESSION_ENCRYPT_CONTENT) 52 53 #define DAV_DECRYPT_CONTENT(sn) \ 54 (((sn)->flags & DAV_SESSION_DECRYPT_CONTENT) == DAV_SESSION_DECRYPT_CONTENT) 55 56 #define DAV_IS_ENCRYPTED(sn) \ 57 (DAV_ENCRYPT_NAME(sn) || DAV_ENCRYPT_CONTENT(sn)) 58 59 #define DAV_CRYPTO(sn) \ 60 (DAV_ENCRYPT_NAME(sn) || DAV_DECRYPT_NAME(sn) || \ 61 DAV_ENCRYPT_CONTENT(sn) || DAV_DECRYPT_CONTENT(sn)) 62 63 #define DAV_ENCRYPT_PROPERTIES(sn) \ 64 (((sn)->flags & DAV_SESSION_ENCRYPT_PROPERTIES) == DAV_SESSION_ENCRYPT_PROPERTIES) 65 66 #define DAV_DECRYPT_PROPERTIES(sn) \ 67 (((sn)->flags & DAV_SESSION_DECRYPT_PROPERTIES) == DAV_SESSION_DECRYPT_PROPERTIES) 68 69 /* 70 typedef struct DavPathCacheElement { 71 char *name; 72 char *encrypted_name; 73 int exists; 74 } DavPathCacheElement; 75 */ 76 77 typedef struct DavLock DavLock; 78 struct DavLock { 79 char *path; 80 char *token; 81 }; 82 83 typedef struct DavLockManager { 84 CxMap *resource_locks; 85 CxList *collection_locks; 86 } DavLockManager; 87 88 CURLcode dav_session_curl_perform(DavSession *sn, long *status); 89 CURLcode dav_session_curl_perform_buf(DavSession *sn, CxBuffer *request, CxBuffer *response, long *status); 90 91 int dav_session_get_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); 92 int dav_session_put_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); 93 94 void dav_session_set_error(DavSession *sn, CURLcode c, int status); 95 void dav_session_set_errstr(DavSession *sn, const char *str); 96 97 char* dav_session_create_plain_href(DavSession *sn, const char *path); 98 99 char* dav_session_get_href(DavSession *sn, const char *path); 100 101 DavResource* dav_find_child(DavSession *sn, DavResource *res, CxBuffer *rqbuf, const char *name); 102 103 void dav_session_cache_path(DavSession *sn, cxstring path, cxstring href); 104 105 106 DavLock* dav_create_lock(DavSession *sn, const char *token, char *timeout); 107 void dav_destroy_lock(DavSession *sn, DavLock *lock); 108 109 int dav_add_resource_lock(DavSession *sn, const char *path, DavLock *lock); 110 int dav_add_collection_lock(DavSession *sn, const char *path, DavLock *lock); 111 112 DavLock* dav_get_lock(DavSession *sn, const char *path); 113 void dav_remove_lock(DavSession *sn, const char *path, DavLock *lock); 114 115 #ifdef __cplusplus 116 } 117 #endif 118 119 #endif /* DAV_SESSION_H */ 120 121