fix recv e2e test

This commit is contained in:
Nikolay Govorov
2026-03-25 18:18:40 +00:00
parent 649d8d1024
commit 5369d25213
2 changed files with 11 additions and 2 deletions

View File

@@ -642,6 +642,11 @@ fn makeTransfer(self: *Client, req: Request) !*Transfer {
fn makeRequest(self: *Client, conn: *http.Connection, transfer: *Transfer) anyerror!void {
{
// Reset per-response state for retries (auth challenge, queue).
const auth = transfer._auth_challenge;
transfer.reset();
transfer._auth_challenge = auth;
transfer._conn = conn;
errdefer {
transfer._conn = null;
@@ -726,7 +731,9 @@ fn perform(self: *Client, timeout_ms: c_int) anyerror!PerformStatus {
fn processOneMessage(self: *Client, msg: http.Handles.MultiMessage, transfer: *Transfer) !bool {
// Detect auth challenge from response headers.
if (msg.err == null) {
// Also check on RecvError: proxy may send 407 with headers before
// closing the connection (CONNECT tunnel not yet established).
if (msg.err == null or msg.err.? == error.RecvError) {
transfer.detectAuthChallenge(&msg.conn);
}
@@ -1127,7 +1134,8 @@ pub const Transfer = struct {
}
pub fn reset(self: *Transfer) void {
self._auth_challenge = null;
// Note: do NOT reset _auth_challenge here. It is needed by makeRequest
// to determine whether to use setProxyCredentials vs setCredentials.
self._notified_fail = false;
self.response_header = null;
self.bytes_received = 0;

View File

@@ -1027,6 +1027,7 @@ fn pageDoneCallback(ctx: *anyopaque) !void {
});
parser.parse(html);
self._parse_state = .complete;
self.documentIsComplete();
},
else => unreachable,