| 994 | } |
| 995 | |
| 996 | void CServerBrowser::Refresh(int Type, bool Force) |
| 997 | { |
| 998 | bool ServerListTypeChanged = Force || m_ServerlistType != Type; |
| 999 | int OldServerListType = m_ServerlistType; |
| 1000 | m_ServerlistType = Type; |
| 1001 | secure_random_fill(m_aTokenSeed, sizeof(m_aTokenSeed)); |
| 1002 | |
| 1003 | if(Type == IServerBrowser::TYPE_LAN || (ServerListTypeChanged && OldServerListType == IServerBrowser::TYPE_LAN)) |
| 1004 | CleanUp(); |
| 1005 | |
| 1006 | if(Type == IServerBrowser::TYPE_LAN) |
| 1007 | { |
| 1008 | unsigned char aBuffer[sizeof(SERVERBROWSE_GETINFO) + 1]; |
| 1009 | CNetChunk Packet; |
| 1010 | |
| 1011 | /* do the broadcast version */ |
| 1012 | mem_zero(&Packet, sizeof(Packet)); |
| 1013 | Packet.m_Address.type = (m_pNetClient->NetType() & ~(NETTYPE_WEBSOCKET_IPV4 | NETTYPE_WEBSOCKET_IPV6)) | NETTYPE_LINK_BROADCAST; |
| 1014 | Packet.m_Flags = NETSENDFLAG_CONNLESS | NETSENDFLAG_EXTENDED; |
| 1015 | Packet.m_DataSize = sizeof(aBuffer); |
| 1016 | Packet.m_pData = aBuffer; |
| 1017 | |
| 1018 | int Token = GenerateToken(Packet.m_Address); |
| 1019 | mem_copy(aBuffer, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)); |
| 1020 | aBuffer[sizeof(SERVERBROWSE_GETINFO)] = GetBasicToken(Token); |
| 1021 | |
| 1022 | Packet.m_aExtraData[0] = GetExtraToken(Token) >> 8; |
| 1023 | Packet.m_aExtraData[1] = GetExtraToken(Token) & 0xff; |
| 1024 | |
| 1025 | m_BroadcastTime = time_get(); |
| 1026 | |
| 1027 | CPacker Packer; |
| 1028 | Packer.Reset(); |
| 1029 | Packer.AddRaw(SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)); |
| 1030 | Packer.AddInt(Token); |
| 1031 | |
| 1032 | CNetChunk Packet7; |
| 1033 | mem_zero(&Packet7, sizeof(Packet7)); |
| 1034 | Packet7.m_Address.type = (m_pNetClient->NetType() & ~(NETTYPE_WEBSOCKET_IPV4 | NETTYPE_WEBSOCKET_IPV6)) | NETTYPE_TW7 | NETTYPE_LINK_BROADCAST; |
| 1035 | Packet7.m_Flags = NETSENDFLAG_CONNLESS; |
| 1036 | Packet7.m_DataSize = Packer.Size(); |
| 1037 | Packet7.m_pData = Packer.Data(); |
| 1038 | |
| 1039 | for(int Port = LAN_PORT_BEGIN; Port <= LAN_PORT_END; Port++) |
| 1040 | { |
| 1041 | Packet.m_Address.port = Port; |
| 1042 | m_pNetClient->Send(&Packet); |
| 1043 | |
| 1044 | Packet7.m_Address.port = Port; |
| 1045 | m_pNetClient->Send(&Packet7); |
| 1046 | } |
| 1047 | |
| 1048 | if(g_Config.m_Debug) |
| 1049 | m_pConsole->Print(IConsole::OUTPUT_LEVEL_DEBUG, "serverbrowser", "broadcasting for servers"); |
| 1050 | } |
| 1051 | else |
| 1052 | { |
| 1053 | m_pHttp->Refresh(); |
no test coverage detected