Skip to content

Commit 6324778

Browse files
committed
backport antiFakePlayer to game module once again
1 parent d594473 commit 6324778

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

codemp/game/g_client.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2396,13 +2396,14 @@ restarts.
23962396
============
23972397
*/
23982398

2399-
static qboolean CompareIPs( const char *ip1, const char *ip2 )
2400-
{
2401-
while ( 1 ) {
2402-
if ( *ip1 != *ip2 )
2399+
static qboolean CompareIPs(const char *ip1, const char *ip2) {
2400+
while (1) {
2401+
if (*ip1 != *ip2) {
24032402
return qfalse;
2404-
if ( !*ip1 || *ip1 == ':' )
2403+
}
2404+
if (!*ip1 || *ip1 == ':') {
24052405
break;
2406+
}
24062407
ip1++;
24072408
ip2++;
24082409
}
@@ -2451,6 +2452,20 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) {
24512452
}
24522453
}
24532454

2455+
// check for >= g_maxConnPerIP connections from same IP
2456+
if (g_antiFakePlayer.integer && !isBot && firstTime) {
2457+
int count = 0, i = 0;
2458+
gclient_t *cl;
2459+
for (i = 0, cl = level.clients; i < sv_maxclients.integer; i++, cl++) {
2460+
if (cl->pers.connected >= CON_CONNECTING && CompareIPs(tmpIP, cl->sess.IP)) {
2461+
count++;
2462+
}
2463+
}
2464+
if (count >= g_maxConnPerIP.integer) {
2465+
return "Too many connections from the same IP";
2466+
}
2467+
}
2468+
24542469
if ( ent->inuse )
24552470
{// if a player reconnects quickly after a disconnect, the client disconnect may never be called, thus flag can get lost in the ether
24562471
G_LogPrintf( "Forcing disconnect on active client: %i\n", clientNum );

codemp/game/g_xcvar.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ XCVAR_DEF( g_allowHighPingDuelist, "1", NULL, CVAR_NONE, qtrue )
7272
XCVAR_DEF( g_allowNPC, "1", NULL, CVAR_CHEAT, qtrue )
7373
XCVAR_DEF( g_allowTeamVote, "1", NULL, CVAR_ARCHIVE, qfalse )
7474
XCVAR_DEF( g_allowVote, "-1", NULL, CVAR_ARCHIVE, qfalse )
75+
XCVAR_DEF( g_antiFakePlayer, "0", NULL, CVAR_ARCHIVE, qfalse )
7576
XCVAR_DEF( g_armBreakage, "0", NULL, CVAR_NONE, qtrue )
7677
XCVAR_DEF( g_austrian, "0", NULL, CVAR_ARCHIVE, qfalse )
7778
XCVAR_DEF( g_autoMapCycle, "0", NULL, CVAR_ARCHIVE|CVAR_NORESTART, qtrue )
@@ -111,6 +112,7 @@ XCVAR_DEF( g_locationBasedDamage, "1", NULL, CVAR_NONE, qtrue )
111112
XCVAR_DEF( g_log, "games.log", NULL, CVAR_ARCHIVE, qfalse )
112113
XCVAR_DEF( g_logClientInfo, "0", NULL, CVAR_ARCHIVE, qtrue )
113114
XCVAR_DEF( g_logSync, "0", NULL, CVAR_ARCHIVE, qfalse )
115+
XCVAR_DEF( g_maxConnPerIP, "3", NULL, CVAR_ARCHIVE, qfalse )
114116
XCVAR_DEF( g_maxForceRank, "7", NULL, CVAR_SERVERINFO|CVAR_ARCHIVE|CVAR_LATCH, qfalse )
115117
XCVAR_DEF( g_maxGameClients, "0", NULL, CVAR_SERVERINFO|CVAR_LATCH|CVAR_ARCHIVE, qfalse )
116118
XCVAR_DEF( g_maxHolocronCarry, "3", NULL, CVAR_LATCH, qfalse )

codemp/server/sv_client.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,8 @@ void SV_DirectConnect( netadr_t from ) {
316316
// save the userinfo
317317
Q_strncpyz( newcl->userinfo, userinfo, sizeof(newcl->userinfo) );
318318

319+
// check for >= sv_maxConnPerIP connections from same IP
319320
if (sv_antiFakePlayer->integer) {
320-
// check for > sv_maxConnPerIP connections from same IP
321321
int count = 0, i = 0;
322322
for (i = 0, cl = svs.clients; i < sv_maxclients->integer; i++, cl++) {
323323
if (cl->state >= CS_CONNECTED && NET_CompareBaseAdr(svs.clients[clientNum].netchan.remoteAddress, svs.clients[i].netchan.remoteAddress)) {

0 commit comments

Comments
 (0)