diff options
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.?; |