diff options
Diffstat (limited to 'src/engine/server')
| -rw-r--r-- | src/engine/server/register.cpp | 27 | ||||
| -rw-r--r-- | src/engine/server/register.h | 3 | ||||
| -rw-r--r-- | src/engine/server/server.cpp | 107 | ||||
| -rw-r--r-- | src/engine/server/server.h | 4 |
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); |