MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / VerifyChecksum

Method VerifyChecksum

pcsx2/DEV9/PacketReader/IP/IP_Packet.cpp:251–285  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

249 delete[] headerSegment;
250 }
251 bool IP_Packet::VerifyChecksum()
252 {
253 ReComputeHeaderLen();
254 u8* headerSegment = new u8[headerLength];
255 int counter = 0;
256 NetLib::WriteByte08(headerSegment, &counter, (_verHi + (headerLength >> 2)));
257 NetLib::WriteByte08(headerSegment, &counter, dscp); //DSCP/ECN
258 NetLib::WriteUInt16(headerSegment, &counter, GetLength());
259
260 NetLib::WriteUInt16(headerSegment, &counter, id);
261 NetLib::WriteByte08(headerSegment, &counter, fragmentFlags1);
262 NetLib::WriteByte08(headerSegment, &counter, fragmentFlags2);
263
264 NetLib::WriteByte08(headerSegment, &counter, timeToLive);
265 NetLib::WriteByte08(headerSegment, &counter, protocol);
266 NetLib::WriteUInt16(headerSegment, &counter, checksum); //header csum
267
268 NetLib::WriteIPAddress(headerSegment, &counter, sourceIP);
269 NetLib::WriteIPAddress(headerSegment, &counter, destinationIP);
270
271 //options
272 for (size_t i = 0; i < options.size(); i++)
273 options[i]->WriteBytes(headerSegment, &counter);
274
275 //Zero alignment bytes
276 if (counter != headerLength)
277 memset(&headerSegment[counter], 0, headerLength - counter);
278
279 counter = headerLength;
280
281 u16 csumCal = InternetChecksum(headerSegment, headerLength);
282 delete[] headerSegment;
283
284 return (csumCal == 0);
285 }
286
287 IP_Packet::~IP_Packet()
288 {

Callers 1

SendIPMethod · 0.45

Calls 6

WriteByte08Function · 0.85
WriteUInt16Function · 0.85
GetLengthFunction · 0.85
WriteIPAddressFunction · 0.85
sizeMethod · 0.45
WriteBytesMethod · 0.45

Tested by

no test coverage detected