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 { 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; transfer._conn = conn;
errdefer { errdefer {
transfer._conn = null; 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 { fn processOneMessage(self: *Client, msg: http.Handles.MultiMessage, transfer: *Transfer) !bool {
// Detect auth challenge from response headers. // 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); transfer.detectAuthChallenge(&msg.conn);
} }
@@ -1127,7 +1134,8 @@ pub const Transfer = struct {
} }
pub fn reset(self: *Transfer) void { 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._notified_fail = false;
self.response_header = null; self.response_header = null;
self.bytes_received = 0; self.bytes_received = 0;

View File

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