about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/register.cpp27
-rw-r--r--src/engine/server/register.h3
-rw-r--r--src/engine/server/server.cpp107
-rw-r--r--src/engine/server/server.h4
4 files changed, 95 insertions, 46 deletions
diff --git a/src/engine/server/register.cpp b/src/engine/server/register.cpp
index e9616ca1..925fef30 100644
--- a/src/engine/server/register.cpp
+++ b/src/engine/server/register.cpp
@@ -2,6 +2,7 @@
 #include <engine/shared/network.h>
 #include <engine/shared/config.h>
 #include <engine/shared/engine.h>
+#include <engine/console.h>
 #include <engine/masterserver.h>
 
 #include <mastersrv/mastersrv.h>
@@ -12,6 +13,7 @@ CRegister::CRegister()
 {
 	m_pNetServer = 0;
 	m_pMasterServer = 0;
+	m_pConsole = 0;
 
 	m_RegisterState = REGISTERSTATE_START;
 	m_RegisterStateStart = 0;
@@ -87,10 +89,11 @@ void CRegister::RegisterGotCount(CNetChunk *pChunk)
 	}
 }
 
-void CRegister::Init(CNetServer *pNetServer, IEngineMasterServer *pMasterServer)
+void CRegister::Init(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole)
 {
 	m_pNetServer = pNetServer;
 	m_pMasterServer = pMasterServer;
+	m_pConsole = pConsole;
 }
 
 void CRegister::RegisterUpdate()
@@ -109,7 +112,7 @@ void CRegister::RegisterUpdate()
 		m_RegisterFirst = 1;
 		RegisterNewState(REGISTERSTATE_UPDATE_ADDRS);
 		m_pMasterServer->RefreshAddresses();
-		dbg_msg("register", "refreshing ip addresses");
+		m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "refreshing ip addresses");
 	}
 	else if(m_RegisterState == REGISTERSTATE_UPDATE_ADDRS)
 	{
@@ -134,7 +137,7 @@ void CRegister::RegisterUpdate()
 				}
 			}
 			
-			dbg_msg("register", "fetching server counts");
+			m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "fetching server counts");
 			RegisterNewState(REGISTERSTATE_QUERY_COUNT);
 		}
 	}
@@ -176,12 +179,14 @@ void CRegister::RegisterUpdate()
 			m_RegisterRegisteredServer = Best;
 			if(m_RegisterRegisteredServer == -1)
 			{
-				dbg_msg("register", "WARNING: No master servers. Retrying in 60 seconds");
+				m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "WARNING: No master servers. Retrying in 60 seconds");
 				RegisterNewState(REGISTERSTATE_ERROR);
 			}
 			else
 			{			
-				dbg_msg("register", "choosen '%s' as master, sending heartbeats", m_pMasterServer->GetName(m_RegisterRegisteredServer));
+				char aBuf[256];
+				str_format(aBuf, sizeof(aBuf), "choosen '%s' as master, sending heartbeats", m_pMasterServer->GetName(m_RegisterRegisteredServer));
+				m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", aBuf);
 				m_aMasterserverInfo[m_RegisterRegisteredServer].m_LastSend = 0;
 				RegisterNewState(REGISTERSTATE_HEARTBEAT);
 			}
@@ -198,14 +203,14 @@ void CRegister::RegisterUpdate()
 		
 		if(Now > m_RegisterStateStart+Freq*60)
 		{
-			dbg_msg("register", "WARNING: Master server is not responding, switching master");
+			m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "WARNING: Master server is not responding, switching master");
 			RegisterNewState(REGISTERSTATE_START);
 		}
 	}
 	else if(m_RegisterState == REGISTERSTATE_REGISTERED)
 	{
 		if(m_RegisterFirst)
-			dbg_msg("register", "server registered");
+			m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "server registered");
 			
 		m_RegisterFirst = 0;
 		
