summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.zig22
1 files changed, 16 insertions, 6 deletions
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;
}