libidav/webdav.h

changeset 18
af411868ab9b
parent 2
fbdfaacc4182
--- a/libidav/webdav.h	Wed Jan 31 12:55:11 2024 +0100
+++ b/libidav/webdav.h	Tue Feb 06 14:17:22 2024 +0100
@@ -39,6 +39,12 @@
 #include <curl/curl.h>
 #include <libxml/tree.h>
 
+#ifndef _WIN32
+#include <pthread.h>
+#else
+#include <Windows.h>
+#endif
+
 #ifdef	__cplusplus
 extern "C" {
 #endif
@@ -67,6 +73,12 @@
 typedef struct DavInputStream  DavInputStream;
 typedef struct DavOutputStream DavOutputStream;
 
+#ifndef _WIN32
+#define DAV_MUTEX pthread_mutex_t 
+#else
+#define DAV_MUTEX HANDLE
+#endif
+
 typedef size_t(*dav_read_func)(void*, size_t, size_t, void*);
 typedef size_t(*dav_write_func)(const void*, size_t, size_t, void*);
 typedef int(*dav_seek_func)(const void *, long, int);
@@ -180,12 +192,14 @@
 };
 
 struct DavContext {
-    CxMap    *namespaces;
-    CxMap    *namespaceinfo;
-    CxMap    *keys;
-    CxList   *sessions;
-    DavProxy *http_proxy;
-    DavProxy *https_proxy;
+    CxMap     *namespaces;
+    CxMap     *namespaceinfo;
+    CxMap     *keys;
+    CxList    *sessions;
+    DavProxy  *http_proxy;
+    DavProxy  *https_proxy;
+    DAV_MUTEX mutex;
+    DavBool   mtsafe;
 };
 
 struct DavProxy {
@@ -251,6 +265,10 @@
 
 DavContext* dav_context_new(void);
 void dav_context_destroy(DavContext *ctx);
+void dav_context_set_mtsafe(DavContext *ctx, DavBool enable);
+
+void dav_context_lock(DavContext *ctx);
+void dav_context_unlock(DavContext *ctx);
 
 void dav_context_add_key(DavContext *context, DavKey *key);
 DavKey* dav_context_get_key(DavContext *context, const char *name);
@@ -262,12 +280,16 @@
 int dav_enable_namespace_encryption(DavContext *context, const char *ns, DavBool encrypt);
 int dav_namespace_is_encrypted(DavContext *context, const char *ns);
 
+int dav_context_add_session(DavContext *context, DavSession *sn);
+int dav_context_remove_session(DavContext *context, DavSession *sn);
+
 DavSession* dav_session_new(DavContext *context, char *base_url);
 DavSession* dav_session_new_auth(
         DavContext *context,
         char *base_url,
         char *user,
         char *password);
+DavSession* dav_session_clone(DavSession *sn);
 void dav_session_set_auth(DavSession *sn, const char *user, const char *password);
 void dav_session_set_auth_s(DavSession *sn, cxstring user, cxstring password);
 void dav_session_set_baseurl(DavSession *sn, char *base_url);

mercurial