MCPcopy Create free account
hub / github.com/NoMercy-ac/NoMercy / ProcessInput

Method ProcessInput

Source/Client/NM_Engine/ClientSocketWorker.cpp:112–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

110
111
112std::size_t CNetworkClient::ProcessInput(const void* data, std::size_t maxlength)
113{
114 NETWORK_LOG(LL_TRACE, "Data: %p Max length: %u", data, maxlength);
115
116 auto pData = reinterpret_cast<const TPacketSingleton*>(data);
117 if (maxlength < sizeof(TPacketSingleton))
118 {
119 NETWORK_LOG(LL_CRI, "Packet size is so less!");
120 return 0;
121 }
122
123 NETWORK_LOG(LL_SYS, "Got Packet with magic: 0x%X id %d (%02x) size %u coming size %u", pData->pMagic, pData->uiPacketID, pData->uiPacketID, GetPacketCapacity(pData->uiPacketID), maxlength);
124
125 // Magic value check
126 if (memcmp(pData->pMagic, gs_pNetworkMagicValue, sizeof(pData->pMagic)))
127 {
128 NETWORK_LOG(LL_CRI, "Unknown magic value: 0x%X", gs_pNetworkMagicValue);
129 return GetPacketCapacity(pData->uiPacketID);
130 }
131
132 // ID check
133 auto handler = m_pHandlers.find(pData->uiPacketID);
134 if (handler == m_pHandlers.end())
135 {
136 NETWORK_LOG(LL_CRI, "Unknown Packet with id %d (%02x) received", pData->uiPacketID, pData->uiPacketID);
137 return GetPacketCapacity(pData->uiPacketID);
138 }
139
140 // Size check
141 auto ulCorrectSize = GetPacketCapacity(pData->uiPacketID);
142 if (ulCorrectSize != maxlength)
143 {
144 NETWORK_LOG(LL_CRI, "Packet size mismatch! Correct: %u Current: %u Packet: %d (%02x)", ulCorrectSize, maxlength, pData->uiPacketID, pData->uiPacketID);
145 return GetPacketCapacity(pData->uiPacketID);
146 }
147
148 // Hash check
149 auto pCorrectHash = XXH32(data, maxlength - NET_CHECKSUM_LENGTH, NET_PACKET_HASH_MAGIC);
150 auto pCurrentHash = *(uint32_t*)((uint32_t)data + maxlength - NET_CHECKSUM_LENGTH);
151
152 NETWORK_LOG(LL_SYS, "Hash: %p Correct hash: %p Eq: %d", pCurrentHash, pCorrectHash, pCurrentHash == pCorrectHash);
153 if (pCurrentHash != pCorrectHash)
154 {
155 NETWORK_LOG(LL_CRI, "Packet hash mismatch! Current: %p Correct: %p", pCurrentHash, pCorrectHash);
156 return GetPacketCapacity(pData->uiPacketID);
157 }
158
159 // Build packet handler
160 std::size_t handlerResult = handler->second.second(data, ulCorrectSize);
161 NETWORK_LOG(LL_SYS, "handlerResult: %u data: %p length: %u", handlerResult, data, maxlength);
162 if (!handlerResult)
163 {
164 NETWORK_LOG(LL_CRI, "Handler result return NULL!");
165 return GetPacketCapacity(pData->uiPacketID);
166 }
167
168 return GetPacketCapacity(pData->uiPacketID);
169}

Callers

nothing calls this directly

Calls 2

GetPacketCapacityFunction · 0.85
endMethod · 0.80

Tested by

no test coverage detected