@@ -258,15 +263,17 @@ int CRegister::RegisterProcessPacket(CNetChunk *pPacket)
 		mem_comp(pPacket->m_pData, SERVERBROWSE_FWOK, sizeof(SERVERBROWSE_FWOK)) == 0)
 	{
 		if(m_RegisterFirst)
-			dbg_msg("register", "no firewall/nat problems detected");
+			m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "no firewall/nat problems detected");
 		RegisterNewState(REGISTERSTATE_REGISTERED);
 		return 1;
 	}
 	else if(pPacket->m_DataSize == sizeof(SERVERBROWSE_FWERROR) &&
 		mem_comp(pPacket->m_pData, SERVERBROWSE_FWERROR, sizeof(SERVERBROWSE_FWERROR)) == 0)
 	{
-		dbg_msg("register", "ERROR: the master server reports that clients can not connect to this server.");
-		dbg_msg("register", "ERROR: configure your firewall/nat to let through udp on port %d.", g_Config.m_SvPort);
+		m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", "ERROR: the master server reports that clients can not connect to this server.");
+		char aBuf[256];
+		str_format(aBuf, sizeof(aBuf), "ERROR: configure your firewall/nat to let through udp on port %d.", g_Config.m_SvPort);
+		m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "register", aBuf);
 		RegisterNewState(REGISTERSTATE_ERROR);
 		return 1;
 	}
diff --git a/src/engine/server/register.h b/src/engine/server/register.h
index ea1d9dcc..bc98b7d9 100644
--- a/src/engine/server/register.h
+++ b/src/engine/server/register.h
@@ -23,6 +23,7 @@ class CRegister
 
 	class CNetServer *m_pNetServer;
 	class IEngineMasterServer *m_pMasterServer;
+	class IConsole *m_pConsole;
 
 	int m_RegisterState;
 	int64 m_RegisterStateStart;
@@ -40,7 +41,7 @@ class CRegister
 
 public:
 	CRegister();
-	void Init(class CNetServer *pNetServer, class IEngineMasterServer *pMasterServer);
+	void Init(class CNetServer *pNetServer, class IEngineMasterServer *pMasterServer, class IConsole *pConsole);
 	void RegisterUpdate();
 	int RegisterProcessPacket(class CNetChunk *pPacket);
 };
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 9c2af790..710b54e1 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -192,7 +192,9 @@ int CServer::TrySetClientName(int ClientID, const char *pName)
 	// trim the name
 	str_copy(aTrimmedName, StrLtrim(pName), sizeof(aTrimmedName));
 	StrRtrim(aTrimmedName);
-	dbg_msg("", "'%s' -> '%s'", pName, aTrimmedName);
+	char aBuf[256];
+	str_format(aBuf, sizeof(aBuf), "'%s' -> '%s'", pName, aTrimmedName);
+	Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);
 	pName = aTrimmedName;
 	
 	
@@ -535,10 +537,19 @@ int CServer::NewClientCallback(int ClientId, void *pUser)
 	return 0;
 }
 
-int CServer::DelClientCallback(int ClientId, void *pUser)
+int CServer::DelClientCallback(int ClientId, const char *pReason, void *pUser)
 {
 	CServer *pThis = (CServer *)pUser;
 	
+	NETADDR Addr = pThis->m_NetServer.ClientAddr(ClientId);
+	char aBuf[256];
+	str_format(aBuf, sizeof(aBuf), "client dropped. cid=%d ip=%d.%d.%d.%d reason=\"%s\"",
+		ClientId,
+		Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3],
+		pReason
+	);
+	pThis->Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);
+
 	// notify the mod about the drop
 	if(pThis->m_aClients[ClientId].m_State >= CClient::STATE_READY)
 		pThis->GameServer()->OnClientDrop(ClientId);
@@ -670,7 +681,11 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 				SendMsgEx(&Msg, MSGFLAG_VITAL|MSGFLAG_FLUSH, ClientId, true);
 				
 				if(g_Config.m_Debug)
