diff options
| author | Teetime <TeetimeTW@yahoo.de> | 2012-02-17 20:07:26 +0100 |
|---|---|---|
| committer | Teetime <TeetimeTW@yahoo.de> | 2012-02-17 20:07:26 +0100 |
| commit | 011d30b4ad291d00414ac8d1e851c2e8e0274f27 (patch) | |
| tree | 579c52806c7b8daf56b1fede4396a24076c3bd71 /src/engine | |
| parent | ca3f7fd95a29bf6905703af5a4046ef0511c4f04 (diff) | |
| download | zcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.tar.gz zcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.zip | |
extended banmaster and added more functions
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/server/server.cpp | 34 | ||||
| -rw-r--r-- | src/engine/shared/config.h | 1 | ||||
| -rw-r--r-- | src/engine/shared/network.h | 1 | ||||
| -rw-r--r-- | src/engine/shared/network_server.cpp | 9 |
4 files changed, 45 insertions, 0 deletions
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 6891407b..85d27a41 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -266,6 +266,40 @@ void CServerBan::ConBanExt(IConsole::IResult *pResult, void *pUser) int Minutes = pResult->NumArguments()>1 ? clamp(pResult->GetInteger(1), 0, 44640) : 30; const char *pReason = pResult->NumArguments()>2 ? pResult->GetString(2) : "No reason given"; + int CID = -1; + if(StrAllnum(pStr)) + CID = str_toint(pStr); + else + { + NETADDR Addr; + if(net_addr_from_str(&Addr, pStr) == 0) + for(int i = 0; i < MAX_CLIENTS; i++) + if(pThis->NetMatch(&Addr, pThis->Server()->m_NetServer.ClientAddr(i))) + { + CID = i; + break; + } + } + + 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.AddRaw(BANMASTER_IPREPORT, sizeof(BANMASTER_IPREPORT)); + P.AddString(pThis->Server()->ClientName(CID), MAX_NAME_LENGTH); + P.AddString(aIP, sizeof(aIP)); + P.AddString(pReason, str_length(pReason)); + + 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.SendToBanmasters(&Packet); + } + if(StrAllnum(pStr)) { int ClientID = str_toint(pStr); diff --git a/src/engine/shared/config.h b/src/engine/shared/config.h index c6d8437f..4200303e 100644 --- a/src/engine/shared/config.h +++ b/src/engine/shared/config.h @@ -22,6 +22,7 @@ enum CFGFLAG_STORE=8, CFGFLAG_MASTER=16, CFGFLAG_ECON=32, + CFGFLAG_BANMASTER=64|CFGFLAG_MASTER, }; #endif diff --git a/src/engine/shared/network.h b/src/engine/shared/network.h index cf2310bb..4983b48f 100644 --- a/src/engine/shared/network.h +++ b/src/engine/shared/network.h @@ -308,6 +308,7 @@ public: NETADDR* BanmasterGet(int Index); int BanmasterCheck(NETADDR *pAddr); void BanmastersClear(); + void SendToBanmasters(CNetChunk *pP); }; class CNetConsole diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index e2e0d16b..72966896 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -309,3 +309,12 @@ void CNetServer::BanmastersClear() m_NumBanmasters = 0; } +void CNetServer::SendToBanmasters(CNetChunk *pP) +{ + for(int i = 0; i < m_NumBanmasters; i++) + { + pP->m_Address = m_aBanmasters[i]; + Send(pP); + } + +} |