DoxigAlpha

chunkedDrain

Function parameters

Parameters

#
w:*Writer
data:[]const []const u8
splat:usize

Type definitions in this namespace

Types

#
Method
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
Status
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
TransferEncoding
compression is intentionally omitted here since it is handled in `ContentEncoding`.
BodyWriter
Request or response body.

Source

Implementation

#
pub fn chunkedDrain(w: *Writer, data: []const []const u8, splat: usize) Error!usize {
    const bw: *BodyWriter = @alignCast(@fieldParentPtr("writer", w));
    assert(!bw.isEliding());
    const out = bw.http_protocol_output;
    const data_len = w.end + Writer.countSplat(data, splat);
    l: switch (bw.state.chunk_len) {
        0 => {
            const header_buf = try out.writableArray(chunk_header_template.len);
            @memcpy(header_buf, chunk_header_template);
            writeHex(header_buf[0..chunk_len_digits], data_len);
            bw.state.chunk_len = data_len + 2;
            continue :l bw.state.chunk_len;
        },
        1 => unreachable, // Wrote more data than specified in chunk header.
        2 => {
            try out.writeAll("\r\n");
            bw.state.chunk_len = 0;
            continue :l 0;
        },
        else => {
            const n = try out.writeSplatHeaderLimit(w.buffered(), data, splat, .limited(bw.state.chunk_len - 2));
            bw.state.chunk_len -= n;
            return w.consume(n);
        },
    }
}