diff options
author | Robby Zambito <contact@robbyzambito.me> | 2025-04-04 23:12:08 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2025-04-06 13:08:09 -0400 |
commit | efcd866d6ca73dcc3455ad80210c8d8d805a9045 (patch) | |
tree | 432089526d56b1e40272691ce5ea5ad5cbb83f9c /src | |
parent | 7b07520adb0191ec70869357aab27b29ee4b94f7 (diff) |
Initial testing of connection message
Diffstat (limited to 'src')
-rw-r--r-- | src/saprus.zig | 43 | ||||
-rw-r--r-- | src/saprus_message.zig | 8 | ||||
-rw-r--r-- | src/saprus_relay.zig | 4 |
3 files changed, 45 insertions, 10 deletions
diff --git a/src/saprus.zig b/src/saprus.zig index b51fae7..d591928 100644 --- a/src/saprus.zig +++ b/src/saprus.zig @@ -6,14 +6,7 @@ pub fn deinit() void { network.deinit(); } -pub fn sendRelay(payload: []const u8, allocator: std.mem.Allocator) !void { - const msg = SaprusMessage{ - .relay = .{ - .header = .{ .dest = .{ 255, 255, 255, 255 } }, - .payload = payload, - }, - }; - +inline fn broadcastSaprusMessage(msg: SaprusMessage, allocator: Allocator) !void { const msg_bytes = try msg.toBytes(allocator); defer allocator.free(msg_bytes); @@ -38,6 +31,40 @@ pub fn sendRelay(payload: []const u8, allocator: std.mem.Allocator) !void { _ = try sock.sendTo(dest_addr, msg_bytes); } +pub fn sendRelay(payload: []const u8, allocator: Allocator) !void { + const msg = SaprusMessage{ + .relay = .{ + .header = .{ .dest = .{ 255, 255, 255, 255 } }, + .payload = payload, + }, + }; + + try broadcastSaprusMessage(msg, allocator); +} + +pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: Allocator) !void { + const msg = SaprusMessage{ + .connection = .{ + .header = .{ + .src_port = initial_port, + .dest_port = 6868, + .seq_num = 1, + .msg_id = 2, + .reserved = 5, + .options = .{ + .opt2 = true, + .opt8 = true, + }, + }, + .payload = payload, + }, + }; + + try broadcastSaprusMessage(msg, allocator); +} + const SaprusMessage = @import("./saprus_message.zig").SaprusMessage; const std = @import("std"); const network = @import("network"); + +const Allocator = std.mem.Allocator; diff --git a/src/saprus_message.zig b/src/saprus_message.zig index 09536f0..b77f423 100644 --- a/src/saprus_message.zig +++ b/src/saprus_message.zig @@ -79,8 +79,14 @@ pub const SaprusMessage = union(SaprusPacketType) { try base64Enc.encodeWriter(buf_w, payload); // Write the packet body to the output writer. - try w.writeStructEndian(header, .big); try w.writeInt(u16, @intCast(payload_list.items.len), .big); + + // try w.writeStructEndian(header, .big); + + const header_bytes = std.mem.asBytes(&header); + + try w.writeAll(header_bytes[0 .. header_bytes.len - 2]); + try w.writeAll(payload_list.items); } diff --git a/src/saprus_relay.zig b/src/saprus_relay.zig index 17ea8ea..f43f2bd 100644 --- a/src/saprus_relay.zig +++ b/src/saprus_relay.zig @@ -30,7 +30,9 @@ pub fn main() !void { try Saprus.init(); defer Saprus.deinit(); - try Saprus.sendRelay(if (message.items.len > 0) message.items else "Hello darkness my old friend", gpa); + 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"); |