summaryrefslogtreecommitdiffhomepage
path: root/libs/sgi-wsapi/luasrc
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-06-14 19:30:30 +0000
committerSteven Barth <steven@midlink.org>2008-06-14 19:30:30 +0000
commit1d7935cae058dd859129705b693afabaa9e2f121 (patch)
tree0d69bbe589d1174141d707e0e753237ccc7f19c5 /libs/sgi-wsapi/luasrc
parent16924c1d83e4c526401d670162bff10d45df3216 (diff)
* Added preliminary support for WSAPI SGI
Diffstat (limited to 'libs/sgi-wsapi/luasrc')
-rw-r--r--libs/sgi-wsapi/luasrc/sgi/wsapi.lua69
1 files changed, 69 insertions, 0 deletions
diff --git a/libs/sgi-wsapi/luasrc/sgi/wsapi.lua b/libs/sgi-wsapi/luasrc/sgi/wsapi.lua
new file mode 100644
index 0000000000..e7082493c6
--- /dev/null
+++ b/libs/sgi-wsapi/luasrc/sgi/wsapi.lua
@@ -0,0 +1,69 @@
+--[[
+LuCI - SGI-Module for WSAPI
+
+Description:
+Server Gateway Interface for WSAPI
+
+FileId:
+$Id$
+
+License:
+Copyright 2008 Steven Barth <steven@midlink.org>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+]]--
+module("luci.sgi.wsapi", package.seeall)
+require("luci.http")
+require("luci.dispatcher")
+require("wsapi.request")
+
+function run(wsapi_env)
+ local r = luci.http.Request()
+ r.env = wsapi_env
+ r.request = wsapi.request.parse_post_data(wsapi_env,
+ wsapi.request.parse_qs(wsapi_env.QUERY_STRING))
+
+ local res, id, data1, data2 = true, 0, nil, nil
+ local headers = {}
+ local status = 200
+
+ local x = coroutine.create(luci.dispatcher.httpdispatch)
+ while id < 3 do
+ res, id, data1, data2 = coroutine.resume(x, r)
+
+ if not res then
+ status = 500
+ headers["Content-Type"] = "text/plain"
+ local err = {id}
+ return status, headers, function() local x = table.remove(err) return x end
+ end
+
+ if id == 1 then
+ status = data1
+ elseif id == 2 then
+ headers[data1] = data2
+ end
+ end
+
+ local function iter()
+ local res, id, data1, data2 = coroutine.resume(x)
+ if not res or id == 5 then
+ return nil
+ else
+ return data1
+ end
+ end
+
+ return status, headers, iter
+end