end
+-- Parameter helper
+local function __initval( tbl, key )
+ if tbl[key] == nil then
+ tbl[key] = ""
+ elseif type(tbl[key]) == "string" then
+ tbl[key] = { tbl[key], "" }
+ else
+ table.insert( tbl[key], "" )
+ end
+end
+
+local function __appendval( tbl, key, chunk )
+ if type(tbl[key]) == "table" then
+ tbl[key][#tbl[key]] = tbl[key][#tbl[key]] .. chunk
+ else
+ tbl[key] = tbl[key] .. chunk
+ end
+end
+
+local function __finishval( tbl, key, handler )
+ if handler then
+ if type(tbl[key]) == "table" then
+ tbl[key][#tbl[key]] = handler( tbl[key][#tbl[key]] )
+ else
+ tbl[key] = handler( tbl[key] )
+ end
+ end
+end
+
+
-- Table of our process states
local process_states = { }
-- Treat as form field
else
- msg.params[field] = ""
+ __initval( msg.params, field )
+
msg._mimecallback = function(chunk,eof)
- msg.params[field] = msg.params[field] .. chunk
+ __appendval( msg.params, field, chunk )
end
end
local key = urldecode( buffer:sub( 1, spos - 1 ) )
-- Prepare buffers
- msg.params[key] = ""
msg._urldeclength = msg._urldeclength + epos
msg._urldecbuffer = buffer:sub( epos + 1, #buffer )
filecb( field, chunk, eof )
end
else
+ __initval( msg.params, key )
+
msg._urldeccallback = function( chunk, eof )
- msg.params[key] = msg.params[key] .. chunk
+ __appendval( msg.params, key, chunk )
-- FIXME: Use a filter
if eof then
- msg.params[key] = urldecode( msg.params[key] )
+ __finishval( msg.params, key, urldecode )
end
end
end