From b8ab3b9dacab9c6d4344c60fdb4046087a24f233 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sat, 25 Jul 2009 07:27:05 +0000 Subject: Add: luci.http.splice to allow direct copying of data from a file descriptor --- libs/lucid-http/luasrc/lucid/http/server.lua | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'libs/lucid-http/luasrc/lucid/http') diff --git a/libs/lucid-http/luasrc/lucid/http/server.lua b/libs/lucid-http/luasrc/lucid/http/server.lua index 00c6b8416..0fe947316 100644 --- a/libs/lucid-http/luasrc/lucid/http/server.lua +++ b/libs/lucid-http/luasrc/lucid/http/server.lua @@ -510,7 +510,7 @@ function Server.process(self, client, env) headers["Content-Length"] = sourceout.len end end - if not headers["Content-Length"] then + if not headers["Content-Length"] and not close then if message.env.SERVER_PROTOCOL == "HTTP/1.1" then headers["Transfer-Encoding"] = "chunked" sinkout = chunksink(client) @@ -554,8 +554,15 @@ function Server.process(self, client, env) if sourceout and stat then if util.instanceof(sourceout, IOResource) then - stat, code, msg = sourceout.fd:copyz(client, sourceout.len) - else + if not headers["Transfer-Encoding"] then + stat, code, msg = sourceout.fd:copyz(client, sourceout.len) + sourceout = nil + else + sourceout = sourceout.fd:blocksource(nil, sourceout.len) + end + end + + if sourceout then stat, msg = ltn12.pump.all(sourceout, sinkout) end end -- cgit v1.2.3