diff options
| author | Teetime <TeetimeTW@yahoo.de> | 2013-01-05 06:46:44 +0100 |
|---|---|---|
| committer | Teetime <TeetimeTW@yahoo.de> | 2013-01-05 06:46:44 +0100 |
| commit | 198122516365d17a489cc86f205d44cc0008f99d (patch) | |
| tree | 056e4c4ef25e691b723d87104b93ffb50704f297 | |
| parent | ff8f832ba0f48f40274a761526e79d5453d63806 (diff) | |
| download | zcatch-198122516365d17a489cc86f205d44cc0008f99d.tar.gz zcatch-198122516365d17a489cc86f205d44cc0008f99d.zip | |
Removed banmaster
| -rw-r--r-- | bam.lua | 4 | ||||
| -rw-r--r-- | banmasters.cfg | 4 | ||||
| -rw-r--r-- | bans.cfg | 1 | ||||
| -rw-r--r-- | src/banmaster/banmaster.cpp | 351 | ||||
| -rw-r--r-- | src/banmaster/banmaster.h | 12 | ||||
| -rw-r--r-- | src/engine/server/server.cpp | 105 | ||||
| -rw-r--r-- | src/engine/server/server.h | 4 | ||||
| -rw-r--r-- | src/engine/shared/network.h | 25 | ||||
| -rw-r--r-- | src/engine/shared/network_server.cpp | 96 |
9 files changed, 2 insertions, 600 deletions
diff --git a/bam.lua b/bam.lua index e59e88eb..016ba7b6 100644 --- a/bam.lua +++ b/bam.lua @@ -232,7 +232,6 @@ function build(settings) versionserver = Compile(settings, Collect("src/versionsrv/*.cpp")) masterserver = Compile(settings, Collect("src/mastersrv/*.cpp")) - banmaster = Compile(settings, Collect("src/banmaster/*.cpp")) game_shared = Compile(settings, Collect("src/game/*.cpp"), nethash, network_source) game_client = Compile(settings, CollectRecursive("src/game/client/*.cpp"), client_content_source) game_server = Compile(settings, CollectRecursive("src/game/server/*.cpp"), server_content_source) @@ -273,8 +272,6 @@ function build(settings) masterserver_exe = Link(server_settings, "mastersrv", masterserver, engine, zlib) - banmaster_exe = Link(server_settings, "banmaster", banmaster, - engine, zlib) -- make targets c = PseudoTarget("client".."_"..settings.config_name, client_exe, client_depends) @@ -283,7 +280,6 @@ function build(settings) v = PseudoTarget("versionserver".."_"..settings.config_name, versionserver_exe) m = PseudoTarget("masterserver".."_"..settings.config_name, masterserver_exe) - b = PseudoTarget("banmaster".."_"..settings.config_name, banmaster_exe) t = PseudoTarget("tools".."_"..settings.config_name, tools) all = PseudoTarget(settings.config_name, c, s, v, m, b, t) diff --git a/banmasters.cfg b/banmasters.cfg deleted file mode 100644 index c5397497..00000000 --- a/banmasters.cfg +++ /dev/null @@ -1,4 +0,0 @@ -clear_banmasters -add_banmaster banmaster.kottnet.net -add_banmaster banmaster.heinrich5991.de -add_banmaster banmaster.teetw.de diff --git a/bans.cfg b/bans.cfg deleted file mode 100644 index a32469c6..00000000 --- a/bans.cfg +++ /dev/null @@ -1 +0,0 @@ -unban_all diff --git a/src/banmaster/banmaster.cpp b/src/banmaster/banmaster.cpp deleted file mode 100644 index a8a5ad02..00000000 --- a/src/banmaster/banmaster.cpp +++ /dev/null @@ -1,351 +0,0 @@ -/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ -/* If you are missing that file, acquire a complete release at teeworlds.com. */ -#include <base/system.h> -#include <cstdlib> /* atexit() */ - -#include <engine/console.h> -#include <engine/storage.h> -#include <engine/config.h> - -#include <engine/shared/config.h> -#include <engine/shared/netban.h> -#include <engine/shared/network.h> -#include <engine/shared/econ.h> -#include <engine/shared/packer.h> - -#include "banmaster.h" - -enum -{ - BAN_REREAD_TIME=300, - MAX_BAN_ENTRIES = 10, - MAX_REASON_LENGTH = 128, -}; - -static const char BANMASTER_BANFILE[] = "bans.cfg"; -static const char BANMASTER_BANSSAVEFILE[] = "saved_bans.cfg"; - -class CBanmasterBan : public CNetBan -{ -public: - //returns true if address is banned - - bool GetBanInfo(const NETADDR *pAddr, char *pReason, int BufferSize, int *pExpires) - { - CNetHash aHash[17]; - int Length = CNetHash::MakeHashArray(pAddr, aHash); - - // check ban adresses - CBanAddr *pBan = m_BanAddrPool.Find(pAddr, &aHash[Length]); - if(pBan) - { - str_format(pReason, BufferSize, "%s", pBan->m_Info.m_aReason); - *pExpires = pBan->m_Info.m_Expires; - return true; - } - // check ban ranges - for(int i = Length-1; i >= 0; --i) - { - for(CBanRange *pBan = m_BanRangePool.First(&aHash[i]); pBan; pBan = pBan->m_pHashNext) - { - if(NetMatch(&pBan->m_Data, pAddr, i, Length)) - { - str_format(pReason, BufferSize, "%s", pBan->m_Info.m_aReason); - *pExpires = pBan->m_Info.m_Expires; - return true; - } - } - } - - return false; - } -}; - -struct CBanInfo { - char m_aName[16]; - char m_aReason[MAX_REASON_LENGTH]; - NETADDR m_Addr; - int m_RecvTime; -}; - -struct CStats { - unsigned int m_StartTime; - int m_HitsBannedPlayers; - int m_NumRecvBans; - int m_NumRequests; -}; - -CEcon m_Econ; -CNetClient m_Net; -CBanmasterBan m_NetBan; -CBanInfo m_RecvBans[MAX_BAN_ENTRIES]; -CStats m_Stats; - -IConsole *m_pConsole; -IStorage *m_pStorage; -IKernel *m_pKernel; -IConfig *m_pConfig; - -void CleanUp() -{ - // Better: RAII? - m_Econ.Shutdown(); - - delete m_pConsole; - delete m_pConfig; - delete m_pKernel; - delete m_pStorage; -} - -int SendResponse(NETADDR *pAddr, NETADDR *pCheck, const char *pToken) -{ - CNetChunk p; - - p.m_ClientID = -1; - p.m_Address = *pAddr; - p.m_Flags = NETSENDFLAG_CONNLESS; - - int Expires; - char aReason[128]; - - if(m_NetBan.GetBanInfo(pCheck, aReason, sizeof(aReason), &Expires)) - { - char aCheckAddr[NETADDR_MAXSTRSIZE]; - net_addr_str(pCheck, aCheckAddr, NETADDR_MAXSTRSIZE, false); - - CPacker P; - P.Reset(); - P.AddRaw(BANMASTER_IPBAN, sizeof(BANMASTER_IPBAN)); - P.AddString(aCheckAddr, -1); - P.AddString(aReason, -1); - P.AddString(pToken, -1); - - p.m_pData = P.Data(); - p.m_DataSize = P.Size(); - if(!P.Error()) - m_Net.Send(&p); - return 1; - } - - return 0; -} - -void AddRecvBan(NETADDR *pFromAddr, unsigned char *pData, int Size) -{ - CUnpacker Up; - const char *pIP, *pName, *pReason; - - Up.Reset(pData + sizeof(BANMASTER_IPREPORT), Size - sizeof(BANMASTER_IPREPORT)); - - pName = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - pIP = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - pReason = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - - NETADDR ReportAddr; - if(!Up.Error() && net_addr_from_str(&ReportAddr, pIP) == 0 && pName[0] && pReason[0]) - { - for(int i = MAX_BAN_ENTRIES-1; i > 0; i--) - mem_copy(&m_RecvBans[i], &m_RecvBans[i-1], sizeof(m_RecvBans[i])); - - m_RecvBans[0].m_Addr = ReportAddr; - str_copy(m_RecvBans[0].m_aName, pName, sizeof(m_RecvBans[0].m_aName)); - str_copy(m_RecvBans[0].m_aReason, pReason, sizeof(m_RecvBans[0].m_aReason)); - m_RecvBans[0].m_RecvTime = time_timestamp(); - - char aAddr[NETADDR_MAXSTRSIZE]; - char aBuf[256]; - net_addr_str(pFromAddr, aAddr, sizeof(aAddr), false); - str_format(aBuf, sizeof(aBuf), "Received ban from '%s', Name: %s, IP: %s, Reason: %s", aAddr, pName, pIP, pReason); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", aBuf); - m_Stats.m_NumRecvBans++; - } - else - m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "banmaster", "dropped weird ban message"); -} - -void ReloadBans() -{ - char aBuf[64]; - str_format(aBuf, sizeof(aBuf), "bans_save %s", BANMASTER_BANSSAVEFILE); - m_pConsole->ExecuteLine(aBuf); -} - -void ConRecvBans(IConsole::IResult *pResult, void *pUser) -{ - int Count = 0; - char aBuf[256]; - for(int i = MAX_BAN_ENTRIES-1; i >= 0; i--) - { - if(!m_RecvBans[i].m_aName[0]) - continue; - - char aIP[NETADDR_MAXSTRSIZE]; - net_addr_str(&m_RecvBans[i].m_Addr, aIP, sizeof(aIP), false); - int RecvTime = time_timestamp() - m_RecvBans[i].m_RecvTime; - str_format(aBuf, sizeof(aBuf), "#%d - Name: %s | Reason: %s | IP: %s | Received %d min and %d sec. ago", i, m_RecvBans[i].m_aName, m_RecvBans[i].m_aReason, aIP, RecvTime/60, RecvTime%60); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", aBuf); - Count++; - } - str_format(aBuf, sizeof(aBuf), "%d Ban(s)", Count); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", aBuf); -} - -void ConAddBan(IConsole::IResult *pResult, void *pUser) -{ - int Index = pResult->GetInteger(0); - if(Index >= 0 && Index < MAX_BAN_ENTRIES && m_RecvBans[Index].m_aName[0]) - { - m_NetBan.BanAddr(&m_RecvBans[Index].m_Addr, pResult->GetInteger(1)*60, pResult->GetString(2)); - } - else - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", "Invalid index"); -} - -void ConStatus(IConsole::IResult *pResult, void *pUser) -{ - unsigned int Running = time_timestamp() - m_Stats.m_StartTime; - int Hours = Running / 3600; - char aBuf[512]; - str_format(aBuf, sizeof(aBuf), "Running since %d hours %d min and %d sec. Total received requests: %d (%d hits). %d received bans (%.3f/hour).", - Hours, (Running-Hours*3600) / 60, Running % 60, m_Stats.m_NumRequests, m_Stats.m_HitsBannedPlayers, m_Stats.m_NumRecvBans, (Hours != 0) ? (float)m_Stats.m_NumRecvBans/Hours : m_Stats.m_NumRecvBans); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", aBuf); -} - -int main(int argc, const char **argv) // ignore_convention -{ - atexit(CleanUp); - int64 LastUpdate = time_get(); - - dbg_logger_stdout(); - net_init(); - - m_pKernel = IKernel::Create(); - m_pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv); // ignore_convention - m_pConfig = CreateConfig(); - - m_pConsole = CreateConsole(CFGFLAG_BANMASTER|CFGFLAG_ECON); - - { - bool RegisterFail = false; - - RegisterFail = RegisterFail || !m_pKernel->RegisterInterface(m_pConsole); - RegisterFail = RegisterFail || !m_pKernel->RegisterInterface(m_pStorage); - RegisterFail = RegisterFail || !m_pKernel->RegisterInterface(m_pConfig); - - if(RegisterFail) - return -1; - } - - //Reset strings - m_pConfig->Init(); - - // Register Commands - m_pConsole->Register("recvbans", "", CFGFLAG_BANMASTER, ConRecvBans, 0, "Show the last received bans"); - m_pConsole->Register("addban", "iir", CFGFLAG_BANMASTER, ConAddBan, 0, "Ban IP by index"); - m_pConsole->Register("status", "", CFGFLAG_BANMASTER, ConStatus, 0, "Show some statistics"); - - - m_NetBan.Init(m_pConsole, m_pStorage); - m_pConsole->ExecuteFile(BANMASTER_BANFILE); - m_Econ.Init(m_pConsole, &m_NetBan); - - m_pConsole->ExecuteFile(BANMASTER_BANSSAVEFILE); - - m_pConsole->StoreCommands(false); - - mem_zero(&m_RecvBans, sizeof(CBanInfo)*MAX_BAN_ENTRIES); - mem_zero(&m_Stats, sizeof(CStats)); - m_Stats.m_StartTime = time_timestamp(); - - NETADDR BindAddr; - if(g_Config.m_Bindaddr[0] && net_host_lookup(g_Config.m_Bindaddr, &BindAddr, NETTYPE_ALL) == 0) - BindAddr.port = BANMASTER_PORT; - else - { - mem_zero(&BindAddr, sizeof(BindAddr)); - BindAddr.type = NETTYPE_ALL; - BindAddr.port = BANMASTER_PORT; - } - - if(!m_Net.Open(BindAddr, 0)) - { - dbg_msg("banmaster", "couldn't start network"); - return -1; - } - - dbg_msg("banmaster", "started"); - - while(1) - { - m_Net.Update(); - - // process m_Packets - CNetChunk Packet; - while(m_Net.Recv(&Packet)) - { - char aAddressStr[NETADDR_MAXSTRSIZE]; - net_addr_str(&Packet.m_Address, aAddressStr, sizeof(aAddressStr), false); - - if(Packet.m_DataSize >= (int)sizeof(BANMASTER_IPCHECK) && mem_comp(Packet.m_pData, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)) == 0) - { - CUnpacker Up; - Up.Reset((unsigned char*) Packet.m_pData + sizeof(BANMASTER_IPCHECK), Packet.m_DataSize - sizeof(BANMASTER_IPCHECK)); - const char *pAddr = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - const char *pToken = Up.GetString(CUnpacker::SANITIZE_CC); - - NETADDR CheckAddr; - if(net_addr_from_str(&CheckAddr, pAddr) || Up.Error()) - { - char aBuf[128]; - str_format(aBuf, sizeof(aBuf), "dropped weird message, ip='%s' checkaddr='%s'", aAddressStr, pAddr); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "banmaster", aBuf); - } - else - { - CheckAddr.port = 0; - - int Banned = SendResponse(&Packet.m_Address, &CheckAddr, pToken); - - char aIP[NETADDR_MAXSTRSIZE]; - char aBuf[256]; - net_addr_str(&CheckAddr, aIP, sizeof(aIP), false); - str_format(aBuf, sizeof(aBuf), "responded to checkmsg, ip='%s' checkaddr='%s' result=%s", aAddressStr, aIP, (Banned) ? "ban" : "ok"); - if(Banned) - { - m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "banmaster", aBuf); - m_Stats.m_HitsBannedPlayers++; - } - else - m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "banmaster", aBuf); - - m_Stats.m_NumRequests++; - } - } - else if(Packet.m_DataSize >= (int)sizeof(BANMASTER_IPREPORT) && mem_comp(Packet.m_pData, BANMASTER_IPREPORT, sizeof(BANMASTER_IPREPORT)) == 0) - { - //info of a banned client - AddRecvBan(&Packet.m_Address, (unsigned char*)Packet.m_pData, Packet.m_DataSize); - } - else - { - char aBuf[128]; - str_format(aBuf, sizeof(aBuf), "dropped weird packet, ip='%s'", aAddressStr, (char *)Packet.m_pData); - m_pConsole->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "banmaster", aBuf); - } - } - - if(time_get() - LastUpdate > time_freq() * BAN_REREAD_TIME) - { - ReloadBans(); - LastUpdate = time_get(); - } - - m_NetBan.Update(); - m_Econ.Update(); - - // be nice to the CPU - thread_sleep(1); - } - - return 0; -} diff --git a/src/banmaster/banmaster.h b/src/banmaster/banmaster.h deleted file mode 100644 index fb89e3c0..00000000 --- a/src/banmaster/banmaster.h +++ /dev/null @@ -1,12 +0,0 @@ -/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ -/* If you are missing that file, acquire a complete release at teeworlds.com. */ -#ifndef BANMASTER_BANMASTER_H -#define BANMASTER_BANMASTER_H - -static const int BANMASTER_PORT = 8302; - -static const char BANMASTER_IPBAN[] = {255, 255, 255, 255, 'i', 'p', 'b', 'a'}; -static const char BANMASTER_IPCHECK[] = {255, 255, 255, 255, 'i', 'p', 'c', 'h'}; -static const char BANMASTER_IPREPORT[] = {255, 255, 255, 255, 'i', 'p', 'r', 'e'}; - -#endif diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 4a03be16..577c040f 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -27,8 +27,6 @@ #include <mastersrv/mastersrv.h> -#include <banmaster/banmaster.h> - #include "register.h" #include "server.h" @@ -38,8 +36,6 @@ #include <windows.h> #endif -static const char SERVER_BANMASTERFILE[] = "banmasters.cfg"; - static const char *StrUTF8Ltrim(const char *pStr) { while(*pStr) @@ -281,30 +277,6 @@ void CServerBan::ConBanExt(IConsole::IResult *pResult, void *pUser) } } - if(g_Config.m_SvGlobalBantime && CID >= 0 && CID < MAX_CLIENTS && pThis->Server()->m_aClients[CID].m_State == CServer::CClient::STATE_INGAME) - { - char aIP[NETADDR_MAXSTRSIZE]; - net_addr_str(pThis->Server()->m_NetServer.ClientAddr(CID), aIP, sizeof(aIP), 0); - - CPacker P; - P.Reset(); - P.AddRaw(BANMASTER_IPREPORT, sizeof(BANMASTER_IPREPORT)); - P.AddString(pThis->Server()->ClientName(CID), -1); - P.AddString(aIP, -1); - P.AddString(pReason, -1); - - if(!P.Error()) - { - CNetChunk Packet; - Packet.m_ClientID = -1; - Packet.m_Flags = NETSENDFLAG_CONNLESS; - Packet.m_pData = P.Data(); - Packet.m_DataSize = P.Size(); - pThis->Server()->m_NetServer.m_Banmaster.SendToAll(&Packet); - pThis->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "banmaster", "Reported ban to banmasters"); - } - } - if(StrAllnum(pStr)) { int ClientID = str_toint(pStr); @@ -1221,36 +1193,6 @@ void CServer::PumpNetwork() { SendServerInfo(&Packet.m_Address, ((unsigned char *)Packet.m_pData)[sizeof(SERVERBROWSE_GETINFO)]); } - else if(Packet.m_DataSize >= sizeof(BANMASTER_IPBAN) && - mem_comp(Packet.m_pData, BANMASTER_IPBAN, sizeof(BANMASTER_IPBAN)) == 0) - { - if(!g_Config.m_SvGlobalBantime) - return; - - //Unpack packet - CUnpacker Up; - const char *pIP, *pReason, *pToken; - Up.Reset((unsigned char*)Packet.m_pData + sizeof(BANMASTER_IPBAN), Packet.m_DataSize - sizeof(BANMASTER_IPBAN)); - pIP = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - pReason = Up.GetString(CUnpacker::SANITIZE_CC|CUnpacker::SKIP_START_WHITESPACES); - pToken = Up.GetString(CUnpacker::SANITIZE_CC); - - //check if it's a valid packet - if(Up.Error() || m_NetServer.m_Banmaster.CheckValidity(&Packet.m_Address, pToken) == -1) - return; - - NETADDR Addr; - if(net_addr_from_str(&Addr, pIP)) - { - Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "globalbans", "dropped weird message from banmaster"); - return; - } - - m_ServerBan.BanAddr(&Addr, g_Config.m_SvGlobalBantime * 60, pReason); - char aBuf[256]; - str_format(aBuf, sizeof(aBuf), "added ban, ip=%s, reason='%s'", pIP, pReason); - Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "globalbans", aBuf); - } } } else @@ -1367,8 +1309,6 @@ int CServer::Run() m_ServerBan.Init(Console(), Storage(), this); m_Econ.Init(Console(), &m_ServerBan); - Console()->ExecuteFile(SERVER_BANMASTERFILE); - char aBuf[256]; str_format(aBuf, sizeof(aBuf), "server name is '%s'", g_Config.m_SvName); Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf); @@ -1611,47 +1551,6 @@ void CServer::ConMapReload(IConsole::IResult *pResult, void *pUser) ((CServer *)pUser)->m_MapReload = 1; } -void CServer::ConAddBanmaster(IConsole::IResult *pResult, void *pUser) -{ - CServer *pServer = (CServer *)pUser; - - int Result = pServer->m_NetServer.m_Banmaster.Add(pResult->GetString(0)); - - if(Result == 0) - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "succesfully added banmaster"); - else if(Result == 1) - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "invalid address for banmaster / net lookup failed"); - else if(Result == 2) - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "too many banmasters"); - else - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "banmaster already exists"); -} - -void CServer::ConBanmasters(IConsole::IResult *pResult, void *pUser) -{ - CServer *pServer = (CServer *)pUser; - int NumBanmasters = pServer->m_NetServer.m_Banmaster.Num(); - - char aBuf[128]; - char aIpString[64]; - - for(int i = 0; i < NumBanmasters; i++) - { - NETADDR *pBanmaster = pServer->m_NetServer.m_Banmaster.Get(i); - net_addr_str(pBanmaster, aIpString, sizeof(aIpString), 0); - str_format(aBuf, sizeof(aBuf), "%d: %s", i, aIpString); - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", aBuf); - } -} - -void CServer::ConClearBanmasters(IConsole::IResult *pResult, void *pUser) -{ - CServer *pServer = (CServer *)pUser; - - pServer->m_NetServer.m_Banmaster.Clear(); - pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "cleared banmaster list"); -} - void CServer::ConLogout(IConsole::IResult *pResult, void *pUser) { CServer *pServer = (CServer *)pUser; @@ -1738,10 +1637,6 @@ void CServer::RegisterCommands() Console()->Register("record", "?s", CFGFLAG_SERVER|CFGFLAG_STORE, ConRecord, this, "Record to a file"); Console()->Register("stoprecord", "", CFGFLAG_SERVER, ConStopRecord, this, "Stop recording"); - Console()->Register("add_banmaster", "s", CFGFLAG_SERVER, ConAddBanmaster, this, ""); - Console()->Register("banmasters", "", CFGFLAG_SERVER, ConBanmasters, this, ""); - Console()->Register("clear_banmasters", "", CFGFLAG_SERVER, ConClearBanmasters, this, ""); - Console()->Register("reload", "", CFGFLAG_SERVER, ConMapReload, this, ""); Console()->Chain("sv_name", ConchainSpecialInfoupdate, this); diff --git a/src/engine/server/server.h b/src/engine/server/server.h index 9f62ab37..27991746 100644 --- a/src/engine/server/server.h +++ b/src/engine/server/server.h @@ -230,10 +230,6 @@ public: static void ConchainModCommandUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData); static void ConchainConsoleOutputLevelUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData); - static void ConAddBanmaster(IConsole::IResult *pResult, void *pUser); - static void ConBanmasters(IConsole::IResult *pResult, void *pUser); - static void ConClearBanmasters(IConsole::IResult *pResult, void *pUser); - void RegisterCommands(); diff --git a/src/engine/shared/network.h b/src/engine/shared/network.h index b607b4d4..dd43389e 100644 --- a/src/engine/shared/network.h +++ b/src/engine/shared/network.h @@ -261,7 +261,6 @@ class CNetServer CNetRecvUnpacker m_RecvUnpacker; public: - CNetServer(); int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser); // @@ -285,30 +284,6 @@ public: // void SetMaxClientsPerIP(int Max); - - class CBanmaster - { - public: - enum - { - MAX_BANMASTERS = 16, - MAX_TOKEN_LENGTH = 16, - }; - - CNetServer *m_pNet; - NETADDR m_aBanmasters[MAX_BANMASTERS]; - char m_aBanmasterToken[MAX_TOKEN_LENGTH]; - int m_NumBanmasters; - - int Add(const char *pAddrStr); - int Num() const; - NETADDR* Get(int Index); - int CheckValidity(NETADDR *pAddr, const char* pToken); - void Clear(); - void SendToAll(CNetChunk *pP); - void GenerateToken(); - }; - CBanmaster m_Banmaster; }; class CNetConsole diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index f1190223..b693b667 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -1,26 +1,17 @@ /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #include <base/system.h> -#include <banmaster/banmaster.h> #include <engine/console.h> -#include <engine/shared/packer.h> #include "netban.h" #include "network.h" -CNetServer::CNetServer() -{ - mem_zero(this, sizeof(*this)); - init_rand(); - m_Banmaster.m_pNet = this; - m_Banmaster.GenerateToken(); -} bool CNetServer::Open(NETADDR BindAddr, CNetBan *pNetBan, int MaxClients, int MaxClientsPerIP, int Flags) { // zero out the whole structure - //mem_zero(this, sizeof(*this)); + mem_zero(this, sizeof(*this)); // open socket m_Socket = net_udp_create(BindAddr); @@ -149,21 +140,6 @@ int CNetServer::Recv(CNetChunk *pChunk) // client that wants to connect if(!Found) { - char aIP[NETADDR_MAXSTRSIZE]; - net_addr_str(&Addr, aIP, sizeof(aIP), 0); - CPacker P; - P.Reset(); - P.AddRaw(BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)); - P.AddString(aIP, NETADDR_MAXSTRSIZE); - P.AddString(m_Banmaster.m_aBanmasterToken, CBanmaster::MAX_TOKEN_LENGTH); - - CNetChunk Packet; - Packet.m_ClientID = -1; - Packet.m_Flags = NETSENDFLAG_CONNLESS; - Packet.m_DataSize = P.Size(); - Packet.m_pData = P.Data(); - - m_Banmaster.SendToAll(&Packet); // only allow a specific number of players with the same ip NETADDR ThisAddr = Addr, OtherAddr; @@ -196,7 +172,7 @@ int CNetServer::Recv(CNetChunk *pChunk) m_aSlots[i].m_Connection.Feed(&m_RecvUnpacker.m_Data, &Addr); if(m_pfnNewClient) m_pfnNewClient(i, m_UserPtr); - + break; } } @@ -274,71 +250,3 @@ void CNetServer::SetMaxClientsPerIP(int Max) m_MaxClientsPerIP = Max; } - -int CNetServer::CBanmaster::Add(const char *pAddrStr) -{ - if(m_NumBanmasters >= MAX_BANMASTERS) - return 2; - - NETADDR Addr; - if(net_host_lookup(pAddrStr, &Addr, NETTYPE_ALL)) - return 1; - - if(Addr.port == 0) - Addr.port = BANMASTER_PORT; - - for(int i = 0; i < m_NumBanmasters; i++) - if(mem_comp(&Addr, &m_aBanmasters[i], sizeof(NETADDR)) == 0) - return 3; - - m_aBanmasters[m_NumBanmasters] = Addr; - m_NumBanmasters++; - return 0; -} - -int CNetServer::CBanmaster::Num() const -{ - return m_NumBanmasters; -} - -NETADDR *CNetServer::CBanmaster::Get(int Index) -{ - if(Index < 0 || Index >= m_NumBanmasters) - return 0; - - return &m_aBanmasters[Index]; -} - -int CNetServer::CBanmaster::CheckValidity(NETADDR *pAddr, const char* pToken) -{ - if(str_comp(m_aBanmasterToken, pToken) == 0) - for(int i = 0; i < m_NumBanmasters; i++) - if(net_addr_comp(&m_aBanmasters[i], pAddr) == 0) - return i; - - return -1; -} - -void CNetServer::CBanmaster::Clear() -{ - m_NumBanmasters = 0; -} - -void CNetServer::CBanmaster::SendToAll(CNetChunk *pP) -{ - for(int i = 0; i < m_NumBanmasters; i++) - { - pP->m_Address = m_aBanmasters[i]; - m_pNet->Send(pP); - } -} - -void CNetServer::CBanmaster::GenerateToken() -{ - for(int i = 0; i < MAX_TOKEN_LENGTH-1; i++) - { - // 32 - 128 - m_aBanmasterToken[i] = irand() % 97 + 32; - } - m_aBanmasterToken[MAX_TOKEN_LENGTH-1] = 0; -} |