#include <TCPVirtualDataSendQueue.h>
Public Member Functions | |
TCPVirtualDataSendQueue () | |
virtual | ~TCPVirtualDataSendQueue () |
virtual void | init (uint32 startSeq) |
virtual std::string | info () const |
virtual void | enqueueAppData (cPacket *msg) |
virtual uint32 | getBufferStartSeq () |
virtual uint32 | getBufferEndSeq () |
virtual TCPSegment * | createSegmentWithBytes (uint32 fromSeq, ulong numBytes) |
virtual void | discardUpTo (uint32 seqNum) |
Protected Attributes | |
uint32 | begin |
uint32 | end |
Send queue that manages "virtual bytes", that is, byte counts only. It uses the length() field of the messages only, everything else is ignored.
Definition at line 30 of file TCPVirtualDataSendQueue.h.
TCPVirtualDataSendQueue::TCPVirtualDataSendQueue | ( | ) |
Ctor
Definition at line 23 of file queues/TCPVirtualDataSendQueue.cc.
: TCPSendQueue() { begin = end = 0; }
TCPVirtualDataSendQueue::~TCPVirtualDataSendQueue | ( | ) | [virtual] |
TCPSegment * TCPVirtualDataSendQueue::createSegmentWithBytes | ( | uint32 | fromSeq, | |
ulong | maxNumBytes | |||
) | [virtual] |
Called when the TCP wants to send or retransmit data, it constructs a TCP segment which contains the data from the requested sequence number range. The actually returned segment may contain less than maxNumBytes bytes if the subclass wants to reproduce the original segment boundaries when retransmitting.
Implements TCPSendQueue.
Definition at line 62 of file queues/TCPVirtualDataSendQueue.cc.
{ //tcpEV << "sendQ: " << info() << " createSeg(seq=" << fromSeq << " len=" << numBytes << ")\n"; ASSERT(seqLE(begin,fromSeq) && seqLE(fromSeq+numBytes,end)); char msgname[32]; sprintf(msgname, "tcpseg(l=%lu)", numBytes); TCPSegment *tcpseg = conn->createTCPSegment(msgname); tcpseg->setSequenceNo(fromSeq); tcpseg->setPayloadLength(numBytes); return tcpseg; }
void TCPVirtualDataSendQueue::discardUpTo | ( | uint32 | seqNum | ) | [virtual] |
Tells the queue that bytes up to (but NOT including) seqNum have been transmitted and ACKed, so they can be removed from the queue.
Implements TCPSendQueue.
Definition at line 76 of file queues/TCPVirtualDataSendQueue.cc.
void TCPVirtualDataSendQueue::enqueueAppData | ( | cPacket * | msg | ) | [virtual] |
Called on SEND app command, it inserts in the queue the data the user wants to send. Implementations of this abstract class will decide what this means: copying actual bytes, just increasing the "last byte queued" variable, or storing cMessage object(s). The msg object should not be referenced after this point (sendQueue may delete it.)
Implements TCPSendQueue.
Definition at line 45 of file queues/TCPVirtualDataSendQueue.cc.
{ //tcpEV << "sendQ: " << info() << " enqueueAppData(bytes=" << msg->getByteLength() << ")\n"; end += msg->getByteLength(); delete msg; }
uint32 TCPVirtualDataSendQueue::getBufferEndSeq | ( | ) | [virtual] |
Returns the sequence number of the last byte stored in the buffer plus one. (The first byte of the next send operation would get this sequence number.)
Implements TCPSendQueue.
Definition at line 57 of file queues/TCPVirtualDataSendQueue.cc.
{ return end; }
uint32 TCPVirtualDataSendQueue::getBufferStartSeq | ( | ) | [virtual] |
Returns the sequence number of the first byte stored in the buffer.
Implements TCPSendQueue.
Definition at line 52 of file queues/TCPVirtualDataSendQueue.cc.
{ return begin; }
std::string TCPVirtualDataSendQueue::info | ( | ) | const [virtual] |
Returns a string with the region stored.
Definition at line 38 of file queues/TCPVirtualDataSendQueue.cc.
void TCPVirtualDataSendQueue::init | ( | uint32 | startSeq | ) | [virtual] |
Initialize the object. The startSeq parameter tells what sequence number the first byte of app data should get. This is usually ISS+1 because SYN consumes one byte in the sequence number space.
init() may be called more than once; every call flushes the existing contents of the queue.
Implements TCPSendQueue.
Definition at line 32 of file queues/TCPVirtualDataSendQueue.cc.
uint32 TCPVirtualDataSendQueue::begin [protected] |
Definition at line 33 of file TCPVirtualDataSendQueue.h.
Referenced by createSegmentWithBytes(), discardUpTo(), getBufferStartSeq(), info(), init(), and TCPVirtualDataSendQueue().
uint32 TCPVirtualDataSendQueue::end [protected] |
Definition at line 34 of file TCPVirtualDataSendQueue.h.
Referenced by createSegmentWithBytes(), discardUpTo(), enqueueAppData(), getBufferEndSeq(), info(), init(), and TCPVirtualDataSendQueue().