Refactor HttpRequest::parseBuffer: extract parsing logic into separate methods for request line, headers, and body

This commit is contained in:
whaffman 2025-09-22 22:33:27 +02:00
parent 799cf250b7
commit 2924440e0d

View File

@ -64,25 +64,57 @@ void HttpRequest::parseBuffer()
{
while (true)
{
if (state_ == State::RequestLine)
switch (state_)
{
case State::RequestLine:
if (!parseBufferforRequestLine())
{
return; // Wait for more data
}
break;
case State::Headers:
if (!parseBufferforHeaders())
{
return; // Wait for more data
}
break;
case State::Body:
if (!parseBufferforBody())
{
return; // Wait for more data
}
break;
case State::Complete:
Log::debug("HttpRequest::parseBuffer() request is complete");
return; // Request is complete
}
}
}
bool HttpRequest::parseBufferforRequestLine()
{
Log::trace("HttpRequest::parseBufferforRequestLine() called");
size_t pos = buffer_.find("\r\n");
if (pos == std::string::npos)
{
Log::debug("HttpRequest::parseBuffer() in state RequestLine waiting for more data");
return; // Wait for more data
return false; // Wait for more data
}
requestLine_ = buffer_.substr(0, pos);
buffer_.erase(0, pos + 2);
state_ = State::Headers;
return true;
}
else if (state_ == State::Headers)
bool HttpRequest::parseBufferforHeaders()
{
Log::trace("HttpRequest::parseBufferforHeaders() called");
size_t pos = buffer_.find("\r\n\r\n");
if (pos == std::string::npos)
{
Log::debug("HttpRequest::parseBuffer() in state Headers waiting for more data");
return; // Wait for more data
return false; // Wait for more data
}
headers_ = buffer_.substr(0, pos + 2); // Include the last \r\n
buffer_.erase(0, pos + 4);
@ -96,26 +128,25 @@ void HttpRequest::parseBuffer()
{
Log::debug("HttpRequest::parseBuffer() in state Headers no body to read");
state_ = State::Complete;
return; // No body to read
return false; // No body to read
}
return true;
}
else if (state_ == State::Body)
bool HttpRequest::parseBufferforBody()
{
Log::trace("HttpRequest::parseBufferforBody() called");
if (buffer_.size() < contentLength_)
{
Log::debug("HttpRequest::parseBuffer() in state Body waiting for more data");
return; // Wait for more data
return false; // Wait for more data
}
body_ = buffer_.substr(0, contentLength_);
buffer_.erase(0, contentLength_);
state_ = State::Complete;
}
else if (state_ == State::Complete)
{
Log::debug("HttpRequest::parseBuffer() request is complete");
return; // Request is complete
}
}
return true;
}
void HttpRequest::reset()