| 899 | } |
| 900 | |
| 901 | void 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); |
no test coverage detected