| 100 | delete[] headerSegment; |
| 101 | } |
| 102 | bool UDP_Packet::VerifyChecksum(IP_Address srcIP, IP_Address dstIP) |
| 103 | { |
| 104 | int pHeaderLen = (12) + headerLength + payload->GetLength(); |
| 105 | if ((pHeaderLen & 1) != 0) |
| 106 | pHeaderLen += 1; |
| 107 | |
| 108 | u8* headerSegment = new u8[pHeaderLen]; |
| 109 | int counter = 0; |
| 110 | |
| 111 | NetLib::WriteIPAddress(headerSegment, &counter, srcIP); |
| 112 | NetLib::WriteIPAddress(headerSegment, &counter, dstIP); |
| 113 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 114 | NetLib::WriteByte08(headerSegment, &counter, (u8)protocol); |
| 115 | NetLib::WriteUInt16(headerSegment, &counter, GetLength()); |
| 116 | |
| 117 | //Pseudo Header added |
| 118 | //Rest of data is normal Header+data |
| 119 | WriteBytes(headerSegment, &counter); |
| 120 | |
| 121 | //Zero alignment byte |
| 122 | if (counter != pHeaderLen) |
| 123 | NetLib::WriteByte08(headerSegment, &counter, 0); |
| 124 | |
| 125 | u16 csumCal = IP_Packet::InternetChecksum(headerSegment, pHeaderLen); |
| 126 | delete[] headerSegment; |
| 127 | |
| 128 | return (csumCal == 0); |
| 129 | } |
| 130 | } // namespace PacketReader::IP::UDP |
nothing calls this directly
no test coverage detected