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

#include <PrimitiveFrameSequences.h>

Inheritance diagram for inet::ieee80211::FragFrameAckFs:
inet::ieee80211::IFrameSequence

Public Member Functions

virtual void startSequence (FrameSequenceContext *context, int firstStep) override
 
virtual IFrameSequenceStepprepareStep (FrameSequenceContext *context) override
 
virtual bool completeStep (FrameSequenceContext *context) override
 
virtual std::string getHistory () const override
 
- Public Member Functions inherited from inet::ieee80211::IFrameSequence
virtual ~IFrameSequence ()
 

Protected Attributes

int firstStep = -1
 
int step = -1
 

Member Function Documentation

◆ completeStep()

bool inet::ieee80211::FragFrameAckFs::completeStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

324 {
325  switch (step) {
326  case 0:
327  step++;
328  return true;
329  case 1: {
330  auto receiveStep = check_and_cast<IReceiveStep *>(context->getStep(firstStep + step));
331  step++;
332  auto receivedPacket = receiveStep->getReceivedFrame();
333  const auto& receivedHeader = receivedPacket->peekAtFront<Ieee80211MacHeader>();
334  return context->isForUs(receivedHeader) && receivedHeader->getType() == ST_ACK;
335  }
336  default:
337  throw cRuntimeError("Unknown step");
338  }
339 }

◆ getHistory()

virtual std::string inet::ieee80211::FragFrameAckFs::getHistory ( ) const
inlineoverridevirtual

Implements inet::ieee80211::IFrameSequence.

142 { return std::string("FRAG-FRAME") + (step == 2 ? " ACK" : ""); } // TODO completeStep = true?

◆ prepareStep()

IFrameSequenceStep * inet::ieee80211::FragFrameAckFs::prepareStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

304 {
305  switch (step) {
306  case 0: {
307  auto frame = context->getInProgressFrames()->getFrameToTransmit();
308  return new TransmitStep(frame, context->getIfs());
309  }
310  case 1: {
311  auto txStep = check_and_cast<TransmitStep *>(context->getLastStep());
312  auto packet = txStep->getFrameToTransmit();
313  auto dataOrMgmtHeader = packet->peekAtFront<Ieee80211DataOrMgmtHeader>();
314  return new ReceiveStep(context->getAckTimeout(packet, dataOrMgmtHeader));
315  }
316  case 2:
317  return nullptr;
318  default:
319  throw cRuntimeError("Unknown step");
320  }
321 }

◆ startSequence()

void inet::ieee80211::FragFrameAckFs::startSequence ( FrameSequenceContext context,
int  firstStep 
)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

298 {
299  this->firstStep = firstStep;
300  step = 0;
301 }

Member Data Documentation

◆ firstStep

int inet::ieee80211::FragFrameAckFs::firstStep = -1
protected

Referenced by completeStep(), and startSequence().

◆ step

int inet::ieee80211::FragFrameAckFs::step = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::ST_ACK
@ ST_ACK
Definition: Ieee80211Frame_m.h:165
inet::ieee80211::FragFrameAckFs::firstStep
int firstStep
Definition: PrimitiveFrameSequences.h:134
inet::ieee80211::FragFrameAckFs::step
int step
Definition: PrimitiveFrameSequences.h:135