-					dbg_msg("server", "sending chunk %d with size %d", Chunk, ChunkSize);
+				{
+					char aBuf[256];
+					str_format(aBuf, sizeof(aBuf), "sending chunk %d with size %d", Chunk, ChunkSize);
+					Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "server", aBuf);
+				}
 			}
 			else if(Msg == NETMSG_READY)
 			{
@@ -678,8 +693,10 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 				{
 					Addr = m_NetServer.ClientAddr(ClientId);
 					
-					dbg_msg("server", "player is ready. ClientId=%x ip=%d.%d.%d.%d",
+					char aBuf[256];
+					str_format(aBuf, sizeof(aBuf), "player is ready. ClientId=%x ip=%d.%d.%d.%d",
 						ClientId, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3]);
+					Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);
 					m_aClients[ClientId].m_State = CClient::STATE_READY;
 					GameServer()->OnClientConnected(ClientId);
 				}
@@ -690,8 +707,10 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 				{
 					Addr = m_NetServer.ClientAddr(ClientId);
 					
-					dbg_msg("server", "player has entered the game. ClientId=%x ip=%d.%d.%d.%d",
+					char aBuf[256];
+					str_format(aBuf, sizeof(aBuf), "player has entered the game. ClientId=%x ip=%d.%d.%d.%d",
 						ClientId, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3]);
+					Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 					m_aClients[ClientId].m_State = CClient::STATE_INGAME;
 					GameServer()->OnClientEnter(ClientId);
 				}
@@ -754,7 +773,9 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 				
 				if(Unpacker.Error() == 0 && m_aClients[ClientId].m_Authed)
 				{
-					dbg_msg("server", "ClientId=%d rcon='%s'", ClientId, pCmd);
+					char aBuf[256];
+					str_format(aBuf, sizeof(aBuf), "ClientId=%d rcon='%s'", ClientId, pCmd);
+					Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);
 					Console()->ExecuteLine(pCmd);
 				}
 			}
@@ -778,7 +799,9 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 						
 						m_aClients[ClientId].m_Authed = 1;
 						SendRconLine(ClientId, "Authentication successful. Remote console access granted.");
-						dbg_msg("server", "ClientId=%d authed", ClientId);
+						char aBuf[256];
+						str_format(aBuf, sizeof(aBuf), "ClientId=%d authed", ClientId);
+						Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 					}
 					else
 					{
@@ -804,8 +827,10 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket)
 					aBuf[b*3+3] = 0;
 				}
 
-				dbg_msg("server", "strange message ClientId=%d msg=%d data_size=%d", ClientId, Msg, pPacket->m_DataSize);
-				dbg_msg("server", "%s", aBuf);
+				char aBufMsg[256];
+				str_format(aBufMsg, sizeof(aBufMsg), "strange message ClientId=%d msg=%d data_size=%d", ClientId, Msg, pPacket->m_DataSize);
+				Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBufMsg);
+				Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);
 				
 			}
 		}
@@ -963,7 +988,9 @@ int CServer::LoadMap(const char *pMapName)
 	
 	// get the crc of the map
 	m_CurrentMapCrc = m_pMap->Crc();
-	dbg_msg("server", "%s crc is %08x", aBuf, m_CurrentMapCrc);
+	char aBufMsg[256];
+	str_format(aBufMsg, sizeof(aBufMsg), "%s crc is %08x", aBuf, m_CurrentMapCrc);
+	Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBufMsg);
 		
 	str_copy(m_aCurrentMap, pMapName, sizeof(m_aCurrentMap));
 	//map_set(df);
@@ -986,9 +1013,9 @@ void CServer::InitEngine(const char *pAppname)
 	m_Engine.Init(pAppname);
 }
 
-void CServer::InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer)
+void CServer::InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole)
 {
-	m_Register.Init(pNetServer, pMasterServer);
+	m_Register.Init(pNetServer, pMasterServer, pConsole);
 }
 
 int CServer::Run()
