1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 15:14:08 +00:00

don't pollute global namespace with fio

This commit is contained in:
Rene Schallner 2024-01-09 11:07:07 +01:00
parent eca4d511f0
commit 724ce87bd2
6 changed files with 82 additions and 77 deletions

View file

@ -73,7 +73,7 @@ const Handler = struct {
defer s.deinit(); defer s.deinit();
std.log.info("?terminate={s}\n", .{s.str}); std.log.info("?terminate={s}\n", .{s.str});
if (std.mem.eql(u8, s.str, "true")) { if (std.mem.eql(u8, s.str, "true")) {
zap.fio_stop(); zap.stop();
} }
} }
} else |err| { } else |err| {

View file

@ -86,7 +86,7 @@ pub fn main() !void {
if (maybe_str) |*s| { if (maybe_str) |*s| {
defer s.deinit(); defer s.deinit();
if (std.mem.eql(u8, s.str, "true")) { if (std.mem.eql(u8, s.str, "true")) {
zap.fio_stop(); zap.stop();
} }
} }
} else |err| { } else |err| {

View file

@ -111,7 +111,7 @@ fn endpoint_http_get(e: *Endpoints.Endpoint, r: zap.Request) void {
r.sendBody(HTTP_RESPONSE) catch return; r.sendBody(HTTP_RESPONSE) catch return;
received_response = HTTP_RESPONSE; received_response = HTTP_RESPONSE;
std.time.sleep(1 * std.time.ns_per_s); std.time.sleep(1 * std.time.ns_per_s);
zap.fio_stop(); zap.stop();
} }
fn endpoint_http_unauthorized(e: *Endpoints.Endpoint, r: zap.Request) void { fn endpoint_http_unauthorized(e: *Endpoints.Endpoint, r: zap.Request) void {
@ -120,7 +120,7 @@ fn endpoint_http_unauthorized(e: *Endpoints.Endpoint, r: zap.Request) void {
r.sendBody("UNAUTHORIZED ACCESS") catch return; r.sendBody("UNAUTHORIZED ACCESS") catch return;
received_response = "UNAUTHORIZED"; received_response = "UNAUTHORIZED";
std.time.sleep(1 * std.time.ns_per_s); std.time.sleep(1 * std.time.ns_per_s);
zap.fio_stop(); zap.stop();
} }
// //
@ -165,7 +165,7 @@ fn makeRequest(a: std.mem.Allocator, url: []const u8, auth: ?ClientAuthReqHeader
std.debug.print("RESPONSE:\n{s}\n", .{buffer[0..len]}); std.debug.print("RESPONSE:\n{s}\n", .{buffer[0..len]});
} }
zap.fio_stop(); zap.stop();
} }
fn makeRequestThread(a: std.mem.Allocator, url: []const u8, auth: ?ClientAuthReqHeaderFields) !std.Thread { fn makeRequestThread(a: std.mem.Allocator, url: []const u8, auth: ?ClientAuthReqHeaderFields) !std.Thread {

View file

@ -15,7 +15,7 @@ fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {
try req.send(.{}); try req.send(.{});
try req.wait(); try req.wait();
zap.fio_stop(); zap.stop();
} }
fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread { fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread {

View file

@ -22,7 +22,7 @@ fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {
try req.wait(); try req.wait();
read_len = try req.readAll(&buffer); read_len = try req.readAll(&buffer);
zap.fio_stop(); zap.stop();
} }
fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread { fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread {

View file

@ -2,12 +2,14 @@
// or maybe let's just make it zap directly... // or maybe let's just make it zap directly...
const std = @import("std"); const std = @import("std");
const fio = @import("fio.zig");
/// The facilio C API. No need to use this.
pub const fio = @import("fio.zig");
/// Server-Side TLS function wrapper /// Server-Side TLS function wrapper
pub const Tls = @import("tls.zig"); pub const Tls = @import("tls.zig");
pub usingnamespace @import("fio.zig"); // pub usingnamespace @import("fio.zig");
pub usingnamespace @import("endpoint.zig"); pub usingnamespace @import("endpoint.zig");
pub usingnamespace @import("util.zig"); pub usingnamespace @import("util.zig");
pub usingnamespace @import("http.zig"); pub usingnamespace @import("http.zig");
@ -975,75 +977,78 @@ pub const HttpListener = struct {
} }
}; };
/// lower level listening, if you don't want to use a listener but rather use /// Low-level API
/// the listen() function. pub const LowLevel = struct {
pub const ListenSettings = struct { /// lower level listening, if you don't want to use a listener but rather use
on_request: ?FioHttpRequestFn = null, /// the listen() function.
on_upgrade: ?FioHttpRequestFn = null, pub const ListenSettings = struct {
on_response: ?FioHttpRequestFn = null, on_request: ?FioHttpRequestFn = null,
on_finish: ?FioHttpRequestFn = null, on_upgrade: ?FioHttpRequestFn = null,
public_folder: ?[]const u8 = null, on_response: ?FioHttpRequestFn = null,
max_header_size: usize = 32 * 1024, on_finish: ?FioHttpRequestFn = null,
max_body_size: usize = 50 * 1024 * 1024, public_folder: ?[]const u8 = null,
max_clients: isize = 100, max_header_size: usize = 32 * 1024,
keepalive_timeout_s: u8 = 5, max_body_size: usize = 50 * 1024 * 1024,
log: bool = false, max_clients: isize = 100,
keepalive_timeout_s: u8 = 5,
log: bool = false,
const Self = @This(); const Self = @This();
/// Create settings with defaults /// Create settings with defaults
pub fn init() Self { pub fn init() Self {
return .{}; return .{};
}
};
/// Low level listen function
pub fn listen(port: [*c]const u8, interface: [*c]const u8, settings: ListenSettings) ListenError!void {
var pfolder: [*c]const u8 = null;
var pfolder_len: usize = 0;
if (settings.public_folder) |pf| {
pfolder_len = pf.len;
pfolder = pf.ptr;
}
const x: fio.http_settings_s = .{
.on_request = settings.on_request,
.on_upgrade = settings.on_upgrade,
.on_response = settings.on_response,
.on_finish = settings.on_finish,
.udata = null,
.public_folder = pfolder,
.public_folder_length = pfolder_len,
.max_header_size = settings.max_header_size,
.max_body_size = settings.max_body_size,
.max_clients = settings.max_clients,
.tls = null,
.reserved1 = 0,
.reserved2 = 0,
.reserved3 = 0,
.ws_max_msg_size = settings.ws_max_msg_size,
.timeout = settings.keepalive_timeout_s,
.ws_timeout = 0,
.log = if (settings.log) 1 else 0,
.is_client = 0,
};
// TODO: BUG: without this print/sleep statement, -Drelease* loop forever
// in debug2 and debug3 of hello example
// std.debug.print("X\n", .{});
// TODO: still happening?
std.time.sleep(500 * std.time.ns_per_ms);
if (fio.http_listen(port, interface, x) == -1) {
return error.ListenError;
}
}
/// lower level sendBody
pub fn sendBody(request: [*c]fio.http_s, body: []const u8) HttpError!void {
const ret = fio.http_send_body(request, @as(
*anyopaque,
@ptrFromInt(@intFromPtr(body.ptr)),
), body.len);
debug("sendBody(): ret = {}\n", .{ret});
if (ret != -1) return error.HttpSendBody;
} }
}; };
/// Low level listen function
pub fn listen(port: [*c]const u8, interface: [*c]const u8, settings: ListenSettings) ListenError!void {
var pfolder: [*c]const u8 = null;
var pfolder_len: usize = 0;
if (settings.public_folder) |pf| {
pfolder_len = pf.len;
pfolder = pf.ptr;
}
const x: fio.http_settings_s = .{
.on_request = settings.on_request,
.on_upgrade = settings.on_upgrade,
.on_response = settings.on_response,
.on_finish = settings.on_finish,
.udata = null,
.public_folder = pfolder,
.public_folder_length = pfolder_len,
.max_header_size = settings.max_header_size,
.max_body_size = settings.max_body_size,
.max_clients = settings.max_clients,
.tls = null,
.reserved1 = 0,
.reserved2 = 0,
.reserved3 = 0,
.ws_max_msg_size = settings.ws_max_msg_size,
.timeout = settings.keepalive_timeout_s,
.ws_timeout = 0,
.log = if (settings.log) 1 else 0,
.is_client = 0,
};
// TODO: BUG: without this print/sleep statement, -Drelease* loop forever
// in debug2 and debug3 of hello example
// std.debug.print("X\n", .{});
// TODO: still happening?
std.time.sleep(500 * std.time.ns_per_ms);
if (fio.http_listen(port, interface, x) == -1) {
return error.ListenError;
}
}
/// lower level sendBody
pub fn sendBody(request: [*c]fio.http_s, body: []const u8) HttpError!void {
const ret = fio.http_send_body(request, @as(
*anyopaque,
@ptrFromInt(@intFromPtr(body.ptr)),
), body.len);
debug("sendBody(): ret = {}\n", .{ret});
if (ret != -1) return error.HttpSendBody;
}