Skip to content
Snippets Groups Projects
Commit 2e60d20a authored by Matt Johnston's avatar Matt Johnston
Browse files

set timeouts to time remaining rather than timeout duration

parent ce59260e
Branches
No related merge requests found
...@@ -532,20 +532,39 @@ static void checktimeouts() { ...@@ -532,20 +532,39 @@ static void checktimeouts() {
} }
} }
static void update_timeout(long limit, long now, long last_event, long * timeout) {
TRACE(("update_timeout limit %ld, now %ld, last %ld, timeout %ld",
limit, now, last_event, *timeout))
if (last_event > 0 && limit > 0) {
*timeout = MIN(*timeout, last_event+limit-now);
TRACE(("update to %ld", *timeout))
}
}
static long select_timeout() { static long select_timeout() {
/* determine the minimum timeout that might be required, so /* determine the minimum timeout that might be required, so
as to avoid waking when unneccessary */ as to avoid waking when unneccessary */
long ret = LONG_MAX; long timeout = LONG_MAX;
if (KEX_REKEY_TIMEOUT > 0) long now = monotonic_now();
ret = MIN(KEX_REKEY_TIMEOUT, ret);
/* AUTH_TIMEOUT is only relevant before authdone */ update_timeout(KEX_REKEY_TIMEOUT, now, ses.kexstate.lastkextime, &timeout);
if (ses.authstate.authdone != 1 && AUTH_TIMEOUT > 0)
ret = MIN(AUTH_TIMEOUT, ret); if (ses.authstate.authdone != 1 && IS_DROPBEAR_SERVER) {
if (opts.keepalive_secs > 0) /* AUTH_TIMEOUT is only relevant before authdone */
ret = MIN(opts.keepalive_secs, ret); update_timeout(AUTH_TIMEOUT, now, ses.connect_time, &timeout);
if (opts.idle_timeout_secs > 0) }
ret = MIN(opts.idle_timeout_secs, ret);
return ret; update_timeout(opts.keepalive_secs, now,
MAX(ses.last_packet_time_keepalive_recv, ses.last_packet_time_keepalive_sent),
&timeout);
update_timeout(opts.idle_timeout_secs, now, ses.last_packet_time_idle,
&timeout);
TRACE(("timeout %ld", timeout))
/* clamp negative timeouts to zero - event has already triggered */
return MAX(timeout, 0);
} }
const char* get_user_shell() { const char* get_user_shell() {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment