about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-06-03 14:48:32 +0200
committeroy <Tom_Adams@web.de>2010-06-03 14:48:32 +0200
commit5988b9d38801f0987f38c99fb944e1a861d07ef3 (patch)
tree11771e6418a694f98ce2561e865b2f29971649bf /src/engine/server
parentd581e413c8fa94e4d1069b20bbe4edf1ebe2dbff (diff)
downloadzcatch-5988b9d38801f0987f38c99fb944e1a861d07ef3.tar.gz
zcatch-5988b9d38801f0987f38c99fb944e1a861d07ef3.zip
- show connecting players with rcon status command
- make it possible to limit the number of clients with the same ip that can connect to the server
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/server.cpp23
-rw-r--r--src/engine/server/server.h1
2 files changed, 19 insertions, 5 deletions
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index b5a01a99..2545103b 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1018,7 +1018,7 @@ int CServer::Run()
 	}
 	
 	
-	if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, 0))
+	if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, g_Config.m_SvMaxClientsPerIP, 0))
 	{
 		dbg_msg("server", "couldn't open socket. port might already be in use");
 		return -1;
@@ -1250,12 +1250,16 @@ void CServer::ConStatus(IConsole::IResult *pResult, void *pUser)
 
 	for(i = 0; i < MAX_CLIENTS; i++)
 	{
-		if(pServer->m_aClients[i].m_State == CClient::STATE_INGAME)
+		if(pServer->m_aClients[i].m_State != CClient::STATE_EMPTY)
 		{
 			Addr = pServer->m_NetServer.ClientAddr(i);
-			str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d name='%s' score=%d",
-				i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port,
-				pServer->m_aClients[i].m_aName, pServer->m_aClients[i].m_Score);
+			if(pServer->m_aClients[i].m_State == CClient::STATE_INGAME)
+				str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d name='%s' score=%d",
+					i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port,
+					pServer->m_aClients[i].m_aName, pServer->m_aClients[i].m_Score);
+			else
+				str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d connecting",
+					i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port);
 			pServer->Console()->Print(aBuf);
 			dbg_msg("server", "%s", aBuf);
 		}
@@ -1291,6 +1295,13 @@ void CServer::ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserD
 		((CServer *)pUserData)->UpdateServerInfo();
 }
 
+void CServer::ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
+{
+	pfnCallback(pResult, pCallbackUserData);
+	if(pResult->NumArguments())
+		((CServer *)pUserData)->m_NetServer.SetMaxClientsPerIP(pResult->GetInteger(0));
+}
+
 void CServer::RegisterCommands()
 {
 	m_pConsole = Kernel()->RequestInterface<IConsole>();
@@ -1309,6 +1320,8 @@ void CServer::RegisterCommands()
 
 	Console()->Chain("sv_name", ConchainSpecialInfoupdate, this);
 	Console()->Chain("password", ConchainSpecialInfoupdate, this);
+
+	Console()->Chain("sv_max_clients_per_ip", ConchainMaxclientsperipUpdate, this);
 }	
 
 
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index 895a4bd1..70c8899c 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -185,6 +185,7 @@ public:
 	static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
 	static void ConMapReload(IConsole::IResult *pResult, void *pUser);
 	static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
+	static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
 
 	void RegisterCommands();