From 3577d538b893f3dda771f268bf9ea7f8acac3521 Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sat, 24 Jan 2026 11:27:07 -0500 Subject: Chunk relay input This makes it possible to chunk connection command output to a relay command to direct it somewhere like discord --- src/main.zig | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main.zig b/src/main.zig index d6d825a..8fa10e0 100644 --- a/src/main.zig +++ b/src/main.zig @@ -38,7 +38,6 @@ pub fn main(init: std.process.Init) !void { } = .{}; { - var payload_buf: [4096]u8 = undefined; var i: usize = 1; while (i < args.len) : (i += 1) { if (to_option.get(args[i])) |opt| { @@ -50,9 +49,7 @@ pub fn main(init: std.process.Init) !void { .relay => { i += 1; if (i < args.len) { - var w: Writer = .fixed(&payload_buf); - try w.printBase64(args[i]); - flags.relay = w.buffered(); + flags.relay = args[i]; } else { std.debug.print("-r/--relay requires a string\n", .{}); return error.InvalidArguments; @@ -70,7 +67,10 @@ pub fn main(init: std.process.Init) !void { .connect => { i += 1; if (i < args.len) { - var w: Writer = .fixed(&payload_buf); + var w: Writer = blk: { + var buf: [2048]u8 = undefined; + break :blk .fixed(&buf); + }; try w.printBase64(args[i]); flags.connect = w.buffered(); } else { @@ -94,7 +94,17 @@ pub fn main(init: std.process.Init) !void { defer client.deinit(); if (flags.relay != null) { - try client.sendRelay(init.io, flags.relay.?, parseDest(flags.dest)); + var chunk_writer: Writer = blk: { + var buf: [2048]u8 = undefined; + break :blk .fixed(&buf); + }; + var output_iter = std.mem.window(u8, flags.relay.?, SaprusClient.max_payload_len, SaprusClient.max_payload_len); + while (output_iter.next()) |chunk| { + chunk_writer.end = 0; + try chunk_writer.print("{b64}", .{chunk}); + try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest)); + try init.io.sleep(.fromMilliseconds(40), .real); + } return; } -- cgit