Skip to content

Commit

Permalink
don't pollute global namespace with fio
Browse files Browse the repository at this point in the history
  • Loading branch information
renerocksai committed Jan 9, 2024
1 parent 1e1b5f5 commit 295c2f6
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 76 deletions.
2 changes: 1 addition & 1 deletion examples/bindataformpost/bindataformpost.zig
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ const Handler = struct {
defer s.deinit();
std.log.info("?terminate={s}\n", .{s.str});
if (std.mem.eql(u8, s.str, "true")) {
zap.fio_stop();
zap.stop();
}
}
} else |err| {
Expand Down
2 changes: 1 addition & 1 deletion examples/http_params/http_params.zig
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ pub fn main() !void {
if (maybe_str) |*s| {
defer s.deinit();
if (std.mem.eql(u8, s.str, "true")) {
zap.fio_stop();
zap.stop();
}
}
} else |err| {
Expand Down
6 changes: 3 additions & 3 deletions src/tests/test_auth.zig
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ fn endpoint_http_get(e: *Endpoints.Endpoint, r: zap.Request) void {
r.sendBody(HTTP_RESPONSE) catch return;
received_response = HTTP_RESPONSE;
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 {
Expand All @@ -120,7 +120,7 @@ fn endpoint_http_unauthorized(e: *Endpoints.Endpoint, r: zap.Request) void {
r.sendBody("UNAUTHORIZED ACCESS") catch return;
received_response = "UNAUTHORIZED";
std.time.sleep(1 * std.time.ns_per_s);
zap.fio_stop();
zap.stop();
}

//
Expand Down Expand Up @@ -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]});
}

zap.fio_stop();
zap.stop();
}

fn makeRequestThread(a: std.mem.Allocator, url: []const u8, auth: ?ClientAuthReqHeaderFields) !std.Thread {
Expand Down
2 changes: 1 addition & 1 deletion src/tests/test_http_params.zig
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {

try req.start();
try req.wait();
zap.fio_stop();
zap.stop();
}

fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread {
Expand Down
2 changes: 1 addition & 1 deletion src/tests/test_sendfile.zig
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {
try req.wait();
read_len = try req.readAll(&buffer);

zap.fio_stop();
zap.stop();
}

fn makeRequestThread(a: std.mem.Allocator, url: []const u8) !std.Thread {
Expand Down
143 changes: 74 additions & 69 deletions src/zap.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
// or maybe let's just make it zap directly...

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
pub const Tls = @import("tls.zig");

pub usingnamespace @import("fio.zig");
// pub usingnamespace @import("fio.zig");
pub usingnamespace @import("endpoint.zig");
pub usingnamespace @import("util.zig");
pub usingnamespace @import("http.zig");
Expand Down Expand Up @@ -975,75 +977,78 @@ pub const HttpListener = struct {
}
};

/// lower level listening, if you don't want to use a listener but rather use
/// the listen() function.
pub const ListenSettings = struct {
on_request: ?FioHttpRequestFn = null,
on_upgrade: ?FioHttpRequestFn = null,
on_response: ?FioHttpRequestFn = null,
on_finish: ?FioHttpRequestFn = null,
public_folder: ?[]const u8 = null,
max_header_size: usize = 32 * 1024,
max_body_size: usize = 50 * 1024 * 1024,
max_clients: isize = 100,
keepalive_timeout_s: u8 = 5,
log: bool = false,

const Self = @This();
/// Low-level API
pub const LowLevel = struct {
/// lower level listening, if you don't want to use a listener but rather use
/// the listen() function.
pub const ListenSettings = struct {
on_request: ?FioHttpRequestFn = null,
on_upgrade: ?FioHttpRequestFn = null,
on_response: ?FioHttpRequestFn = null,
on_finish: ?FioHttpRequestFn = null,
public_folder: ?[]const u8 = null,
max_header_size: usize = 32 * 1024,
max_body_size: usize = 50 * 1024 * 1024,
max_clients: isize = 100,
keepalive_timeout_s: u8 = 5,
log: bool = false,

const Self = @This();

/// Create settings with defaults
pub fn init() Self {
return .{};
}
};

/// Create settings with defaults
pub fn init() Self {
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;

/// 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 (settings.public_folder) |pf| {
pfolder_len = pf.len;
pfolder = pf.ptr;
}
var 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;
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;
}
/// 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;
}
};

0 comments on commit 295c2f6

Please sign in to comment.