Removes server-side support for POST requests.

This commit is contained in:
Daniel J. Hofmann 2016-03-31 12:50:56 +02:00 committed by Patrick Niklaus
parent 6ec5622ec5
commit 166aebbff4
2 changed files with 3 additions and 77 deletions

View File

@ -64,17 +64,11 @@ class RequestParser
space_before_header_value, space_before_header_value,
header_value, header_value,
expecting_newline_2, expecting_newline_2,
expecting_newline_3, expecting_newline_3
post_O,
post_S,
post_T,
post_request
} state; } state;
http::header current_header; http::header current_header;
http::compression_type selected_compression; http::compression_type selected_compression;
bool is_post_header;
int content_length;
}; };
} }
} }

View File

@ -15,7 +15,7 @@ namespace server
RequestParser::RequestParser() RequestParser::RequestParser()
: state(internal_state::method_start), current_header({"", ""}), : state(internal_state::method_start), current_header({"", ""}),
selected_compression(http::no_compression), is_post_header(false), content_length(0) selected_compression(http::no_compression)
{ {
} }
@ -32,10 +32,6 @@ RequestParser::parse(http::request &current_request, char *begin, char *end)
} }
RequestStatus result = RequestStatus::indeterminate; RequestStatus result = RequestStatus::indeterminate;
if (state == internal_state::post_request && content_length <= 0)
{
result = RequestStatus::valid;
}
return std::make_tuple(result, selected_compression); return std::make_tuple(result, selected_compression);
} }
@ -49,39 +45,8 @@ RequestParser::RequestStatus RequestParser::consume(http::request &current_reque
{ {
return RequestStatus::invalid; return RequestStatus::invalid;
} }
if (input == 'P')
{
state = internal_state::post_O;
return RequestStatus::indeterminate;
}
state = internal_state::method; state = internal_state::method;
return RequestStatus::indeterminate; return RequestStatus::indeterminate;
case internal_state::post_O:
if (input == 'O')
{
state = internal_state::post_S;
return RequestStatus::indeterminate;
}
return RequestStatus::invalid;
case internal_state::post_S:
if (input == 'S')
{
state = internal_state::post_T;
return RequestStatus::indeterminate;
}
return RequestStatus::invalid;
case internal_state::post_T:
if (input == 'T')
{
is_post_header = true;
state = internal_state::method;
return RequestStatus::indeterminate;
}
return RequestStatus::invalid;
case internal_state::post_request:
current_request.uri.push_back(input);
--content_length;
return RequestStatus::indeterminate;
case internal_state::method: case internal_state::method:
if (input == ' ') if (input == ' ')
{ {
@ -214,24 +179,6 @@ RequestParser::RequestStatus RequestParser::consume(http::request &current_reque
{ {
current_request.agent = current_header.value; current_request.agent = current_header.value;
} }
if (boost::iequals(current_header.name, "Content-Length"))
{
try
{
content_length = std::stoi(current_header.value);
}
catch (const std::exception &e)
{
// Ignore the header if the parameter isn't an int
}
}
if (boost::iequals(current_header.name, "Content-Type"))
{
if (!boost::icontains(current_header.value, "application/x-www-form-urlencoded"))
{
return RequestStatus::invalid;
}
}
if (input == '\r') if (input == '\r')
{ {
@ -300,22 +247,7 @@ RequestParser::RequestStatus RequestParser::consume(http::request &current_reque
return RequestStatus::indeterminate; return RequestStatus::indeterminate;
} }
return RequestStatus::invalid; return RequestStatus::invalid;
case internal_state::expecting_newline_3: default: // expecting_newline_3
if (input == '\n')
{
if (is_post_header)
{
if (content_length > 0)
{
current_request.uri.push_back('?');
}
state = internal_state::post_request;
return RequestStatus::indeterminate;
}
return RequestStatus::valid;
}
return RequestStatus::invalid;
default: // should never be reached
return input == '\n' ? RequestStatus::valid : RequestStatus::invalid; return input == '\n' ? RequestStatus::valid : RequestStatus::invalid;
} }
} }