From 433a97fe5a973157f9cd9f62f0a62ad1a951b0c9 Mon Sep 17 00:00:00 2001 From: Robby Zambito <contact@robbyzambito.me> Date: Sat, 5 Apr 2025 17:37:24 -0400 Subject: Move binary back to zaprus Also clean up the args for the aux functions by computing the type instead of passing it --- src/main.zig | 43 +++++++++++++++++++++++++++++++++++++++++++ src/saprus.zig | 4 ---- src/saprus_message.zig | 18 +++++++++--------- src/saprus_relay.zig | 43 ------------------------------------------- 4 files changed, 52 insertions(+), 56 deletions(-) create mode 100644 src/main.zig delete mode 100644 src/saprus_relay.zig (limited to 'src') diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..f43f2bd --- /dev/null +++ b/src/main.zig @@ -0,0 +1,43 @@ +const is_debug = builtin.mode == .Debug; + +/// This creates a debug allocator that can only be referenced in debug mode. +/// You should check for is_debug around every reference to dba. +var dba: DebugAllocator = + if (is_debug) + DebugAllocator.init + else + @compileError("Should not use debug allocator in release mode"); + +pub fn main() !void { + defer if (is_debug) { + _ = dba.deinit(); + }; + + const gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator; + + const args = try std.process.argsAlloc(gpa); + defer std.process.argsFree(gpa, args); + + var message = ArrayList(u8).init(gpa); + defer message.deinit(); + + for (args[1..], 0..) |arg, i| { + try message.appendSlice(arg); + if (i < args.len - 1) + try message.append(' '); + } + + try Saprus.init(); + defer Saprus.deinit(); + + try Saprus.sendInitialConnection(if (message.items.len > 0) message.items else "Hello darkness my old friend", 6868, gpa); + + // try Saprus.sendRelay(if (message.items.len > 0) message.items else "Hello darkness my old friend", gpa); +} + +const builtin = @import("builtin"); +const std = @import("std"); +const DebugAllocator = std.heap.DebugAllocator(.{}); +const ArrayList = std.ArrayList; + +const Saprus = @import("./saprus.zig"); diff --git a/src/saprus.zig b/src/saprus.zig index e7ea951..fce3dc7 100644 --- a/src/saprus.zig +++ b/src/saprus.zig @@ -51,10 +51,6 @@ pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: .seq_num = 1, .msg_id = 2, .reserved = 5, - // .options = .{ - // .opt2 = true, - // .opt8 = true, - // }, }, .payload = payload, }, diff --git a/src/saprus_message.zig b/src/saprus_message.zig index 495b741..1f7f819 100644 --- a/src/saprus_message.zig +++ b/src/saprus_message.zig @@ -64,12 +64,12 @@ pub const SaprusMessage = union(SaprusPacketType) { } fn toBytesAux( - Header: type, - header: Header, + header: anytype, payload: []const u8, buf: *std.ArrayList(u8), allocator: Allocator, ) !void { + const Header = @TypeOf(header); // Create a growable string to store the base64 bytes in. // Doing this first so I can use the length of the encoded bytes for the length field. var payload_list = std.ArrayList(u8).init(allocator); @@ -107,8 +107,8 @@ pub const SaprusMessage = union(SaprusPacketType) { // Write the proper header and payload for the given packet type. switch (self) { - .relay => |r| try toBytesAux(Relay.Header, r.header, r.payload, &buf, allocator), - .connection => |c| try toBytesAux(Connection.Header, c.header, c.payload, &buf, allocator), + .relay => |r| try toBytesAux(r.header, r.payload, &buf, allocator), + .connection => |c| try toBytesAux(c.header, c.payload, &buf, allocator), .file_transfer => return SaprusError.NotImplementedSaprusType, } @@ -118,13 +118,12 @@ pub const SaprusMessage = union(SaprusPacketType) { fn fromBytesAux( comptime packet: SaprusPacketType, - Header: type, r: std.io.FixedBufferStream([]const u8).Reader, allocator: Allocator, ) !SaprusMessage { - // Read the length of the base64 encoded payload. + const Header = @field(@FieldType(SaprusMessage, @tagName(packet)), "Header"); + // Read the length of the header + base64 encoded payload. const len = try r.readInt(u16, .big); - // Read the header for the current message type. var header_bytes: [@sizeOf(Header)]u8 = undefined; _ = try r.read(header_bytes[0 .. @bitSizeOf(Header) / 8]); @@ -152,11 +151,12 @@ pub const SaprusMessage = union(SaprusPacketType) { var s = std.io.fixedBufferStream(bytes); const r = s.reader(); + // Read packet type const packet_type = @as(SaprusPacketType, @enumFromInt(try r.readInt(u16, .big))); switch (packet_type) { - .relay => return fromBytesAux(.relay, Relay.Header, r, allocator), - .connection => return fromBytesAux(.connection, Connection.Header, r, allocator), + .relay => return fromBytesAux(.relay, r, allocator), + .connection => return fromBytesAux(.connection, r, allocator), .file_transfer => return SaprusError.NotImplementedSaprusType, else => return SaprusError.UnknownSaprusType, } diff --git a/src/saprus_relay.zig b/src/saprus_relay.zig deleted file mode 100644 index f43f2bd..0000000 --- a/src/saprus_relay.zig +++ /dev/null @@ -1,43 +0,0 @@ -const is_debug = builtin.mode == .Debug; - -/// This creates a debug allocator that can only be referenced in debug mode. -/// You should check for is_debug around every reference to dba. -var dba: DebugAllocator = - if (is_debug) - DebugAllocator.init - else - @compileError("Should not use debug allocator in release mode"); - -pub fn main() !void { - defer if (is_debug) { - _ = dba.deinit(); - }; - - const gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator; - - const args = try std.process.argsAlloc(gpa); - defer std.process.argsFree(gpa, args); - - var message = ArrayList(u8).init(gpa); - defer message.deinit(); - - for (args[1..], 0..) |arg, i| { - try message.appendSlice(arg); - if (i < args.len - 1) - try message.append(' '); - } - - try Saprus.init(); - defer Saprus.deinit(); - - try Saprus.sendInitialConnection(if (message.items.len > 0) message.items else "Hello darkness my old friend", 6868, gpa); - - // try Saprus.sendRelay(if (message.items.len > 0) message.items else "Hello darkness my old friend", gpa); -} - -const builtin = @import("builtin"); -const std = @import("std"); -const DebugAllocator = std.heap.DebugAllocator(.{}); -const ArrayList = std.ArrayList; - -const Saprus = @import("./saprus.zig"); -- cgit