--- 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) {