Public Member Functions | Protected Attributes

TCP_NSC_SendQueue Class Reference

#include <TCP_NSC_Queues.h>

Inheritance diagram for TCP_NSC_SendQueue:
TCP_NSC_VirtualDataSendQueue

List of all members.

Public Member Functions

 TCP_NSC_SendQueue ()
virtual ~TCP_NSC_SendQueue ()
virtual void setConnection (TCP_NSC_Connection *connP)
virtual void enqueueAppData (cPacket *msgP)=0
virtual int getNscMsg (void *bufferP, int bufferLengthP)=0
virtual void dequeueNscMsg (int msgLengthP)=0
virtual ulong getBytesAvailable ()=0
virtual TCPSegmentcreateSegmentWithBytes (const void *tcpDataP, int tcpLengthP)=0
virtual void discardUpTo (uint32 seqNumP)=0

Protected Attributes

TCP_NSC_ConnectionconnM

Detailed Description

Abstract base class for TCP_NSC send queues. In fact a single object represents both the send queue and the retransmission queue (no need to separate them). The TCPConnection object knows which data in the queue have already been transmitted ("retransmission queue") and which not ("send queue"). This class is not interested in where's the boundary.

There is another particularity about this class: as a retransmission queue, it stores bytes and not segments. TCP is a bytestream oriented protocol (sequence numbers refer to bytes and not to TPDUs as e.g. in ISO TP4), and the protocol doesn't rely on retransmitted segments having the same segment boundaries as the original segments. Some implementations store segments on the retransmission queue, and others store only the data bytes; RFCs explicitly allow both. (See e.g. RFC1122 p90, section 4.2.2.15, "IMPLEMENTATION" note).

To simulate a TCP that retains segment boundaries in retransmissions, the appropriate TCPAlgorithm class should remember where the segment boundaries were at the original transmission, and it should form identical segments when retransmitting. The createSegmentWithBytes() send queue method makes this possible.

This class is polymorphic because depending on where and how you use the TCP model you might have different ideas about "sending data" on a simulated connection.

You might want to:

Different TCP_NSCSendQueue subclasses can be written to accomodate different needs.

This class goes hand-in-hand with TCP_NSCReceiveQueue.

See also:
TCP_NSCReceiveQueue

Definition at line 82 of file TCP_NSC_Queues.h.


Constructor & Destructor Documentation

TCP_NSC_SendQueue::TCP_NSC_SendQueue (  )  [inline]

Ctor.

Definition at line 88 of file TCP_NSC_Queues.h.

: connM(NULL) {}

virtual TCP_NSC_SendQueue::~TCP_NSC_SendQueue (  )  [inline, virtual]

Virtual dtor.

Definition at line 93 of file TCP_NSC_Queues.h.

{}


Member Function Documentation

virtual TCPSegment* TCP_NSC_SendQueue::createSegmentWithBytes ( const void *  tcpDataP,
int  tcpLengthP 
) [pure 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 then maxNumBytes bytes if the subclass wants to reproduce the original segment boundaries when retransmitting.

called from inside of send_callback() called before called the send() to IP layer

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual void TCP_NSC_SendQueue::dequeueNscMsg ( int  msgLengthP  )  [pure virtual]

The function should remove msgLengthP bytes from NSCqueue

But the NSC sometimes reread from this datapart (when data destroyed in IP Layer) inside of createSegmentWithBytes() function.

called with return value of socket->send_data() if larger than 0

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual void TCP_NSC_SendQueue::discardUpTo ( uint32  seqNumP  )  [pure 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.

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual void TCP_NSC_SendQueue::enqueueAppData ( cPacket *  msgP  )  [pure 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.)

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual ulong TCP_NSC_SendQueue::getBytesAvailable (  )  [pure virtual]

Utility function: returns how many bytes are available in the queue.

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual int TCP_NSC_SendQueue::getNscMsg ( void *  bufferP,
int  bufferLengthP 
) [pure virtual]

Copy data to the buffer for send to NSC. returns lengh of copied data. create msg for socket->send_data()

called before called socket->send_data()

Implemented in TCP_NSC_VirtualDataSendQueue.

virtual void TCP_NSC_SendQueue::setConnection ( TCP_NSC_Connection connP  )  [inline, virtual]

set connection queue, and initialise queue variables.

Reimplemented in TCP_NSC_VirtualDataSendQueue.

Definition at line 98 of file TCP_NSC_Queues.h.

{connM = connP; }


Member Data Documentation

Definition at line 153 of file TCP_NSC_Queues.h.


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