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

Method PumpNetwork

src/engine/server/server.cpp:2797–2896  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2795}
2796
2797void 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;

Callers

nothing calls this directly

Calls 15

mem_compFunction · 0.85
mem_zeroFunction · 0.85
AddRawMethod · 0.80
AddIntMethod · 0.80
SocketMethod · 0.80
OnEngineClientMessageMethod · 0.80
ConfigFunction · 0.50
UpdateMethod · 0.45
RecvMethod · 0.45
OnPacketMethod · 0.45
ResetMethod · 0.45

Tested by

no test coverage detected