diff --git a/src/unlocker/proxy.cpp b/src/unlocker/proxy.cpp index 3cd8ca9..32580dc 100644 --- a/src/unlocker/proxy.cpp +++ b/src/unlocker/proxy.cpp @@ -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())