diff --git a/extension.cpp b/extension.cpp index eafdf5f..9fcd559 100644 --- a/extension.cpp +++ b/extension.cpp @@ -89,6 +89,8 @@ A2SQCacheTimer g_A2SQCacheTimer; SMEXT_LINK(&g_A2SQCache); ConVar *g_SvLogging = CreateConVar("sv_qcache_logging", "0", FCVAR_NOTIFY, "Log connection checks."); +ConVar *g_SvIPRateLimit = CreateConVar("sv_qcache_iprate_limit", "1", FCVAR_NOTIFY, "Temporarily ban spam requests."); +ConVar *g_SvValidateChallenge = CreateConVar("sv_qcache_validate_info_challenge", "1", FCVAR_NOTIFY, "Check if the a2s_info challenge is valid."); ConVar *g_SvGameDesc = CreateConVar("sv_gamedesc_override", "default", FCVAR_NOTIFY, "Overwrite the default game description. Set to 'default' to keep default description."); ConVar *g_SvMapName = CreateConVar("sv_mapname_override", "default", FCVAR_NOTIFY, "Overwrite the map name. Set to 'default' to keep default name."); ConVar *g_SvCountBotsInfo = CreateConVar("sv_count_bots_info", "1", FCVAR_NOTIFY, "Display bots as players in the a2s_info server query. Enable = '1', Disable = '0'"); @@ -466,29 +468,22 @@ bool Hook_ProcessConnectionlessPacket(netpacket_t * packet) switch ( c ) { - case 0: - { - if(!CIPRateLimit__CheckIP(s_queryRateChecker, packet->from)) - { - RETURN_META_VALUE(MRES_SUPERCEDE, false); - } - - RETURN_META_VALUE(MRES_SUPERCEDE, false); - break; - } case A2S_INFO: { - if(!CIPRateLimit__CheckIP(s_queryRateChecker, packet->from)) + if (g_SvIPRateLimit->GetBool() && !CIPRateLimit__CheckIP(s_queryRateChecker, packet->from)) { RETURN_META_VALUE(MRES_SUPERCEDE, false); } - // Validate challenge - char nugget[ 64 ]; - if ( !msg.ReadString( nugget, sizeof( nugget ) ) ) - RETURN_META_VALUE(MRES_SUPERCEDE, true); - if ( !ValidInfoChallenge( packet->from, nugget ) ) - RETURN_META_VALUE(MRES_SUPERCEDE, true); + if (g_SvValidateChallenge->GetBool()) + { + // Validate challenge + char nugget[ 64 ]; + if ( !msg.ReadString( nugget, sizeof( nugget ) ) ) + RETURN_META_VALUE(MRES_SUPERCEDE, true); + if ( !ValidInfoChallenge( packet->from, nugget ) ) + RETURN_META_VALUE(MRES_SUPERCEDE, true); + } SendA2S_Info(packet); @@ -497,7 +492,7 @@ bool Hook_ProcessConnectionlessPacket(netpacket_t * packet) } case A2S_PLAYER: { - if(!CIPRateLimit__CheckIP(s_queryRateChecker, packet->from)) + if (g_SvIPRateLimit->GetBool() && !CIPRateLimit__CheckIP(s_queryRateChecker, packet->from)) { RETURN_META_VALUE(MRES_SUPERCEDE, false); } diff --git a/smsdk_config.h b/smsdk_config.h index 0a77048..32f93b0 100644 --- a/smsdk_config.h +++ b/smsdk_config.h @@ -39,9 +39,9 @@ /* Basic information exposed publicly */ #define SMEXT_CONF_NAME "A2SQCache" -#define SMEXT_CONF_DESCRIPTION "A2S_INFO+PLAYER cache" -#define SMEXT_CONF_VERSION "1.0" -#define SMEXT_CONF_AUTHOR "BotoX" +#define SMEXT_CONF_DESCRIPTION "A2S_INFO + A2S_PLAYER cache" +#define SMEXT_CONF_VERSION "1.1" +#define SMEXT_CONF_AUTHOR "BotoX, maxime1907" #define SMEXT_CONF_URL "https://git.botox.bz/CSSZombieEscape/sm-ext-A2SQCache" #define SMEXT_CONF_LOGTAG "A2SQCACHE" #define SMEXT_CONF_LICENSE "GPL"