#include <Ipv6ProtocolDissector.h>
◆ dissect()
| void inet::Ipv6ProtocolDissector::dissect |
( |
Packet * |
packet, |
|
|
const Protocol * |
protocol, |
|
|
ICallback & |
callback |
|
) |
| const |
|
overridevirtual |
Dissects the packet according to the protocol implemented by this ProtocolDissector.
Implements inet::ProtocolDissector.
21 auto trailerPopOffset = packet->getBackOffset();
22 const auto& header = packet->popAtFront<Ipv6Header>();
23 auto ipv6EndOffset = packet->getFrontOffset() +
B(header->getPayloadLength());
25 bool incorrect = (ipv6EndOffset > trailerPopOffset);
27 callback.markIncorrect();
28 ipv6EndOffset = trailerPopOffset;
31 packet->setBackOffset(ipv6EndOffset);
32 const Ipv6FragmentHeader *fh =
dynamic_cast<const Ipv6FragmentHeader *
>(header->findExtensionHeaderByType(
IP_PROT_IPv6EXT_FRAGMENT));
34 callback.dissectPacket(packet,
nullptr);
36 callback.dissectPacket(packet, header->getProtocol());
37 if (incorrect && packet->getDataLength() >
b(0))
38 callback.dissectPacket(packet,
nullptr);
39 ASSERT(packet->getDataLength() ==
B(0));
40 packet->setFrontOffset(ipv6EndOffset);
41 packet->setBackOffset(trailerPopOffset);
The documentation for this class was generated from the following files: