1179 { |
1179 { |
1180 DavResource *remote = dav_get(sn, res->path, "D:getetag"); |
1180 DavResource *remote = dav_get(sn, res->path, "D:getetag"); |
1181 int ret = 0; |
1181 int ret = 0; |
1182 if(remote) { |
1182 if(remote) { |
1183 char *etag = dav_get_property(remote, "D:getetag"); |
1183 char *etag = dav_get_property(remote, "D:getetag"); |
1184 if(etag && res->etag) { |
1184 if(!res->etag) { |
|
1185 // the resource is on the server and the client has no etag |
|
1186 ret = 1; |
|
1187 } else if(etag) { |
1185 sstr_t e = sstr(etag); |
1188 sstr_t e = sstr(etag); |
1186 if(sstrprefix(e, S("W/"))) { |
1189 if(sstrprefix(e, S("W/"))) { |
1187 e = sstrsubs(e, 2); |
1190 e = sstrsubs(e, 2); |
1188 } |
1191 } |
1189 if(strcmp(e.ptr, res->etag)) { |
1192 if(strcmp(e.ptr, res->etag)) { |
1190 ret = 1; |
1193 ret = 1; |
1191 } |
1194 } |
|
1195 } else { |
|
1196 // something weird is happening, the server must support etags |
|
1197 fprintf(stderr, "Warning: resource %s has no etag\n", remote->href); |
1192 } |
1198 } |
1193 dav_resource_free(remote); |
1199 dav_resource_free(remote); |
1194 } |
1200 } |
1195 return ret; |
1201 return ret; |
1196 } |
1202 } |