* luci/libs: http.protocol: split parse_message() in parse_message_header() and parse_message_body()

This commit is contained in:
Jo-Philipp Wich 2008-06-15 13:23:08 +00:00
parent a80f704e37
commit 647bc44868
1 changed files with 90 additions and 65 deletions

View File

@ -327,6 +327,20 @@ end
-- Parse a http message
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
local reader = _linereader( data )
local message = { }
@ -368,8 +382,50 @@ function parse_message( data, filecb )
message.params = { }
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
if method == "post" and hdrs['Content-Type'] then
if message.request_method == "post" and hdrs['Content-Type'] then
-- Is it multipart/form-data ?
if hdrs['Content-Type']:match("^multipart/form%-data") then
@ -432,41 +488,10 @@ function parse_message( data, filecb )
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
function _linereader( obj )
-- object is string