diff options
author | Karl Palsson <karlp@remake.is> | 2015-08-18 13:59:32 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2015-08-18 17:52:48 +0200 |
commit | 2a77918b023f6afc754d008a952776da69f0f618 (patch) | |
tree | ad5c549460383b8331ecccc856394d96f74f3bd5 /modules | |
parent | c42bd54abbb5451898be086d88b75c430c341dec (diff) |
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>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/luci-base/luasrc/http/protocol.lua | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/modules/luci-base/luasrc/http/protocol.lua b/modules/luci-base/luasrc/http/protocol.lua index 61d7b802f..859272679 100644 --- a/modules/luci-base/luasrc/http/protocol.lua +++ b/modules/luci-base/luasrc/http/protocol.lua @@ -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 |