aboutsummaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/lua.c22
-rw-r--r--src/net/lua.h1
2 files changed, 19 insertions, 4 deletions
diff --git a/src/net/lua.c b/src/net/lua.c
index df2213b..06d1b0e 100644
--- a/src/net/lua.c
+++ b/src/net/lua.c
@@ -192,7 +192,8 @@ int l_roll(lua_State* L){
return 1;
}
-#define bsize 512
+#define bsize 32768
+//#define bsize 12
int l_sendfile(lua_State* L){
int res_idx = 1;
@@ -216,6 +217,8 @@ int l_sendfile(lua_State* L){
p_fatal("missing permissions");
}
+<<<<<<< HEAD
+=======
char* ext = strrchr(path, '.');
if(ext){
char* content_type = map_get(mime_type, ext + 1);
@@ -229,15 +232,28 @@ int l_sendfile(lua_State* L){
send(client_fd, r->c, r->len, 0);
str_free(r);
+>>>>>>> e29d3ea86551380ace8e2c86c9f1f63e901941e1
char* buffer = calloc(sizeof* buffer, bsize + 1);
FILE* fp = fopen(path, "rb");
fseek(fp, 0L, SEEK_END);
size_t sz = ftell(fp);
fseek(fp, 0L, SEEK_SET);
+
+ char size[256];
+ sprintf(size, "%li", sz);
+ luaI_tsets(L, header, "Content-Length", size);
+ //todo: allow file name
+ //luaI_tsets(L, header, "Content-Disposition", "attachment;");
+
+ str* r;
+ i_write_header(L, header, &r, "", 0);
+ send(client_fd, r->c, r->len, 0);
+ str_free(r);
- for(int i = 0; i < sz; i += bsize){
+ for(size_t i = 0; i < sz; i += bsize){
fread(buffer, sizeof * buffer, bsize, fp);
- send(client_fd, buffer, bsize > sz - i ? sz - i : bsize, 0);
+ if(send(client_fd, buffer, bsize > sz - i ? sz - i : bsize, 0) == -1)
+ break;
}
free(buffer);
diff --git a/src/net/lua.h b/src/net/lua.h
index 19f7262..b1e96fc 100644
--- a/src/net/lua.h
+++ b/src/net/lua.h
@@ -5,5 +5,4 @@ int l_send(lua_State* L);
int l_close(lua_State* L);
int l_stop(lua_State* L);
int l_roll(lua_State* L);
-#define bsize 512
int l_sendfile(lua_State* L);