|
INET Framework for OMNeT++/OMNEST
|
#include <TCPMsgBasedRcvQueue_old.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
typedef std::map<uint32, cPacket *> tcp_old::TCPMsgBasedRcvQueue::PayloadList [protected] |
| TCPMsgBasedRcvQueue::TCPMsgBasedRcvQueue | ( | ) |
Ctor.
: TCPVirtualDataRcvQueue() { }
| TCPMsgBasedRcvQueue::~TCPMsgBasedRcvQueue | ( | ) | [virtual] |
Virtual dtor.
{
}
| 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 tcp_old::TCPVirtualDataRcvQueue.
{
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 tcp_old::TCPVirtualDataRcvQueue.
{
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 tcp_old::TCPVirtualDataRcvQueue.
{
TCPVirtualDataRcvQueue::init(startSeq);
}
| uint32 TCPMsgBasedRcvQueue::insertBytesFromSegment | ( | TCPSegment * | tcpseg | ) | [virtual] |
Called when a TCP segment arrives. Returns sequence number for ACK.
Reimplemented from tcp_old::TCPVirtualDataRcvQueue.
{
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 tcp_old::TCPMsgBasedRcvQueue::payloadList [protected] |
Referenced by extractBytesUpTo(), info(), and insertBytesFromSegment().