SCTPReceiveStream Class Reference

#include <SCTPReceiveStream.h>

List of all members.

Public Member Functions

uint32 enqueueNewDataChunk (SCTPDataVariables *dchunk)
 SCTPReceiveStream ()
 ~SCTPReceiveStream ()
SCTPQueuegetDeliveryQ ()
SCTPQueuegetOrderedQ ()
SCTPQueuegetUnorderedQ ()
int32 getExpectedStreamSeqNum ()
int32 getStreamId ()
void setExpectedStreamSeqNum (int32 num)
void setStreamId (uint16 id)

Protected Attributes

uint16 streamId
int32 expectedStreamSeqNum
SCTPQueuedeliveryQ
SCTPQueueorderedQ
SCTPQueueunorderedQ


Constructor & Destructor Documentation

SCTPReceiveStream::SCTPReceiveStream (  ) 

Ctor.

00022 {
00023         streamId = 0;
00024         expectedStreamSeqNum = 0;
00025         deliveryQ = new SCTPQueue();
00026         orderedQ = new SCTPQueue();
00027         unorderedQ = new SCTPQueue();
00028 }

SCTPReceiveStream::~SCTPReceiveStream (  ) 

Virtual dtor.

00031 {
00032         delete deliveryQ;
00033         delete orderedQ;
00034         delete unorderedQ;
00035 }


Member Function Documentation

uint32 SCTPReceiveStream::enqueueNewDataChunk ( SCTPDataVariables dchunk  ) 

00039 {
00040 uint32 delivery = 0;    //0:orderedQ=false && deliveryQ=false; 1:orderedQ=true && deliveryQ=false; 2:oderedQ=true && deliveryQ=true
00041 
00042          SCTPDataVariables* chunk;
00043         /* append to the respective queue */
00044         if (!dchunk->ordered) 
00045         {
00046                 /* put message into the streams ->unorderedQ */
00047                 if (deliveryQ->checkAndInsertVar(dchunk->tsn, dchunk))
00048                 {
00049                         delivery = 2;
00050                 }
00051                 
00052         } 
00053         else if (dchunk->ordered) 
00054         {
00055                 /* put message into streams ->reassembyQ */
00056                 if (orderedQ->checkAndInsertVar(dchunk->tsn, dchunk))
00057                         delivery++;
00058                 if (orderedQ->getQueueSize()>0) 
00059                 {
00060                         /* dequeue first from orderedQ */
00061                         
00062                         chunk = orderedQ-> dequeueVarBySsn(expectedStreamSeqNum);
00063                         if (chunk)
00064                         {        
00065                                 if (deliveryQ->checkAndInsertVar(chunk->tsn, chunk))
00066                                 {                                       
00067                                         ++expectedStreamSeqNum;
00068                                         if (expectedStreamSeqNum > 65535) 
00069                                                 expectedStreamSeqNum = 0;
00070                                         delivery++;
00071                                 }
00072                         }
00073                 }
00074                 
00075         } 
00076         
00077         return delivery;
00078 }

SCTPQueue* SCTPReceiveStream::getDeliveryQ (  )  [inline]

SCTPQueue* SCTPReceiveStream::getOrderedQ (  )  [inline]

SCTPQueue* SCTPReceiveStream::getUnorderedQ (  )  [inline]

Referenced by SCTPAssociation::getQueuedBytes().

00052 {return unorderedQ;};

int32 SCTPReceiveStream::getExpectedStreamSeqNum (  )  [inline]

Referenced by SCTPAssociation::putInDeliveryQ().

00053 { return expectedStreamSeqNum;};

int32 SCTPReceiveStream::getStreamId (  )  [inline]

00054 {return streamId;};

void SCTPReceiveStream::setExpectedStreamSeqNum ( int32  num  )  [inline]

void SCTPReceiveStream::setStreamId ( uint16  id  )  [inline]

Referenced by SCTPAssociation::initStreams().

00056 {streamId = id;};


Member Data Documentation

uint16 SCTPReceiveStream::streamId [protected]


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

Generated on Fri Mar 20 18:51:21 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5