diff options
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/lua.c | 22 | ||||
| -rw-r--r-- | src/net/lua.h | 1 |
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); |
