23 #include <arpa/inet.h>
24 #include <sys/socket.h>
35 using namespace SGCTP;
46 , iBufferDataStart( 0 )
50 , ePayloadType( PAYLOAD_UNDEFINED )
96 double __fdTimeoutStart =
107 __iReturn =
recv( _iDescriptor,
131 int __iBufferCopied = 0;
132 while( __iBufferCopied < __iBufferLength )
134 int __iBufferCopyLength = __iBufferLength - __iBufferCopied;
135 if( __iBufferCopyLength > iBufferDataStart )
138 pucBuffer + __iBufferCopied + iBufferDataStart,
139 __iBufferCopyLength );
140 __iBufferCopied += __iBufferCopyLength;
143 iBufferDataStart = 0;
169 switch( _ui8tPayloadType )
213 const CData &_roData )
231 int __iPayloadSize = __iReturn;
234 uint16_t __ui16tPayloadSize_NS = htons( __iPayloadSize );
237 __iReturn =
send( _iDescriptor, &__ui16tPayloadSize_NS, 2, MSG_MORE );
245 __iReturn =
send( _iDescriptor,
pucBuffer, __iPayloadSize, MSG_EOR );
246 if( __iReturn != __iPayloadSize )
253 return __iPayloadSize+2;
281 uint16_t __ui16tPayloadSize = ntohs( *((uint16_t*)
pullBuffer( 2 )) );
282 if( _iMaxSize && __ui16tPayloadSize > _iMaxSize )
286 __iReturn =
recvBuffer( _iDescriptor, __ui16tPayloadSize );
287 if( __iReturn != __ui16tPayloadSize )
296 __ui16tPayloadSize );
301 return __ui16tPayloadSize+2;
virtual int unserialize(CData *_poData, const unsigned char *_pucBuffer, uint16_t _ui16tBufferSize)
Unserialize the SGCTP data from the given payload buffer.
virtual int serialize(int _iDescriptor, const CData &_roData)
Serialize the given SGCTP data to the given descriptor.
const char * getPassword() const
Returns the principal password.
int iBufferDataEnd
Transmission buffer actual data end offset.
static const uint16_t BUFFER_SIZE
Buffer size required for payload (un-)serialization.
int iBufferSize
Transmission buffer size.
virtual int allocPayload()
Allocate resources required for payload (un-)serialization.
virtual void free()
Free resources required for data transmission (un-/serialization)
static void freeBuffer(unsigned char *_pucBuffer)
Free a buffer allocated for payload (un-)serialization.
CPrincipal oPrincipal
Principal.
virtual int send(int _iDescriptor, const void *_pBuffer, int _iSize, int _iFlags)=0
Send data to the given descriptor.
void flushBuffer()
Flush the data buffer (from pulled data)
AES128-encrypted payload.
virtual int initPayload(uint8_t _ui8tPayloadType=PAYLOAD_RAW)
Associate and initialize payload object.
virtual void free()
Free resources for payload (un-)serialization.
double fdTimeout
Transmission timeout, in seconds.
const unsigned char * pullBuffer(int _iSize)
Pull data from the transmission buffer.
int recvBuffer(int _iDescriptor, int _iSize)
Receive data from the given descriptor (and push them on the data buffer)
CPayload * poPayload
Associated payload object.
virtual int serialize(unsigned char *_pucBuffer, const CData &_roData)
Serialize the given SGCTP data into the given payload buffer.
EPayloadType ePayloadType
Associated payload type.
virtual void resetPayload()
Reset (clear) the associated payload object.
virtual int alloc()=0
Allocate resources required for data transmission (un-/serialization)
virtual int recv(int _iDescriptor, void *_pBuffer, int _iSize, int _iFlags)=0
Receive data from the given descriptor.
void resetBuffer()
Reset the data buffer (clear all data)
virtual int alloc()
Allocate resources for payload (un-)serialization.
unsigned char * pucBuffer
Transmission buffer.
virtual int unserialize(int _iDescriptor, CData *_poData, int _iMaxSize=0)
Unserialize the SGCTP data from the given descriptor.
int iBufferDataStart
Transmission buffer actual data start offset.
SGCTP transmission/payload parameters.
EPayloadType
Payload types.
virtual void freePayload()
Free resources required for payload (un-)serialization.
const unsigned char * pucPasswordSalt
Cryptographic password salt/nonce (pointer to existing variable)
static double epoch()
Return the current (sub-second) UNIX epoch.
AES128-encrypted SGCTP payload.
int allocBuffer()
Allocate resources required for data transmission.
static unsigned char * allocBuffer()
Allocate a buffer for payload (un-)serialization.