* Moved luci.http.protocol to libs/http
* Added ltn12 to libs/core * Fixed libs/httpd Makefile
This commit is contained in:
parent
8349a0504e
commit
e2e9e119d6
6 changed files with 333 additions and 13 deletions
1
NOTICE
1
NOTICE
|
@ -6,6 +6,7 @@ Licensed under the Apache License, Version 2.0.
|
||||||
Contains code from:
|
Contains code from:
|
||||||
BinDecHex - Copyright 2007 Tim Kelly/Dialectronics
|
BinDecHex - Copyright 2007 Tim Kelly/Dialectronics
|
||||||
coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org)
|
coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org)
|
||||||
|
ltn12/luasocket - Copyright 2004-2007 Diego Nehab
|
||||||
|
|
||||||
|
|
||||||
Luci-Statistics - Statistics for LuCI
|
Luci-Statistics - Statistics for LuCI
|
||||||
|
|
|
@ -132,9 +132,19 @@ define Package/luci-fastindex/install
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define Package/luci-http
|
||||||
|
$(call Package/luci/libtemplate)
|
||||||
|
TITLE:=HTTP Protocol implementation
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/luci-http/install
|
||||||
|
$(call Package/luci/install/template,$(1),libs/http)
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
define Package/luci-web
|
define Package/luci-web
|
||||||
$(call Package/luci/libtemplate)
|
$(call Package/luci/libtemplate)
|
||||||
DEPENDS+=+luci-addons +luci-uci
|
DEPENDS+=+luci-http +luci-addons +luci-uci
|
||||||
TITLE:=MVC Webframework
|
TITLE:=MVC Webframework
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -384,6 +394,9 @@ endif
|
||||||
ifneq ($(CONFIG_PACKAGE_luci-fastindex),)
|
ifneq ($(CONFIG_PACKAGE_luci-fastindex),)
|
||||||
PKG_SELECTED_MODULES+=libs/fastindex
|
PKG_SELECTED_MODULES+=libs/fastindex
|
||||||
endif
|
endif
|
||||||
|
ifneq ($(CONFIG_PACKAGE_luci-http),)
|
||||||
|
PKG_SELECTED_MODULES+=libs/http
|
||||||
|
endif
|
||||||
ifneq ($(CONFIG_PACKAGE_luci-uci),)
|
ifneq ($(CONFIG_PACKAGE_luci-uci),)
|
||||||
PKG_SELECTED_MODULES+=libs/uci
|
PKG_SELECTED_MODULES+=libs/uci
|
||||||
endif
|
endif
|
||||||
|
@ -455,6 +468,7 @@ MAKE_FLAGS += MODULES="$(PKG_SELECTED_MODULES)" LUA_TARGET="$(LUA_TARGET)" CFLAG
|
||||||
$(eval $(call BuildPackage,luci-core))
|
$(eval $(call BuildPackage,luci-core))
|
||||||
$(eval $(call BuildPackage,luci-cbi))
|
$(eval $(call BuildPackage,luci-cbi))
|
||||||
$(eval $(call BuildPackage,luci-fastindex))
|
$(eval $(call BuildPackage,luci-fastindex))
|
||||||
|
$(eval $(call BuildPackage,luci-http))
|
||||||
$(eval $(call BuildPackage,luci-uci))
|
$(eval $(call BuildPackage,luci-uci))
|
||||||
$(eval $(call BuildPackage,luci-web))
|
$(eval $(call BuildPackage,luci-web))
|
||||||
|
|
||||||
|
|
314
libs/core/lua/ltn12.lua
Normal file
314
libs/core/lua/ltn12.lua
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
--[[
|
||||||
|
LuaSocket 2.0.2 license
|
||||||
|
Copyright <EFBFBD> 2004-2007 Diego Nehab
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
]]--
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- LTN12 - Filters, sources, sinks and pumps.
|
||||||
|
-- LuaSocket toolkit.
|
||||||
|
-- Author: Diego Nehab
|
||||||
|
-- RCS ID: $Id: ltn12.lua,v 1.31 2006/04/03 04:45:42 diego Exp $
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- Declare module
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
local string = require("string")
|
||||||
|
local table = require("table")
|
||||||
|
local base = _G
|
||||||
|
module("ltn12")
|
||||||
|
|
||||||
|
filter = {}
|
||||||
|
source = {}
|
||||||
|
sink = {}
|
||||||
|
pump = {}
|
||||||
|
|
||||||
|
-- 2048 seems to be better in windows...
|
||||||
|
BLOCKSIZE = 2048
|
||||||
|
_VERSION = "LTN12 1.0.1"
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- Filter stuff
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- returns a high level filter that cycles a low-level filter
|
||||||
|
function filter.cycle(low, ctx, extra)
|
||||||
|
base.assert(low)
|
||||||
|
return function(chunk)
|
||||||
|
local ret
|
||||||
|
ret, ctx = low(ctx, chunk, extra)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- chains a bunch of filters together
|
||||||
|
-- (thanks to Wim Couwenberg)
|
||||||
|
function filter.chain(...)
|
||||||
|
local n = table.getn(arg)
|
||||||
|
local top, index = 1, 1
|
||||||
|
local retry = ""
|
||||||
|
return function(chunk)
|
||||||
|
retry = chunk and retry
|
||||||
|
while true do
|
||||||
|
if index == top then
|
||||||
|
chunk = arg[index](chunk)
|
||||||
|
if chunk == "" or top == n then return chunk
|
||||||
|
elseif chunk then index = index + 1
|
||||||
|
else
|
||||||
|
top = top+1
|
||||||
|
index = top
|
||||||
|
end
|
||||||
|
else
|
||||||
|
chunk = arg[index](chunk or "")
|
||||||
|
if chunk == "" then
|
||||||
|
index = index - 1
|
||||||
|
chunk = retry
|
||||||
|
elseif chunk then
|
||||||
|
if index == n then return chunk
|
||||||
|
else index = index + 1 end
|
||||||
|
else base.error("filter returned inappropriate nil") end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- Source stuff
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- create an empty source
|
||||||
|
local function empty()
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function source.empty()
|
||||||
|
return empty
|
||||||
|
end
|
||||||
|
|
||||||
|
-- returns a source that just outputs an error
|
||||||
|
function source.error(err)
|
||||||
|
return function()
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates a file source
|
||||||
|
function source.file(handle, io_err)
|
||||||
|
if handle then
|
||||||
|
return function()
|
||||||
|
local chunk = handle:read(BLOCKSIZE)
|
||||||
|
if not chunk then handle:close() end
|
||||||
|
return chunk
|
||||||
|
end
|
||||||
|
else return source.error(io_err or "unable to open file") end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- turns a fancy source into a simple source
|
||||||
|
function source.simplify(src)
|
||||||
|
base.assert(src)
|
||||||
|
return function()
|
||||||
|
local chunk, err_or_new = src()
|
||||||
|
src = err_or_new or src
|
||||||
|
if not chunk then return nil, err_or_new
|
||||||
|
else return chunk end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates string source
|
||||||
|
function source.string(s)
|
||||||
|
if s then
|
||||||
|
local i = 1
|
||||||
|
return function()
|
||||||
|
local chunk = string.sub(s, i, i+BLOCKSIZE-1)
|
||||||
|
i = i + BLOCKSIZE
|
||||||
|
if chunk ~= "" then return chunk
|
||||||
|
else return nil end
|
||||||
|
end
|
||||||
|
else return source.empty() end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates rewindable source
|
||||||
|
function source.rewind(src)
|
||||||
|
base.assert(src)
|
||||||
|
local t = {}
|
||||||
|
return function(chunk)
|
||||||
|
if not chunk then
|
||||||
|
chunk = table.remove(t)
|
||||||
|
if not chunk then return src()
|
||||||
|
else return chunk end
|
||||||
|
else
|
||||||
|
table.insert(t, chunk)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function source.chain(src, f)
|
||||||
|
base.assert(src and f)
|
||||||
|
local last_in, last_out = "", ""
|
||||||
|
local state = "feeding"
|
||||||
|
local err
|
||||||
|
return function()
|
||||||
|
if not last_out then
|
||||||
|
base.error('source is empty!', 2)
|
||||||
|
end
|
||||||
|
while true do
|
||||||
|
if state == "feeding" then
|
||||||
|
last_in, err = src()
|
||||||
|
if err then return nil, err end
|
||||||
|
last_out = f(last_in)
|
||||||
|
if not last_out then
|
||||||
|
if last_in then
|
||||||
|
base.error('filter returned inappropriate nil')
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
elseif last_out ~= "" then
|
||||||
|
state = "eating"
|
||||||
|
if last_in then last_in = "" end
|
||||||
|
return last_out
|
||||||
|
end
|
||||||
|
else
|
||||||
|
last_out = f(last_in)
|
||||||
|
if last_out == "" then
|
||||||
|
if last_in == "" then
|
||||||
|
state = "feeding"
|
||||||
|
else
|
||||||
|
base.error('filter returned ""')
|
||||||
|
end
|
||||||
|
elseif not last_out then
|
||||||
|
if last_in then
|
||||||
|
base.error('filter returned inappropriate nil')
|
||||||
|
else
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return last_out
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates a source that produces contents of several sources, one after the
|
||||||
|
-- other, as if they were concatenated
|
||||||
|
-- (thanks to Wim Couwenberg)
|
||||||
|
function source.cat(...)
|
||||||
|
local src = table.remove(arg, 1)
|
||||||
|
return function()
|
||||||
|
while src do
|
||||||
|
local chunk, err = src()
|
||||||
|
if chunk then return chunk end
|
||||||
|
if err then return nil, err end
|
||||||
|
src = table.remove(arg, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- Sink stuff
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- creates a sink that stores into a table
|
||||||
|
function sink.table(t)
|
||||||
|
t = t or {}
|
||||||
|
local f = function(chunk, err)
|
||||||
|
if chunk then table.insert(t, chunk) end
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
return f, t
|
||||||
|
end
|
||||||
|
|
||||||
|
-- turns a fancy sink into a simple sink
|
||||||
|
function sink.simplify(snk)
|
||||||
|
base.assert(snk)
|
||||||
|
return function(chunk, err)
|
||||||
|
local ret, err_or_new = snk(chunk, err)
|
||||||
|
if not ret then return nil, err_or_new end
|
||||||
|
snk = err_or_new or snk
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates a file sink
|
||||||
|
function sink.file(handle, io_err)
|
||||||
|
if handle then
|
||||||
|
return function(chunk, err)
|
||||||
|
if not chunk then
|
||||||
|
handle:close()
|
||||||
|
return 1
|
||||||
|
else return handle:write(chunk) end
|
||||||
|
end
|
||||||
|
else return sink.error(io_err or "unable to open file") end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates a sink that discards data
|
||||||
|
local function null()
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
function sink.null()
|
||||||
|
return null
|
||||||
|
end
|
||||||
|
|
||||||
|
-- creates a sink that just returns an error
|
||||||
|
function sink.error(err)
|
||||||
|
return function()
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- chains a sink with a filter
|
||||||
|
function sink.chain(f, snk)
|
||||||
|
base.assert(f and snk)
|
||||||
|
return function(chunk, err)
|
||||||
|
if chunk ~= "" then
|
||||||
|
local filtered = f(chunk)
|
||||||
|
local done = chunk and ""
|
||||||
|
while true do
|
||||||
|
local ret, snkerr = snk(filtered, err)
|
||||||
|
if not ret then return nil, snkerr end
|
||||||
|
if filtered == done then return 1 end
|
||||||
|
filtered = f(done)
|
||||||
|
end
|
||||||
|
else return 1 end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- Pump stuff
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
-- pumps one chunk from the source to the sink
|
||||||
|
function pump.step(src, snk)
|
||||||
|
local chunk, src_err = src()
|
||||||
|
local ret, snk_err = snk(chunk, src_err)
|
||||||
|
if chunk and ret then return 1
|
||||||
|
else return nil, src_err or snk_err end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- pumps all data from a source to a sink, using a step function
|
||||||
|
function pump.all(src, snk, step)
|
||||||
|
base.assert(src and snk)
|
||||||
|
step = step or pump.step
|
||||||
|
while true do
|
||||||
|
local ret, err = step(src, snk)
|
||||||
|
if not ret then
|
||||||
|
if err then return nil, err
|
||||||
|
else return 1 end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
2
libs/http/Makefile
Normal file
2
libs/http/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
include ../../build/config.mk
|
||||||
|
include ../../build/module.mk
|
|
@ -1,13 +1,2 @@
|
||||||
include ../../build/module.mk
|
|
||||||
include ../../build/config.mk
|
include ../../build/config.mk
|
||||||
include ../../build/gccconfig.mk
|
include ../../build/module.mk
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(COMPILE) $(LUA_CFLAGS) $(FPIC) -c -o $@ $<
|
|
||||||
|
|
||||||
compile: src/fastindex.o
|
|
||||||
mkdir -p dist$(LUCI_LIBRARYDIR)
|
|
||||||
$(LINK) $(SHLIB_FLAGS) -o dist$(LUCI_LIBRARYDIR)/fastindex.so src/fastindex.o $(LUA_SHLIBS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f src/*.o
|
|
||||||
|
|
Loading…
Reference in a new issue