diff options
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"); |