mirror of
https://git.robbyzambito.me/zaprus
synced 2025-12-20 16:24:50 +00:00
Also clean up the args for the aux functions by computing the type instead of passing it
67 lines
1.7 KiB
Zig
67 lines
1.7 KiB
Zig
pub fn init() !void {
|
|
try network.init();
|
|
}
|
|
|
|
pub fn deinit() void {
|
|
network.deinit();
|
|
}
|
|
|
|
inline fn broadcastSaprusMessage(msg: SaprusMessage, allocator: Allocator) !void {
|
|
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);
|
|
}
|
|
|
|
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,
|
|
},
|
|
.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;
|