diff -r 493128ef1b12 -r 8a0cc4d90de7 dav/webdav.c --- 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; } }