2022-05-20 11:52:19 +02:00
//=============================================================================//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// server.cpp: implementation of the CServer class.
//
/////////////////////////////////////////////////////////////////////////////////
# include "core/stdafx.h"
# include "common/protocol.h"
# include "tier1/cvar.h"
# include "engine/server/sv_main.h"
# include "engine/server/server.h"
# include "networksystem/r5net.h"
# include "public/include/edict.h"
# include "public/include/bansystem.h"
//---------------------------------------------------------------------------------
// Purpose: Gets the number of human players on the server
// Output : int
//---------------------------------------------------------------------------------
int CServer : : GetNumHumanPlayers ( void ) const
{
int nHumans = 0 ;
for ( int i = 0 ; i < g_ServerGlobalVariables - > m_nMaxClients ; i + + )
{
CClient * pClient = g_pClient - > GetClient ( i ) ;
if ( ! pClient )
continue ;
if ( pClient - > IsHumanPlayer ( ) )
nHumans + + ;
}
return nHumans ;
}
//---------------------------------------------------------------------------------
// Purpose: Gets the number of fake clients on the server
// Output : int
//---------------------------------------------------------------------------------
int CServer : : GetNumFakeClients ( void ) const
{
int nBots = 0 ;
for ( int i = 0 ; i < g_ServerGlobalVariables - > m_nMaxClients ; i + + )
{
CClient * pClient = g_pClient - > GetClient ( i ) ;
if ( ! pClient )
continue ;
if ( pClient - > IsConnected ( ) & & pClient - > IsFakeClient ( ) )
nBots + + ;
}
return nBots ;
}
2022-05-20 20:14:39 +02:00
//---------------------------------------------------------------------------------
2022-05-20 11:52:19 +02:00
// Purpose: client to server authentication
// Input : *this -
// *pInpacket -
// Output : pointer to client instance on success, nullptr on failure
2022-05-20 20:14:39 +02:00
//---------------------------------------------------------------------------------
CClient * CServer : : Authenticate ( CServer * pServer , user_creds_s * pInpacket )
2022-05-20 11:52:19 +02:00
{
std : : string svIpAddress = pInpacket - > m_nAddr . GetAddress ( ) ;
if ( sv_showconnecting - > GetBool ( ) )
{
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ______________________________________________________________ \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ] AUTHENTICATION --------------------------------------------- \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ] UID : | '%s' \n " , pInpacket - > m_nUserID ) ;
DevMsg ( eDLL_T : : SERVER , " ] OID : | '%lld' \n " , pInpacket - > m_nNucleusID ) ;
DevMsg ( eDLL_T : : SERVER , " ] ADR : | '%s' \n " , svIpAddress . c_str ( ) ) ;
DevMsg ( eDLL_T : : SERVER , " -------------------------------------------------------------- \n " ) ;
}
if ( g_pBanSystem - > IsBanListValid ( ) ) // Is the banlist vector valid?
{
if ( g_pBanSystem - > IsBanned ( svIpAddress , pInpacket - > m_nNucleusID ) ) // Is the client trying to connect banned?
{
v_CServer_RejectConnection ( pServer , * ( unsigned int * ) ( ( std : : uintptr_t ) pServer + 0xC ) , pInpacket , " You have been banned from this server. " ) ; // RejectConnection for the client.
if ( sv_showconnecting - > GetBool ( ) )
{
Warning ( eDLL_T : : SERVER , " Connection rejected for '%s' ('%lld' is banned from this server!) \n " , svIpAddress . c_str ( ) , pInpacket - > m_nNucleusID ) ;
}
return nullptr ;
}
}
if ( sv_showconnecting - > GetBool ( ) )
{
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
}
if ( g_bCheckCompBanDB )
{
if ( g_pR5net )
{
std : : thread th ( SV_IsClientBanned , g_pR5net , svIpAddress , pInpacket - > m_nNucleusID ) ;
th . detach ( ) ;
}
}
return v_CServer_Authenticate ( pServer , pInpacket ) ;
}
///////////////////////////////////////////////////////////////////////////////
void CServer_Attach ( )
{
DetourAttach ( ( LPVOID * ) & v_CServer_Authenticate , & CServer : : Authenticate ) ;
}
void CServer_Detach ( )
{
DetourDetach ( ( LPVOID * ) & v_CServer_Authenticate , & CServer : : Authenticate ) ;
}
///////////////////////////////////////////////////////////////////////////////
bool g_bCheckCompBanDB = true ;
2022-05-20 20:14:39 +02:00
CServer * g_pServer = nullptr ;