From: Amos Jeffries Date: Sat, 4 Jan 2014 14:23:17 +0000 (-0800) Subject: Split Http1::RequestParser into request-specific and generic classes X-Git-Tag: merge-candidate-3-v1~506^2~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7322c9dd988afea34bf0d2d5bc86bded6bb70a7e;p=thirdparty%2Fsquid.git Split Http1::RequestParser into request-specific and generic classes --- diff --git a/src/client_side.cc b/src/client_side.cc index cff753a68c..da2fa8f6ac 100644 --- a/src/client_side.cc +++ b/src/client_side.cc @@ -2229,7 +2229,7 @@ parseHttpRequest(ConnStateData *csd, Http1::RequestParser &hp) /* Attempt to parse the first line; this will define where the method, url, version and header begin */ { - const bool parsedOk = hp.parseRequest(); + const bool parsedOk = hp.parse(); if (!hp.isDone()) { debugs(33, 5, "Incomplete request, waiting for end of request line"); diff --git a/src/http/Http1Parser.cc b/src/http/Http1Parser.cc index 90b7ec2247..d264b6b0a1 100644 --- a/src/http/Http1Parser.cc +++ b/src/http/Http1Parser.cc @@ -7,30 +7,37 @@ #include "SquidConfig.h" void -Http1::RequestParser::clear() +Http1::Parser::clear() { completedState_ = HTTP_PARSE_NONE; - request_parse_status = Http::scNone; buf = NULL; bufsiz = 0; parseOffset_ = 0; + msgProtocol_ = AnyP::ProtocolVersion(); + mimeHeaderBlock_.clear(); +} + +void +Http1::RequestParser::clear() +{ + Http1::Parser::clear(); + + request_parse_status = Http::scNone; req.start = req.end = -1; req.m_start = req.m_end = -1; req.u_start = req.u_end = -1; req.v_start = req.v_end = -1; - msgProtocol_ = AnyP::ProtocolVersion(); method_ = HttpRequestMethod(); - mimeHeaderBlock_.clear(); } void -Http1::RequestParser::reset(const char *aBuf, int len) +Http1::Parser::reset(const char *aBuf, int len) { clear(); // empty the state. completedState_ = HTTP_PARSE_NEW; buf = aBuf; bufsiz = len; - debugs(74, DBG_DATA, "Request parse " << Raw("buf", buf, bufsiz)); + debugs(74, DBG_DATA, "Parse " << Raw("buf", buf, bufsiz)); } /** @@ -315,7 +322,7 @@ Http1::RequestParser::parseRequestFirstLine() } bool -Http1::RequestParser::parseRequest() +Http1::RequestParser::parse() { // stage 1: locate the request-line if (completedState_ == HTTP_PARSE_NEW) { @@ -369,7 +376,7 @@ Http1::RequestParser::parseRequest() #define GET_HDR_SZ 1024 char * -Http1::RequestParser::getHeaderField(const char *name) +Http1::Parser::getHeaderField(const char *name) { LOCAL_ARRAY(char, header, GET_HDR_SZ); const char *p = NULL; diff --git a/src/http/Http1Parser.h b/src/http/Http1Parser.h index 9e9389e308..609f8bd5f0 100644 --- a/src/http/Http1Parser.h +++ b/src/http/Http1Parser.h @@ -20,28 +20,27 @@ namespace One { /** HTTP protocol parser. * - * Works on a raw character I/O buffer and tokenizes the content into - * either an error state or, an HTTP procotol request major segments: + * Works on a raw character I/O buffer and separates the content into + * either an error state or HTTP procotol major sections: * - * \item Request Line (method, URL, protocol, version) - * \item Mime header block + * \item first-line (request-line / simple-request / status-line) + * \item mime-header block */ -class RequestParser : public RefCountable +class Parser : public RefCountable { public: - RequestParser() { clear(); } + Parser() { clear(); } /** Initialize a new parser. - * Presenting it a buffer to work on and the current length of available - * data. + * Presenting it a buffer to work on and the current length of available data. * NOTE: This is *not* the buffer size, just the parse-able data length. * The parse routines may be called again later with more data. */ - RequestParser(const char *aBuf, int len) { reset(aBuf,len); }; + Parser(const char *aBuf, int len) { reset(aBuf,len); }; /// Set this parser back to a default state. /// Will DROP any reference to a buffer (does not free). - void clear(); + virtual void clear(); /// Reset the parser for use on a new buffer. void reset(const char *aBuf, int len); @@ -52,27 +51,27 @@ public: */ bool isDone() const {return completedState_==HTTP_PARSE_DONE;} - /// size in bytes of the first line (request-line) + /// size in bytes of the first line /// including CRLF terminator - int64_t firstLineSize() const {return req.end - req.start + 1;} + virtual int64_t firstLineSize() const = 0; /// size in bytes of the message headers including CRLF terminator(s) - /// but excluding request-line bytes + /// but excluding first-line bytes int64_t headerBlockSize() const {return mimeHeaderBlock_.length();} - /// size in bytes of HTTP message block, includes request-line and mime headers + /// size in bytes of HTTP message block, includes first-line and mime headers /// excludes any body/entity/payload bytes - /// excludes any garbage prefix before the request-line + /// excludes any garbage prefix before the first-line int64_t messageHeaderSize() const {return firstLineSize() + headerBlockSize();} - /// buffer containing HTTP mime headers, excluding request or status line. + /// buffer containing HTTP mime headers, excluding message first-line. const char *rawHeaderBuf() {return mimeHeaderBlock_.c_str();} - /** Attempt to parse a request. - * \return true if a valid request was parsed. - * \note Use isDone() method to determine between incomplete parse and errors. - */ - bool parseRequest(); + /// attempt to parse a message from the buffer + virtual bool parse() = 0; + + /// the protocol label for this message + const AnyP::ProtocolVersion & messageProtocol() const {return msgProtocol_;} /** * \return A pointer to a field-value of the first matching field-name, or NULL. @@ -83,8 +82,37 @@ public: const char *buf; int bufsiz; - /// the protocol label for this message - const AnyP::ProtocolVersion & messageProtocol() const {return msgProtocol_;} +protected: + /// what stage the parser is currently up to + uint8_t completedState_; + + /// what protocol label has been found in the first line + AnyP::ProtocolVersion msgProtocol_; + + /// byte offset for non-parsed region of the buffer + size_t parseOffset_; + + /// buffer holding the mime headers + SBuf mimeHeaderBlock_; +}; + +/** HTTP protocol request parser. + * + * Works on a raw character I/O buffer and tokenizes the content into + * either an error state or, an HTTP procotol request major segments: + * + * \item Request Line (method, URL, protocol, version) + * \item Mime header block + */ +class RequestParser : public Http1::Parser +{ +public: + /* Http::One::Parser API */ + RequestParser() : Parser() {} + RequestParser(const char *aBuf, int len) : Parser(aBuf, len) {} + virtual void clear(); + virtual int64_t firstLineSize() const {return req.end - req.start + 1;} + virtual bool parse(); /// the HTTP method if this is a request message const HttpRequestMethod & method() const {return method_;} @@ -109,23 +137,11 @@ private: int v_start, v_end; // version (full text) } req; - /// byte offset for non-parsed region of the buffer - size_t parseOffset_; - - /// what stage the parser is currently up to - uint8_t completedState_; - - /// what protocol label has been found in the first line - AnyP::ProtocolVersion msgProtocol_; - /// what request method has been found on the first line HttpRequestMethod method_; /// raw copy of the origina client reqeust-line URI field SBuf uri_; - - /// buffer holding the mime headers - SBuf mimeHeaderBlock_; }; } // namespace One diff --git a/src/tests/testHttp1Parser.cc b/src/tests/testHttp1Parser.cc index 8e38503f77..335c588c39 100644 --- a/src/tests/testHttp1Parser.cc +++ b/src/tests/testHttp1Parser.cc @@ -44,7 +44,7 @@ testHttp1Parser::testParseRequestLineProtocols() { input.append("GET /\r\n", 7); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -68,7 +68,7 @@ testHttp1Parser::testParseRequestLineProtocols() { input.append("POST /\r\n", 7); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -92,7 +92,7 @@ testHttp1Parser::testParseRequestLineProtocols() { input.append("GET / HTTP/1.0\r\n", 16); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -117,7 +117,7 @@ testHttp1Parser::testParseRequestLineProtocols() { input.append("GET / HTTP/1.1\r\n", 16); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -143,7 +143,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/1.2\r\n", 16); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -171,7 +171,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/10.12\r\n", 18); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); // BUG: declares true + CPPUNIT_ASSERT_EQUAL(true, output.parse()); // BUG: declares true CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -198,14 +198,14 @@ testHttp1Parser::testParseRequestLineProtocols() //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); #if USE_HTTP_VIOLATIONS - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(12, output.req.u_end); CPPUNIT_ASSERT_EQUAL(0, memcmp("/ FOO/1.0", &output.buf[output.req.u_start],(output.req.u_end-output.req.u_start+1))); CPPUNIT_ASSERT_EQUAL(AnyP::ProtocolVersion(AnyP::PROTO_HTTP,0,9), output.msgProtocol_); #else - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(4, output.req.u_end); @@ -231,7 +231,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/\n", 12); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -256,7 +256,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/.1\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -281,7 +281,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/11\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -306,7 +306,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/-999999.1\n", 21); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -331,7 +331,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/1.\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -356,7 +356,7 @@ testHttp1Parser::testParseRequestLineProtocols() input.append("GET / HTTP/1.-999999\n", 21); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scHttpVersionNotSupported, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -392,7 +392,7 @@ testHttp1Parser::testParseRequestLineStrange() input.append("GET / HTTP/1.1\r\n", 21); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -418,7 +418,7 @@ testHttp1Parser::testParseRequestLineStrange() input.append("GET /fo o/ HTTP/1.1\n", 20); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -444,7 +444,7 @@ testHttp1Parser::testParseRequestLineStrange() input.append("GET / HTTP/1.1\nboo!", 23); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -481,7 +481,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET / HTTP/1.1\n", 15); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -507,7 +507,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET / HTTP/1.1\n\n", 16); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -534,7 +534,7 @@ testHttp1Parser::testParseRequestLineTerminators() output.reset(input.content(), input.contentSize()); Config.onoff.relaxed_header_parser = 1; // Being tolerant we can ignore and elide these apparently benign CR - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -563,7 +563,7 @@ testHttp1Parser::testParseRequestLineTerminators() output.reset(input.content(), input.contentSize()); // strict mode treats these as several bare-CR in the request line which is explicitly invalid. Config.onoff.relaxed_header_parser = 0; - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -585,7 +585,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET / HTTP/1.1 \n", 16); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -609,7 +609,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET", 3); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scNone, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -627,7 +627,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET ", 4); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scNone, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -645,7 +645,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET / HT", 8); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scNone, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -663,7 +663,7 @@ testHttp1Parser::testParseRequestLineTerminators() input.append("GET / HTTP/1.1", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scNone, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -695,7 +695,7 @@ testHttp1Parser::testParseRequestLineMethods() input.append(". / HTTP/1.1\n", 13); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -721,7 +721,7 @@ testHttp1Parser::testParseRequestLineMethods() input.append("OPTIONS * HTTP/1.1\n", 19); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -747,7 +747,7 @@ testHttp1Parser::testParseRequestLineMethods() input.append("HELLOWORLD / HTTP/1.1\n", 22); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -773,7 +773,7 @@ testHttp1Parser::testParseRequestLineMethods() input.append("A\n", 2); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -794,7 +794,7 @@ testHttp1Parser::testParseRequestLineMethods() { //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -817,7 +817,7 @@ testHttp1Parser::testParseRequestLineMethods() //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); Config.onoff.relaxed_header_parser = 1; - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -845,7 +845,7 @@ testHttp1Parser::testParseRequestLineMethods() //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); Config.onoff.relaxed_header_parser = 0; - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -867,7 +867,7 @@ testHttp1Parser::testParseRequestLineMethods() input.append("\tGET / HTTP/1.1\n", 16); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -905,7 +905,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("/ HTTP/1.0\n", 11); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -931,7 +931,7 @@ testHttp1Parser::testParseRequestLineInvalid() output.reset(input.content(), input.contentSize()); // BUG: When tolerantly ignoring SP prefix this case becomes ambiguous with HTTP/0.9 simple-request) Config.onoff.relaxed_header_parser = 1; - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); // CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_NEW, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -959,7 +959,7 @@ testHttp1Parser::testParseRequestLineInvalid() output.reset(input.content(), input.contentSize()); // When tolerantly ignoring SP prefix this case becomes ambiguous with HTTP/0.9 simple-request) Config.onoff.relaxed_header_parser = 0; - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -981,7 +981,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("GET\x0B / HTTP/1.1\n", 16); //printf("TEST: %d-%d/%d '%.*s'\n", output.req.start, output.req.end, input.contentSize(), 16, input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -1008,7 +1008,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("GET\r / HTTP/1.1\r\n", 16); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1029,7 +1029,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("GET\0 / HTTP/1.1\n", 16); //printf("TEST: %d-%d/%d '%.*s'\n", output.req.start, output.req.end, input.contentSize(), 16, input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(false, output.isDone()); CPPUNIT_ASSERT_EQUAL((uint8_t)HTTP_PARSE_FIRST, output.completedState_); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); @@ -1055,7 +1055,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("GET HTTP/1.1\n", 14); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1079,7 +1079,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("GET HTTP/1.1\n", 13); //printf("TEST: '%s'\n",input.content()); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(true, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(true, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scOkay, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1103,7 +1103,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("\xB\xC\xE\xF\n", 5); //printf("TEST: binary-line\n"); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1127,7 +1127,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("\t \t \t\n", 6); //printf("TEST: mixed whitespace\n"); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1152,7 +1152,7 @@ testHttp1Parser::testParseRequestLineInvalid() input.append("\t \r \n", 6); //printf("TEST: mixed whitespace with CR\n"); output.reset(input.content(), input.contentSize()); - CPPUNIT_ASSERT_EQUAL(false, output.parseRequest()); + CPPUNIT_ASSERT_EQUAL(false, output.parse()); CPPUNIT_ASSERT_EQUAL(true, output.isDone()); CPPUNIT_ASSERT_EQUAL(Http::scBadRequest, output.request_parse_status); CPPUNIT_ASSERT_EQUAL(0, output.req.start); @@ -1190,7 +1190,7 @@ testHttp1Parser::testDripFeed() Config.onoff.relaxed_header_parser = 1; for (; hp.bufsiz <= mb.contentSize(); ++hp.bufsiz) { - bool parseResult = hp.parseRequest(); + bool parseResult = hp.parse(); #if WHEN_TEST_DEBUG_IS_NEEDED printf("%d/%d :: %d, %d, %d '%c'\n", hp.bufsiz, mb.contentSize(),