summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKarl Palsson <karlp@remake.is>2015-08-18 13:59:32 +0000
committerJo-Philipp Wich <jow@openwrt.org>2015-08-18 17:52:48 +0200
commit2a77918b023f6afc754d008a952776da69f0f618 (patch)
treead5c549460383b8331ecccc856394d96f74f3bd5
parentc42bd54abbb5451898be086d88b75c430c341dec (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>
-rw-r--r--modules/luci-base/luasrc/http/protocol.lua15
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