aboutsummaryrefslogtreecommitdiff
path: root/src/net/lua.c
diff options
context:
space:
mode:
authorame <[email protected]>2024-09-30 02:06:47 -0500
committerame <[email protected]>2024-09-30 02:06:47 -0500
commit1cc24fda87c3e8df90a5ea2d526ce39adf4a7648 (patch)
tree6409e4b3c43b17e9c73d2b29193450712fb63190 /src/net/lua.c
parenteda53f915dc319cec7a4fe680734db87a113fe5e (diff)
cookies, sendfile fixes, and local var tests
Diffstat (limited to 'src/net/lua.c')
-rw-r--r--src/net/lua.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/net/lua.c b/src/net/lua.c
index 2995326..9600189 100644
--- a/src/net/lua.c
+++ b/src/net/lua.c
@@ -182,7 +182,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;
@@ -206,20 +207,27 @@ int l_sendfile(lua_State* L){
p_fatal("missing permissions");
}
- str* r;
- i_write_header(L, header, &r, "", 0);
- send(client_fd, r->c, r->len, 0);
- str_free(r);
-
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);