aboutsummaryrefslogtreecommitdiff
path: root/misctools
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-11-25 01:07:55 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 19:18:51 -0800
commit9f1946ce702e257ac85e70f17747014fdb86e62f (patch)
tree5b7d2de8471aa4c24f4a9eb34c9da456a9dc9b22 /misctools
parent32be2866f6adc9dcce9787da1494bc59c8be3df7 (diff)
downloadbun-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.zig71
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;
+ }
+ }
}