diff options
Diffstat (limited to 'src/engine/shared/masterserver.cpp')
| -rw-r--r-- | src/engine/shared/masterserver.cpp | 42 |
1 files changed, 27 insertions, 15 deletions
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)); } |