feat: get status code from HttpStream and process

This commit is contained in:
2026-04-11 12:40:55 -03:00
parent c09ce8b02a
commit 785d4a3ff2
+17 -1
View File
@@ -132,6 +132,7 @@ struct HttpStream
bool isChunked = false; bool isChunked = false;
int contentLength = -1; int contentLength = -1;
size_t headersEnd = std::string::npos; size_t headersEnd = std::string::npos;
int statusCode = 0;
void reset() void reset()
{ {
@@ -139,6 +140,7 @@ struct HttpStream
isChunked = false; isChunked = false;
contentLength = -1; contentLength = -1;
headersEnd = std::string::npos; headersEnd = std::string::npos;
statusCode = 0;
} }
bool parseHeaders() bool parseHeaders()
@@ -156,6 +158,13 @@ struct HttpStream
std::string cl = getHeaderValue(headers, "Content-Length"); std::string cl = getHeaderValue(headers, "Content-Length");
contentLength = stoiSafe(cl, -1); contentLength = stoiSafe(cl, -1);
} }
if (headers.compare(0, 5, "HTTP/") == 0)
{
size_t space = headers.find(' ');
if (space != std::string::npos) statusCode = stoiSafe(headers.substr(space + 1, 3));
}
isReceivingBody = true; isReceivingBody = true;
return true; return true;
} }
@@ -480,7 +489,14 @@ void Proxy::handleClient(SOCKET clientSocket)
std::string fullBody; std::string fullBody;
size_t totalResponseSize = 0; size_t totalResponseSize = 0;
if (serverStream.isChunked) if (serverStream.statusCode == 204 || serverStream.statusCode == 304 ||
(serverStream.statusCode >= 100 && serverStream.statusCode < 200))
{
fullBody = "";
complete = true;
totalResponseSize = serverStream.headersEnd + 4;
}
else if (serverStream.isChunked)
{ {
size_t idx = serverStream.headersEnd + 4; size_t idx = serverStream.headersEnd + 4;
while (idx < serverStream.buffer.size()) while (idx < serverStream.buffer.size())