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

Method CalculateChecksum

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

Source from the content-addressed store, hash-verified

215 }
216
217 void IP_Packet::CalculateChecksum()
218 {
219 //if (!(i == 5)) //checksum field is 10-11th byte (5th short), which is skipped
220 ReComputeHeaderLen();
221 u8* headerSegment = new u8[headerLength];
222 int counter = 0;
223 NetLib::WriteByte08(headerSegment, &counter, (_verHi + (headerLength >> 2)));
224 NetLib::WriteByte08(headerSegment, &counter, dscp); //DSCP/ECN
225 NetLib::WriteUInt16(headerSegment, &counter, GetLength());
226
227 NetLib::WriteUInt16(headerSegment, &counter, id);
228 NetLib::WriteByte08(headerSegment, &counter, fragmentFlags1);
229 NetLib::WriteByte08(headerSegment, &counter, fragmentFlags2);
230
231 NetLib::WriteByte08(headerSegment, &counter, timeToLive);
232 NetLib::WriteByte08(headerSegment, &counter, protocol);
233 NetLib::WriteUInt16(headerSegment, &counter, 0); //header csum
234
235 NetLib::WriteIPAddress(headerSegment, &counter, sourceIP);
236 NetLib::WriteIPAddress(headerSegment, &counter, destinationIP);
237
238 //options
239 for (size_t i = 0; i < options.size(); i++)
240 options[i]->WriteBytes(headerSegment, &counter);
241
242 //Zero alignment bytes
243 if (counter != headerLength)
244 memset(&headerSegment[counter], 0, headerLength - counter);
245
246 counter = headerLength;
247
248 checksum = InternetChecksum(headerSegment, headerLength);
249 delete[] headerSegment;
250 }
251 bool IP_Packet::VerifyChecksum()
252 {
253 ReComputeHeaderLen();

Callers 2

SendMethod · 0.45
WriteBytesMethod · 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