diff options
Diffstat (limited to 'http.c')
-rw-r--r-- | http.c | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -34,16 +34,30 @@ #include "http.h" #include "mime.h" +#include "str.h" -void +bool http_open_file(struct kreq * r, enum khttp code, struct file * f) { + char *filename; + + /* file name needs to be url encoded for special chars */ + filename = khttp_urlencode(f->name); + if (filename == NULL) + return false; + + /* but for some reason, spaces should remain spaces... */ + str_replace(filename, '+', ' '); + khttp_head(r, kresps[KRESP_STATUS], "%s", khttps[code]); khttp_head(r, kresps[KRESP_CONTENT_DISPOSITION], - "attachment;filename=\"%s\"", f->name); + "attachment;filename=\"%s\"", filename); + free(filename); khttp_head(r, kresps[KRESP_CONTENT_TYPE], "%s", mime_str(f->mime)); khttp_head(r, kresps[KRESP_CONTENT_LENGTH], "%zu", f->size); - khttp_body_compress(r, 0); /* file is not compressed */ + khttp_body_compress(r, 0); /* file is not compressed */ + + return true; } void |