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; |