summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2026-01-19 12:51:43 -0500
committerRobby Zambito <contact@robbyzambito.me>2026-01-19 12:59:21 -0500
commitc66b95bf899a74706d4ce8b2a838db75ac197df5 (patch)
tree22535292dcb3fe240628cae49cb81a7582c40f71
parentd7dedd243ec7a933d2b671b51328d8a1072305eb (diff)
Write relay message to the network
-rw-r--r--src/main.zig10
-rw-r--r--src/message.zig2
2 files changed, 9 insertions, 3 deletions
diff --git a/src/main.zig b/src/main.zig
index 3a22a01..03467e1 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -189,6 +189,10 @@ pub fn main(init: std.process.Init) !void {
};
std.debug.print("full message = {any}\n", .{full_msg});
+
+ var socket: RawSocket = try .init("enp7s0");
+ defer socket.deinit();
+ try socket.send(full_msg);
}
fn parseDest(in: ?[]const u8) [4]u8 {
@@ -222,7 +226,7 @@ const RawSocket = struct {
fd: i32,
sockaddr_ll: std.posix.sockaddr.ll,
- fn init(ifname: []const u8) RawSocket {
+ fn init(ifname: []const u8) !RawSocket {
const socket: i32 = @intCast(std.os.linux.socket(AF.PACKET, SOCK.RAW, 0));
var ifr: std.posix.ifreq = std.mem.zeroInit(std.posix.ifreq, .{});
@@ -265,7 +269,9 @@ const RawSocket = struct {
};
}
- fn deinit() void {}
+ fn deinit(self: *RawSocket) void {
+ _ = self;
+ }
fn send(self: RawSocket, payload: []const u8) !void {
const sent_bytes = std.os.linux.sendto(
diff --git a/src/message.zig b/src/message.zig
index 0f7bef5..c843a5a 100644
--- a/src/message.zig
+++ b/src/message.zig
@@ -123,7 +123,7 @@ const Relay = struct {
pub fn toBytes(self: Relay, buf: []u8) []u8 {
var out: Writer = .fixed(buf);
out.writeInt(u16, @intFromEnum(PacketType.relay), .big) catch unreachable;
- out.writeInt(u16, undefined, .big) catch unreachable; // Length field, but unread. Will switch to checksum
+ out.writeInt(u16, @intCast(self.payload.len), .big) catch unreachable; // Length field, but unread. Will switch to checksum
out.writeAll(&self.dest.bytes) catch unreachable;
out.writeAll(self.payload) catch unreachable;
return out.buffered();