about summary refs log tree commit diff
path: root/src/engine/shared/masterserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/shared/masterserver.cpp')
-rw-r--r--src/engine/shared/masterserver.cpp42
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));
 		}