#include <TCPMsgBasedRcvQueue.h>
Public Member Functions | |
TCPMsgBasedRcvQueue () | |
virtual | ~TCPMsgBasedRcvQueue () |
virtual void | init (uint32 startSeq) |
virtual std::string | info () const |
virtual uint32 | insertBytesFromSegment (TCPSegment *tcpseg) |
virtual cPacket * | extractBytesUpTo (uint32 seq) |
Protected Types | |
typedef std::map< uint32, cPacket * > | PayloadList |
Protected Attributes | |
PayloadList | payloadList |
FIXME
Definition at line 32 of file TCPMsgBasedRcvQueue.h.
typedef std::map<uint32, cPacket *> TCPMsgBasedRcvQueue::PayloadList [protected] |
Definition at line 35 of file TCPMsgBasedRcvQueue.h.
TCPMsgBasedRcvQueue::TCPMsgBasedRcvQueue | ( | ) |
TCPMsgBasedRcvQueue::~TCPMsgBasedRcvQueue | ( | ) | [virtual] |
cPacket * TCPMsgBasedRcvQueue::extractBytesUpTo | ( | uint32 | seq | ) | [virtual] |
Should create a packet to be passed up to the app, up to (but NOT including) the given sequence no (usually rcv_nxt). It should return NULL if there's no more data to be passed up -- this method is called several times until it returns NULL.
Reimplemented from TCPVirtualDataRcvQueue.
Definition at line 70 of file queues/TCPMsgBasedRcvQueue.cc.
{ extractTo(seq); // pass up payload messages, in sequence number order if (payloadList.empty() || seqGreater(payloadList.begin()->first, seq)) return NULL; cPacket *msg = payloadList.begin()->second; payloadList.erase(payloadList.begin()); return msg; }
std::string TCPMsgBasedRcvQueue::info | ( | ) | const [virtual] |
Returns a string with region stored.
Reimplemented from TCPVirtualDataRcvQueue.
Definition at line 37 of file queues/TCPMsgBasedRcvQueue.cc.
{ std::stringstream os; os << "rcv_nxt=" << rcv_nxt; for (RegionList::const_iterator i = regionList.begin(); i != regionList.end(); ++i) { os << " [" << i->begin << ".." << i->end << ")"; } os << " " << payloadList.size() << " msgs"; return os.str(); }
void TCPMsgBasedRcvQueue::init | ( | uint32 | startSeq | ) | [virtual] |
Set initial receive sequence number.
Reimplemented from TCPVirtualDataRcvQueue.
Definition at line 32 of file queues/TCPMsgBasedRcvQueue.cc.
{ TCPVirtualDataRcvQueue::init(startSeq); }
uint32 TCPMsgBasedRcvQueue::insertBytesFromSegment | ( | TCPSegment * | tcpseg | ) | [virtual] |
Called when a TCP segment arrives. Returns sequence number for ACK.
Reimplemented from TCPVirtualDataRcvQueue.
Definition at line 53 of file queues/TCPMsgBasedRcvQueue.cc.
{ TCPVirtualDataRcvQueue::insertBytesFromSegment(tcpseg); cPacket *msg; uint32 endSeqNo; while ((msg=tcpseg->removeFirstPayloadMessage(endSeqNo))!=NULL) { // insert, avoiding duplicates PayloadList::iterator i = payloadList.find(endSeqNo); if (i!=payloadList.end()) {delete msg; continue;} payloadList[endSeqNo] = msg; } return rcv_nxt; }
PayloadList TCPMsgBasedRcvQueue::payloadList [protected] |
Definition at line 36 of file TCPMsgBasedRcvQueue.h.
Referenced by extractBytesUpTo(), info(), and insertBytesFromSegment().