INET Framework for OMNeT++/OMNEST
inet::ieee80211::Defragmentation Class Reference

#include <Defragmentation.h>

Inheritance diagram for inet::ieee80211::Defragmentation:
inet::ieee80211::IDefragmentation

Public Member Functions

virtual PacketdefragmentFrames (std::vector< Packet * > *fragmentFrames) override
 
- Public Member Functions inherited from inet::ieee80211::IDefragmentation
virtual ~IDefragmentation ()
 

Member Function Documentation

◆ defragmentFrames()

Packet * inet::ieee80211::Defragmentation::defragmentFrames ( std::vector< Packet * > *  fragmentFrames)
overridevirtual

Implements inet::ieee80211::IDefragmentation.

18 {
19  EV_DEBUG << "Defragmenting " << fragmentFrames->size() << " fragments.\n";
20  auto defragmentedFrame = new Packet();
21  const auto& defragmentedHeader = staticPtrCast<Ieee80211DataOrMgmtHeader>(fragmentFrames->at(0)->peekAtFront<Ieee80211DataOrMgmtHeader>()->dupShared());
22  for (auto fragmentFrame : *fragmentFrames) {
23  fragmentFrame->popAtFront<Ieee80211DataOrMgmtHeader>();
24  fragmentFrame->popAtBack<Ieee80211MacTrailer>(B(4));
25  defragmentedFrame->insertAtBack(fragmentFrame->peekData());
26  std::string defragmentedName(fragmentFrame->getName());
27  auto index = defragmentedName.find("-frag");
28  if (index != std::string::npos)
29  defragmentedFrame->setName(defragmentedName.substr(0, index).c_str());
30  }
31  defragmentedHeader->setFragmentNumber(0);
32  defragmentedHeader->setMoreFragments(false);
33  defragmentedFrame->insertAtFront(defragmentedHeader);
34  defragmentedFrame->insertAtBack(makeShared<Ieee80211MacTrailer>());
35  EV_TRACE << "Created " << *defragmentedFrame << ".\n";
36  return defragmentedFrame;
37 }

Referenced by inet::ieee80211::BasicReassembly::addFragment().


The documentation for this class was generated from the following files:
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168