INET Framework for OMNeT++/OMNEST
inet::tcp::TCPMsgBasedRcvQueue Class Reference

#include <TCPMsgBasedRcvQueue.h>

Inheritance diagram for inet::tcp::TCPMsgBasedRcvQueue:
inet::tcp::TCPVirtualDataRcvQueue inet::tcp::TCPReceiveQueue

Classes

struct  PayloadItem
 

Public Member Functions

 TCPMsgBasedRcvQueue ()
 Ctor. More...
 
virtual ~TCPMsgBasedRcvQueue ()
 Virtual dtor. More...
 
virtual void init (uint32 startSeq) override
 Set initial receive sequence number. More...
 
virtual std::string info () const override
 Returns a string with region stored. More...
 
virtual uint32 insertBytesFromSegment (TCPSegment *tcpseg) override
 Called when a TCP segment arrives. More...
 
virtual cPacket * extractBytesUpTo (uint32 seq) override
 Method inherited from TCPReceiveQueue. More...
 
- Public Member Functions inherited from inet::tcp::TCPVirtualDataRcvQueue
 TCPVirtualDataRcvQueue ()
 Ctor. More...
 
virtual ~TCPVirtualDataRcvQueue ()
 Virtual dtor. More...
 
virtual uint32 getAmountOfBufferedBytes () override
 Method inherited from TCPReceiveQueue. More...
 
virtual uint32 getAmountOfFreeBytes (uint32 maxRcvBuffer) override
 Method inherited from TCPReceiveQueue. More...
 
virtual uint32 getQueueLength () override
 Method inherited from TCPReceiveQueue. More...
 
virtual void getQueueStatus () override
 Method inherited from TCPReceiveQueue. More...
 
virtual uint32 getLE (uint32 fromSeqNum) override
 Method inherited from TCPReceiveQueue. More...
 
virtual uint32 getRE (uint32 toSeqNum) override
 Method inherited from TCPReceiveQueue. More...
 
virtual uint32 getFirstSeqNo () override
 Returns the minimum of first byte seq.no. More...
 
- Public Member Functions inherited from inet::tcp::TCPReceiveQueue
 TCPReceiveQueue ()
 Ctor. More...
 
virtual ~TCPReceiveQueue ()
 Virtual dtor. More...
 
virtual void setConnection (TCPConnection *_conn)
 Set the connection that owns this queue. More...
 

Protected Types

typedef std::list< PayloadItemPayloadList
 
- Protected Types inherited from inet::tcp::TCPVirtualDataRcvQueue
typedef std::list< Region * > RegionList
 

Protected Attributes

PayloadList payloadList
 
- Protected Attributes inherited from inet::tcp::TCPVirtualDataRcvQueue
uint32 rcv_nxt = 0
 
RegionList regionList
 
- Protected Attributes inherited from inet::tcp::TCPReceiveQueue
TCPConnectionconn
 

Additional Inherited Members

- Protected Member Functions inherited from inet::tcp::TCPVirtualDataRcvQueue
void merge (TCPVirtualDataRcvQueue::Region *region)
 Merge segment byte range into regionList, the parameter region must created by 'new' operator. More...
 
TCPVirtualDataRcvQueue::RegionextractTo (uint32 toSeq)
 
virtual TCPVirtualDataRcvQueue::RegioncreateRegionFromSegment (TCPSegment *tcpseg)
 Create a new Region from tcpseg. More...
 

Detailed Description

Member Typedef Documentation

Constructor & Destructor Documentation

inet::tcp::TCPMsgBasedRcvQueue::TCPMsgBasedRcvQueue ( )

Ctor.

31 {
32 }
TCPVirtualDataRcvQueue()
Ctor.
Definition: TCPVirtualDataRcvQueue.cc:79
inet::tcp::TCPMsgBasedRcvQueue::~TCPMsgBasedRcvQueue ( )
virtual

Virtual dtor.

