| 1064 | } |
| 1065 | |
| 1066 | void CServerBrowser::RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const |
| 1067 | { |
| 1068 | if(g_Config.m_Debug) |
| 1069 | { |
| 1070 | char aAddrStr[NETADDR_MAXSTRSIZE]; |
| 1071 | net_addr_str(&Addr, aAddrStr, sizeof(aAddrStr), true); |
| 1072 | char aBuf[256]; |
| 1073 | str_format(aBuf, sizeof(aBuf), "requesting server info from %s", aAddrStr); |
| 1074 | m_pConsole->Print(IConsole::OUTPUT_LEVEL_DEBUG, "serverbrowser", aBuf); |
| 1075 | } |
| 1076 | |
| 1077 | int Token = GenerateToken(Addr); |
| 1078 | if(RandomToken) |
| 1079 | { |
| 1080 | int AvoidBasicToken = GetBasicToken(Token); |
| 1081 | do |
| 1082 | { |
| 1083 | secure_random_fill(&Token, sizeof(Token)); |
| 1084 | Token &= 0xffffff; |
| 1085 | } while(GetBasicToken(Token) == AvoidBasicToken); |
| 1086 | } |
| 1087 | if(pToken) |
| 1088 | { |
| 1089 | *pToken = Token; |
| 1090 | } |
| 1091 | if(pBasicToken) |
| 1092 | { |
| 1093 | *pBasicToken = GetBasicToken(Token); |
| 1094 | } |
| 1095 | |
| 1096 | if(Addr.type & NETTYPE_TW7) |
| 1097 | { |
| 1098 | CPacker Packer; |
| 1099 | Packer.Reset(); |
| 1100 | Packer.AddRaw(SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)); |
| 1101 | Packer.AddInt(Token); |
| 1102 | |
| 1103 | CNetChunk Packet; |
| 1104 | Packet.m_ClientId = -1; |
| 1105 | Packet.m_Address = Addr; |
| 1106 | Packet.m_Flags = NETSENDFLAG_CONNLESS; |
| 1107 | Packet.m_DataSize = Packer.Size(); |
| 1108 | Packet.m_pData = Packer.Data(); |
| 1109 | mem_zero(&Packet.m_aExtraData, sizeof(Packet.m_aExtraData)); |
| 1110 | |
| 1111 | m_pNetClient->Send(&Packet); |
| 1112 | } |
| 1113 | else |
| 1114 | { |
| 1115 | unsigned char aBuffer[sizeof(SERVERBROWSE_GETINFO) + 1]; |
| 1116 | mem_copy(aBuffer, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)); |
| 1117 | aBuffer[sizeof(SERVERBROWSE_GETINFO)] = GetBasicToken(Token); |
| 1118 | |
| 1119 | CNetChunk Packet; |
| 1120 | Packet.m_ClientId = -1; |
| 1121 | Packet.m_Address = Addr; |
| 1122 | Packet.m_Flags = NETSENDFLAG_CONNLESS | NETSENDFLAG_EXTENDED; |
| 1123 | Packet.m_DataSize = sizeof(aBuffer); |
nothing calls this directly
no test coverage detected