aboutsummaryrefslogtreecommitdiff
path: root/misctools/fetch.zig
diff options
context:
space:
mode:
Diffstat (limited to 'misctools/fetch.zig')
-rw-r--r--misctools/fetch.zig79
1 files changed, 61 insertions, 18 deletions
diff --git a/misctools/fetch.zig b/misctools/fetch.zig
index 59bd3320a..776ac3950 100644
--- a/misctools/fetch.zig
+++ b/misctools/fetch.zig
@@ -2,14 +2,14 @@ const std = @import("std");
usingnamespace @import("../src/global.zig");
const clap = @import("../src/deps/zig-clap/clap.zig");
-const HTTPClient = @import("../src/http_client.zig");
const URL = @import("../src/query_string_map.zig").URL;
const Headers = @import("../src/javascript/jsc/webcore/response.zig").Headers;
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("network_thread");
+const HTTP = @import("http");
fn noop_resolver(in: string) !string {
return in;
}
@@ -162,24 +162,67 @@ 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 ctx = try default_allocator.create(HTTP.HTTPChannelContext);
+ ctx.* = .{
+ .channel = channel,
+ .http = try HTTP.AsyncHTTP.init(
+ default_allocator,
+ args.method,
+ args.url,
+ args.headers,
+ args.headers_buf,
+ response_body_string,
+ request_body_string,
+
+ 0,
+ ),
+ };
+ ctx.http.callback = HTTP.HTTPChannelContext.callback;
+ var batch = NetworkThread.Batch{};
+ ctx.http.schedule(default_allocator, &batch);
+ ctx.http.client.verbose = args.verbose;
+
+ ctx.http.verbose = args.verbose;
+ NetworkThread.global.pool.schedule(batch);
+
+ 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;
+ }
+ }
}