diff options
author | Robby Zambito <contact@robbyzambito.me> | 2025-04-30 13:27:26 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2025-04-30 14:43:19 -0400 |
commit | b575ad90942bf6317ac60a2f48e36f54ecddac7a (patch) | |
tree | 7cd169e3d0c7e9d6e4299fad70ff557abbe2121d /src/Client.zig | |
parent | 73d0a8085112c491d5cfc42c997c67839658a4bc (diff) |
Diffstat (limited to 'src/Client.zig')
-rw-r--r-- | src/Client.zig | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/Client.zig b/src/Client.zig index 070aaef..46ed75d 100644 --- a/src/Client.zig +++ b/src/Client.zig @@ -14,9 +14,10 @@ pub fn deinit() void { network.deinit(); } -fn broadcastSaprusMessage(msg: SaprusMessage, udp_port: u16, allocator: Allocator) !void { - const msg_bytes = try msg.toBytes(allocator); - defer allocator.free(msg_bytes); +fn broadcastSaprusMessage(msg: *SaprusMessage, udp_port: u16) !void { + const msg_bytes = msg.asBytes(); + try msg.networkFromNativeEndian(); + defer msg.nativeFromNetworkEndian() catch unreachable; var sock = try network.Socket.create(.ipv4, .udp); defer sock.close(); @@ -40,14 +41,13 @@ fn broadcastSaprusMessage(msg: SaprusMessage, udp_port: u16, allocator: Allocato } pub fn sendRelay(payload: []const u8, dest: [4]u8, allocator: Allocator) !void { - const msg = SaprusMessage{ - .relay = .{ - .header = .{ .dest = dest }, - .payload = payload, - }, - }; + const msg: *SaprusMessage = try .init(allocator, .relay, @intCast(payload.len)); + defer msg.deinit(allocator); + const relay = (try msg.getSaprusTypePayload()).relay; + relay.dest = dest; + @memcpy(relay.getPayload(), payload); - try broadcastSaprusMessage(msg, 8888, allocator); + try broadcastSaprusMessage(msg, 8888); } fn randomPort() u16 { @@ -59,26 +59,25 @@ fn randomPort() u16 { return p; } -pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: Allocator) !SaprusMessage { +pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: Allocator) !*SaprusMessage { const dest_port = randomPort(); - const msg = SaprusMessage{ - .connection = .{ - .header = .{ - .src_port = initial_port, - .dest_port = dest_port, - }, - .payload = payload, - }, - }; + const msg: *SaprusMessage = try .init(allocator, .connection, @intCast(payload.len)); + defer msg.deinit(allocator); + const connection = (try msg.getSaprusTypePayload()).connection; + connection.src_port = initial_port; + connection.dest_port = dest_port; + @memcpy(connection.getPayload(), payload); - try broadcastSaprusMessage(msg, 8888, allocator); + try broadcastSaprusMessage(msg, 8888); return msg; } pub fn connect(payload: []const u8, allocator: Allocator) !?SaprusConnection { - var foo: gcat.nic.RawSocket = try .init("enp7s0"); // /proc/net/dev - defer foo.deinit(); + if (false) { + var foo: gcat.nic.RawSocket = try .init("enp7s0"); // /proc/net/dev + defer foo.deinit(); + } var initial_port: u16 = 0; if (rand) |r| { @@ -86,7 +85,7 @@ pub fn connect(payload: []const u8, allocator: Allocator) !?SaprusConnection { } else unreachable; var initial_conn_res: ?SaprusMessage = null; - errdefer if (initial_conn_res) |c| c.deinit(allocator); + errdefer if (initial_conn_res) |*c| c.deinit(allocator); var sock = try network.Socket.create(.ipv4, .udp); defer sock.close(); @@ -103,14 +102,15 @@ pub fn connect(payload: []const u8, allocator: Allocator) !?SaprusConnection { const msg = try sendInitialConnection(payload, initial_port, allocator); - var response_buf: [4096]u8 = undefined; + var response_buf: [4096]u8 align(4) = @splat(0); _ = try sock.receive(&response_buf); // Ignore message that I sent. const len = try sock.receive(&response_buf); - initial_conn_res = try SaprusMessage.fromBytes(response_buf[0..len], allocator); + std.debug.print("response bytes: {x}\n", .{response_buf}); + initial_conn_res = (try SaprusMessage.bytesAsValue(response_buf[0..len])).*; // Complete handshake after awaiting response - try broadcastSaprusMessage(msg, randomPort(), allocator); + try broadcastSaprusMessage(msg, randomPort()); if (false) { return initial_conn_res.?; |