| 73 | } |
| 74 | |
| 75 | void UDP_Packet::CalculateChecksum(IP_Address srcIP, IP_Address dstIP) |
| 76 | { |
| 77 | int pHeaderLen = (12) + headerLength + payload->GetLength(); |
| 78 | if ((pHeaderLen & 1) != 0) |
| 79 | pHeaderLen += 1; |
| 80 | |
| 81 | u8* headerSegment = new u8[pHeaderLen]; |
| 82 | int counter = 0; |
| 83 | |
| 84 | NetLib::WriteIPAddress(headerSegment, &counter, srcIP); |
| 85 | NetLib::WriteIPAddress(headerSegment, &counter, dstIP); |
| 86 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 87 | NetLib::WriteByte08(headerSegment, &counter, (u8)protocol); |
| 88 | NetLib::WriteUInt16(headerSegment, &counter, GetLength()); |
| 89 | |
| 90 | //Pseudo Header added |
| 91 | //Rest of data is normal Header+data (with zerored checksum feild) |
| 92 | checksum = 0; |
| 93 | WriteBytes(headerSegment, &counter); |
| 94 | |
| 95 | //Zero alignment byte |
| 96 | if (counter != pHeaderLen) |
| 97 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 98 | |
| 99 | checksum = IP_Packet::InternetChecksum(headerSegment, pHeaderLen); |
| 100 | delete[] headerSegment; |
| 101 | } |
| 102 | bool UDP_Packet::VerifyChecksum(IP_Address srcIP, IP_Address dstIP) |
| 103 | { |
| 104 | int pHeaderLen = (12) + headerLength + payload->GetLength(); |
nothing calls this directly
no test coverage detected