Keep the session deadline unchanged across handshake retries

This commit is contained in:
evgeny committed 2026-10-23 12:32:57 +02:00
1 parent 23d426fd0c
commit 3c18e594d1
1 file changed
+5 -4
+5 -4
View File
@@ -10,7 +10,7 @@
static uint64_t read_id(const uint8_t* p) { uint64_t v; memcpy(&v,p,8); return be64toh(v); }
static void write_id(uint8_t* p, uint64_t v) { v = htobe64(v); memcpy(p,&v,8); }
static void session_schedule(struct ETCP_CONN* c, int delay_tb);
static void session_schedule(struct ETCP_CONN* c, int initial);
void etcp_session_encode(uint8_t* data, uint8_t code, uint64_t sender, uint64_t target) {
data[0] = code; write_id(data+1,sender); write_id(data+9,target);
}
@@ -48,12 +48,13 @@ static void session_tick(void* arg) {
}
if (c->session_required) session_send(c,ETCP_SESSION_HELLO,c->peer_reset_id,0);
if (c->session_candidate) session_send(c,ETCP_SESSION_CHALLENGE,c->session_candidate,c->session_challenge);
session_schedule(c, SESSION_RETRY_TB);
session_schedule(c, 0);
}
static void session_schedule(struct ETCP_CONN* c, int delay_tb) {
static void session_schedule(struct ETCP_CONN* c, int initial) {
if (c->session_timer || c->close_requested) return;
if (delay_tb == 1) c->session_started = get_time_tb();
if (initial) c->session_started = get_time_tb();
int delay_tb = initial ? 1 : SESSION_RETRY_TB;
c->session_timer = uasync_set_timeout(c->instance->ua, delay_tb, c, session_tick, "etcp_session");
if (!c->session_timer) {
DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "[%s] session timer OOM delay_tb=%d required=%u; closing",