@@ -1033,10 +1060,13 @@ int CServer::Run()
 
 	m_NetServer.SetCallbacks(NewClientCallback, DelClientCallback, this);
 	
-	dbg_msg("server", "server name is '%s'", g_Config.m_SvName);
+	char aBuf[256];
+	str_format(aBuf, sizeof(aBuf), "server name is '%s'", g_Config.m_SvName);
+	Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 	
 	GameServer()->OnInit();
-	dbg_msg("server", "version %s", GameServer()->NetVersion());
+	str_format(aBuf, sizeof(aBuf), "version %s", GameServer()->NetVersion());
+	Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 
 	// process pending commands
 	m_pConsole->StoreCommands(false);
@@ -1050,7 +1080,10 @@ int CServer::Run()
 		m_GameStartTime = time_get();
 	
 		if(g_Config.m_Debug)
-			dbg_msg("server", "baseline memory usage %dk", mem_stats()->allocated/1024);
+		{
+			str_format(aBuf, sizeof(aBuf), "baseline memory usage %dk", mem_stats()->allocated/1024);
+			Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "server", aBuf);
+		}
 
 		while(m_RunServer)
 		{
@@ -1086,7 +1119,8 @@ int CServer::Run()
 				}
 				else
 				{
-					dbg_msg("server", "failed to load map. mapname='%s'", g_Config.m_SvMap);
+					str_format(aBuf, sizeof(aBuf), "failed to load map. mapname='%s'", g_Config.m_SvMap);
+					Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 					str_copy(g_Config.m_SvMap, m_aCurrentMap, sizeof(g_Config.m_SvMap));
 				}
 			}
@@ -1194,7 +1228,7 @@ void CServer::ConBan(IConsole::IResult *pResult, void *pUser)
 
 		if(ClientId < 0 || ClientId >= MAX_CLIENTS || ((CServer *)pUser)->m_aClients[ClientId].m_State == CClient::STATE_EMPTY)
 		{
-			dbg_msg("server", "invalid client id");
+			((CServer *)pUser)->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", "invalid client id");
 			return;
 		}
 
@@ -1205,10 +1239,12 @@ void CServer::ConBan(IConsole::IResult *pResult, void *pUser)
 	Addr.port = 0;
 	net_addr_str(&Addr, aAddrStr, sizeof(aAddrStr));
 	
+	char aBuf[256];
 	if(Minutes)
-		dbg_msg("server", "banned %s for %d minutes", aAddrStr, Minutes);
+		str_format(aBuf, sizeof(aBuf), "banned %s for %d minutes", aAddrStr, Minutes);
 	else
-		dbg_msg("server", "banned %s for life", aAddrStr);
+		str_format(aBuf, sizeof(aBuf), "banned %s for life", aAddrStr);
+	((CServer *)pUser)->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 }
 
 void CServer::ConUnban(IConsole::IResult *pResult, void *pUser)
@@ -1217,19 +1253,27 @@ void CServer::ConUnban(IConsole::IResult *pResult, void *pUser)
 	CServer *pServer = (CServer *)pUser;
 	const char *pStr = pResult->GetString(0);
 	
-	if(net_addr_from_str(&Addr, pStr) == 0)
-		pServer->BanRemove(Addr);
+	if(net_addr_from_str(&Addr, pStr) == 0 && !pServer->BanRemove(Addr))
+	{
+		char aBuf[256];
+		str_format(aBuf, sizeof(aBuf), "unbanned %d.%d.%d.%d", Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3]);
+		pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
+	}
 	else if(StrAllnum(pStr))
 	{
 		int BanIndex = str_toint(pStr);
 		CNetServer::CBanInfo Info;
 		if(BanIndex < 0 || !pServer->m_NetServer.BanGet(BanIndex, &Info))
-			dbg_msg("server", "invalid ban index");
-		else
-			pServer->BanRemove(Info.m_Addr);
+			pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", "invalid ban index");
+		else if(!pServer->BanRemove(Info.m_Addr))
+		{
+			char aBuf[256];
+			str_format(aBuf, sizeof(aBuf), "unbanned %d.%d.%d.%d", Info.m_Addr.ip[0], Info.m_Addr.ip[1], Info.m_Addr.ip[2], Info.m_Addr.ip[3]);
+			pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
+		}
 	}
 	else
