libidav/webdav.c

branch
v1.2
changeset 481
ff477f1f7765
parent 404
5c08b8e14df8
equal deleted inserted replaced
480:7bb47ddc1b5e 481:ff477f1f7765
259 } 259 }
260 } 260 }
261 261
262 // TODO: add sstr_t version of dav_get_property_ns 262 // TODO: add sstr_t version of dav_get_property_ns
263 263
264 void dav_set_effective_href(DavSession *sn, DavResource *resource) {
265 char *eff_url;
266 curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &eff_url);
267 if(eff_url) {
268 char *href = util_url_path(eff_url);
269 if(strcmp(href, resource->href)) {
270 dav_session_free(sn, resource->href);
271 resource->href = dav_session_strdup(sn, href);
272 }
273 }
274 }
264 275
265 DavResource* dav_get(DavSession *sn, char *path, char *properties) { 276 DavResource* dav_get(DavSession *sn, char *path, char *properties) {
266 CURL *handle = sn->handle; 277 CURL *handle = sn->handle;
267 DavResource *resource = dav_resource_new(sn, path); 278 DavResource *resource = dav_resource_new(sn, path);
268 util_set_url(sn, dav_resource_get_href(resource)); 279 util_set_url(sn, dav_resource_get_href(resource));
279 290
280 CURLcode ret = do_propfind_request(sn, rqbuf, rpbuf); 291 CURLcode ret = do_propfind_request(sn, rqbuf, rpbuf);
281 long status = 0; 292 long status = 0;
282 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); 293 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
283 if(ret == CURLE_OK && status == 207) { 294 if(ret == CURLE_OK && status == 207) {
295 dav_set_effective_href(sn, resource);
296
284 //printf("response\n%s\n", rpbuf->space); 297 //printf("response\n%s\n", rpbuf->space);
285 // TODO: use PropfindParser 298 // TODO: use PropfindParser
286 resource = parse_propfind_response(sn, resource, rpbuf); 299 resource = parse_propfind_response(sn, resource, rpbuf);
287 sn->error = DAV_OK; 300 sn->error = DAV_OK;
288 } else { 301 } else {
320 long status = 0; 333 long status = 0;
321 long error = 0; 334 long error = 0;
322 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); 335 curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status);
323 if(ret == CURLE_OK && status == 207) { 336 if(ret == CURLE_OK && status == 207) {
324 //printf("response\n%s\n", rpbuf->space); 337 //printf("response\n%s\n", rpbuf->space);
338 dav_set_effective_href(sn, resource);
325 resource = parse_propfind_response(sn, resource, rpbuf); 339 resource = parse_propfind_response(sn, resource, rpbuf);
326 sn->error = DAV_OK; 340 sn->error = DAV_OK;
327 } else { 341 } else {
328 dav_session_set_error(sn, ret, status); 342 dav_session_set_error(sn, ret, status);
329 error = 1; 343 error = 1;

mercurial