Removes server-side support for POST requests.
This commit is contained in:
parent
6ec5622ec5
commit
166aebbff4
@ -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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 ¤t_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 ¤t_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 ¤t_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 ¤t_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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user