Chunk relay input

This makes it possible to chunk connection command output to a relay
command to direct it somewhere like discord
This commit is contained in:
2026-01-24 11:27:07 -05:00
parent fc9c5bcd5d
commit 3577d538b8

View File

@@ -38,7 +38,6 @@ pub fn main(init: std.process.Init) !void {
} = .{}; } = .{};
{ {
var payload_buf: [4096]u8 = undefined;
var i: usize = 1; var i: usize = 1;
while (i < args.len) : (i += 1) { while (i < args.len) : (i += 1) {
if (to_option.get(args[i])) |opt| { if (to_option.get(args[i])) |opt| {
@@ -50,9 +49,7 @@ pub fn main(init: std.process.Init) !void {
.relay => { .relay => {
i += 1; i += 1;
if (i < args.len) { if (i < args.len) {
var w: Writer = .fixed(&payload_buf); flags.relay = args[i];
try w.printBase64(args[i]);
flags.relay = w.buffered();
} else { } else {
std.debug.print("-r/--relay requires a string\n", .{}); std.debug.print("-r/--relay requires a string\n", .{});
return error.InvalidArguments; return error.InvalidArguments;
@@ -70,7 +67,10 @@ pub fn main(init: std.process.Init) !void {
.connect => { .connect => {
i += 1; i += 1;
if (i < args.len) { 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]); try w.printBase64(args[i]);
flags.connect = w.buffered(); flags.connect = w.buffered();
} else { } else {
@@ -94,7 +94,17 @@ pub fn main(init: std.process.Init) !void {
defer client.deinit(); defer client.deinit();
if (flags.relay != null) { 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; return;
} }