about summary refs log tree commit diff
path: root/src/engine
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
parentca3f7fd95a29bf6905703af5a4046ef0511c4f04 (diff)
downloadzcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.tar.gz
zcatch-011d30b4ad291d00414ac8d1e851c2e8e0274f27.zip
extended banmaster and added more functions
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/server/server.cpp34
-rw-r--r--src/engine/shared/config.h1
-rw-r--r--src/engine/shared/network.h1
-rw-r--r--src/engine/shared/network_server.cpp9
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);
+	}
+
+}