From 36e18e87ef0f9fc81124c9e0ee46127ee755af19 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Mon, 26 Oct 2009 17:40:44 +0000 Subject: [PATCH] CBI: Cancelaction and event callbacks for Delegators LuCId: Send Keep-Alive headers to avoid browser quirks --- libs/cbi/luasrc/cbi.lua | 15 +++++++++++++++ libs/cbi/luasrc/view/cbi/delegator.htm | 3 +++ libs/lucid-http/luasrc/lucid/http/server.lua | 10 +++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index 1b22db0a8..13aad8d9e 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -506,6 +506,7 @@ function Delegator.__init__(self, ...) self.pageaction = false self.readinput = true self.allow_reset = false + self.allow_cancel = false self.allow_back = false self.allow_finish = false self.template = "cbi/delegator" @@ -559,6 +560,17 @@ function Delegator.get(self, name) end function Delegator.parse(self, ...) + if self.allow_cancel and Map.formvalue(self, "cbi.cancel") then + if self.on_cancel then + self:on_cancel() + return FORM_DONE + end + end + + if self.on_init and not Map.formvalue(self, "cbi.delg.current") then + self:on_init() + end + local newcurrent self.chain = self.chain or self:get_chain() self.current = self.current or self:get_active() @@ -587,6 +599,9 @@ function Delegator.parse(self, ...) if not Map.formvalue(self, "cbi.submit") then return FORM_NODATA elseif not newcurrent or not self:get(newcurrent) then + if self.on_done then + self:on_done() + end return FORM_DONE else self.current = newcurrent diff --git a/libs/cbi/luasrc/view/cbi/delegator.htm b/libs/cbi/luasrc/view/cbi/delegator.htm index 95fd270f8..f2c87b460 100644 --- a/libs/cbi/luasrc/view/cbi/delegator.htm +++ b/libs/cbi/luasrc/view/cbi/delegator.htm @@ -23,6 +23,9 @@ $Id$ <% if self.allow_reset then %> <% end %> +<% if self.allow_cancel then %> + +<% end %> <% if self.allow_finish and not self:get_next(self.current) then %> <% elseif self:get_next(self.current) then %> diff --git a/libs/lucid-http/luasrc/lucid/http/server.lua b/libs/lucid-http/luasrc/lucid/http/server.lua index 450417995..284c6a03e 100644 --- a/libs/lucid-http/luasrc/lucid/http/server.lua +++ b/libs/lucid-http/luasrc/lucid/http/server.lua @@ -419,8 +419,8 @@ function Server.process(self, client, env) set_memory_limit(env.config.memlimit) end - client:setsockopt("socket", "rcvtimeo", 60) - client:setsockopt("socket", "sndtimeo", 60) + client:setsockopt("socket", "rcvtimeo", 5) + client:setsockopt("socket", "sndtimeo", 5) repeat -- parse headers @@ -531,7 +531,11 @@ function Server.process(self, client, env) headers["Connection"] = "close" elseif message.env.SERVER_PROTOCOL == "HTTP/1.0" then headers["Connection"] = "Keep-Alive" - end + end + + if not close then + headers["Keep-Alive"] = "timeout=5, max=50" + end headers["Date"] = date.to_http(os.time()) local header = { -- 2.25.1