mirror of
https://git.robbyzambito.me/zaprus
synced 2026-02-04 00:14:52 +00:00
Compare commits
2 Commits
09152377ed
...
19c2b78d1d
| Author | SHA1 | Date | |
|---|---|---|---|
| 19c2b78d1d | |||
| 3c5f34d5c2 |
@@ -113,10 +113,9 @@ pub fn connect(self: Client, io: Io, payload: []const u8) !SaprusConnection {
|
|||||||
try self.socket.send(full_msg);
|
try self.socket.send(full_msg);
|
||||||
var res_buf: [4096]u8 = undefined;
|
var res_buf: [4096]u8 = undefined;
|
||||||
|
|
||||||
// Ignore response from sentinel, just accept that we got one.
|
|
||||||
log.debug("Awaiting handshake response", .{});
|
log.debug("Awaiting handshake response", .{});
|
||||||
|
// Ignore response from sentinel, just accept that we got one.
|
||||||
_ = try self.socket.receive(&res_buf);
|
_ = try self.socket.receive(&res_buf);
|
||||||
try io.sleep(.fromMilliseconds(40), .real);
|
|
||||||
|
|
||||||
headers.udp.dst_port = udp_dest_port;
|
headers.udp.dst_port = udp_dest_port;
|
||||||
headers.ip.id = rand.int(u16);
|
headers.ip.id = rand.int(u16);
|
||||||
|
|||||||
@@ -72,10 +72,6 @@ pub fn init() !RawSocket {
|
|||||||
const bind_ret = std.os.linux.bind(socket, @ptrCast(&sockaddr_ll), @sizeOf(@TypeOf(sockaddr_ll)));
|
const bind_ret = std.os.linux.bind(socket, @ptrCast(&sockaddr_ll), @sizeOf(@TypeOf(sockaddr_ll)));
|
||||||
if (bind_ret != 0) return error.BindError;
|
if (bind_ret != 0) return error.BindError;
|
||||||
|
|
||||||
const timeout: std.os.linux.timeval = .{ .sec = 60 * if (is_debug) 1 else 10, .usec = 0 };
|
|
||||||
const timeout_ret = std.os.linux.setsockopt(socket, std.os.linux.SOL.SOCKET, std.os.linux.SO.RCVTIMEO, @ptrCast(&timeout), @sizeOf(@TypeOf(timeout)));
|
|
||||||
if (timeout_ret != 0) return error.SetTimeoutError;
|
|
||||||
|
|
||||||
return .{
|
return .{
|
||||||
.fd = socket,
|
.fd = socket,
|
||||||
.sockaddr_ll = sockaddr_ll,
|
.sockaddr_ll = sockaddr_ll,
|
||||||
@@ -83,6 +79,12 @@ pub fn init() !RawSocket {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn setTimeout(self: *RawSocket, sec: isize, usec: i64) !void {
|
||||||
|
const timeout: std.os.linux.timeval = .{ .sec = sec, .usec = usec };
|
||||||
|
const timeout_ret = std.os.linux.setsockopt(self.fd, std.os.linux.SOL.SOCKET, std.os.linux.SO.RCVTIMEO, @ptrCast(&timeout), @sizeOf(@TypeOf(timeout)));
|
||||||
|
if (timeout_ret != 0) return error.SetTimeoutError;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *RawSocket) void {
|
pub fn deinit(self: *RawSocket) void {
|
||||||
_ = std.os.linux.close(self.fd);
|
_ = std.os.linux.close(self.fd);
|
||||||
self.* = undefined;
|
self.* = undefined;
|
||||||
|
|||||||
18
src/main.zig
18
src/main.zig
@@ -26,18 +26,15 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
|
|
||||||
const args = try init.minimal.args.toSlice(init.arena.allocator());
|
const args = try init.minimal.args.toSlice(init.arena.allocator());
|
||||||
|
|
||||||
if (args.len == 1) {
|
|
||||||
std.debug.print("{s}", .{help});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var flags: struct {
|
var flags: struct {
|
||||||
relay: ?[]const u8 = null,
|
relay: ?[]const u8 = null,
|
||||||
dest: ?[]const u8 = null,
|
dest: ?[]const u8 = null,
|
||||||
connect: ?[]const u8 = null,
|
connect: ?[]const u8 = null,
|
||||||
} = .{};
|
} = .{};
|
||||||
|
|
||||||
{
|
if (args.len == 1) {
|
||||||
|
flags.connect = "";
|
||||||
|
} else {
|
||||||
var i: usize = 1;
|
var i: usize = 1;
|
||||||
while (i < args.len) : (i += 1) {
|
while (i < args.len) : (i += 1) {
|
||||||
if (to_option.get(args[i])) |opt| {
|
if (to_option.get(args[i])) |opt| {
|
||||||
@@ -127,8 +124,6 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var retry_seconds: u16 = 12 * if (is_debug) 1 else 10;
|
|
||||||
|
|
||||||
var init_con_buf: [SaprusClient.max_payload_len]u8 = undefined;
|
var init_con_buf: [SaprusClient.max_payload_len]u8 = undefined;
|
||||||
var w: Writer = .fixed(&init_con_buf);
|
var w: Writer = .fixed(&init_con_buf);
|
||||||
try w.print("{b64}", .{flags.connect.?});
|
try w.print("{b64}", .{flags.connect.?});
|
||||||
@@ -139,19 +134,18 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
defer client.deinit();
|
defer client.deinit();
|
||||||
log.debug("Starting connection", .{});
|
log.debug("Starting connection", .{});
|
||||||
|
|
||||||
|
try client.socket.setTimeout(if (is_debug) 3 else 25, 0);
|
||||||
var connection = client.connect(init.io, w.buffered()) catch {
|
var connection = client.connect(init.io, w.buffered()) catch {
|
||||||
try init.io.sleep(.fromSeconds(retry_seconds), .boot);
|
log.debug("Connection timed out", .{});
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
retry_seconds = 60 * if (is_debug) 1 else 10;
|
|
||||||
|
|
||||||
log.debug("Connection started", .{});
|
log.debug("Connection started", .{});
|
||||||
|
|
||||||
next_message: while (true) {
|
next_message: while (true) {
|
||||||
var res_buf: [2048]u8 = undefined;
|
var res_buf: [2048]u8 = undefined;
|
||||||
|
try client.socket.setTimeout(if (is_debug) 60 else 600, 0);
|
||||||
const next = connection.next(init.io, &res_buf) catch {
|
const next = connection.next(init.io, &res_buf) catch {
|
||||||
try init.io.sleep(.fromSeconds(retry_seconds), .boot);
|
|
||||||
continue :reconnect;
|
continue :reconnect;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user