#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().
1.7.1