diff --git a/src/transport_layer/etcp_session.c b/src/transport_layer/etcp_session.c index e0885384..851c2884 100644 --- a/src/transport_layer/etcp_session.c +++ b/src/transport_layer/etcp_session.c @@ -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",