diff options
author | Robby Zambito <contact@robbyzambito.me> | 2025-04-19 22:25:52 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2025-04-19 22:26:32 -0400 |
commit | c34748dab3def4dbb1deea7240ab3d4ef17ef161 (patch) | |
tree | d137b48bc5227f936167b5d9a59313e1adc202ad | |
parent | 5b88f0df6a29958942af5977ab36e94de4eef00e (diff) |
The dest can be specified as a 4 char ASCII string, or as an IPv4 address.
-rw-r--r-- | src/Client.zig | 4 | ||||
-rw-r--r-- | src/main.zig | 22 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/Client.zig b/src/Client.zig index 8f60326..19f8360 100644 --- a/src/Client.zig +++ b/src/Client.zig @@ -39,10 +39,10 @@ fn broadcastSaprusMessage(msg: SaprusMessage, udp_port: u16, allocator: Allocato _ = try sock.sendTo(dest_addr, msg_bytes); } -pub fn sendRelay(payload: []const u8, allocator: Allocator) !void { +pub fn sendRelay(payload: []const u8, dest: [4]u8, allocator: Allocator) !void { const msg = SaprusMessage{ .relay = .{ - .header = .{ .dest = .{ 70, 70, 70, 70 } }, + .header = .{ .dest = dest }, .payload = payload, }, }; diff --git a/src/main.zig b/src/main.zig index 2b7dca2..3624fdd 100644 --- a/src/main.zig +++ b/src/main.zig @@ -23,6 +23,7 @@ pub fn main() !void { const params = comptime clap.parseParamsComptime( \\-h, --help Display this help and exit. \\-r, --relay <str> A relay message to send. + \\-d, --dest <str> An IPv4 or <= 4 ASCII byte string. \\-c, --connect <str> A connection message to send. \\ ); @@ -49,7 +50,12 @@ pub fn main() !void { } if (res.args.relay) |r| { - try SaprusClient.sendRelay(if (r.len > 0) r else "Hello darkness my old friend", gpa); + const dest = parseDest(res.args.dest) catch .{ 70, 70, 70, 70 }; + try SaprusClient.sendRelay( + if (r.len > 0) r else "Hello darkness my old friend", + dest, + gpa, + ); // std.debug.print("Sent: {s}\n", .{r}); return; } else if (res.args.connect) |c| { @@ -69,6 +75,20 @@ pub fn main() !void { return clap.help(std.io.getStdErr().writer(), clap.Help, ¶ms, .{}); } +fn parseDest(in: ?[]const u8) ![4]u8 { + if (in) |dest| { + if (dest.len <= 4) { + var res: [4]u8 = @splat(0); + @memcpy(res[0..dest.len], dest); + return res; + } + + const addr = try std.net.Ip4Address.parse(dest, 0); + return @bitCast(addr.sa.addr); + } + return .{ 70, 70, 70, 70 }; +} + const builtin = @import("builtin"); const std = @import("std"); const DebugAllocator = std.heap.DebugAllocator(.{}); |