diff options
Diffstat (limited to 'src/engine/shared')
| -rw-r--r-- | src/engine/shared/engine.cpp | 3 | ||||
| -rw-r--r-- | src/engine/shared/jobs.h | 1 | ||||
| -rw-r--r-- | src/engine/shared/masterserver.cpp | 42 | ||||
| -rw-r--r-- | src/engine/shared/network_server.cpp | 19 |
4 files changed, 42 insertions, 23 deletions
diff --git a/src/engine/shared/engine.cpp b/src/engine/shared/engine.cpp index 6839cc64..c7a1daad 100644 --- a/src/engine/shared/engine.cpp +++ b/src/engine/shared/engine.cpp @@ -13,8 +13,7 @@ static int HostLookupThread(void *pUser) { CHostLookup *pLookup = (CHostLookup *)pUser; - net_host_lookup(pLookup->m_aHostname, &pLookup->m_Addr, NETTYPE_IPV4); - return 0; + return net_host_lookup(pLookup->m_aHostname, &pLookup->m_Addr, NETTYPE_ALL); } class CEngine : public IEngine diff --git a/src/engine/shared/jobs.h b/src/engine/shared/jobs.h index 61835186..2b0d7d15 100644 --- a/src/engine/shared/jobs.h +++ b/src/engine/shared/jobs.h @@ -34,6 +34,7 @@ public: }; int Status() const { return m_Status; } + int Result() const {return m_Result; } }; class CJobPool diff --git a/src/engine/shared/masterserver.cpp b/src/engine/shared/masterserver.cpp index 545cc16c..3037d152 100644 --- a/src/engine/shared/masterserver.cpp +++ b/src/engine/shared/masterserver.cpp @@ -18,6 +18,7 @@ public: { char m_aHostname[128]; NETADDR m_Addr; + bool m_Valid; CHostLookup m_Lookup; } ; @@ -44,8 +45,11 @@ public: dbg_msg("engine/mastersrv", "refreshing master server addresses"); // add lookup jobs - for(i = 0; i < MAX_MASTERSERVERS; i++) + for(i = 0; i < MAX_MASTERSERVERS; i++) + { m_pEngine->HostLookup(&m_aMasterServers[i].m_Lookup, m_aMasterServers[i].m_aHostname); + m_aMasterServers[i].m_Valid = false; + } m_NeedsUpdate = 1; return 0; @@ -64,8 +68,14 @@ public: m_NeedsUpdate = 1; else { - m_aMasterServers[i].m_Addr = m_aMasterServers[i].m_Lookup.m_Addr; - m_aMasterServers[i].m_Addr.port = 8300; + if(m_aMasterServers[i].m_Lookup.m_Job.Result() == 0) + { + m_aMasterServers[i].m_Addr = m_aMasterServers[i].m_Lookup.m_Addr; + m_aMasterServers[i].m_Addr.port = 8300; + m_aMasterServers[i].m_Valid = true; + } + else + m_aMasterServers[i].m_Valid = false; } } @@ -91,13 +101,18 @@ public: return m_aMasterServers[Index].m_aHostname; } + virtual bool IsValid(int Index) + { + return m_aMasterServers[Index].m_Valid; + } + virtual void DumpServers() { for(int i = 0; i < MAX_MASTERSERVERS; i++) { - dbg_msg("mastersrv", "#%d = %d.%d.%d.%d", i, - m_aMasterServers[i].m_Addr.ip[0], m_aMasterServers[i].m_Addr.ip[1], - m_aMasterServers[i].m_Addr.ip[2], m_aMasterServers[i].m_Addr.ip[3]); + char aAddrStr[NETADDR_MAXSTRSIZE]; + net_addr_str(&m_aMasterServers[i].m_Addr, aAddrStr, sizeof(aAddrStr)); + dbg_msg("mastersrv", "#%d = %s", i, aAddrStr); } } @@ -136,13 +151,10 @@ public: if(!pLine) break; - // parse line - if(sscanf(pLine, "%s %d.%d.%d.%d", Info.m_aHostname, &aIp[0], &aIp[1], &aIp[2], &aIp[3]) == 5) + // parse line + char aAddrStr[NETADDR_MAXSTRSIZE]; + if(sscanf(pLine, "%s %s", Info.m_aHostname, aAddrStr) == 2 && net_addr_from_str(&Info.m_Addr, aAddrStr) == 0) { - Info.m_Addr.ip[0] = (unsigned char)aIp[0]; - Info.m_Addr.ip[1] = (unsigned char)aIp[1]; - Info.m_Addr.ip[2] = (unsigned char)aIp[2]; - Info.m_Addr.ip[3] = (unsigned char)aIp[3]; Info.m_Addr.port = 8300; if(Count != MAX_MASTERSERVERS) { @@ -174,10 +186,10 @@ public: for(int i = 0; i < MAX_MASTERSERVERS; i++) { + char aAddrStr[NETADDR_MAXSTRSIZE]; + net_addr_str(&m_aMasterServers[i].m_Addr, aAddrStr, sizeof(aAddrStr)); char aBuf[1024]; - str_format(aBuf, sizeof(aBuf), "%s %d.%d.%d.%d\n", m_aMasterServers[i].m_aHostname, - m_aMasterServers[i].m_Addr.ip[0], m_aMasterServers[i].m_Addr.ip[1], - m_aMasterServers[i].m_Addr.ip[2], m_aMasterServers[i].m_Addr.ip[3]); + str_format(aBuf, sizeof(aBuf), "%s %s\n", m_aMasterServers[i].m_aHostname, aAddrStr); io_write(File, aBuf, str_length(aBuf)); } diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index 88aac789..76d5f695 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -117,9 +117,13 @@ int CNetServer::BanNum() void CNetServer::BanRemoveByObject(CBan *pBan) { - int IpHash = (pBan->m_Info.m_Addr.ip[0]+pBan->m_Info.m_Addr.ip[1]+pBan->m_Info.m_Addr.ip[2]+pBan->m_Info.m_Addr.ip[3])&0xff; - dbg_msg("netserver", "removing ban on %d.%d.%d.%d", - pBan->m_Info.m_Addr.ip[0], pBan->m_Info.m_Addr.ip[1], pBan->m_Info.m_Addr.ip[2], pBan->m_Info.m_Addr.ip[3]); + int IpHash = (pBan->m_Info.m_Addr.ip[0]+pBan->m_Info.m_Addr.ip[1]+pBan->m_Info.m_Addr.ip[2]+pBan->m_Info.m_Addr.ip[3]+ + pBan->m_Info.m_Addr.ip[4]+pBan->m_Info.m_Addr.ip[5]+pBan->m_Info.m_Addr.ip[6]+pBan->m_Info.m_Addr.ip[7]+ + pBan->m_Info.m_Addr.ip[8]+pBan->m_Info.m_Addr.ip[9]+pBan->m_Info.m_Addr.ip[10]+pBan->m_Info.m_Addr.ip[11]+ + pBan->m_Info.m_Addr.ip[12]+pBan->m_Info.m_Addr.ip[13]+pBan->m_Info.m_Addr.ip[14]+pBan->m_Info.m_Addr.ip[15])&0xff; + char aAddrStr[NETADDR_MAXSTRSIZE]; + net_addr_str(&pBan->m_Info.m_Addr, aAddrStr, sizeof(aAddrStr)); + dbg_msg("netserver", "removing ban on %s", aAddrStr); MACRO_LIST_UNLINK(pBan, m_BanPool_FirstUsed, m_pPrev, m_pNext); MACRO_LIST_UNLINK(pBan, m_aBans[IpHash], m_pHashPrev, m_pHashNext); MACRO_LIST_LINK_FIRST(pBan, m_BanPool_FirstFree, m_pPrev, m_pNext); @@ -127,7 +131,8 @@ void CNetServer::BanRemoveByObject(CBan *pBan) int CNetServer::BanRemove(NETADDR Addr) { - int IpHash = (Addr.ip[0]+Addr.ip[1]+Addr.ip[2]+Addr.ip[3])&0xff; + int IpHash = (Addr.ip[0]+Addr.ip[1]+Addr.ip[2]+Addr.ip[3]+Addr.ip[4]+Addr.ip[5]+Addr.ip[6]+Addr.ip[7]+ + Addr.ip[8]+Addr.ip[9]+Addr.ip[10]+Addr.ip[11]+Addr.ip[12]+Addr.ip[13]+Addr.ip[14]+Addr.ip[15])&0xff; CBan *pBan = m_aBans[IpHash]; MACRO_LIST_FIND(pBan, m_pHashNext, net_addr_comp(&pBan->m_Info.m_Addr, &Addr) == 0); @@ -143,7 +148,8 @@ int CNetServer::BanRemove(NETADDR Addr) int CNetServer::BanAdd(NETADDR Addr, int Seconds, const char *pReason) { - int IpHash = (Addr.ip[0]+Addr.ip[1]+Addr.ip[2]+Addr.ip[3])&0xff; + int IpHash = (Addr.ip[0]+Addr.ip[1]+Addr.ip[2]+Addr.ip[3]+Addr.ip[4]+Addr.ip[5]+Addr.ip[6]+Addr.ip[7]+ + Addr.ip[8]+Addr.ip[9]+Addr.ip[10]+Addr.ip[11]+Addr.ip[12]+Addr.ip[13]+Addr.ip[14]+Addr.ip[15])&0xff; int Stamp = -1; CBan *pBan; @@ -284,7 +290,8 @@ int CNetServer::Recv(CNetChunk *pChunk) { CBan *pBan = 0; NETADDR BanAddr = Addr; - int IpHash = (BanAddr.ip[0]+BanAddr.ip[1]+BanAddr.ip[2]+BanAddr.ip[3])&0xff; + int IpHash = (BanAddr.ip[0]+BanAddr.ip[1]+BanAddr.ip[2]+BanAddr.ip[3]+BanAddr.ip[4]+BanAddr.ip[5]+BanAddr.ip[6]+BanAddr.ip[7]+ + BanAddr.ip[8]+BanAddr.ip[9]+BanAddr.ip[10]+BanAddr.ip[11]+BanAddr.ip[12]+BanAddr.ip[13]+BanAddr.ip[14]+BanAddr.ip[15])&0xff; int Found = 0; BanAddr.port = 0; |