feat: get status code from HttpStream and process
This commit is contained in:
+17
-1
@@ -132,6 +132,7 @@ struct HttpStream
|
||||
bool isChunked = false;
|
||||
int contentLength = -1;
|
||||
size_t headersEnd = std::string::npos;
|
||||
int statusCode = 0;
|
||||
|
||||
void reset()
|
||||
{
|
||||
@@ -139,6 +140,7 @@ struct HttpStream
|
||||
isChunked = false;
|
||||
contentLength = -1;
|
||||
headersEnd = std::string::npos;
|
||||
statusCode = 0;
|
||||
}
|
||||
|
||||
bool parseHeaders()
|
||||
@@ -156,6 +158,13 @@ struct HttpStream
|
||||
std::string cl = getHeaderValue(headers, "Content-Length");
|
||||
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;
|
||||
return true;
|
||||
}
|
||||
@@ -480,7 +489,14 @@ void Proxy::handleClient(SOCKET clientSocket)
|
||||
std::string fullBody;
|
||||
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;
|
||||
while (idx < serverStream.buffer.size())
|
||||
|
||||
Reference in New Issue
Block a user