diff options
author | Robby Zambito <contact@robbyzambito.me> | 2025-04-04 22:09:06 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2025-04-06 13:08:09 -0400 |
commit | 7b07520adb0191ec70869357aab27b29ee4b94f7 (patch) | |
tree | 729b52232090cc98928a3c269b36344a55671989 /src/saprus.zig | |
parent | 448e900004053012e63078682e34b48799050794 (diff) |
Move sendRelay logic to Saprus struct
Diffstat (limited to 'src/saprus.zig')
-rw-r--r-- | src/saprus.zig | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/saprus.zig b/src/saprus.zig new file mode 100644 index 0000000..b51fae7 --- /dev/null +++ b/src/saprus.zig @@ -0,0 +1,43 @@ +pub fn init() !void { + try network.init(); +} + +pub fn deinit() void { + network.deinit(); +} + +pub fn sendRelay(payload: []const u8, allocator: std.mem.Allocator) !void { + const msg = SaprusMessage{ + .relay = .{ + .header = .{ .dest = .{ 255, 255, 255, 255 } }, + .payload = payload, + }, + }; + + const msg_bytes = try msg.toBytes(allocator); + defer allocator.free(msg_bytes); + + var sock = try network.Socket.create(.ipv4, .udp); + defer sock.close(); + + try sock.setBroadcast(true); + + // Bind to 0.0.0.0:0 + const bind_addr = network.EndPoint{ + .address = network.Address{ .ipv4 = network.Address.IPv4.any }, + .port = 0, + }; + + const dest_addr = network.EndPoint{ + .address = network.Address{ .ipv4 = network.Address.IPv4.broadcast }, + .port = 8888, + }; + + try sock.bind(bind_addr); + + _ = try sock.sendTo(dest_addr, msg_bytes); +} + +const SaprusMessage = @import("./saprus_message.zig").SaprusMessage; +const std = @import("std"); +const network = @import("network"); |