diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/package/uhttpd/src/uhttpd-lua.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/contrib/package/uhttpd/src/uhttpd-lua.c b/contrib/package/uhttpd/src/uhttpd-lua.c index 16b627fef..2c2821d06 100644 --- a/contrib/package/uhttpd/src/uhttpd-lua.c +++ b/contrib/package/uhttpd/src/uhttpd-lua.c @@ -80,7 +80,7 @@ static int uh_lua_recv(lua_State *L) return 1; } -static int uh_lua_send(lua_State *L) +static int uh_lua_send_common(lua_State *L, int chunked) { size_t length; const char *buffer; @@ -93,7 +93,11 @@ static int uh_lua_send(lua_State *L) if( (cl != NULL) && (length > 0) ) { - slen = uh_tcp_send(cl, buffer, length); + if( chunked ) + slen = uh_http_sendc(cl, buffer, length); + else + slen = uh_tcp_send(cl, buffer, length); + lua_pushnumber(L, slen); return 1; } @@ -102,6 +106,16 @@ static int uh_lua_send(lua_State *L) return 1; } +static int uh_lua_send(lua_State *L) +{ + return uh_lua_send_common(L, 0); +} + +static int uh_lua_sendc(lua_State *L) +{ + return uh_lua_send_common(L, 1); +} + static int uh_lua_urldecode(lua_State *L) { size_t inlen, outlen; @@ -140,15 +154,24 @@ lua_State * uh_lua_init(const char *handler) lua_settop(L, 0); } + /* build uhttpd api table */ + lua_newtable(L); + /* register global send and receive functions */ lua_pushcfunction(L, uh_lua_recv); - lua_setfield(L, LUA_GLOBALSINDEX, "recv"); + lua_setfield(L, -2, "recv"); lua_pushcfunction(L, uh_lua_send); - lua_setfield(L, LUA_GLOBALSINDEX, "send"); + lua_setfield(L, -2, "send"); + + lua_pushcfunction(L, uh_lua_sendc); + lua_setfield(L, -2, "sendc"); lua_pushcfunction(L, uh_lua_urldecode); - lua_setfield(L, LUA_GLOBALSINDEX, "urldecode"); + lua_setfield(L, -2, "urldecode"); + + /* _G.uhttpd = { ... } */ + lua_setfield(L, LUA_GLOBALSINDEX, "uhttpd"); /* load Lua handler */ |