Keep the session deadline unchanged across handshake retries
This commit is contained in:
1 parent
23d426fd0c
commit
3c18e594d1
1 file changed
+5
-4
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user