MCPcopy Create free account
hub / github.com/ddnet/ddnet / OnServerInfoUpdate

Method OnServerInfoUpdate

src/engine/client/serverbrowser.cpp:901–994  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

899}
900
901void CServerBrowser::OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo)
902{
903 int BasicToken = Token;
904 int ExtraToken = 0;
905 if(pInfo->m_Type == SERVERINFO_EXTENDED)
906 {
907 BasicToken = Token & 0xff;
908 ExtraToken = Token >> 8;
909 }
910
911 CServerEntry *pEntry = Find(Addr);
912
913 if(m_ServerlistType == IServerBrowser::TYPE_LAN)
914 {
915 if(!pEntry)
916 {
917 NETADDR LookupAddr = Addr;
918 if(Addr.type & NETTYPE_TW7)
919 {
920 // don't add 0.7 server if 0.6 server with the same IP and port already exists
921 LookupAddr.type &= ~NETTYPE_TW7;
922 pEntry = Find(LookupAddr);
923 if(pEntry)
924 return;
925 }
926 else
927 {
928 // replace 0.7 bridge server with 0.6
929 LookupAddr.type |= NETTYPE_TW7;
930 pEntry = Find(LookupAddr);
931 if(pEntry)
932 pEntry = ReplaceEntry(pEntry, &Addr, 1);
933 }
934 }
935
936 NETADDR Broadcast = NETADDR_ZEROED;
937 Broadcast.type = (m_pNetClient->NetType() & ~(NETTYPE_WEBSOCKET_IPV4 | NETTYPE_WEBSOCKET_IPV6)) | NETTYPE_LINK_BROADCAST;
938 int TokenBC = GenerateToken(Broadcast);
939 bool Drop = false;
940 Drop = Drop || BasicToken != GetBasicToken(TokenBC);
941 Drop = Drop || (pInfo->m_Type == SERVERINFO_EXTENDED && ExtraToken != GetExtraToken(TokenBC));
942 if(Drop)
943 {
944 return;
945 }
946
947 if(!pEntry)
948 pEntry = Add(&Addr, 1);
949 }
950 else
951 {
952 if(!pEntry)
953 {
954 return;
955 }
956 int TokenAddr = GenerateToken(Addr);
957 bool Drop = false;
958 Drop = Drop || BasicToken != GetBasicToken(TokenAddr);

Callers 1

ProcessServerInfoMethod · 0.80

Calls 6

time_getFunction · 0.85
time_freqFunction · 0.85
net_addr_strFunction · 0.85
dbg_msgFunction · 0.85
minimumFunction · 0.50
NetTypeMethod · 0.45

Tested by

no test coverage detected