libidav/session.c

changeset 355
5da2cf15eb44
parent 354
067ea2315a8a
child 404
5c08b8e14df8
--- a/libidav/session.c	Mon Dec 18 11:56:11 2017 +0100
+++ b/libidav/session.c	Mon Dec 18 16:24:32 2017 +0100
@@ -47,6 +47,7 @@
         return NULL;
     }
     DavSession *sn = malloc(sizeof(DavSession));
+    memset(sn, 0, sizeof(DavSession));
     sn->mp = ucx_mempool_new(DAV_SESSION_MEMPOOL_SIZE);
     sn->pathcache = ucx_map_new_a(sn->mp->allocator, DAV_PATH_CACHE_SIZE);
     sn->key = NULL;
@@ -145,6 +146,12 @@
     sn->authprompt_userdata = userdata;
 }
 
+void dav_session_set_progresscallback(DavSession *sn, dav_progress_func get, dav_progress_func put, void *userdata) {
+    sn->get_progress = get;
+    sn->put_progress = put;
+    sn->progress_userdata = userdata;
+}
+
 CURLcode dav_session_curl_perform(DavSession *sn, long *status) {
     return dav_session_curl_perform_buf(sn, NULL, NULL, status);
 }
@@ -171,6 +178,24 @@
     return ret;
 }
 
+int dav_session_get_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
+    DavResource *res = clientp;
+    DavSession *sn = res->session;
+    if(sn->get_progress) {
+        sn->get_progress(res, (int64_t)dltotal, (int64_t)dlnow, sn->progress_userdata);
+    }
+    return 0;
+}
+
+int dav_session_put_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
+    DavResource *res = clientp;
+    DavSession *sn = res->session;
+    if(sn->put_progress) {
+        sn->put_progress(res, (int64_t)ultotal, (int64_t)ulnow, sn->progress_userdata);
+    }
+    return 0;
+}
+
 void dav_session_set_error(DavSession *sn, CURLcode c, int status) {
     if(status > 0) {
         switch(status) {

mercurial