-		dbg_msg("server", "invalid network address");
+		pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", "invalid network address");
 }
 
 void CServer::ConBans(IConsole::IResult *pResult, void *pUser)
@@ -1254,12 +1298,10 @@ void CServer::ConBans(IConsole::IResult *pResult, void *pUser)
 			unsigned t = Info.m_Expires - Now;
 			str_format(aBuf, sizeof(aBuf), "#%d %d.%d.%d.%d for %d minutes and %d seconds", i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], t/60, t%60);
 		}
-		pServer->Console()->Print(aBuf);
-		dbg_msg("server", "%s", aBuf);
+		pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "Server", aBuf);
 	}
 	str_format(aBuf, sizeof(aBuf), "%d ban(s)", Num);
-	pServer->Console()->Print(aBuf);
-	dbg_msg("server", "%s", aBuf);
+	pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "Server", aBuf);
 }
 
 void CServer::ConStatus(IConsole::IResult *pResult, void *pUser)
@@ -1281,8 +1323,7 @@ void CServer::ConStatus(IConsole::IResult *pResult, void *pUser)
 			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);
+			pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "Server", aBuf);
 		}
 	}
 }
@@ -1296,7 +1337,7 @@ void CServer::ConRecord(IConsole::IResult *pResult, void *pUser)
 {
 	char aFilename[512];
 	str_format(aFilename, sizeof(aFilename), "demos/%s.demo", pResult->GetString(0));
-	((CServer *)pUser)->m_DemoRecorder.Start(((CServer *)pUser)->Storage(), aFilename, ((CServer *)pUser)->GameServer()->NetVersion(), ((CServer *)pUser)->m_aCurrentMap, ((CServer *)pUser)->m_CurrentMapCrc, "server");
+	((CServer *)pUser)->m_DemoRecorder.Start(((CServer *)pUser)->Storage(), ((CServer *)pUser)->Console(), aFilename, ((CServer *)pUser)->GameServer()->NetVersion(), ((CServer *)pUser)->m_aCurrentMap, ((CServer *)pUser)->m_CurrentMapCrc, "server");
 }
 
 void CServer::ConStopRecord(IConsole::IResult *pResult, void *pUser)
@@ -1399,7 +1440,7 @@ int main(int argc, const char **argv) // ignore_convention
 	IStorage *pStorage = CreateStorage("Teeworlds", argc, argv); // ignore_convention
 	IConfig *pConfig = CreateConfig();
 	
-	pServer->InitRegister(&pServer->m_NetServer, pEngineMasterServer);
+	pServer->InitRegister(&pServer->m_NetServer, pEngineMasterServer, pConsole);
 
 	{
 		bool RegisterFail = false;
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index 70c8899c..756c1054 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -152,7 +152,7 @@ public:
 	void DoSnapshot();
 
 	static int NewClientCallback(int ClientId, void *pUser);
-	static int DelClientCallback(int ClientId, void *pUser);
+	static int DelClientCallback(int ClientId, const char *pReason, void *pUser);
 
 	void SendMap(int ClientId);
 	void SendRconLine(int ClientId, const char *pLine);
@@ -172,7 +172,7 @@ public:
 	int LoadMap(const char *pMapName);
 
 	void InitEngine(const char *pAppname);
-	void InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer);
+	void InitRegister(CNetServer *pNetServer, IEngineMasterServer *pMasterServer, IConsole *pConsole);
 	int Run();
 
 	static void ConKick(IConsole::IResult *pResult, void *pUser);