35 {
36  while (!payloadList.empty()) {
37  EV_DEBUG << "SendQueue Destructor: Drop msg from " << this->getFullPath()
38  << " Queue: offset=" << payloadList.front().seqNo
39  << ", length=" << payloadList.front().packet->getByteLength() << endl;
40  delete payloadList.front().packet;
41  payloadList.pop_front();
42  }
43 }
PayloadList payloadList
Definition: TCPMsgBasedRcvQueue.h:46

Member Function Documentation

cPacket * inet::tcp::TCPMsgBasedRcvQueue::extractBytesUpTo ( uint32  seq)
overridevirtual

Method inherited from TCPReceiveQueue.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue.

89 {
90  cPacket *msg = nullptr;
91  if (!payloadList.empty() && seqLess(payloadList.begin()->seqNo, seq))
92  seq = payloadList.begin()->seqNo;
93 
94  Region *reg = extractTo(seq);
95  if (reg) {
96  if (!payloadList.empty() && payloadList.begin()->seqNo == reg->getEnd()) {
97  msg = payloadList.begin()->packet;
98  payloadList.erase(payloadList.begin());
99  }
100  delete reg;
101  }
102  return msg;
103 }
TCPVirtualDataRcvQueue::Region * extractTo(uint32 toSeq)
Definition: TCPVirtualDataRcvQueue.cc:189
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
PayloadList payloadList
Definition: TCPMsgBasedRcvQueue.h:46
std::string inet::tcp::TCPMsgBasedRcvQueue::info ( ) const
overridevirtual

Returns a string with region stored.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue.

51 {
52  std::stringstream os;
53 
54  os << "rcv_nxt=" << rcv_nxt;
55 
56  for (const auto & elem : regionList) {
57  os << " [" << (elem)->getBegin() << ".." << (elem)->getEnd() << ")";
58  }
59 
60  os << " " << payloadList.size() << " msgs";
61 
62  return os.str();
63 }
RegionList regionList
Definition: TCPVirtualDataRcvQueue.h:77
uint32 rcv_nxt
Definition: TCPVirtualDataRcvQueue.h:41
PayloadList payloadList
Definition: TCPMsgBasedRcvQueue.h:46
void inet::tcp::TCPMsgBasedRcvQueue::init ( uint32  startSeq)
overridevirtual

Set initial receive sequence number.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue.

46 {
48 }
virtual void init(uint32 startSeq) override
Method inherited from TCPReceiveQueue.
Definition: TCPVirtualDataRcvQueue.cc:93
uint32 inet::tcp::TCPMsgBasedRcvQueue::insertBytesFromSegment ( TCPSegment tcpseg)
overridevirtual

Called when a TCP segment arrives.

Returns sequence number for ACK.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue.

66 {
68 
69  cPacket *msg;
70  uint32 endSeqNo;
71  auto i = payloadList.begin();
72  while (nullptr != (msg = tcpseg->removeFirstPayloadMessage(endSeqNo))) {
73  while (i != payloadList.end() && seqLess(i->seqNo, endSeqNo))
74  ++i;
75 
76  // insert, avoiding duplicates
77  if (i != payloadList.end() && i->seqNo == endSeqNo)
78  delete msg;
79  else {
80  i = payloadList.insert(i, PayloadItem(endSeqNo, msg));
81  ASSERT(seqLE(payloadList.front().seqNo, payloadList.back().seqNo));
82  }
83  }
84 
85  return rcv_nxt;
86 }
virtual uint32 insertBytesFromSegment(TCPSegment *tcpseg) override
Method inherited from TCPReceiveQueue.
Definition: TCPVirtualDataRcvQueue.cc:123
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
bool seqLE(uint32 a, uint32 b)
Definition: TCPSegment.h:33
uint32 rcv_nxt
Definition: TCPVirtualDataRcvQueue.h:41
uint32_t uint32
Definition: Compat.h:30
PayloadList payloadList
Definition: TCPMsgBasedRcvQueue.h:46

Member Data Documentation

PayloadList inet::tcp::TCPMsgBasedRcvQueue::payloadList
protected

The documentation for this class was generated from the following files: