http post requests implemented
This commit is contained in:
parent
2cd616dd30
commit
6a08d93e2c
@ -42,7 +42,7 @@ namespace http
|
|||||||
|
|
||||||
RequestParser::RequestParser()
|
RequestParser::RequestParser()
|
||||||
: state(internal_state::method_start), current_header({"", ""}),
|
: 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;
|
osrm::tribool result = osrm::tribool::indeterminate;
|
||||||
|
|
||||||
|
if(is_post_header && (begin == end))
|
||||||
|
{
|
||||||
|
result = osrm::tribool::yes;
|
||||||
|
}
|
||||||
return std::make_tuple(result, selected_compression);
|
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;
|
return osrm::tribool::no;
|
||||||
}
|
}
|
||||||
|
if(input == 'P')
|
||||||
|
{
|
||||||
|
state = internal_state::post_O;
|
||||||
|
return osrm::tribool::indeterminate;
|
||||||
|
}
|
||||||
state = internal_state::method;
|
state = internal_state::method;
|
||||||
return osrm::tribool::indeterminate;
|
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:
|
case internal_state::method:
|
||||||
if (input == ' ')
|
if (input == ' ')
|
||||||
{
|
{
|
||||||
@ -272,7 +307,18 @@ osrm::tribool RequestParser::consume(request ¤t_request, const char input)
|
|||||||
return osrm::tribool::indeterminate;
|
return osrm::tribool::indeterminate;
|
||||||
}
|
}
|
||||||
return osrm::tribool::no;
|
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;
|
return input == '\n' ? osrm::tribool::yes : osrm::tribool::no;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,11 +80,16 @@ 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;
|
||||||
|
|
||||||
header current_header;
|
header current_header;
|
||||||
compression_type selected_compression;
|
compression_type selected_compression;
|
||||||
|
bool is_post_header;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace http
|
} // namespace http
|
||||||
|
Loading…
Reference in New Issue
Block a user