diff options
Diffstat (limited to 'src/deps/picohttp.zig')
-rw-r--r-- | src/deps/picohttp.zig | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/deps/picohttp.zig b/src/deps/picohttp.zig index 7b081b59f..3340793ca 100644 --- a/src/deps/picohttp.zig +++ b/src/deps/picohttp.zig @@ -106,8 +106,9 @@ pub const Response = struct { status_code: usize, status: []const u8, headers: []const Header, + bytes_read: c_int = 0, - pub fn parse(buf: []const u8, src: []Header) !Response { + pub fn parseParts(buf: []const u8, src: []Header, offset: ?*usize) !Response { var minor_version: c_int = undefined; var status_code: c_int = undefined; var status: []const u8 = undefined; @@ -122,20 +123,29 @@ pub const Response = struct { &status.len, @ptrCast([*c]c.phr_header, src.ptr), &num_headers, - 0, + offset.?.*, ); return switch (rc) { -1 => error.BadResponse, - -2 => error.ShortRead, + -2 => brk: { + offset.?.* += buf.len; + + break :brk error.ShortRead; + }, else => |bytes_read| Response{ .minor_version = @intCast(usize, minor_version), .status_code = @intCast(usize, status_code), .status = status, .headers = src[0..num_headers], + .bytes_read = bytes_read, }, }; } + + pub fn parse(buf: []const u8, src: []Header) !Response { + return try parseParts(buf, src, 0); + } }; test "pico_http: parse response" { |