summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Client.zig4
-rw-r--r--src/main.zig22
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, &params, .{});
}
+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(.{});