}
}
+static int uh_lua_send(lua_State *L)
+{
+ const char *buf;
+ size_t len;
+
+ buf = luaL_checklstring(L, 1, &len);
+ if (len > 0)
+ len = write(STDOUT_FILENO, buf, len);
+
+ lua_pushnumber(L, len);
+ return 1;
+}
+
static int
uh_lua_strconvert(lua_State *L, int (*convert)(char *, int, const char *, int))
{
/* build uhttpd api table */
lua_newtable(L);
- /*
- * use print as send and sendc implementation,
- * chunked transfer is handled in the main server
- */
- lua_getglobal(L, "print");
- lua_pushvalue(L, -1);
- lua_setfield(L, -3, "send");
+ lua_pushcfunction(L, uh_lua_send);
+ lua_setfield(L, -2, "send");
+
+ lua_pushcfunction(L, uh_lua_send);
lua_setfield(L, -2, "sendc");
lua_pushcfunction(L, uh_lua_recv);
static void lua_main(struct client *cl, struct path_info *pi, const char *url)
{
+ struct blob_attr *cur;
const char *error;
struct env_var *var;
lua_State *L = _L;
int path_len, prefix_len;
char *str;
+ int rem;
lua_getglobal(L, UH_LUA_CB);
lua_pushnumber(L, 0.9 + (cl->request.version / 10.0));
lua_setfield(L, -2, "HTTP_VERSION");
+ lua_newtable(L);
+ blob_for_each_attr(cur, cl->hdr.head, rem) {
+ lua_pushstring(L, blobmsg_data(cur));
+ lua_setfield(L, -2, blobmsg_name(cur));
+ }
+ lua_setfield(L, -2, "headers");
+
switch(lua_pcall(L, 1, 0, 0)) {
case LUA_ERRMEM:
case LUA_ERRRUN: