http post requests implemented
This commit is contained in:
parent
2cd616dd30
commit
6a08d93e2c
@ -42,7 +42,7 @@ namespace http
|
||||
|
||||
RequestParser::RequestParser()
|
||||
: state(internal_state::method_start), current_header({"", ""}),
|
||||
selected_compression(no_compression)
|
||||
selected_compression(no_compression), is_post_header(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -58,6 +58,11 @@ RequestParser::parse(request ¤t_request, char *begin, char *end)
|
||||
}
|
||||
}
|
||||
osrm::tribool result = osrm::tribool::indeterminate;
|
||||
|
||||
if(is_post_header && (begin == end))
|
||||
{
|
||||
result = osrm::tribool::yes;
|
||||
}
|
||||
return std::make_tuple(result, selected_compression);
|
||||
}
|
||||
|
||||
@ -70,8 +75,38 @@ osrm::tribool RequestParser::consume(request ¤t_request, const char input)
|
||||
{
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
if(input == 'P')
|
||||
{
|
||||
state = internal_state::post_O;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
state = internal_state::method;
|
||||
return osrm::tribool::indeterminate;
|
||||
case internal_state::post_O:
|
||||
if(input == 'O')
|
||||
{
|
||||
state = internal_state::post_S;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return osrm::tribool::no;
|
||||
case internal_state::post_S:
|
||||
if(input == 'S')
|
||||
{
|
||||
state = internal_state::post_T;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return osrm::tribool::no;
|
||||
case internal_state::post_T:
|
||||
if(input == 'T')
|
||||
{
|
||||
is_post_header = true;
|
||||
state = internal_state::method;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return osrm::tribool::no;
|
||||
case internal_state::post_request:
|
||||
current_request.uri.push_back(input);
|
||||
return osrm::tribool::indeterminate;
|
||||
case internal_state::method:
|
||||
if (input == ' ')
|
||||
{
|
||||
@ -272,7 +307,18 @@ osrm::tribool RequestParser::consume(request ¤t_request, const char input)
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return osrm::tribool::no;
|
||||
default: // expecting_newline_3
|
||||
case internal_state::expecting_newline_3:
|
||||
if(input == '\n')
|
||||
{
|
||||
if(is_post_header)
|
||||
{
|
||||
state = internal_state::post_request;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return osrm::tribool::yes;
|
||||
}
|
||||
return osrm::tribool::no;
|
||||
default: // should never be reached
|
||||
return input == '\n' ? osrm::tribool::yes : osrm::tribool::no;
|
||||
}
|
||||
}
|
||||
|
@ -80,11 +80,16 @@ class RequestParser
|
||||
space_before_header_value,
|
||||
header_value,
|
||||
expecting_newline_2,
|
||||
expecting_newline_3
|
||||
expecting_newline_3,
|
||||
post_O,
|
||||
post_S,
|
||||
post_T,
|
||||
post_request
|
||||
} state;
|
||||
|
||||
header current_header;
|
||||
compression_type selected_compression;
|
||||
bool is_post_header;
|
||||
};
|
||||
|
||||
} // namespace http
|
||||
|
Loading…
Reference in New Issue
Block a user