mirror of
https://git.robbyzambito.me/zaprus/
synced 2026-02-04 03:34:48 +00:00
Chunk stdin
This commit is contained in:
31
src/main.zig
31
src/main.zig
@@ -51,8 +51,7 @@ pub fn main(init: std.process.Init) !void {
|
||||
if (i < args.len) {
|
||||
flags.relay = args[i];
|
||||
} else {
|
||||
std.debug.print("-r/--relay requires a string\n", .{});
|
||||
return error.InvalidArguments;
|
||||
flags.relay = "";
|
||||
}
|
||||
},
|
||||
.dest => {
|
||||
@@ -94,10 +93,9 @@ pub fn main(init: std.process.Init) !void {
|
||||
defer client.deinit();
|
||||
|
||||
if (flags.relay != null) {
|
||||
var chunk_writer: Writer = blk: {
|
||||
var buf: [2048]u8 = undefined;
|
||||
break :blk .fixed(&buf);
|
||||
};
|
||||
var chunk_writer_buf: [2048]u8 = undefined;
|
||||
var chunk_writer: Writer = .fixed(&chunk_writer_buf);
|
||||
if (flags.relay.?.len > 0) {
|
||||
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;
|
||||
@@ -105,6 +103,27 @@ pub fn main(init: std.process.Init) !void {
|
||||
try client.sendRelay(init.io, chunk_writer.buffered(), parseDest(flags.dest));
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user