60 return std::vector<Ieee80211Frame*>();
63 frames[dataFrame->getSequenceNumber()].push_back(dataFrame);
65 Tid tid = dataFrame->getTid();
66 MACAddress originatorAddr = dataFrame->getTransmitterAddress();
67 RecipientBlockAckAgreement *agreement = blockAckAgreementHandler->getAgreement(tid, originatorAddr);
71 std::vector<Ieee80211Frame *> defragmentedFrames;
73 for (
auto it : frames) {
74 auto fragments = it.second;
75 Ieee80211DataFrame *frame =
defragment(fragments);
78 defragmentedFrames.push_back(frame);
82 for (
auto it : frames) {
83 auto fragments = it.second;
84 if (fragments.size() == 1)
85 defragmentedFrames.push_back(fragments.at(0));
89 std::vector<Ieee80211Frame *> deaggregatedFrames;
91 for (
auto frame : defragmentedFrames) {
92 auto dataFrame = check_and_cast<Ieee80211DataFrame *>(frame);
93 if (dataFrame->getAMsduPresent()) {
95 for (
auto subframe : *subframes)
96 deaggregatedFrames.push_back(subframe);
100 deaggregatedFrames.push_back(dataFrame);
104 return deaggregatedFrames;
int8_t Tid
Definition: Ieee80211Defs.h:28
std::map< SequenceNumber, Fragments > ReorderBuffer
Definition: BlockAckReordering.h:36
IMsduDeaggregation * aMsduDeaggregation
Definition: RecipientQoSMacDataService.h:46
virtual Ieee80211DataFrame * defragment(std::vector< Ieee80211DataFrame * > completeFragments)
Definition: RecipientQoSMacDataService.cc:39
BlockAckReordering * blockAckReordering
Definition: RecipientQoSMacDataService.h:44
ReorderBuffer processReceivedQoSFrame(RecipientBlockAckAgreement *agreement, Ieee80211DataFrame *dataFrame)
Definition: BlockAckReordering.cc:27
BasicReassembly * basicReassembly
Definition: RecipientQoSMacDataService.h:37
IDuplicateRemoval * duplicateRemoval
Definition: RecipientQoSMacDataService.h:42
virtual bool isDuplicate(Ieee80211DataOrMgmtFrame *frame)=0
virtual std::vector< Ieee80211DataFrame * > * deaggregateFrame(Ieee80211DataFrame *frame)=0