]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Split Http1::RequestParser into request-specific and generic classes
authorAmos Jeffries <squid3@treenet.co.nz>
Sat, 4 Jan 2014 14:23:17 +0000 (06:23 -0800)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 4 Jan 2014 14:23:17 +0000 (06:23 -0800)
src/client_side.cc
src/http/Http1Parser.cc
src/http/Http1Parser.h
src/tests/testHttp1Parser.cc

index cff753a68c4dd48e7ee8aa8755547c2d6a89a777..da2fa8f6ac6ef2eb50ceb324d8dc95831c94b122 100644 (file)
@@ -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");
index 90b7ec2247b71e0cbcb8cbe09148713e398c6979..d264b6b0a1c1a4e8af282515bf24bc83f46fe1de 100644 (file)
@@ -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;
index 9e9389e30865a1dde211beedbe324d8811c72f08..609f8bd5f07fc00ffc6406f7008b4e9e59f33f9f 100644 (file)
@@ -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
index 8e38503f77893fc628368d21477c19a51523d332..335c588c39a8f25b6c0789f2bc80b99c44afba5c 100644 (file)
@@ -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(),