dav/webdav.c

changeset 13
8a0cc4d90de7
parent 11
5db6178d8b58
child 15
182af08b4813
--- a/dav/webdav.c	Tue Aug 13 12:44:23 2013 +0200
+++ b/dav/webdav.c	Tue Aug 13 13:51:00 2013 +0200
@@ -133,6 +133,19 @@
     }
 }
 
+void session_set_error(DavSession *sn, CURLcode c, int status) {
+    if(status > 0) {
+        switch(status) {
+            default: sn->error = DAV_ERROR; break;
+            case 401: sn->error = DAV_UNAUTHORIZED; break;
+            case 403: sn->error = DAV_FORBIDDEN; break;
+            case 404: sn->error = DAV_NOT_FOUND; break;
+        }
+    } else {
+        sn->error = DAV_ERROR;
+    }
+}
+
 DavResource* dav_get(DavSession *sn, char *path, char *properties) {
     char *url = util_concat_path(sn->base_url, path);
     
@@ -157,6 +170,9 @@
     if(ret == CURLE_OK && status == 207) {
         //printf("response\n%s\n", rpbuf->space); 
         resource = parse_propfind_response(sn, rpbuf);
+        sn->error = DAV_OK;
+    } else  {
+        session_set_error(sn, ret, status);
     }
     return resource;
 }
@@ -315,6 +331,8 @@
     //printf("\n");
     
     CURLcode ret = do_propfind_request(handle, rqbuf, rpbuf);
+    int status = 0;
+    curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
     if(ret == CURLE_OK) {
         //printf("response\n%s\n", rpbuf->space);
         // TODO: use parse_propfind_response()
@@ -335,6 +353,8 @@
         }
         
         set_davprops(res);
+    } else {
+        session_set_error(sn, ret, status);
     }
     return 0;
 }
@@ -364,7 +384,7 @@
             data->read = NULL;
             data->length = 0;
         } else {
-            res->session->error = 1;
+            session_set_error(sn, ret, status);
             return 1;
         }
     }
@@ -384,11 +404,11 @@
             data->set = NULL;
             data->remove = NULL;
         } else {
-            res->session->error = 1;
+            session_set_error(sn, ret, status);
             return 1;
         }
     }
-    
+    sn->error = DAV_OK;
     return 0;
 }
 
@@ -465,8 +485,10 @@
     int status = 0;
     curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
     if(ret == CURLE_OK && (status >= 200 && status < 300)) {
+        res->session->error = DAV_OK;
         return 0;
     } else {
+        session_set_error(res->session, ret, status);
         return 1;
     }
 }

mercurial