MCPcopy Create free account
hub / github.com/NazaraEngine/NazaraEngine / ReceivePacket

Method ReceivePacket

src/Nazara/Network/UdpSocket.cpp:168–203  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166 */
167
168 bool UdpSocket::ReceivePacket(NetPacket* packet, IpAddress* from)
169 {
170 NazaraAssert(packet, "Invalid packet");
171
172 // I'm not sure what's the best between having a 65k bytes buffer ready for any datagram size
173 // or querying the next datagram size every time, for now I'll leave it as is
174 packet->Reset(NetCode_Invalid, std::numeric_limits<UInt16>::max());
175 packet->Resize(std::numeric_limits<UInt16>::max());
176
177 std::size_t received;
178 if (!Receive(packet->GetData(), static_cast<std::size_t>(packet->GetSize()), from, &received))
179 return false;
180
181 if (received == 0)
182 return false; //< No datagram received
183
184 Nz::UInt16 netCode;
185 Nz::UInt16 packetSize;
186 if (!NetPacket::DecodeHeader(packet->GetConstData(), &packetSize, &netCode))
187 {
188 m_lastError = SocketError_Packet;
189 NazaraWarning("Invalid header data");
190 return false;
191 }
192
193 if (packetSize != received)
194 {
195 m_lastError = SocketError_Packet;
196 NazaraWarning("Invalid packet size (packet size is " + String::Number(packetSize) + " bytes, received " + Nz::String::Number(received) + " bytes)");
197 return false;
198 }
199
200 packet->Resize(received);
201 packet->SetNetCode(netCode);
202 return true;
203 }
204
205 /*!
206 * \brief Sends the data available

Callers

nothing calls this directly

Calls 3

ResetMethod · 0.45
ResizeMethod · 0.45
GetSizeMethod · 0.45

Tested by

no test coverage detected