INET Framework for OMNeT++/OMNEST
inet::PacketDissector::PduTreeBuilder Class Reference

#include <PacketDissector.h>

Inheritance diagram for inet::PacketDissector::PduTreeBuilder:
inet::PacketDissector::ICallback

Public Member Functions

bool isSimplyEncapsulatedPacket () const
 
const Ptr< ProtocolDataUnit > & getTopLevelPdu () const
 
const Ptr< Chunk > & getRemainingJunk () const
 
virtual bool shouldDissectProtocolDataUnit (const Protocol *protocol) override
 True means the packet dissector should recursively process the PDU. More...
 
virtual void startProtocolDataUnit (const Protocol *protocol) override
 Notifies about the start of a new protocol data unit (PDU). More...
 
virtual void endProtocolDataUnit (const Protocol *protocol) override
 Notifies about the end of the current protocol data unit (PDU). More...
 
virtual void markIncorrect () override
 Marks the current protocol data unit as incorrect (e.g. More...
 
virtual void visitChunk (const Ptr< const Chunk > &chunk, const Protocol *protocol) override
 Notifies about a new chunk in the current protocol data unit (PDU). More...
 

Protected Attributes

bool isEndProtocolDataUnitCalled = false
 
bool isSimplyEncapsulatedPacket_ = true
 
Ptr< ProtocolDataUnittopLevelPdu = nullptr
 
Ptr< ChunkremainingJunk = nullptr
 
std::stack< ProtocolDataUnit * > pduLevels
 

Member Function Documentation

◆ endProtocolDataUnit()

void inet::PacketDissector::PduTreeBuilder::endProtocolDataUnit ( const Protocol protocol)
overridevirtual

Notifies about the end of the current protocol data unit (PDU).

Implements inet::PacketDissector::ICallback.

107 {
109  pduLevels.pop();
110 }

◆ getRemainingJunk()

const Ptr<Chunk>& inet::PacketDissector::PduTreeBuilder::getRemainingJunk ( ) const
inline
127 { return remainingJunk; }

◆ getTopLevelPdu()

const Ptr<ProtocolDataUnit>& inet::PacketDissector::PduTreeBuilder::getTopLevelPdu ( ) const
inline
126 { return topLevelPdu; }

Referenced by inet::PacketPrinter::printPacket().

◆ isSimplyEncapsulatedPacket()

bool inet::PacketDissector::PduTreeBuilder::isSimplyEncapsulatedPacket ( ) const
inline

◆ markIncorrect()

void inet::PacketDissector::PduTreeBuilder::markIncorrect ( )
overridevirtual

Marks the current protocol data unit as incorrect (e.g.

bad CRC/FCS, incorrect length field, bit error).

Implements inet::PacketDissector::ICallback.

113 {
114  pduLevels.top()->markIncorrect();
115 }

◆ shouldDissectProtocolDataUnit()

virtual bool inet::PacketDissector::PduTreeBuilder::shouldDissectProtocolDataUnit ( const Protocol protocol)
inlineoverridevirtual

True means the packet dissector should recursively process the PDU.

When false, start and end notifications and one visit chunk are still generated.

Implements inet::PacketDissector::ICallback.

129 { return true; }

◆ startProtocolDataUnit()

void inet::PacketDissector::PduTreeBuilder::startProtocolDataUnit ( const Protocol protocol)
overridevirtual

Notifies about the start of a new protocol data unit (PDU).

Implements inet::PacketDissector::ICallback.

89 {
92  auto level = makeShared<ProtocolDataUnit>(pduLevels.size(), protocol);
93  if (pduLevels.size() == 0) {
94  if (topLevelPdu == nullptr)
95  topLevelPdu = level;
96  else if (remainingJunk == nullptr)
97  remainingJunk = level;
98  else
99  throw cRuntimeError("Invalid state");
100  }
101  else
102  pduLevels.top()->insert(level);
103  pduLevels.push(level.get());
104 }

◆ visitChunk()

void inet::PacketDissector::PduTreeBuilder::visitChunk ( const Ptr< const Chunk > &  chunk,
const Protocol protocol 
)
overridevirtual

Notifies about a new chunk in the current protocol data unit (PDU).

Implements inet::PacketDissector::ICallback.

118 {
119  pduLevels.top()->insert(chunk);
120 }

Member Data Documentation

◆ isEndProtocolDataUnitCalled

bool inet::PacketDissector::PduTreeBuilder::isEndProtocolDataUnitCalled = false
protected

◆ isSimplyEncapsulatedPacket_

bool inet::PacketDissector::PduTreeBuilder::isSimplyEncapsulatedPacket_ = true
protected

◆ pduLevels

std::stack<ProtocolDataUnit *> inet::PacketDissector::PduTreeBuilder::pduLevels
protected

◆ remainingJunk

Ptr<Chunk> inet::PacketDissector::PduTreeBuilder::remainingJunk = nullptr
protected

◆ topLevelPdu

Ptr<ProtocolDataUnit> inet::PacketDissector::PduTreeBuilder::topLevelPdu = nullptr
protected

The documentation for this class was generated from the following files:
inet::PacketDissector::PduTreeBuilder::topLevelPdu
Ptr< ProtocolDataUnit > topLevelPdu
Definition: PacketDissector.h:120
protocol
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down protocol
Definition: IUdp-gates.txt:25
inet::PacketDissector::PduTreeBuilder::isSimplyEncapsulatedPacket_
bool isSimplyEncapsulatedPacket_
Definition: PacketDissector.h:118
inet::PacketDissector::PduTreeBuilder::remainingJunk
Ptr< Chunk > remainingJunk
Definition: PacketDissector.h:121
inet::PacketDissector::PduTreeBuilder::pduLevels
std::stack< ProtocolDataUnit * > pduLevels
Definition: PacketDissector.h:122
inet::PacketDissector::PduTreeBuilder::isEndProtocolDataUnitCalled
bool isEndProtocolDataUnitCalled
Definition: PacketDissector.h:117