Skip to content

Commit 90cc624

Browse files
authored
feat: switch to secsock
Switch to SecSock
2 parents 550f44b + 9b00f9b commit 90cc624

File tree

30 files changed

+275
-1177
lines changed

30 files changed

+275
-1177
lines changed

.github/workflows/build.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
name: build
22
on:
3-
push:
43
pull_request:
54
branches: [ main ]
5+
push:
6+
branches: [ main ]
7+
workflow_dispatch:
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
612

713
jobs:
814
build-examples:
@@ -16,7 +22,7 @@ jobs:
1622
- uses: actions/checkout@v2
1723
- uses: goto-bus-stop/setup-zig@v2
1824
with:
19-
version: 0.13.0
25+
version: 0.14.0
2026
- name: Build all examples
2127
run: zig build
2228

@@ -32,6 +38,6 @@ jobs:
3238
- uses: actions/checkout@v2
3339
- uses: goto-bus-stop/setup-zig@v2
3440
with:
35-
version: 0.13.0
41+
version: 0.14.0
3642
- name: Build all examples
3743
run: zig build test --summary all

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44

55
## Installing
6-
Latest Zig Stable: `0.13.0`
6+
Compatible Zig Version: `0.14.0`
77

8-
Latest zzz release: `0.2.0`
8+
Compatible [tardy](https://github.com/tardy-org/tardy) Version: `v0.3.0`
9+
10+
Latest Release: `0.3.0`
911
```
10-
zig fetch --save git+https://github.com/tardy-org/zzz#v0.2.0
12+
zig fetch --save git+https://github.com/tardy-org/zzz#v0.3.0
1113
```
1214

1315
You can then add the dependency in your `build.zig` file:
@@ -21,7 +23,7 @@ exe.root_module.addImport(zzz);
2123
```
2224

2325
## zzz?
24-
zzz is a framework for writing performant and reliable networked services in Zig. It supports both HTTP and HTTPS (using BearSSL for TLS).
26+
zzz is a framework for writing performant and reliable networked services in Zig. It supports both HTTP and HTTPS.
2527

2628
zzz currently supports Linux, Mac and Windows. Linux is currently the recommended target for deployments.
2729

@@ -60,7 +62,7 @@ zzz can be configured to utilize minimal memory while remaining performant. The
6062
- `poll` for Linux, Mac and Windows.
6163
- Layered Router, including Middleware
6264
- Single and Multithreaded Support
63-
- TLS using BearSSL
65+
- TLS using [secsock](https://github.com/tardy-org/secsock)
6466
- Memory Pooling for minimal allocations
6567

6668
## Contribution

build.zig

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@ pub fn build(b: *std.Build) void {
1717

1818
zzz.addImport("tardy", tardy);
1919

20-
const bearssl = b.dependency("bearssl", .{
20+
const secsock = b.dependency("secsock", .{
2121
.target = target,
2222
.optimize = optimize,
23-
// Without this, you get an illegal instruction error on certain paths.
24-
// This makes it slightly slower but prevents faults.
25-
.BR_LE_UNALIGNED = false,
26-
.BR_BE_UNALIGNED = false,
27-
}).artifact("bearssl");
23+
}).module("secsock");
2824

29-
zzz.linkLibrary(bearssl);
25+
zzz.addImport("secsock", secsock);
3026

3127
add_example(b, "basic", false, target, optimize, zzz);
3228
add_example(b, "cookies", false, target, optimize, zzz);
@@ -45,7 +41,7 @@ pub fn build(b: *std.Build) void {
4541
.root_source_file = b.path("./src/tests.zig"),
4642
});
4743
tests.root_module.addImport("tardy", tardy);
48-
tests.root_module.linkLibrary(bearssl);
44+
tests.root_module.addImport("secsock", secsock);
4945

5046
const run_test = b.addRunArtifact(tests);
5147
run_test.step.dependOn(&tests.step);

build.zig.zon

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
.{
2-
.name = "zzz",
2+
.name = .zzz,
3+
.fingerprint = 0xc3273dca261a7ae0,
34
.version = "0.3.0",
4-
.minimum_zig_version = "0.13.0",
5+
.minimum_zig_version = "0.14.0",
56
.dependencies = .{
67
.tardy = .{
7-
.url = "git+https://github.com/mookums/tardy#084f5e04b333a68c6b3c433de241f3dcc368b84b",
8-
.hash = "1220960cc794c77b2b1fcab1de6fcf37c6c9571433473541007a0a9258dd7f4f8c0b",
8+
.url = "git+https://github.com/tardy-org/tardy?ref=v0.3.0#cd454060f3b6006368d53c05ab96cd16c73c34de",
9+
.hash = "tardy-0.3.0-69wrgi7PAwDFhO7m0aXae6N15s2b28VIOrnRrSHHake6",
910
},
10-
.bearssl = .{
11-
.url = "git+https://github.com/mookums/bearssl-zig#37a96eee56fe2543579bbc6da148ca886f3dd32b",
12-
.hash = "12200e89d16612100a2f145cfa292537ac25b2205735fc1c644c799d2995f94e8e20",
11+
.secsock = .{
12+
.url = "git+https://github.com/tardy-org/secsock?ref=v0.1.0#263dcd630e32c7a5c7a0522a8d1fd04e39b75c24",
13+
.hash = "secsock-0.0.0-p0qurf09AQD95s1NQF2MGpBqMmFz7cKZWibsgv_SQBAr",
1314
},
1415
},
1516

docs/getting_started.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ const Context = http.Context;
2727
const Route = http.Route;
2828
const Respond = http.Respond;
2929
30-
fn base_handler(_: *const Context, _: void) !Respond {
31-
return Respond{ .standard = .{
30+
fn base_handler(ctx: *const Context, _: void) !Respond {
31+
return ctx.response.apply(.{
3232
.status = .OK,
3333
.mime = http.Mime.HTML,
3434
.body = "Hello, world!",
35-
} };
35+
});
3636
}
3737
3838
pub fn main() !void {
@@ -43,19 +43,18 @@ pub fn main() !void {
4343
const allocator = gpa.allocator();
4444
defer _ = gpa.deinit();
4545
46-
var t = try Tardy.init(allocator, .{ .threading = .single });
46+
var t = try Tardy.init(allocator, .{ .threading = .auto });
4747
defer t.deinit();
4848
4949
var router = try Router.init(allocator, &.{
5050
Route.init("/").get({}, base_handler).layer(),
5151
}, .{});
5252
defer router.deinit(allocator);
5353
54-
// create socket for tardy
5554
var socket = try Socket.init(.{ .tcp = .{ .host = host, .port = port } });
5655
defer socket.close_blocking();
5756
try socket.bind();
58-
try socket.listen(256);
57+
try socket.listen(4096);
5958
6059
const EntryParams = struct {
6160
router: *const Router,
@@ -66,13 +65,13 @@ pub fn main() !void {
6665
EntryParams{ .router = &router, .socket = socket },
6766
struct {
6867
fn entry(rt: *Runtime, p: EntryParams) !void {
69-
var server = Server.init(rt.allocator, .{
68+
var server = Server.init(.{
7069
.stack_size = 1024 * 1024 * 4,
7170
.socket_buffer_bytes = 1024 * 2,
7271
.keepalive_count_max = null,
73-
.connection_count_max = 10,
72+
.connection_count_max = 1024,
7473
});
75-
try server.serve(rt, p.router, p.socket);
74+
try server.serve(rt, p.router, .{ .normal = p.socket });
7675
}
7776
}.entry,
7877
);

docs/https.md

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# HTTPS
2-
zzz utilizes [BearSSL](https://bearssl.org/) to provide a safe and performant TLS implementation. This TLS functionality is entirely separated from the I/O for maximum portability.
2+
zzz utilizes [secsock](https://github.com/tardy-org/secsock) to provide a safe and performant TLS implementation. This TLS functionality is entirely separated from the I/O for maximum portability.
33

44
*Note: TLS Support is not **entirely** complete yet. It's a very rough area that will be getting cleaned up in a future development cycle*
55

@@ -23,7 +23,10 @@ const Route = http.Route;
2323
const Router = http.Router;
2424
const Respond = http.Respond;
2525
26-
fn root_handler(_: *const Context, _: void) !Respond {
26+
const secsock = zzz.secsock;
27+
const SecureSocket = secsock.SecureSocket;
28+
29+
fn root_handler(ctx: *const Context, _: void) !Respond {
2730
const body =
2831
\\ <!DOCTYPE html>
2932
\\ <html>
@@ -36,32 +39,26 @@ fn root_handler(_: *const Context, _: void) !Respond {
3639
\\ </html>
3740
;
3841
39-
return Respond{ .standard = .{
42+
return ctx.response.apply(.{
4043
.status = .OK,
4144
.mime = http.Mime.HTML,
4245
.body = body[0..],
43-
} };
46+
});
4447
}
4548
4649
pub fn main() !void {
4750
const host: []const u8 = "0.0.0.0";
4851
const port: u16 = 9862;
4952
50-
var gpa = std.heap.GeneralPurposeAllocator(
51-
.{ .thread_safe = true },
52-
){ .backing_allocator = std.heap.c_allocator };
53+
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
5354
const allocator = gpa.allocator();
5455
defer _ = gpa.deinit();
5556
56-
var t = try Tardy.init(allocator, .{ .threading = .single });
57+
var t = try Tardy.init(allocator, .{ .threading = .auto });
5758
defer t.deinit();
5859
5960
var router = try Router.init(allocator, &.{
6061
Route.init("/").get({}, root_handler).layer(),
61-
Route.init("/embed/pico.min.css").embed_file(
62-
.{ .mime = http.Mime.CSS },
63-
@embedFile("embed/pico.min.css"),
64-
).layer(),
6562
}, .{});
6663
defer router.deinit(allocator);
6764
@@ -71,25 +68,27 @@ pub fn main() !void {
7168
try socket.bind();
7269
try socket.listen(1024);
7370
71+
var bearssl = secsock.BearSSL.init(allocator);
72+
defer bearssl.deinit();
73+
try bearssl.add_cert_chain(
74+
"CERTIFICATE",
75+
@embedFile("certs/cert.pem"),
76+
"EC PRIVATE KEY",
77+
@embedFile("certs/key.pem"),
78+
);
79+
const secure = try bearssl.to_secure_socket(socket, .server);
80+
7481
const EntryParams = struct {
7582
router: *const Router,
76-
socket: Socket,
83+
socket: SecureSocket,
7784
};
7885
7986
try t.entry(
80-
EntryParams{ .router = &router, .socket = socket },
87+
EntryParams{ .router = &router, .socket = secure },
8188
struct {
8289
fn entry(rt: *Runtime, p: EntryParams) !void {
83-
var server = Server.init(rt.allocator, .{
84-
.security = .{ .tls = .{
85-
.cert = .{ .file = .{ .path = "./examples/tls/certs/cert.pem" } },
86-
.key = .{ .file = .{ .path = "./examples/tls/certs/key.pem" } },
87-
.cert_name = "CERTIFICATE",
88-
.key_name = "EC PRIVATE KEY",
89-
} },
90-
.stack_size = 1024 * 1024 * 8,
91-
});
92-
try server.serve(rt, p.router, p.socket);
90+
var server = Server.init(.{ .stack_size = 1024 * 1024 * 8 });
91+
try server.serve(rt, p.router, .{ .secure = p.socket });
9392
}
9493
}.entry,
9594
);

examples/basic/main.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ pub fn main() !void {
5454
EntryParams{ .router = &router, .socket = socket },
5555
struct {
5656
fn entry(rt: *Runtime, p: EntryParams) !void {
57-
var server = Server.init(rt.allocator, .{
57+
var server = Server.init(.{
5858
.stack_size = 1024 * 1024 * 4,
5959
.socket_buffer_bytes = 1024 * 2,
6060
.keepalive_count_max = null,
6161
.connection_count_max = 1024,
6262
});
63-
try server.serve(rt, p.router, p.socket);
63+
try server.serve(rt, p.router, .{ .normal = p.socket });
6464
}
6565
}.entry,
6666
);

examples/cookies/main.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ pub fn main() !void {
6363
EntryParams{ .router = &router, .socket = socket },
6464
struct {
6565
fn entry(rt: *Runtime, p: EntryParams) !void {
66-
var server = Server.init(rt.allocator, .{
66+
var server = Server.init(.{
6767
.stack_size = 1024 * 1024 * 4,
6868
.socket_buffer_bytes = 1024 * 2,
6969
.keepalive_count_max = null,
7070
.connection_count_max = 10,
7171
});
72-
try server.serve(rt, p.router, p.socket);
72+
try server.serve(rt, p.router, .{ .normal = p.socket });
7373
}
7474
}.entry,
7575
);

examples/form/main.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ pub fn main() !void {
107107
EntryParams{ .router = &router, .socket = socket },
108108
struct {
109109
fn entry(rt: *Runtime, p: EntryParams) !void {
110-
var server = Server.init(rt.allocator, .{
110+
var server = Server.init(.{
111111
.stack_size = 1024 * 1024 * 4,
112112
.socket_buffer_bytes = 1024 * 2,
113113
});
114-
try server.serve(rt, p.router, p.socket);
114+
try server.serve(rt, p.router, .{ .normal = p.socket });
115115
}
116116
}.entry,
117117
);

examples/fs/main.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ pub fn main() !void {
7272
EntryParams{ .router = &router, .socket = socket },
7373
struct {
7474
fn entry(rt: *Runtime, p: EntryParams) !void {
75-
var server = Server.init(rt.allocator, .{
75+
var server = Server.init(.{
7676
.stack_size = 1024 * 1024 * 4,
7777
.socket_buffer_bytes = 1024 * 4,
7878
});
79-
try server.serve(rt, p.router, p.socket);
79+
try server.serve(rt, p.router, .{ .normal = p.socket });
8080
}
8181
}.entry,
8282
);

0 commit comments

Comments
 (0)