summaryrefslogtreecommitdiff
path: root/src/saprus.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/saprus.zig')
-rw-r--r--src/saprus.zig43
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");