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