// DAV delete an object in a room.
void dav_delete_message(struct http_transaction *h, struct ctdlsession *c, long msgnum) {
ctdl_delete_msgs(c, &msgnum, 1);
- h->response_code = 204;
- h->response_string = strdup("no content");
+ do_204(h);
}
}
+// DAV delete an uploaded item
+void dav_delete_upload(struct http_transaction *h, struct ctdlsession *c, struct uploaded_file this_one) {
+ int i;
+ struct uploaded_file *u;
+
+ pthread_mutex_lock(&upload_list_mutex);
+ for (i=0; i<array_len(upload_list); ++i) {
+ u = (struct uploaded_file *) array_get_element_at(upload_list, i), sizeof(struct uploaded_file);
+ if (!strcmp(u->id, this_one.id)) {
+ fclose(u->fp); // this deletes the file because it has 0 links
+ array_delete_element_at(upload_list, i);
+ i = array_len(upload_list) + 1; // Go out of scope; we're done here
+ }
+ }
+ pthread_mutex_unlock(&upload_list_mutex);
+
+ do_204(h);
+}
+
+
// Handle operations on a specific upload
void specific_upload(struct http_transaction *h, struct ctdlsession *c, char *name) {
int i;
do_405(h);
}
else if (!strcasecmp(h->method, "DELETE")) { // delete the item
- do_405(h);
+ dav_delete_upload(h, c, this_one);
}
else { // unsupported method
do_405(h);