feat: get status code from HttpStream and process
This commit is contained in:
+17
-1
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user