148 ucx_buffer_write(s.ptr, 1, s.length, buf); |
149 ucx_buffer_write(s.ptr, 1, s.length, buf); |
149 |
150 |
150 return buf; |
151 return buf; |
151 } |
152 } |
152 |
153 |
153 DavResource* parse_propfind_response(DavSession *sn, DavResource *root, UcxBuffer *response) { |
154 DavResource* parse_propfind_response(DavSession *sn, DavResource *root, UcxBuffer *response, DavQOp *cond, size_t len) { |
154 char *url = NULL; |
155 char *url = NULL; |
155 curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &url); |
156 curl_easy_getinfo(sn->handle, CURLINFO_EFFECTIVE_URL, &url); |
156 if(!root) { |
157 if(!root) { |
157 root = resource_new_href(sn, util_url_path(url)); |
158 root = resource_new_href(sn, util_url_path(url)); |
158 } |
159 } |
167 xmlNode *xml_root = xmlDocGetRootElement(doc); |
168 xmlNode *xml_root = xmlDocGetRootElement(doc); |
168 xmlNode *node = xml_root->children; |
169 xmlNode *node = xml_root->children; |
169 while(node) { |
170 while(node) { |
170 if(node->type == XML_ELEMENT_NODE) { |
171 if(node->type == XML_ELEMENT_NODE) { |
171 if(xstreq(node->name, "response")) { |
172 if(xstreq(node->name, "response")) { |
172 parse_response_tag(root, node); |
173 parse_response_tag(root, node, cond, len); |
173 } |
174 } |
174 } |
175 } |
175 |
176 |
176 node = node->next; |
177 node = node->next; |
177 } |
178 } |
178 |
179 |
179 return root; |
180 return root; |
180 } |
181 } |
181 |
182 |
182 int parse_response_tag(DavResource *resource, xmlNode *node) { |
183 int parse_response_tag(DavResource *resource, xmlNode *node, DavQOp *cond, size_t clen) { |
183 DavResource *res = resource; |
184 DavResource *res = resource; |
184 node = node->children; |
185 node = node->children; |
185 while(node) { |
186 while(node) { |
186 if(node->type == XML_ELEMENT_NODE) { |
187 if(node->type == XML_ELEMENT_NODE) { |
187 if(xstreq(node->name, "href")) { |
188 if(xstreq(node->name, "href")) { |
193 } |
194 } |
194 if(xstreq(resource->href, href_content->content)) { |
195 if(xstreq(resource->href, href_content->content)) { |
195 res = resource; |
196 res = resource; |
196 } else { |
197 } else { |
197 res = resource_new_href(resource->session, (char*)href_content->content); |
198 res = resource_new_href(resource->session, (char*)href_content->content); |
198 resource_add_child(resource, res); |
199 res->parent = resource; |
199 } |
200 } |
200 } else if(xstreq(node->name, "propstat")) { |
201 } else if(xstreq(node->name, "propstat")) { |
201 xmlNode *n = node->children; |
202 xmlNode *n = node->children; |
202 xmlNode *prop_node = NULL; |
203 xmlNode *prop_node = NULL; |
203 int ok = 0; |
204 int ok = 0; |