aboutsummaryrefslogtreecommitdiff
path: root/src/http/async_socket.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-02 18:07:05 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-02 18:07:05 -0800
commit1a4ccd3f5c2ef273bd5307d9c8939177bdc310cc (patch)
tree1b1634fa2d1450b87846de1d1dc572ba44d1f333 /src/http/async_socket.zig
parent68cb6130d3e4bd25a53c959db9108a68f5268298 (diff)
downloadbun-jarred/async_bio.tar.gz
bun-jarred/async_bio.tar.zst
bun-jarred/async_bio.zip
[http] Fixes to chunked transfer encoding readerjarred/async_bio
Diffstat (limited to 'src/http/async_socket.zig')
-rw-r--r--src/http/async_socket.zig40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/http/async_socket.zig b/src/http/async_socket.zig
index 062a645de..db4964fc0 100644
--- a/src/http/async_socket.zig
+++ b/src/http/async_socket.zig
@@ -252,6 +252,10 @@ const Reader = struct {
}
};
+pub inline fn bufferedReadAmount(_: *AsyncSocket) usize {
+ return 0;
+}
+
pub fn read(
this: *AsyncSocket,
bytes: []u8,
@@ -448,17 +452,19 @@ pub const SSL = struct {
if (this.pending_read_buffer.len > 0) {
reader: {
- var count: u32 = 0;
+ var count: u32 = this.pending_read_result catch unreachable;
this.pending_read_result = this.doPayloadRead(this.pending_read_buffer, &count) catch |err| brk: {
+ this.pending_read_result = count;
+
if (err == error.WouldBlock) {
- // partial reads are a success case
- // allow the client to ask for more
- if (count > 0) {
- this.pending_read_result = count;
- this.read_frame.maybeResume();
- break :reader;
- }
- this.pending_read_buffer = this.pending_read_buffer[count..];
+
+ // // partial reads are a success case
+ // // allow the client to ask for more
+ // if (count > 0) {
+ // this.read_frame.maybeResume();
+ // break :reader;
+ // }
+
break :reader;
}
break :brk err;
@@ -497,7 +503,7 @@ pub const SSL = struct {
return pending;
}
- var total_bytes_read: u32 = 0;
+ var total_bytes_read: u32 = count.*;
var ssl_ret: c_int = 0;
var ssl_err: c_int = 0;
const buf_len = @truncate(u32, buffer.len);
@@ -663,6 +669,14 @@ pub const SSL = struct {
return this.unencrypted_bytes_to_send.?.writeAll(buffer_).written;
}
+ pub fn bufferedReadAmount(this: *SSL) usize {
+ const pend = boring.SSL_pending(this.ssl);
+ return if (pend <= 0)
+ 0
+ else
+ @intCast(usize, pend);
+ }
+
pub fn send(this: *SSL) anyerror!usize {
this.unencrypted_bytes_to_send.?.sent = 0;
this.pending_write_buffer = this.unencrypted_bytes_to_send.?.buf[this.unencrypted_bytes_to_send.?.sent..this.unencrypted_bytes_to_send.?.used];
@@ -713,18 +727,18 @@ pub const SSL = struct {
pub fn read(this: *SSL, buf_: []u8, offset: u64) !u32 {
var buf = buf_[offset..];
var read_bytes: u32 = 0;
+ this.pending_read_result = 0;
return this.doPayloadRead(buf, &read_bytes) catch |err| {
if (err == error.WouldBlock) {
- this.pending_read_result = 0;
- this.pending_read_buffer = buf[read_bytes..];
+ this.pending_read_result = (this.pending_read_result catch unreachable) + read_bytes;
+ this.pending_read_buffer = buf;
suspend {
this.read_frame.set(@frame());
}
const result = this.pending_read_result;
this.pending_read_result = 0;
- this.pending_read_buffer = &[_]u8{};
return result;
}
022ae4102623c&follow=1'>Fix bugs in mask boolean valuesGravatar Jarred Sumner 2-15/+21 2022-10-21Emit errorsGravatar Jarred Sumner 2-2/+37 2022-10-21Add test for ResolveError.position being inspectableGravatar Jarred Sumner 2-0/+12 2022-10-21Fix segfault when logging position object from failed nested importGravatar Jarred Sumner 1-114/+34 2022-10-21Implement `setMaxListeners` and `getMaxListeners`Gravatar Jarred Sumner 1-1/+46 2022-10-21Fix `import Foo, {bar}` when from hardcoded builtin modules in runtimeGravatar Jarred Sumner 2-19/+34 2022-10-21Fix test failureGravatar Jarred Sumner 1-2/+3 2022-10-21Reload node:fs in developmentGravatar Jarred Sumner 1-0/+9 2022-10-21chore: remove outdated `var` usages (#1364)Gravatar Carter Snook 1-34/+34 2022-10-21Fix "/" in exampleGravatar Jarred Sumner 1-3/+10 2022-10-21Fix infinite loopGravatar Jarred Sumner 1-3/+13 2022-10-21micro-optimizeGravatar Jarred Sumner 1-7/+14 2022-10-20Update install script to use secure flagsGravatar Ashcon Partovi 2-5/+5 2022-10-20Add installation method for HomebrewGravatar Ashcon Partovi 1-0/+7 2022-10-20Fix crash in `highWaterMark`Gravatar Jarred Sumner 1-143/+144 2022-10-20Fix Bun.serve error handler error param (#1359)Gravatar zhiyuan 7-4/+37 2022-10-19Fix calling `ws.publish` inside `close` when other clients are connectedGravatar Jarred Sumner 3-28/+111 2022-10-19Cache dir loader: Prefer `$BUN_INSTALL` and `$XDG_CACHE_HOME` to `$HOME`. (#1...Gravatar Lucas Garron 1-5/+5 2022-10-19Improve issue templates (#1353)Gravatar Ashcon Partovi 8-89/+136