diff options
Diffstat (limited to 'src/server/main.c')
-rw-r--r-- | src/server/main.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/main.c b/src/server/main.c index dbae1de..0383779 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -41,6 +41,7 @@ cvar_t *sv_fps; cvar_t *sv_timeout; // seconds without any message cvar_t *sv_zombietime; // seconds to sink messages after disconnect cvar_t *sv_ghostime; +cvar_t *sv_idlekick; cvar_t *sv_password; cvar_t *sv_reserved_password; @@ -1120,6 +1121,7 @@ static void SVC_DirectConnect(void) newcl->framenum = 1; // frame 0 can't be used newcl->lastframe = -1; newcl->lastmessage = svs.realtime; // don't timeout + newcl->lastactivity = svs.realtime; newcl->min_ping = 9999; } @@ -1534,6 +1536,7 @@ static void SV_CheckTimeouts(void) unsigned zombie_time = 1000 * sv_zombietime->value; unsigned drop_time = 1000 * sv_timeout->value; unsigned ghost_time = 1000 * sv_ghostime->value; + unsigned idle_time = 1000 * sv_idlekick->value; unsigned delta; FOR_EACH_CLIENT(client) { @@ -1572,6 +1575,12 @@ static void SV_CheckTimeouts(void) SV_DropClient(client, "too many nodelta frames"); continue; } + + delta = svs.realtime - client->lastactivity; + if (idle_time && delta > idle_time) { + SV_DropClient(client, "idling"); + continue; + } } } @@ -2035,6 +2044,7 @@ void SV_Init(void) sv_timeout = Cvar_Get("timeout", "90", 0); sv_zombietime = Cvar_Get("zombietime", "2", 0); sv_ghostime = Cvar_Get("sv_ghostime", "6", 0); + sv_idlekick = Cvar_Get("sv_idlekick", "0", 0); sv_showclamp = Cvar_Get("showclamp", "0", 0); sv_enforcetime = Cvar_Get("sv_enforcetime", "1", 0); sv_allow_nodelta = Cvar_Get("sv_allow_nodelta", "1", 0); |