r5sdk/r5dev/engine/server/server.cpp
Kawe Mazidjatari 4b72afb74f Light refactor for logging
Moved logging functions to dbg.h (tier0) and export them from the dll.
Added additional functions for checking bad pointers (debug only!).
Reduced output code size.
2022-05-25 14:18:29 +02:00

123 lines
3.9 KiB
C++

//=============================================================================//
//
// 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;
}
//---------------------------------------------------------------------------------
// Purpose: client to server authentication
// Input : *this -
// *pInpacket -
// Output : pointer to client instance on success, nullptr on failure
//---------------------------------------------------------------------------------
CClient* CServer::Authenticate(CServer* pServer, user_creds_s* pInpacket)
{
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;
CServer* g_pServer = nullptr;