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:
parent
eca4d511f0
commit
724ce87bd2
6 changed files with 82 additions and 77 deletions
|
@ -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| {
|
||||||
|
|
|
@ -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| {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
145
src/zap.zig
145
src/zap.zig
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue