From 69561e8d1ff83edf274553d7a94bee8a3fda71b7 Mon Sep 17 00:00:00 2001 From: IR4T4 Date: Thu, 26 Jul 2012 22:32:21 +0200 Subject: [PATCH] new cvar sv_dl_timeout - timeout value for clients not in refs #29 --- src/server/server.h | 1 + src/server/sv_init.c | 3 ++- src/server/sv_main.c | 28 +++++++++++++++++++--------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/server/server.h b/src/server/server.h index a921f98d5..f92b2192a 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -356,6 +356,7 @@ extern cvar_t *g_gameType; // TTimo - autodl extern cvar_t *sv_dl_maxRate; +extern cvar_t *sv_dl_timeout; // TTimo extern cvar_t *sv_wwwDownload; // general flag to enable/disable www download redirects diff --git a/src/server/sv_init.c b/src/server/sv_init.c index 0c84d3dc7..4321fc288 100644 --- a/src/server/sv_init.c +++ b/src/server/sv_init.c @@ -844,7 +844,8 @@ void SV_Init(void) sv_rconPassword = Cvar_Get("rconPassword", "", CVAR_TEMP); sv_privatePassword = Cvar_Get("sv_privatePassword", "", CVAR_TEMP); sv_fps = Cvar_Get("sv_fps", "20", CVAR_TEMP); - sv_timeout = Cvar_Get("sv_timeout", "240", CVAR_TEMP); + sv_timeout = Cvar_Get("sv_timeout", "15", CVAR_TEMP); + sv_dl_timeout = Cvar_Get("sv_dl_timeout", "240", CVAR_TEMP); sv_zombietime = Cvar_Get("sv_zombietime", "2", CVAR_TEMP); Cvar_Get("nextmap", "", CVAR_TEMP); diff --git a/src/server/sv_main.c b/src/server/sv_main.c index 13f00280b..066611228 100644 --- a/src/server/sv_main.c +++ b/src/server/sv_main.c @@ -73,6 +73,7 @@ cvar_t *sv_maxlives; // NERVE - SMF cvar_t *sv_needpass; cvar_t *sv_dl_maxRate; +cvar_t *sv_dl_timeout; // IRATA - seconds without any message when cl->state != CS_ACTIVE cvar_t *g_gameType; @@ -1183,13 +1184,11 @@ static void SV_CalcPings(void) */ static void SV_CheckTimeouts(void) { - int i; client_t *cl; - int droppoint; - int zombiepoint; - - droppoint = svs.time - 1000 * sv_timeout->integer; - zombiepoint = svs.time - 1000 * sv_zombietime->integer; + int i; + int droppoint = svs.time - 1000 * sv_timeout->integer; // default 15 + int zombiepoint = svs.time - 1000 * sv_zombietime->integer; // default 2 + int droppoint_dl= svs.time - 1000 * sv_dl_timeout->integer; // default 240 for (i = 0, cl = svs.clients ; i < sv_maxclients->integer ; i++, cl++) { @@ -1207,19 +1206,30 @@ static void SV_CheckTimeouts(void) continue; } - if (cl->state >= CS_CONNECTED && cl->lastPacketTime < droppoint) + + if (cl->state == CS_ACTIVE && cl->lastPacketTime < droppoint) + { + // wait several frames so a debugger session doesn't + // cause a timeout + if (++cl->timeoutCount > 5) + { + SV_DropClient(cl, va("game timed out %i\n", cl->state)); + cl->state = CS_FREE; // don't bother with zombie state + } + } + else if ((cl->state == CS_CONNECTED || cl->state == CS_PRIMED) && cl->lastPacketTime < droppoint_dl) { // wait several frames so a debugger session doesn't // cause a timeout if (++cl->timeoutCount > 5) { - SV_DropClient(cl, va("timed out %i\n", cl->state)); + SV_DropClient(cl, va("preparation timed out %i\n", cl->state)); cl->state = CS_FREE; // don't bother with zombie state } } else { - cl->timeoutCount = 0; + cl->timeoutCount = 0; // CS_FREE } } }