http_headers_done_receiving

This commit is contained in:
sjorsdonkers
2025-08-13 14:29:23 +02:00
parent f6c68e4580
commit c0106a238b
5 changed files with 101 additions and 27 deletions

View File

@@ -247,6 +247,7 @@ fn makeTransfer(self: *Client, req: Request) !*Transfer {
.req = req,
.ctx = req.ctx,
.client = self,
.notification = &self.notification,
};
return transfer;
}
@@ -549,6 +550,8 @@ pub const Transfer = struct {
_redirecting: bool = false,
notification: *?*Notification, // Points to the Client's notification. TBD if a Browser can remove the notification before all Transfers are gone.
fn deinit(self: *Transfer) void {
self.req.headers.deinit();
if (self._handle) |handle| {
@@ -673,12 +676,26 @@ pub const Transfer = struct {
// returning < buf_len terminates the request
return 0;
};
if (transfer.notification.*) |notification| { // TBD before or after callback?
notification.dispatch(.http_headers_done_receiving, &.{
.transfer = transfer,
});
}
} else {
if (transfer.req.header_callback) |cb| {
cb(transfer, header) catch |err| {
log.err(.http, "header_callback", .{ .err = err, .req = transfer });
return 0;
};
if (transfer.notification.*) |notification| { // TBD before or after callback?
if (Http.Headers.parseHeader(header)) |hdr_name_value| {
notification.dispatch(.http_header_received, &.{
.request_id = transfer.id,
.status = hdr.status,
.header = hdr_name_value,
});
} else log.err(.http, "invalid header", .{ .line = header });
}
}
}
return buf_len;