about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authorTeetime <TeetimeTW@yahoo.de>2012-02-17 20:07:26 +0100
committerTeetime <TeetimeTW@yahoo.de>2012-02-17 20:07:26 +0100
commit011d30b4ad291d00414ac8d1e851c2e8e0274f27 (patch)
tree579c52806c7b8daf56b1fede4396a24076c3bd71 /src/engine/server
parentca3f7fd95a29bf6905703af5a4046ef0511c4f04 (diff)
downloadzcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.tar.gz
zcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.zip
extended banmaster and added more functions
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/server.cpp34
1 files changed, 34 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);