diff options
Diffstat (limited to 'libs/sgi-wsapi')
-rw-r--r-- | libs/sgi-wsapi/Makefile | 2 | ||||
-rw-r--r-- | libs/sgi-wsapi/luasrc/sgi/wsapi.lua | 69 |
2 files changed, 71 insertions, 0 deletions
diff --git a/libs/sgi-wsapi/Makefile b/libs/sgi-wsapi/Makefile new file mode 100644 index 000000000..81a96f6a8 --- /dev/null +++ b/libs/sgi-wsapi/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk
\ No newline at end of file diff --git a/libs/sgi-wsapi/luasrc/sgi/wsapi.lua b/libs/sgi-wsapi/luasrc/sgi/wsapi.lua new file mode 100644 index 000000000..e7082493c --- /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 |