Refactor HttpRequest::parseBuffer: extract parsing logic into separate methods for request line, headers, and body
This commit is contained in:
parent
799cf250b7
commit
2924440e0d
@ -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;
|
||||
}
|
||||
else if (state_ == State::Headers)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
else if (state_ == State::Body)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user