void CServerBrowser::DDNetFilterRem(char *pFilter, const char *pName) { if (!DDNetFiltered(pFilter, pName)) return; // rewrite exclude/filter list char aBuf[128]; char *p; str_copy(aBuf, pFilter, sizeof(aBuf)); pFilter[0] = '\0'; p = strtok(aBuf, ","); while(p) { if(str_comp_nocase(pName, p) != 0) { char aBuf2[128]; str_format(aBuf2, sizeof(aBuf2), ",%s", p); str_append(pFilter, aBuf2, 128); } p = strtok(NULL, ","); } }
void CServerBrowser::DDNetFilterAdd(char *pFilter, const char *pName) { if (DDNetFiltered(pFilter, pName)) return; char aBuf[128]; str_format(aBuf, sizeof(aBuf), ",%s", pName); str_append(pFilter, aBuf, 128); }
void CServerBrowser::DDNetTypeFilterClean() { char aNewList[128]; for(int i = 0; i < m_NumDDNetTypes; i++) { const char *pName = m_aDDNetTypes[i]; if(DDNetFiltered(g_Config.m_BrFilterExcludeTypes, pName)) { char aBuf[128]; str_format(aBuf, sizeof(aBuf), ",%s", pName); str_append(aNewList, aBuf, sizeof(aNewList)); } } str_copy(g_Config.m_BrFilterExcludeTypes, aNewList, sizeof(g_Config.m_BrFilterExcludeTypes)); }
void CServerBrowser::Refresh(int Type, int NoReload) { if(m_ServerdataLocked) return; if(NoReload || Type < 0) { if(NoReload == 1 && !IsRefreshing()) m_NeedUpgrade = true; if(NoReload == 2 && m_NeedUpgrade) Upgrade(); return; } // clear out everything m_ServerlistHeap.Reset(); m_NumServers = 0; m_NumSortedServers = 0; mem_zero(m_aServerlistIp, sizeof(m_aServerlistIp)); m_pFirstReqServer = 0; m_pLastReqServer = 0; m_NumRequests = 0; m_CurrentMaxRequests = g_Config.m_BrMaxRequests; // next token m_CurrentToken = (m_CurrentToken+1)&0xff; // m_ServerlistType = Type; m_NeedUpgrade = false; if(Type == IServerBrowser::TYPE_LAN) { unsigned char Buffer[sizeof(SERVERBROWSE_GETINFO)+1]; CNetChunk Packet; int i; mem_copy(Buffer, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)); Buffer[sizeof(SERVERBROWSE_GETINFO)] = m_CurrentToken; /* do the broadcast version */ Packet.m_ClientID = -1; mem_zero(&Packet, sizeof(Packet)); Packet.m_Address.type = m_pNetClient->NetType()|NETTYPE_LINK_BROADCAST; Packet.m_Flags = NETSENDFLAG_CONNLESS; Packet.m_DataSize = sizeof(Buffer); Packet.m_pData = Buffer; m_BroadcastTime = time_get(); for(i = 8303; i <= 8310; i++) { Packet.m_Address.port = i; m_pNetClient->Send(&Packet); } if(g_Config.m_Debug) m_pConsole->Print(IConsole::OUTPUT_LEVEL_DEBUG, "client_srvbrowse", "broadcasting for servers"); } else if(Type == IServerBrowser::TYPE_INTERNET) { m_NeedRefresh = 1; } else if(Type == IServerBrowser::TYPE_FAVORITES) { for(int i = 0; i < m_NumFavoriteServers; i++) Set(m_aFavoriteServers[i], IServerBrowser::SET_FAV_ADD, -1, 0); } else if(Type == IServerBrowser::TYPE_RECENT) { for(int i = 0; i < m_aRecentServers.size(); i++) Set(m_aRecentServers[i].m_Addr, IServerBrowser::SET_RECENT, -1, 0); } else if(Type == IServerBrowser::TYPE_DDNET) { LoadDDNet(); // remove unknown elements of exclude list DDNetCountryFilterClean(); DDNetTypeFilterClean(); for(int i = 0; i < m_NumDDNetCountries; i++) { CDDNetCountry *pCntr = &m_aDDNetCountries[i]; // check for filter if(DDNetFiltered(g_Config.m_BrFilterExcludeCountries, pCntr->m_aName)) continue; for(int g = 0; g < pCntr->m_NumServers; g++) { if(!DDNetFiltered(g_Config.m_BrFilterExcludeTypes, pCntr->m_aTypes[g])) Set(pCntr->m_aServers[g], IServerBrowser::SET_DDNET_ADD, -1, 0); } } } }