diff options
author | 2021-11-25 01:07:55 -0800 | |
---|---|---|
committer | 2021-12-16 19:18:51 -0800 | |
commit | 9f1946ce702e257ac85e70f17747014fdb86e62f (patch) | |
tree | 5b7d2de8471aa4c24f4a9eb34c9da456a9dc9b22 /misctools | |
parent | 32be2866f6adc9dcce9787da1494bc59c8be3df7 (diff) | |
download | bun-9f1946ce702e257ac85e70f17747014fdb86e62f.tar.gz bun-9f1946ce702e257ac85e70f17747014fdb86e62f.tar.zst bun-9f1946ce702e257ac85e70f17747014fdb86e62f.zip |
[npm install] Use BoringSSL for https:// requests
Diffstat (limited to 'misctools')
-rw-r--r-- | misctools/fetch.zig | 71 |
1 files changed, 54 insertions, 17 deletions
diff --git a/misctools/fetch.zig b/misctools/fetch.zig index e41906245..8dd1446ea 100644 --- a/misctools/fetch.zig +++ b/misctools/fetch.zig @@ -9,7 +9,8 @@ const Method = @import("../src/http/method.zig").Method; const ColonListType = @import("../src/cli/colon_list_type.zig").ColonListType; const HeadersTuple = ColonListType(string, noop_resolver); const path_handler = @import("../src/resolver/resolve_path.zig"); - +const NetworkThread = @import("../src/http/network_thread.zig"); +const HTTP = @import("../src/http/http_client_async.zig"); fn noop_resolver(in: string) !string { return in; } @@ -162,24 +163,60 @@ pub fn main() anyerror!void { defer Output.flush(); var args = try Arguments.parse(default_allocator); - var client = HTTPClient.init(default_allocator, args.method, args.url, args.headers, args.headers_buf); - client.verbose = args.verbose; - client.disable_shutdown = args.turbo; var body_out_str = try MutableString.init(default_allocator, 1024); - var response = try client.send(args.body, &body_out_str); - - switch (response.status_code) { - 200, 302 => {}, - else => { - if (!client.verbose) { - Output.prettyErrorln("{}", .{response}); + var body_in_str = try MutableString.init(default_allocator, args.body.len); + body_in_str.appendAssumeCapacity(args.body); + var channel = try default_allocator.create(HTTP.HTTPChannel); + channel.* = HTTP.HTTPChannel.init(); + + var response_body_string = try default_allocator.create(MutableString); + response_body_string.* = body_out_str; + var request_body_string = try default_allocator.create(MutableString); + request_body_string.* = body_in_str; + + try channel.buffer.ensureCapacity(1); + + try NetworkThread.init(); + + var async_http = try default_allocator.create(HTTP.AsyncHTTP); + async_http.* = try HTTP.AsyncHTTP.init( + default_allocator, + args.method, + args.url, + args.headers, + args.headers_buf, + request_body_string, + response_body_string, + 0, + ); + async_http.client.verbose = args.verbose; + async_http.verbose = args.verbose; + async_http.channel = channel; + async_http.schedule(default_allocator); + + while (true) { + while (channel.tryReadItem() catch null) |http| { + var response = http.response orelse { + Output.printErrorln("<r><red>error<r><d>:<r> <b>HTTP response missing<r>", .{}); + Output.flush(); + std.os.exit(1); + }; + + switch (response.status_code) { + 200, 302 => {}, + else => { + if (args.verbose) { + Output.prettyErrorln("{}", .{response}); + } + }, } - }, - } - Output.flush(); - Output.disableBuffering(); - try Output.writer().writeAll(body_out_str.list.items); - Output.enableBuffering(); + Output.flush(); + Output.disableBuffering(); + try Output.writer().writeAll(response_body_string.list.items); + Output.enableBuffering(); + return; + } + } } |