libidav/webdav.c

branch
v1.2
changeset 481
ff477f1f7765
parent 404
5c08b8e14df8
--- a/libidav/webdav.c	Sun Oct 07 09:14:03 2018 +0200
+++ b/libidav/webdav.c	Thu Oct 11 19:29:45 2018 +0200
@@ -261,6 +261,17 @@
 
 // TODO: add sstr_t version of dav_get_property_ns
 
+void dav_set_effective_href(DavSession *sn, DavResource *resource) {
+    char *eff_url;
+    curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &eff_url);
+    if(eff_url) {
+        char *href = util_url_path(eff_url);
+        if(strcmp(href, resource->href)) {
+            dav_session_free(sn, resource->href);
+            resource->href = dav_session_strdup(sn, href);
+        }
+    }
+}
 
 DavResource* dav_get(DavSession *sn, char *path, char *properties) {  
     CURL *handle = sn->handle;
@@ -281,6 +292,8 @@
     long status = 0;
     curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
     if(ret == CURLE_OK && status == 207) {
+        dav_set_effective_href(sn, resource);
+        
         //printf("response\n%s\n", rpbuf->space);
         // TODO: use PropfindParser
         resource = parse_propfind_response(sn, resource, rpbuf);
@@ -322,6 +335,7 @@
     curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
     if(ret == CURLE_OK && status == 207) {
         //printf("response\n%s\n", rpbuf->space); 
+        dav_set_effective_href(sn, resource);
         resource = parse_propfind_response(sn, resource, rpbuf);
         sn->error = DAV_OK;
     } else  {

mercurial