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 | |
parent | 448e900004053012e63078682e34b48799050794 (diff) |
Move sendRelay logic to Saprus struct
Diffstat (limited to 'src')
-rw-r--r-- | src/saprus.zig | 43 | ||||
-rw-r--r-- | src/saprus_message.zig | 4 | ||||
-rw-r--r-- | src/saprus_relay.zig | 40 |
3 files changed, 50 insertions, 37 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"); diff --git a/src/saprus_message.zig b/src/saprus_message.zig index 443bbfb..09536f0 100644 --- a/src/saprus_message.zig +++ b/src/saprus_message.zig @@ -39,8 +39,8 @@ pub const SaprusMessage = union(SaprusPacketType) { }; pub const Connection = struct { pub const Header = packed struct { - src_port: u16, - dest_port: u16, + src_port: u16, // random number > 1024 + dest_port: u16, // random number > 1024 seq_num: u32 = 0, msg_id: u32 = 0, reserved: u8 = 0, diff --git a/src/saprus_relay.zig b/src/saprus_relay.zig index 0df66e9..17ea8ea 100644 --- a/src/saprus_relay.zig +++ b/src/saprus_relay.zig @@ -13,7 +13,7 @@ pub fn main() !void { _ = dba.deinit(); }; - var gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator; + const gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator; const args = try std.process.argsAlloc(gpa); defer std.process.argsFree(gpa, args); @@ -27,38 +27,10 @@ pub fn main() !void { try message.append(' '); } - const msg = SaprusMessage{ - .relay = .{ - .header = .{ .dest = .{ 255, 255, 255, 255 } }, - .payload = if (message.items.len > 0) message.items else "Hello darkness my old friend", - }, - }; - - const msg_bytes = try msg.toBytes(gpa); - defer gpa.free(msg_bytes); - - try network.init(); - defer network.deinit(); + try Saprus.init(); + defer Saprus.deinit(); - 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); + try Saprus.sendRelay(if (message.items.len > 0) message.items else "Hello darkness my old friend", gpa); } const builtin = @import("builtin"); @@ -66,6 +38,4 @@ const std = @import("std"); const DebugAllocator = std.heap.DebugAllocator(.{}); const ArrayList = std.ArrayList; -const network = @import("network"); - -const SaprusMessage = @import("./saprus_message.zig").SaprusMessage; +const Saprus = @import("./saprus.zig"); |