#include <SCTPReceiveStream.h>
Public Member Functions | |
uint32 | enqueueNewDataChunk (SCTPDataVariables *dchunk) |
SCTPReceiveStream () | |
~SCTPReceiveStream () | |
SCTPQueue * | getDeliveryQ () |
SCTPQueue * | getOrderedQ () |
SCTPQueue * | getUnorderedQ () |
int32 | getExpectedStreamSeqNum () |
int32 | getStreamId () |
void | setExpectedStreamSeqNum (int32 num) |
void | setStreamId (uint16 id) |
Protected Attributes | |
uint16 | streamId |
int32 | expectedStreamSeqNum |
SCTPQueue * | deliveryQ |
SCTPQueue * | orderedQ |
SCTPQueue * | unorderedQ |
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 }
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] |
Referenced by SCTPAssociation::getQueuedBytes(), SCTPAssociation::pushUlp(), and SCTPAssociation::putInDeliveryQ().
00050 {return deliveryQ;};
SCTPQueue* SCTPReceiveStream::getOrderedQ | ( | ) | [inline] |
Referenced by SCTPAssociation::getQueuedBytes(), and SCTPAssociation::putInDeliveryQ().
00051 {return orderedQ;};
SCTPQueue* SCTPReceiveStream::getUnorderedQ | ( | ) | [inline] |
int32 SCTPReceiveStream::getExpectedStreamSeqNum | ( | ) | [inline] |
int32 SCTPReceiveStream::getStreamId | ( | ) | [inline] |
void SCTPReceiveStream::setExpectedStreamSeqNum | ( | int32 | num | ) | [inline] |
void SCTPReceiveStream::setStreamId | ( | uint16 | id | ) | [inline] |
uint16 SCTPReceiveStream::streamId [protected] |
Referenced by getStreamId(), SCTPReceiveStream(), and setStreamId().
int32 SCTPReceiveStream::expectedStreamSeqNum [protected] |
Referenced by enqueueNewDataChunk(), getExpectedStreamSeqNum(), SCTPReceiveStream(), and setExpectedStreamSeqNum().
SCTPQueue* SCTPReceiveStream::deliveryQ [protected] |
Referenced by enqueueNewDataChunk(), getDeliveryQ(), SCTPReceiveStream(), and ~SCTPReceiveStream().
SCTPQueue* SCTPReceiveStream::orderedQ [protected] |
Referenced by enqueueNewDataChunk(), getOrderedQ(), SCTPReceiveStream(), and ~SCTPReceiveStream().
SCTPQueue* SCTPReceiveStream::unorderedQ [protected] |
Referenced by getUnorderedQ(), SCTPReceiveStream(), and ~SCTPReceiveStream().