| 2795 | } |
| 2796 | |
| 2797 | void CServer::PumpNetwork(bool PacketWaiting) |
| 2798 | { |
| 2799 | CNetChunk Packet; |
| 2800 | SECURITY_TOKEN ResponseToken; |
| 2801 | |
| 2802 | m_NetServer.Update(); |
| 2803 | |
| 2804 | if(PacketWaiting) |
| 2805 | { |
| 2806 | // process packets |
| 2807 | ResponseToken = NET_SECURITY_TOKEN_UNKNOWN; |
| 2808 | while(m_NetServer.Recv(&Packet, &ResponseToken)) |
| 2809 | { |
| 2810 | if(Packet.m_ClientId == -1) |
| 2811 | { |
| 2812 | if(ResponseToken == NET_SECURITY_TOKEN_UNKNOWN && m_pRegister->OnPacket(&Packet)) |
| 2813 | continue; |
| 2814 | |
| 2815 | { |
| 2816 | int ExtraToken = 0; |
| 2817 | int Type = -1; |
| 2818 | if(Packet.m_DataSize >= (int)sizeof(SERVERBROWSE_GETINFO) + 1 && |
| 2819 | mem_comp(Packet.m_pData, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)) == 0) |
| 2820 | { |
| 2821 | if(Packet.m_Flags & NETSENDFLAG_EXTENDED) |
| 2822 | { |
| 2823 | Type = SERVERINFO_EXTENDED; |
| 2824 | ExtraToken = (Packet.m_aExtraData[0] << 8) | Packet.m_aExtraData[1]; |
| 2825 | } |
| 2826 | else |
| 2827 | Type = SERVERINFO_VANILLA; |
| 2828 | } |
| 2829 | else if(Packet.m_DataSize >= (int)sizeof(SERVERBROWSE_GETINFO_64_LEGACY) + 1 && |
| 2830 | mem_comp(Packet.m_pData, SERVERBROWSE_GETINFO_64_LEGACY, sizeof(SERVERBROWSE_GETINFO_64_LEGACY)) == 0) |
| 2831 | { |
| 2832 | Type = SERVERINFO_64_LEGACY; |
| 2833 | } |
| 2834 | if(Type == SERVERINFO_VANILLA && ResponseToken != NET_SECURITY_TOKEN_UNKNOWN && Config()->m_SvSixup) |
| 2835 | { |
| 2836 | CUnpacker Unpacker; |
| 2837 | Unpacker.Reset((unsigned char *)Packet.m_pData + sizeof(SERVERBROWSE_GETINFO), Packet.m_DataSize - sizeof(SERVERBROWSE_GETINFO)); |
| 2838 | int SrvBrwsToken = Unpacker.GetInt(); |
| 2839 | if(Unpacker.Error()) |
| 2840 | { |
| 2841 | continue; |
| 2842 | } |
| 2843 | |
| 2844 | CPacker Packer; |
| 2845 | Packer.Reset(); |
| 2846 | Packer.AddRaw(SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)); |
| 2847 | Packer.AddInt(SrvBrwsToken); |
| 2848 | GetServerInfoSixup(&Packer, RateLimitServerInfoConnless()); |
| 2849 | CNetBase::SendPacketConnlessWithToken7(m_NetServer.Socket(), &Packet.m_Address, Packer.Data(), Packer.Size(), ResponseToken, m_NetServer.GetToken(Packet.m_Address)); |
| 2850 | } |
| 2851 | else if(Type != -1) |
| 2852 | { |
| 2853 | int Token = ((unsigned char *)Packet.m_pData)[sizeof(SERVERBROWSE_GETINFO)]; |
| 2854 | Token |= ExtraToken << 8; |
nothing calls this directly
no test coverage detected