Chunk stdin

This commit is contained in:
2026-01-24 12:29:18 -05:00
parent 3577d538b8
commit 19d4e88c33

View File

@@ -51,8 +51,7 @@ pub fn main(init: std.process.Init) !void {
if (i < args.len) { if (i < args.len) {
flags.relay = args[i]; flags.relay = args[i];
} else { } else {
std.debug.print("-r/--relay requires a string\n", .{}); flags.relay = "";
return error.InvalidArguments;
} }
}, },
.dest => { .dest => {
@@ -94,10 +93,9 @@ pub fn main(init: std.process.Init) !void {
defer client.deinit(); defer client.deinit();
if (flags.relay != null) { if (flags.relay != null) {
var chunk_writer: Writer = blk: { var chunk_writer_buf: [2048]u8 = undefined;
var buf: [2048]u8 = undefined; var chunk_writer: Writer = .fixed(&chunk_writer_buf);
break :blk .fixed(&buf); if (flags.relay.?.len > 0) {
};
var output_iter = std.mem.window(u8, flags.relay.?, SaprusClient.max_payload_len, SaprusClient.max_payload_len); var output_iter = std.mem.window(u8, flags.relay.?, SaprusClient.max_payload_len, SaprusClient.max_payload_len);
while (output_iter.next()) |chunk| { while (output_iter.next()) |chunk| {
chunk_writer.end = 0; chunk_writer.end = 0;
@@ -105,6 +103,27 @@ pub fn main(init: std.process.Init) !void {
try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest)); try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest));
try init.io.sleep(.fromMilliseconds(40), .real); try init.io.sleep(.fromMilliseconds(40), .real);
} }
} else {
var stdin_file: std.Io.File = .stdin();
var stdin_file_reader = stdin_file.reader(init.io, &.{});
var stdin_reader = &stdin_file_reader.interface;
var lim_buf: [SaprusClient.max_payload_len]u8 = undefined;
var limited = stdin_reader.limited(.limited(10 * lim_buf.len), &lim_buf);
var stdin = &limited.interface;
while (stdin.fillMore()) {
chunk_writer.end = 0;
try chunk_writer.print("{b64}", .{stdin.buffered()});
try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest));
try init.io.sleep(.fromMilliseconds(40), .real);
try stdin.discardAll(stdin.end);
} else |err| switch (err) {
error.EndOfStream => {
log.debug("end of stdin", .{});
},
else => |e| return e,
}
}
return; return;
} }