mirror of https://git.openwrt.org/project/luci.git
* luci/libs: http.protocol: split parse_message() in parse_message_header() and parse_message_body()
This commit is contained in:
parent
a80f704e37
commit
647bc44868
|
@ -327,6 +327,20 @@ end
|
||||||
-- Parse a http message
|
-- Parse a http message
|
||||||
function parse_message( data, filecb )
|
function parse_message( data, filecb )
|
||||||
|
|
||||||
|
local reader = _linereader( data )
|
||||||
|
local message = parse_message_header( reader )
|
||||||
|
|
||||||
|
if message then
|
||||||
|
parse_message_body( reader, message, filecb )
|
||||||
|
end
|
||||||
|
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Parse a http message header
|
||||||
|
function parse_message_header( data )
|
||||||
|
|
||||||
-- Create a line reader
|
-- Create a line reader
|
||||||
local reader = _linereader( data )
|
local reader = _linereader( data )
|
||||||
local message = { }
|
local message = { }
|
||||||
|
@ -368,8 +382,50 @@ function parse_message( data, filecb )
|
||||||
message.params = { }
|
message.params = { }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Populate common environment variables
|
||||||
|
message.env = {
|
||||||
|
CONTENT_LENGTH = hdrs['Content-Length'];
|
||||||
|
CONTENT_TYPE = hdrs['Content-Type'];
|
||||||
|
REQUEST_METHOD = message.request_method;
|
||||||
|
REQUEST_URI = message.request_uri;
|
||||||
|
SCRIPT_NAME = message.request_uri:gsub("?.+$","");
|
||||||
|
SCRIPT_FILENAME = "" -- XXX implement me
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Populate HTTP_* environment variables
|
||||||
|
for i, hdr in ipairs( {
|
||||||
|
'Accept',
|
||||||
|
'Accept-Charset',
|
||||||
|
'Accept-Encoding',
|
||||||
|
'Accept-Language',
|
||||||
|
'Connection',
|
||||||
|
'Cookie',
|
||||||
|
'Host',
|
||||||
|
'Referer',
|
||||||
|
'User-Agent',
|
||||||
|
} ) do
|
||||||
|
local var = 'HTTP_' .. hdr:upper():gsub("%-","_")
|
||||||
|
local val = hdrs[hdr]
|
||||||
|
|
||||||
|
message.env[var] = val
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Parse a http message body
|
||||||
|
function parse_message_body( reader, message, filecb )
|
||||||
|
|
||||||
|
if type(message) == "table" then
|
||||||
|
|
||||||
|
local hdrs = message.headers
|
||||||
|
|
||||||
-- Process post method
|
-- Process post method
|
||||||
if method == "post" and hdrs['Content-Type'] then
|
if message.request_method == "post" and hdrs['Content-Type'] then
|
||||||
|
|
||||||
-- Is it multipart/form-data ?
|
-- Is it multipart/form-data ?
|
||||||
if hdrs['Content-Type']:match("^multipart/form%-data") then
|
if hdrs['Content-Type']:match("^multipart/form%-data") then
|
||||||
|
@ -432,41 +488,10 @@ function parse_message( data, filecb )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Populate common environment variables
|
|
||||||
message.env = {
|
|
||||||
CONTENT_LENGTH = hdrs['Content-Length'];
|
|
||||||
CONTENT_TYPE = hdrs['Content-Type'];
|
|
||||||
REQUEST_METHOD = message.request_method;
|
|
||||||
REQUEST_URI = message.request_uri;
|
|
||||||
SCRIPT_NAME = message.request_uri:gsub("?.+$","");
|
|
||||||
SCRIPT_FILENAME = "" -- XXX implement me
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Populate HTTP_* environment variables
|
|
||||||
for i, hdr in ipairs( {
|
|
||||||
'Accept',
|
|
||||||
'Accept-Charset',
|
|
||||||
'Accept-Encoding',
|
|
||||||
'Accept-Language',
|
|
||||||
'Connection',
|
|
||||||
'Cookie',
|
|
||||||
'Host',
|
|
||||||
'Referer',
|
|
||||||
'User-Agent',
|
|
||||||
} ) do
|
|
||||||
local var = 'HTTP_' .. hdr:upper():gsub("%-","_")
|
|
||||||
local val = hdrs[hdr]
|
|
||||||
|
|
||||||
message.env[var] = val
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
return message
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function _linereader( obj )
|
function _linereader( obj )
|
||||||
|
|
||||||
-- object is string
|
-- object is string
|
||||||
|
|
Loading…
Reference in New Issue