98 lines
2.6 KiB
C++
98 lines
2.6 KiB
C++
/*
|
|
|
|
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without modification,
|
|
are permitted provided that the following conditions are met:
|
|
|
|
Redistributions of source code must retain the above copyright notice, this list
|
|
of conditions and the following disclaimer.
|
|
Redistributions in binary form must reproduce the above copyright notice, this
|
|
list of conditions and the following disclaimer in the documentation and/or
|
|
other materials provided with the distribution.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
#ifndef REQUEST_PARSER_H
|
|
#define REQUEST_PARSER_H
|
|
|
|
#include "Http/CompressionType.h"
|
|
#include <Header.h>
|
|
|
|
#include <boost/logic/tribool.hpp>
|
|
#include <boost/tuple/tuple.hpp>
|
|
|
|
namespace http {
|
|
|
|
struct Request;
|
|
|
|
class RequestParser {
|
|
public:
|
|
RequestParser();
|
|
void Reset();
|
|
|
|
boost::tuple<boost::tribool, char*> Parse(
|
|
Request& req,
|
|
char* begin,
|
|
char* end,
|
|
CompressionType * compressionType
|
|
);
|
|
|
|
private:
|
|
boost::tribool consume(
|
|
Request& req,
|
|
char input,
|
|
CompressionType * compressionType
|
|
);
|
|
|
|
inline bool isChar(int c);
|
|
|
|
inline bool isCTL(int c);
|
|
|
|
inline bool isTSpecial(int c);
|
|
|
|
inline bool isDigit(int c);
|
|
|
|
enum state {
|
|
method_start,
|
|
method,
|
|
uri_start,
|
|
uri,
|
|
http_version_h,
|
|
http_version_t_1,
|
|
http_version_t_2,
|
|
http_version_p,
|
|
http_version_slash,
|
|
http_version_major_start,
|
|
http_version_major,
|
|
http_version_minor_start,
|
|
http_version_minor,
|
|
expecting_newline_1,
|
|
header_line_start,
|
|
header_lws,
|
|
header_name,
|
|
space_before_header_value,
|
|
header_value,
|
|
expecting_newline_2,
|
|
expecting_newline_3
|
|
} state_;
|
|
|
|
Header header;
|
|
};
|
|
|
|
} // namespace http
|
|
|
|
#endif // REQUEST_PARSER_H
|