#ifndef TUNNEL_PARSER_HPP #define TUNNEL_PARSER_HPP #include #include #include #include #include "packages.hpp" namespace tunnel { class parser { public: parser(package& pack):state_(blank),package_(pack){} inline virtual ~parser() = 0; enum state { undefined = -1, blank = 0, parsing_first_line, parsing_headers, parsing_body }; template void parse(InputIterator begin, InputIterator end); protected: template void append(InputIterator begin, InputIterator end); boost::tribool parse_data(); boost::tribool parse_first_line(); boost::tribool parse_headers(){return true;}; boost::tribool parse_body(){return true;}; std::string buffer_; std::string::const_iterator current_pos_; state state_; package& package_; }; parser::~parser(){} template void parser::append(InputIterator begin, InputIterator end) { buffer_.append(begin, end); } template void parser::parse(InputIterator begin, InputIterator end) { append(begin, end); } class request_parser : public parser { public: request_parser():parser(package_){}; private: request_package package_; }; class response_parser : public parser { public: response_parser():parser(package_){}; private: response_package package_; }; } #endif