summaryrefslogtreecommitdiff
path: root/http.c
diff options
context:
space:
mode:
Diffstat (limited to 'http.c')
-rw-r--r--http.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/http.c b/http.c
index b79b361..ef8d90c 100644
--- a/http.c
+++ b/http.c
@@ -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