aboutsummaryrefslogtreecommitdiff
path: root/src/deps/picohttp.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/deps/picohttp.zig')
-rw-r--r--src/deps/picohttp.zig16
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" {