| 271 | delete[] headerSegment; |
| 272 | } |
| 273 | bool TCP_Packet::VerifyChecksum(IP_Address srcIP, IP_Address dstIP) |
| 274 | { |
| 275 | ReComputeHeaderLen(); |
| 276 | int pHeaderLen = (12) + headerLength + payload->GetLength(); |
| 277 | if ((pHeaderLen & 1) != 0) |
| 278 | pHeaderLen += 1; |
| 279 | |
| 280 | u8* headerSegment = new u8[pHeaderLen]; |
| 281 | int counter = 0; |
| 282 | |
| 283 | NetLib::WriteIPAddress(headerSegment, &counter, srcIP); |
| 284 | NetLib::WriteIPAddress(headerSegment, &counter, dstIP); |
| 285 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 286 | NetLib::WriteByte08(headerSegment, &counter, (u8)protocol); |
| 287 | NetLib::WriteUInt16(headerSegment, &counter, GetLength()); |
| 288 | |
| 289 | //Pseudo Header added |
| 290 | //Rest of data is normal Header+data |
| 291 | WriteBytes(headerSegment, &counter); |
| 292 | |
| 293 | //Zero alignment byte |
| 294 | if (counter != pHeaderLen) |
| 295 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 296 | |
| 297 | const u16 csumCal = IP_Packet::InternetChecksum(headerSegment, pHeaderLen); |
| 298 | delete[] headerSegment; |
| 299 | |
| 300 | return (csumCal == 0); |
| 301 | } |
| 302 | } // namespace PacketReader::IP::TCP |
nothing calls this directly
no test coverage detected