diff options
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/server/server.cpp | 4 | ||||
| -rw-r--r-- | src/engine/shared/network_server.cpp | 13 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 85d27a41..e1d09d9c 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -1619,8 +1619,10 @@ void CServer::ConAddBanmaster(IConsole::IResult *pResult, void *pUser) pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "succesfully added banmaster"); else if (Result == 1) pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "invalid address for banmaster / net lookup failed"); - else + else if(Result == 2) pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "too many banmasters"); + else + pServer->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server/banmaster", "banmaster already exists"); } void CServer::ConBanmasters(IConsole::IResult *pResult, void *pUser) diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index 72966896..b2336a2f 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -272,11 +272,18 @@ int CNetServer::BanmasterAdd(const char *pAddrStr) if(m_NumBanmasters >= MAX_BANMASTERS) return 2; - if(net_host_lookup(pAddrStr, &m_aBanmasters[m_NumBanmasters], NETTYPE_IPV4)) + NETADDR Addr; + if(net_host_lookup(pAddrStr, &Addr, NETTYPE_ALL)) return 1; - if(m_aBanmasters[m_NumBanmasters].port == 0) - m_aBanmasters[m_NumBanmasters].port = BANMASTER_PORT; + if(Addr.port == 0) + Addr.port = BANMASTER_PORT; + + for(int i = 0; i < m_NumBanmasters; i++) + if(mem_comp(&Addr, &m_aBanmasters[i], sizeof(NETADDR)) == 0) + return 3; + + m_aBanmasters[m_NumBanmasters] = Addr; m_NumBanmasters++; return 0; |