diff --git a/src/base/system.c b/src/base/system.c index 5e37ea638..3708612ac 100644 --- a/src/base/system.c +++ b/src/base/system.c @@ -693,9 +693,9 @@ int net_host_lookup(const char *hostname, NETADDR *addr, int types) if(priv_net_extract(hostname, host, sizeof(host), &port)) return -1; - /* + dbg_msg("host lookup", "host='%s' port=%d %d", host, port, types); - */ + mem_zero(&hints, sizeof(hints)); diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index 46fae2876..cf99d2e18 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -935,15 +935,20 @@ void CClient::ProcessConnlessPacket(CNetChunk *pPacket) for(int i = 0; i < IMasterServer::MAX_MASTERSERVERS; i++) { if(!m_pMasterServer->IsValid(i)) - continue; - if(net_addr_comp(&pPacket->m_Address, &m_pMasterServer->GetAddr(i)) == 0) + continue; + NETADDR tmp = m_pMasterServer->GetAddr(i); + if(net_addr_comp(&pPacket->m_Address, &tmp) == 0) { ServerID = i; break; } } if(ServerCount > -1 && ServerID != -1) + { m_pMasterServer->SetCount(ServerID, ServerCount); + if(g_Config.m_Debug) + dbg_msg("MasterCount", "Server %d got %d servers", ServerID, ServerCount); + } } // server list from master server if(pPacket->m_DataSize >= (int)sizeof(SERVERBROWSE_LIST) && diff --git a/src/engine/client/serverbrowser.cpp b/src/engine/client/serverbrowser.cpp index 0ea730a9a..3ed5ec3b4 100644 --- a/src/engine/client/serverbrowser.cpp +++ b/src/engine/client/serverbrowser.cpp @@ -617,7 +617,7 @@ void CServerBrowser::Update(bool ForceResort) Addr = m_pMasterServer->GetAddr(i); m_pMasterServer->SetCount(i, -1); Packet.m_Address = Addr; - m_pNetClient->Send(&Packet); + m_pNetClient->Send(&Packet); if(g_Config.m_Debug) { dbg_msg("client_srvbrowse", "Count-Request sent to %d", i); @@ -636,10 +636,14 @@ void CServerBrowser::Update(bool ForceResort) int Count = m_pMasterServer->GetCount(i); if(Count == -1) { + /* ignore Server m_MasterServerCount = -1; - return; // we don't have the required server information + return; + // we don't have the required server information + */ } - m_MasterServerCount += Count; + else + m_MasterServerCount += Count; } //request Server-List NETADDR Addr; @@ -664,7 +668,31 @@ void CServerBrowser::Update(bool ForceResort) dbg_msg("client_srvbrowse", "ServerCount: %d, requesting server list", m_MasterServerCount); } m_LastPacketTick = 0; - } + } + else if(m_MasterServerCount > -1) + { + m_MasterServerCount = 0; + for(int i = 0; i < IMasterServer::MAX_MASTERSERVERS; i++) + { + if(!m_pMasterServer->IsValid(i)) + continue; + int Count = m_pMasterServer->GetCount(i); + if(Count == -1) + { + /* ignore Server + m_MasterServerCount = -1; + return; + // we don't have the required server information + */ + } + else + m_MasterServerCount += Count; + } + if(g_Config.m_Debug) + { + dbg_msg("client_srvbrowse", "ServerCount2: %d", m_MasterServerCount); + } + } if(m_MasterServerCount > m_NumRequests + m_LastPacketTick) { ++m_LastPacketTick; @@ -722,8 +750,8 @@ void CServerBrowser::Update(bool ForceResort) pNext = pEntry->m_pNextReq; RemoveRequest(pEntry); //release request pEntry = pNext; - } - } + } + } // check if we need to resort if(m_Sorthash != SortHash() || ForceResort) diff --git a/src/engine/shared/masterserver.cpp b/src/engine/shared/masterserver.cpp index 624177141..9a5f3a4a1 100644 --- a/src/engine/shared/masterserver.cpp +++ b/src/engine/shared/masterserver.cpp @@ -55,7 +55,9 @@ public: { m_pEngine->HostLookup(&m_aMasterServers[i].m_Lookup, m_aMasterServers[i].m_aHostname, Nettype); m_aMasterServers[i].m_Valid = false; - m_aMasterServers[i].m_Count = -1; + m_aMasterServers[i].m_Count = 0; + + //dbg_msg("MasterServer", "Lookup id: %d, name: %s, nettype: %d", i, m_aMasterServers[i].m_aHostname, Nettype); } m_State = STATE_UPDATE; @@ -80,9 +82,15 @@ public: 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; + + //dbg_msg("MasterServer", "Set server %d, name: %s with addr-port: %d addr-ip %s addr-type %d", i, m_aMasterServers[i].m_aHostname, m_aMasterServers[i].m_Addr.port, m_aMasterServers[i].m_Addr.ip, m_aMasterServers[i].m_Addr.type); } else + { m_aMasterServers[i].m_Valid = false; + + // dbg_msg("MasterServer", "Dropped %d, name: %s with addr-port: %d addr-ip %s addr-type %d", i, m_aMasterServers[i].m_aHostname); + } } }