From 785d4a3ff2d1a564514996248e40c2019fa5f0d4 Mon Sep 17 00:00:00 2001 From: neru Date: Sat, 11 Apr 2026 12:40:55 -0300 Subject: [PATCH] feat: get status code from HttpStream and process --- src/unlocker/proxy.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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())