summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2025-04-03 00:15:30 -0400
committerRobby Zambito <contact@robbyzambito.me>2025-04-03 10:16:16 -0400
commit4fc8ec4087d586b0d6ba3169555a8ebe1fae32ca (patch)
tree8078c89cffdd67984dccc7ffc2fe192f2798146a
parent6a6c3c8519240d01a74e0f5d26815062cebc9b02 (diff)
Make header always a packed struct
This lets us easily use the same writeStructe(header) pattern to write the header for each message type.
-rw-r--r--src/main.zig37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/main.zig b/src/main.zig
index 9393df7..4e9705d 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -19,19 +19,26 @@ const SaprusConnectionOptions = packed struct {
};
const SaprusMessage = union(SaprusPacketType) {
- relay: struct {
- dest: [4]u8,
+ const Relay = struct {
+ header: packed struct {
+ dest: @Vector(4, u8),
+ },
payload: []u8,
- },
+ };
+ const Connection = struct {
+ header: packed struct {
+ src_port: u16,
+ dest_port: u16,
+ seq_num: u32 = 0,
+ msg_id: u32 = 0,
+ reserved: u8 = 0,
+ options: SaprusConnectionOptions = .{},
+ },
+ payload: []u8,
+ };
+ relay: Relay,
file_transfer: void, // unimplemented
- connection: packed struct {
- src_port: u16,
- dest_port: u16,
- seq_num: u32 = 0,
- msg_id: u32 = 0,
- reserved: u8 = 0,
- options: SaprusConnectionOptions = .{},
- },
+ connection: Connection,
const Self = @This();
@@ -42,13 +49,15 @@ const SaprusMessage = union(SaprusPacketType) {
switch (s) {
.relay => |r| {
- try w.writeAll(&r.dest);
+ try w.writeStruct(r.header);
try w.writeInt(u16, @intCast(r.payload.len), .big);
try base64.encodeWriter(w, r.payload);
},
.file_transfer => unreachable,
.connection => |c| {
- try w.writeStruct(c);
+ try w.writeStruct(c.header);
+ try w.writeInt(u16, @intCast(c.payload.len), .big);
+ try base64.encodeWriter(w, c.payload);
},
}
@@ -67,7 +76,7 @@ pub fn main() !void {
const msg = SaprusMessage{
.relay = .{
- .dest = .{ 255, 255, 255, 255 },
+ .header = .{ .dest = .{ 255, 255, 255, 255 } },
.payload = @ptrCast(@constCast("Hello darkness my old friend")),
},
};