http.protocol: Support filehandlers for unhandled encodings

The setfilehandler() functions used for mime and url encoded message
bodies all operate with a signature of fh(meta, chunk, eof), but for
unhandled encodings, the callback was directly assigned to the sink
function, which has a signature of snk(chunk).  Insert a wrapper to
properly generate the EOF flag, and include a stub "meta" block
providing a virtual "name" and also the original client provided
Content-Type header, to possibly help with taking alternative actions in
the file handler.

The sink function created for raw content decoding also used the wrong
signature for the sink function.

Signed-off-by: Karl Palsson <karlp@remake.is>
This commit is contained in:
Karl Palsson 2015-08-18 13:59:32 +00:00 committed by Jo-Philipp Wich
parent 7d8163e568
commit 22f687d0b1

View file

@ -559,14 +559,23 @@ function parse_message_body( src, msg, filecb )
-- If we have a file callback then feed it
if type(filecb) == "function" then
sink = filecb
local meta = {
name = "raw",
encoding = msg.env.CONTENT_TYPE
}
sink = function( chunk )
if chunk then
return filecb(meta, chunk, false)
else
return filecb(meta, nil, true)
end
end
-- ... else append to .content
else
msg.content = ""
msg.content_length = 0
sink = function( chunk, err )
sink = function( chunk )
if chunk then
if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then
msg.content = msg.content .. chunk