Public Member Functions | Protected Types | Protected Attributes

TCPMsgBasedRcvQueue Class Reference

#include <TCPMsgBasedRcvQueue.h>

Inheritance diagram for TCPMsgBasedRcvQueue:
TCPVirtualDataRcvQueue TCPReceiveQueue

List of all members.

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

Detailed Description

FIXME

See also:
TCPMsgBasedSendQueue

Definition at line 32 of file TCPMsgBasedRcvQueue.h.


Member Typedef Documentation

typedef std::map<uint32, cPacket *> TCPMsgBasedRcvQueue::PayloadList [protected]

Definition at line 35 of file TCPMsgBasedRcvQueue.h.


Constructor & Destructor Documentation

TCPMsgBasedRcvQueue::TCPMsgBasedRcvQueue (  ) 

Ctor.

Definition at line 24 of file queues/TCPMsgBasedRcvQueue.cc.

TCPMsgBasedRcvQueue::~TCPMsgBasedRcvQueue (  )  [virtual]

Virtual dtor.

Definition at line 28 of file queues/TCPMsgBasedRcvQueue.cc.

{
}


Member Function Documentation

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.

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;
}


Member Data Documentation


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