Move sendRelay logic to Saprus struct

This commit is contained in:
2025-04-04 22:09:06 -04:00
parent 2965f9aaf7
commit 9d38320897
3 changed files with 50 additions and 37 deletions

43
src/saprus.zig Normal file
View File

@@ -0,0 +1,43 @@
pub fn init() !void {
try network.init();
}
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,
},
};
const msg_bytes = try msg.toBytes(allocator);
defer allocator.free(msg_bytes);
var sock = try network.Socket.create(.ipv4, .udp);
defer sock.close();
try sock.setBroadcast(true);
// Bind to 0.0.0.0:0
const bind_addr = network.EndPoint{
.address = network.Address{ .ipv4 = network.Address.IPv4.any },
.port = 0,
};
const dest_addr = network.EndPoint{
.address = network.Address{ .ipv4 = network.Address.IPv4.broadcast },
.port = 8888,
};
try sock.bind(bind_addr);
_ = try sock.sendTo(dest_addr, msg_bytes);
}
const SaprusMessage = @import("./saprus_message.zig").SaprusMessage;
const std = @import("std");
const network = @import("network");

View File

@@ -39,8 +39,8 @@ pub const SaprusMessage = union(SaprusPacketType) {
}; };
pub const Connection = struct { pub const Connection = struct {
pub const Header = packed struct { pub const Header = packed struct {
src_port: u16, src_port: u16, // random number > 1024
dest_port: u16, dest_port: u16, // random number > 1024
seq_num: u32 = 0, seq_num: u32 = 0,
msg_id: u32 = 0, msg_id: u32 = 0,
reserved: u8 = 0, reserved: u8 = 0,

View File

@@ -13,7 +13,7 @@ pub fn main() !void {
_ = dba.deinit(); _ = dba.deinit();
}; };
var gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator; const gpa = if (is_debug) dba.allocator() else std.heap.smp_allocator;
const args = try std.process.argsAlloc(gpa); const args = try std.process.argsAlloc(gpa);
defer std.process.argsFree(gpa, args); defer std.process.argsFree(gpa, args);
@@ -27,38 +27,10 @@ pub fn main() !void {
try message.append(' '); try message.append(' ');
} }
const msg = SaprusMessage{ try Saprus.init();
.relay = .{ defer Saprus.deinit();
.header = .{ .dest = .{ 255, 255, 255, 255 } },
.payload = if (message.items.len > 0) message.items else "Hello darkness my old friend",
},
};
const msg_bytes = try msg.toBytes(gpa); try Saprus.sendRelay(if (message.items.len > 0) message.items else "Hello darkness my old friend", gpa);
defer gpa.free(msg_bytes);
try network.init();
defer network.deinit();
var sock = try network.Socket.create(.ipv4, .udp);
defer sock.close();
try sock.setBroadcast(true);
// Bind to 0.0.0.0:0
const bind_addr = network.EndPoint{
.address = network.Address{ .ipv4 = network.Address.IPv4.any },
.port = 0,
};
const dest_addr = network.EndPoint{
.address = network.Address{ .ipv4 = network.Address.IPv4.broadcast },
.port = 8888,
};
try sock.bind(bind_addr);
_ = try sock.sendTo(dest_addr, msg_bytes);
} }
const builtin = @import("builtin"); const builtin = @import("builtin");
@@ -66,6 +38,4 @@ const std = @import("std");
const DebugAllocator = std.heap.DebugAllocator(.{}); const DebugAllocator = std.heap.DebugAllocator(.{});
const ArrayList = std.ArrayList; const ArrayList = std.ArrayList;
const network = @import("network"); const Saprus = @import("./saprus.zig");
const SaprusMessage = @import("./saprus_message.zig").SaprusMessage;