diff --git a/src/app.zig b/src/app.zig index 32f78dd8..de5e3cb3 100644 --- a/src/app.zig +++ b/src/app.zig @@ -53,6 +53,7 @@ pub const App = struct { var http = try Http.init(allocator, .{ .max_concurrent_transfers = 3, + .tls_verify_host = config.tls_verify_host, }); errdefer http.deinit(); diff --git a/src/browser/page.zig b/src/browser/page.zig index c413a524..c7a1f5f4 100644 --- a/src/browser/page.zig +++ b/src/browser/page.zig @@ -317,7 +317,7 @@ pub const Page = struct { return error.JsError; } - const ms_elapsed = timer.lap() / 100_000; + const ms_elapsed = timer.lap() / 1_000_000; if (ms_elapsed > ms_remaining) { return; } diff --git a/src/http/Client.zig b/src/http/Client.zig index 3fb181bb..ed580186 100644 --- a/src/http/Client.zig +++ b/src/http/Client.zig @@ -220,7 +220,11 @@ fn perform(self: *Client, timeout_ms: c_int) !void { self.endTransfer(transfer); if (errorCheck(msg.data.result)) { - done_callback(ctx) catch |err| error_callback(ctx, err); + done_callback(ctx) catch |err| { + // transfer isn't valid at this point, don't use it. + log.err(.http, "done_callback", .{.err = err}); + error_callback(ctx, err); + }; } else |err| { error_callback(ctx, err); } @@ -350,9 +354,14 @@ const Handle = struct { try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_WRITEFUNCTION, Transfer.bodyCallback)); // tls - // try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_SSL_VERIFYHOST, @as(c_long, 0))); - // try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_SSL_VERIFYPEER, @as(c_long, 0))); - try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_CAINFO_BLOB, ca_blob)); + if (opts.tls_verify_host) { + try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_CAINFO_BLOB, ca_blob)); + } else { + // Verify peer checks that the cert is signed by a CA, verify host makes sure the + // cert contains the server name. + try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_SSL_VERIFYPEER, @as(c_long, 0))); + try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_SSL_VERIFYHOST, @as(c_long, 0))); + } // debug if (comptime Http.ENABLE_DEBUG) { @@ -423,7 +432,7 @@ pub const Transfer = struct { const handle: *Handle = @alignCast(@ptrCast(data)); var transfer = fromEasy(handle.easy) catch |err| { - log.err(.http, "retrive private info", .{ .err = err }); + log.err(.http, "get private info", .{ .err = err }); return 0; }; @@ -485,13 +494,17 @@ pub const Transfer = struct { } if (buf_len == 2) { - transfer.req.header_done_callback(transfer) catch { + transfer.req.header_done_callback(transfer) catch |err| { + log.err(.http, "header_done_callback", .{.err = err, .req = transfer}); // returning < buf_len terminates the request return 0; }; } else { if (transfer.req.header_callback) |cb| { - cb(transfer, header) catch return 0; + cb(transfer, header) catch |err| { + log.err(.http, "header_callback", .{.err = err, .req = transfer}); + return 0; + }; } } return buf_len; @@ -503,7 +516,7 @@ pub const Transfer = struct { const handle: *Handle = @alignCast(@ptrCast(data)); var transfer = fromEasy(handle.easy) catch |err| { - log.err(.http, "retrive private info", .{ .err = err }); + log.err(.http, "get private info", .{ .err = err }); return c.CURL_WRITEFUNC_ERROR; }; @@ -511,7 +524,8 @@ pub const Transfer = struct { return chunk_len; } - transfer.req.data_callback(transfer, buffer[0..chunk_len]) catch { + transfer.req.data_callback(transfer, buffer[0..chunk_len]) catch |err| { + log.err(.http, "data_callback", .{.err = err, .req = transfer}); return c.CURL_WRITEFUNC_ERROR; }; return chunk_len; diff --git a/src/http/Http.zig b/src/http/Http.zig index 4cd54dee..54332bc6 100644 --- a/src/http/Http.zig +++ b/src/http/Http.zig @@ -172,6 +172,7 @@ pub fn errorMCheck(code: c.CURLMcode) errors.Multi!void { pub const Opts = struct { timeout_ms: u31 = 0, max_redirects: u8 = 10, + tls_verify_host: bool = true, connect_timeout_ms: u31 = 5000, max_concurrent_transfers: u8 = 5, };