replace boost::tribool with enum based implementation
This commit is contained in:
		
							parent
							
								
									b89304a24b
								
							
						
					
					
						commit
						fb3bc22c64
					
				| @ -66,13 +66,13 @@ void Connection::handle_read(const boost::system::error_code &error, std::size_t | |||||||
| 
 | 
 | ||||||
|     // no error detected, let's parse the request
 |     // no error detected, let's parse the request
 | ||||||
|     CompressionType compression_type(noCompression); |     CompressionType compression_type(noCompression); | ||||||
|     boost::tribool result; |     osrm::tribool result; | ||||||
|     std::tie(result, std::ignore) = |     std::tie(result, std::ignore) = | ||||||
|         RequestParser().Parse(request, incoming_data_buffer.data(), |         RequestParser().Parse(request, incoming_data_buffer.data(), | ||||||
|                               incoming_data_buffer.data() + bytes_transferred, compression_type); |                               incoming_data_buffer.data() + bytes_transferred, compression_type); | ||||||
| 
 | 
 | ||||||
|     // the request has been parsed
 |     // the request has been parsed
 | ||||||
|     if (result) |     if (result == osrm::tribool::yes) | ||||||
|     { |     { | ||||||
|         request.endpoint = TCP_socket.remote_endpoint().address(); |         request.endpoint = TCP_socket.remote_endpoint().address(); | ||||||
|         request_handler.handle_request(request, reply); |         request_handler.handle_request(request, reply); | ||||||
| @ -112,7 +112,7 @@ void Connection::handle_read(const boost::system::error_code &error, std::size_t | |||||||
|             strand.wrap(boost::bind(&Connection::handle_write, this->shared_from_this(), |             strand.wrap(boost::bind(&Connection::handle_write, this->shared_from_this(), | ||||||
|                                     boost::asio::placeholders::error))); |                                     boost::asio::placeholders::error))); | ||||||
|     } |     } | ||||||
|     else if (!result) |     else if (result == osrm::tribool::no) | ||||||
|     { // request is not parseable
 |     { // request is not parseable
 | ||||||
|         reply = Reply::StockReply(Reply::badRequest); |         reply = Reply::StockReply(Reply::badRequest); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| /*
 | /*
 | ||||||
| 
 | 
 | ||||||
| Copyright (c) 2013, Project OSRM, Dennis Luxen, others | Copyright (c) 2015, Project OSRM, Dennis Luxen, others | ||||||
| All rights reserved. | All rights reserved. | ||||||
| 
 | 
 | ||||||
| Redistribution and use in source and binary forms, with or without modification, | Redistribution and use in source and binary forms, with or without modification, | ||||||
| @ -36,22 +36,22 @@ RequestParser::RequestParser() : state_(method_start), header({"", ""}) {} | |||||||
| 
 | 
 | ||||||
| void RequestParser::Reset() { state_ = method_start; } | void RequestParser::Reset() { state_ = method_start; } | ||||||
| 
 | 
 | ||||||
| std::tuple<boost::tribool, char *> | std::tuple<osrm::tribool, char *> | ||||||
| RequestParser::Parse(Request &req, char *begin, char *end, http::CompressionType &compression_type) | RequestParser::Parse(Request &req, char *begin, char *end, http::CompressionType &compression_type) | ||||||
| { | { | ||||||
|     while (begin != end) |     while (begin != end) | ||||||
|     { |     { | ||||||
|         boost::tribool result = consume(req, *begin++, compression_type); |         osrm::tribool result = consume(req, *begin++, compression_type); | ||||||
|         if (result || !result) |         if (result == osrm::tribool::yes || result == osrm::tribool::no) | ||||||
|         { |         { | ||||||
|             return std::make_tuple(result, begin); |             return std::make_tuple(result, begin); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     boost::tribool result = boost::indeterminate; |     osrm::tribool result = osrm::tribool::indeterminate; | ||||||
|     return std::make_tuple(result, begin); |     return std::make_tuple(result, begin); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::tribool | osrm::tribool | ||||||
| RequestParser::consume(Request &req, char input, http::CompressionType &compression_type) | RequestParser::consume(Request &req, char input, http::CompressionType &compression_type) | ||||||
| { | { | ||||||
|     switch (state_) |     switch (state_) | ||||||
| @ -59,119 +59,119 @@ RequestParser::consume(Request &req, char input, http::CompressionType &compress | |||||||
|     case method_start: |     case method_start: | ||||||
|         if (!isChar(input) || isCTL(input) || isTSpecial(input)) |         if (!isChar(input) || isCTL(input) || isTSpecial(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         state_ = method; |         state_ = method; | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case method: |     case method: | ||||||
|         if (input == ' ') |         if (input == ' ') | ||||||
|         { |         { | ||||||
|             state_ = uri; |             state_ = uri; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (!isChar(input) || isCTL(input) || isTSpecial(input)) |         if (!isChar(input) || isCTL(input) || isTSpecial(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case uri_start: |     case uri_start: | ||||||
|         if (isCTL(input)) |         if (isCTL(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         state_ = uri; |         state_ = uri; | ||||||
|         req.uri.push_back(input); |         req.uri.push_back(input); | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case uri: |     case uri: | ||||||
|         if (input == ' ') |         if (input == ' ') | ||||||
|         { |         { | ||||||
|             state_ = http_version_h; |             state_ = http_version_h; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (isCTL(input)) |         if (isCTL(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         req.uri.push_back(input); |         req.uri.push_back(input); | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case http_version_h: |     case http_version_h: | ||||||
|         if (input == 'H') |         if (input == 'H') | ||||||
|         { |         { | ||||||
|             state_ = http_version_t_1; |             state_ = http_version_t_1; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_t_1: |     case http_version_t_1: | ||||||
|         if (input == 'T') |         if (input == 'T') | ||||||
|         { |         { | ||||||
|             state_ = http_version_t_2; |             state_ = http_version_t_2; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_t_2: |     case http_version_t_2: | ||||||
|         if (input == 'T') |         if (input == 'T') | ||||||
|         { |         { | ||||||
|             state_ = http_version_p; |             state_ = http_version_p; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_p: |     case http_version_p: | ||||||
|         if (input == 'P') |         if (input == 'P') | ||||||
|         { |         { | ||||||
|             state_ = http_version_slash; |             state_ = http_version_slash; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_slash: |     case http_version_slash: | ||||||
|         if (input == '/') |         if (input == '/') | ||||||
|         { |         { | ||||||
|             state_ = http_version_major_start; |             state_ = http_version_major_start; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_major_start: |     case http_version_major_start: | ||||||
|         if (isDigit(input)) |         if (isDigit(input)) | ||||||
|         { |         { | ||||||
|             state_ = http_version_major; |             state_ = http_version_major; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_major: |     case http_version_major: | ||||||
|         if (input == '.') |         if (input == '.') | ||||||
|         { |         { | ||||||
|             state_ = http_version_minor_start; |             state_ = http_version_minor_start; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (isDigit(input)) |         if (isDigit(input)) | ||||||
|         { |         { | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_minor_start: |     case http_version_minor_start: | ||||||
|         if (isDigit(input)) |         if (isDigit(input)) | ||||||
|         { |         { | ||||||
|             state_ = http_version_minor; |             state_ = http_version_minor; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case http_version_minor: |     case http_version_minor: | ||||||
|         if (input == '\r') |         if (input == '\r') | ||||||
|         { |         { | ||||||
|             state_ = expecting_newline_1; |             state_ = expecting_newline_1; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (isDigit(input)) |         if (isDigit(input)) | ||||||
|         { |         { | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case expecting_newline_1: |     case expecting_newline_1: | ||||||
|         if (input == '\n') |         if (input == '\n') | ||||||
|         { |         { | ||||||
|             state_ = header_line_start; |             state_ = header_line_start; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case header_line_start: |     case header_line_start: | ||||||
|         if (header.name == "Accept-Encoding") |         if (header.name == "Accept-Encoding") | ||||||
|         { |         { | ||||||
| @ -199,74 +199,74 @@ RequestParser::consume(Request &req, char input, http::CompressionType &compress | |||||||
|         if (input == '\r') |         if (input == '\r') | ||||||
|         { |         { | ||||||
|             state_ = expecting_newline_3; |             state_ = expecting_newline_3; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (!isChar(input) || isCTL(input) || isTSpecial(input)) |         if (!isChar(input) || isCTL(input) || isTSpecial(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         state_ = header_name; |         state_ = header_name; | ||||||
|         header.Clear(); |         header.Clear(); | ||||||
|         header.name.push_back(input); |         header.name.push_back(input); | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case header_lws: |     case header_lws: | ||||||
|         if (input == '\r') |         if (input == '\r') | ||||||
|         { |         { | ||||||
|             state_ = expecting_newline_2; |             state_ = expecting_newline_2; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (input == ' ' || input == '\t') |         if (input == ' ' || input == '\t') | ||||||
|         { |         { | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (isCTL(input)) |         if (isCTL(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         state_ = header_value; |         state_ = header_value; | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case header_name: |     case header_name: | ||||||
|         if (input == ':') |         if (input == ':') | ||||||
|         { |         { | ||||||
|             state_ = space_before_header_value; |             state_ = space_before_header_value; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (!isChar(input) || isCTL(input) || isTSpecial(input)) |         if (!isChar(input) || isCTL(input) || isTSpecial(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         header.name.push_back(input); |         header.name.push_back(input); | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case space_before_header_value: |     case space_before_header_value: | ||||||
|         if (input == ' ') |         if (input == ' ') | ||||||
|         { |         { | ||||||
|             state_ = header_value; |             state_ = header_value; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     case header_value: |     case header_value: | ||||||
|         if (input == '\r') |         if (input == '\r') | ||||||
|         { |         { | ||||||
|             state_ = expecting_newline_2; |             state_ = expecting_newline_2; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         if (isCTL(input)) |         if (isCTL(input)) | ||||||
|         { |         { | ||||||
|             return false; |             return osrm::tribool::no; | ||||||
|         } |         } | ||||||
|         header.value.push_back(input); |         header.value.push_back(input); | ||||||
|         return boost::indeterminate; |         return osrm::tribool::indeterminate; | ||||||
|     case expecting_newline_2: |     case expecting_newline_2: | ||||||
|         if (input == '\n') |         if (input == '\n') | ||||||
|         { |         { | ||||||
|             state_ = header_line_start; |             state_ = header_line_start; | ||||||
|             return boost::indeterminate; |             return osrm::tribool::indeterminate; | ||||||
|         } |         } | ||||||
|         return false; |         return osrm::tribool::no; | ||||||
|     default: // expecting_newline_3:
 |     default: // expecting_newline_3
 | ||||||
|         return (input == '\n'); |         return (input == '\n' ? osrm::tribool::yes : osrm::tribool::no); | ||||||
|         // default:
 |         // default:
 | ||||||
|         //     return false;
 |         //     return osrm::tribool::no;
 | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -31,7 +31,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||||
| #include "Http/CompressionType.h" | #include "Http/CompressionType.h" | ||||||
| #include "Http/Header.h" | #include "Http/Header.h" | ||||||
| 
 | 
 | ||||||
| #include <boost/logic/tribool.hpp> | #include "../data_structures/tribool.hpp" | ||||||
|  | 
 | ||||||
|  | // #include <boost/logic/tribool.hpp>
 | ||||||
| 
 | 
 | ||||||
| #include <tuple> | #include <tuple> | ||||||
| 
 | 
 | ||||||
| @ -46,11 +48,11 @@ class RequestParser | |||||||
|     RequestParser(); |     RequestParser(); | ||||||
|     void Reset(); |     void Reset(); | ||||||
| 
 | 
 | ||||||
|     std::tuple<boost::tribool, char *> |     std::tuple<osrm::tribool, char *> | ||||||
|     Parse(Request &req, char *begin, char *end, CompressionType &compression_type); |     Parse(Request &req, char *begin, char *end, CompressionType &compression_type); | ||||||
| 
 | 
 | ||||||
|   private: |   private: | ||||||
|     boost::tribool consume(Request &req, char input, CompressionType &compression_type); |     osrm::tribool consume(Request &req, char input, CompressionType &compression_type); | ||||||
| 
 | 
 | ||||||
|     inline bool isChar(int c); |     inline bool isChar(int c); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user