mirror of
https://git.robbyzambito.me/zaprus
synced 2026-02-04 00:14:52 +00:00
Chunk stdin
This commit is contained in:
43
src/main.zig
43
src/main.zig
@@ -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,16 +93,36 @@ 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;
|
try chunk_writer.print("{b64}", .{chunk});
|
||||||
try chunk_writer.print("{b64}", .{chunk});
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user