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
|
||||
CompressionType compression_type(noCompression);
|
||||
boost::tribool result;
|
||||
osrm::tribool result;
|
||||
std::tie(result, std::ignore) =
|
||||
RequestParser().Parse(request, incoming_data_buffer.data(),
|
||||
incoming_data_buffer.data() + bytes_transferred, compression_type);
|
||||
|
||||
// the request has been parsed
|
||||
if (result)
|
||||
if (result == osrm::tribool::yes)
|
||||
{
|
||||
request.endpoint = TCP_socket.remote_endpoint().address();
|
||||
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(),
|
||||
boost::asio::placeholders::error)));
|
||||
}
|
||||
else if (!result)
|
||||
else if (result == osrm::tribool::no)
|
||||
{ // request is not parseable
|
||||
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.
|
||||
|
||||
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; }
|
||||
|
||||
std::tuple<boost::tribool, char *>
|
||||
std::tuple<osrm::tribool, char *>
|
||||
RequestParser::Parse(Request &req, char *begin, char *end, http::CompressionType &compression_type)
|
||||
{
|
||||
while (begin != end)
|
||||
{
|
||||
boost::tribool result = consume(req, *begin++, compression_type);
|
||||
if (result || !result)
|
||||
osrm::tribool result = consume(req, *begin++, compression_type);
|
||||
if (result == osrm::tribool::yes || result == osrm::tribool::no)
|
||||
{
|
||||
return std::make_tuple(result, begin);
|
||||
}
|
||||
}
|
||||
boost::tribool result = boost::indeterminate;
|
||||
osrm::tribool result = osrm::tribool::indeterminate;
|
||||
return std::make_tuple(result, begin);
|
||||
}
|
||||
|
||||
boost::tribool
|
||||
osrm::tribool
|
||||
RequestParser::consume(Request &req, char input, http::CompressionType &compression_type)
|
||||
{
|
||||
switch (state_)
|
||||
@ -59,119 +59,119 @@ RequestParser::consume(Request &req, char input, http::CompressionType &compress
|
||||
case method_start:
|
||||
if (!isChar(input) || isCTL(input) || isTSpecial(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
state_ = method;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case method:
|
||||
if (input == ' ')
|
||||
{
|
||||
state_ = uri;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (!isChar(input) || isCTL(input) || isTSpecial(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case uri_start:
|
||||
if (isCTL(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
state_ = uri;
|
||||
req.uri.push_back(input);
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case uri:
|
||||
if (input == ' ')
|
||||
{
|
||||
state_ = http_version_h;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (isCTL(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
req.uri.push_back(input);
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case http_version_h:
|
||||
if (input == 'H')
|
||||
{
|
||||
state_ = http_version_t_1;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_t_1:
|
||||
if (input == 'T')
|
||||
{
|
||||
state_ = http_version_t_2;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_t_2:
|
||||
if (input == 'T')
|
||||
{
|
||||
state_ = http_version_p;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_p:
|
||||
if (input == 'P')
|
||||
{
|
||||
state_ = http_version_slash;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_slash:
|
||||
if (input == '/')
|
||||
{
|
||||
state_ = http_version_major_start;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_major_start:
|
||||
if (isDigit(input))
|
||||
{
|
||||
state_ = http_version_major;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_major:
|
||||
if (input == '.')
|
||||
{
|
||||
state_ = http_version_minor_start;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (isDigit(input))
|
||||
{
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_minor_start:
|
||||
if (isDigit(input))
|
||||
{
|
||||
state_ = http_version_minor;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case http_version_minor:
|
||||
if (input == '\r')
|
||||
{
|
||||
state_ = expecting_newline_1;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (isDigit(input))
|
||||
{
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case expecting_newline_1:
|
||||
if (input == '\n')
|
||||
{
|
||||
state_ = header_line_start;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case header_line_start:
|
||||
if (header.name == "Accept-Encoding")
|
||||
{
|
||||
@ -199,74 +199,74 @@ RequestParser::consume(Request &req, char input, http::CompressionType &compress
|
||||
if (input == '\r')
|
||||
{
|
||||
state_ = expecting_newline_3;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (!isChar(input) || isCTL(input) || isTSpecial(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
state_ = header_name;
|
||||
header.Clear();
|
||||
header.name.push_back(input);
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case header_lws:
|
||||
if (input == '\r')
|
||||
{
|
||||
state_ = expecting_newline_2;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (input == ' ' || input == '\t')
|
||||
{
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (isCTL(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
state_ = header_value;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case header_name:
|
||||
if (input == ':')
|
||||
{
|
||||
state_ = space_before_header_value;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (!isChar(input) || isCTL(input) || isTSpecial(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
header.name.push_back(input);
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case space_before_header_value:
|
||||
if (input == ' ')
|
||||
{
|
||||
state_ = header_value;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
case header_value:
|
||||
if (input == '\r')
|
||||
{
|
||||
state_ = expecting_newline_2;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
if (isCTL(input))
|
||||
{
|
||||
return false;
|
||||
return osrm::tribool::no;
|
||||
}
|
||||
header.value.push_back(input);
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
case expecting_newline_2:
|
||||
if (input == '\n')
|
||||
{
|
||||
state_ = header_line_start;
|
||||
return boost::indeterminate;
|
||||
return osrm::tribool::indeterminate;
|
||||
}
|
||||
return false;
|
||||
default: // expecting_newline_3:
|
||||
return (input == '\n');
|
||||
return osrm::tribool::no;
|
||||
default: // expecting_newline_3
|
||||
return (input == '\n' ? osrm::tribool::yes : osrm::tribool::no);
|
||||
// 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/Header.h"
|
||||
|
||||
#include <boost/logic/tribool.hpp>
|
||||
#include "../data_structures/tribool.hpp"
|
||||
|
||||
// #include <boost/logic/tribool.hpp>
|
||||
|
||||
#include <tuple>
|
||||
|
||||
@ -46,11 +48,11 @@ class RequestParser
|
||||
RequestParser();
|
||||
void Reset();
|
||||
|
||||
std::tuple<boost::tribool, char *>
|
||||
std::tuple<osrm::tribool, char *>
|
||||
Parse(Request &req, char *begin, char *end, CompressionType &compression_type);
|
||||
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user