1 -- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
2 -- Licensed to the public under the Apache License 2.0.
7 require "luci.dispatcher"
10 function handle_request(env)
13 CONTENT_LENGTH = env.CONTENT_LENGTH,
14 CONTENT_TYPE = env.CONTENT_TYPE,
15 REQUEST_METHOD = env.REQUEST_METHOD,
16 REQUEST_URI = env.REQUEST_URI,
17 PATH_INFO = env.PATH_INFO,
18 SCRIPT_NAME = env.SCRIPT_NAME:gsub("/+$", ""),
19 SCRIPT_FILENAME = env.SCRIPT_NAME,
20 SERVER_PROTOCOL = env.SERVER_PROTOCOL,
21 QUERY_STRING = env.QUERY_STRING,
22 DOCUMENT_ROOT = env.DOCUMENT_ROOT,
24 REDIRECT_STATUS = env.REDIRECT_STATUS,
25 REMOTE_ADDR = env.REMOTE_ADDR,
26 REMOTE_NAME = env.REMOTE_NAME,
27 REMOTE_PORT = env.REMOTE_PORT,
28 REMOTE_USER = env.REMOTE_USER,
29 SERVER_ADDR = env.SERVER_ADDR,
30 SERVER_NAME = env.SERVER_NAME,
31 SERVER_PORT = env.SERVER_PORT
35 for k, v in pairs(env.headers) do
36 k = k:upper():gsub("%-", "_")
37 renv["HTTP_" .. k] = v
40 local len = tonumber(env.CONTENT_LENGTH) or 0
43 local rlen, rbuf = uhttpd.recv(4096)
52 local send = uhttpd.send
54 local req = luci.http.Request(
55 renv, recv, luci.ltn12.sink.file(io.stderr)
59 local x = coroutine.create(luci.dispatcher.httpdispatch)
63 while coroutine.status(x) ~= "dead" do
64 local res, id, data1, data2 = coroutine.resume(x, req)
67 send("Status: 500 Internal Server Error\r\n")
68 send("Content-Type: text/plain\r\n\r\n")
83 for k, v in pairs(hcache) do
91 send(tostring(data1 or ""))
95 data1:copyz(nixio.stdout, data2)