#ifndef __DSTCPEndpoint_h__
#define __DSTCPEndpoint_h__ 1
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> // struct sockaddr_in
#include "DSNetworkUtilities.h" // for some constants
#include "SharedConsts.h"
const UInt32 kTCPOpenTimeout = 120;
#ifdef DSSERVERTCP
const UInt32 kTCPRWTimeout = 60*60*24; #else
const UInt32 kTCPRWTimeout = 60*5; #endif
const UInt32 kTCPMaxListenBackLog = 1024;
const UInt32 kTCPErrorBufferLen = 256;
const UInt32 kDSTCPEndpointMaxMessageSize = 1024; const UInt32 kDSTCPEndpointMessageTagSize = 4;
class DSTCPEndpoint
{
public:
enum eExceptions
{
kConnectionLostWarning = eDSCannotAccessSession, kAbortedWarning = 'sok1', kTimeoutError = eDSServerTimeout, };
enum eTimeoutType
{
kOpenTimeoutType = 1,
kRWTimeoutType,
kDefaultTimeoutType
};
DSTCPEndpoint ( const UInt32 inSessionID,
const UInt32 inOpenTimeOut = kTCPOpenTimeout,
const UInt32 inRdWrTimeOut = kTCPRWTimeout );
DSTCPEndpoint ( const DSTCPEndpoint *inEndpoint,
const UInt32 inSessionID );
virtual ~DSTCPEndpoint ( void );
UInt32 GetSessionID ( void ) { return mLogMsgSessionID; }
UInt32 GetReverseAddress ( void ) const { return mRemoteHostIPAddr; }
UInt32 GetIPAddress ( void ) const { return mMyIPAddr; } const char *GetReverseAddressString ( void ) const { return mRemoteHostIPString; }
int GetCurrentConnection ( void ) const { return mConnectFD; }
SInt32 SendClientReply ( void *inMsg );
void* GetClientMessage ( void );
SInt32 SyncToMessageBody ( const Boolean inStripLeadZeroes, UInt32 *outBuffLen );
SInt32 GetServerReply ( sComData **outMsg );
SInt32 SendServerMessage ( void *inMsg );
SInt32 SendBuffer ( void *inBuffer, UInt32 inLength );
virtual void EncryptData ( void *inData, const UInt32 inBuffSize, void *&outData, UInt32 &outBuffSize );
virtual void DecryptData ( void *inData, const UInt32 inBuffSize, void *&outData, UInt32 &outBuffSize );
UInt32 WriteData ( const void *inData, const UInt32 inSize );
Boolean Connected ( void ) const ;
void Abort ( void );
SInt32 ConnectTo ( const UInt32 inIPAddress, const UInt16 inPort ); void ListenToPort ( const UInt16 inPort );
void ListenToPortOnAddress ( const UInt16 inPort, const UInt32 inWhichAddr );
Boolean AcceptConnection ( void );
void CloseConnection ( void );
int CloseListener ( void ); void SetTimeout ( const int inWhichTimeout, const int inSeconds ); void GetReverseAddressString ( char *ioBuffer, const int inBufferSize ) const ;
UInt32 GetRemoteHostIPAddress ( void );
UInt16 GetRemoteHostPort ( void );
protected:
sComProxyData* AllocToProxyStruct ( sComData *inDataMsg );
sComData* AllocFromProxyStruct( sComProxyData *inProxyDataMsg );
UInt32 DoTCPRecvFrom ( void *ioBuffer, const UInt32 inBufferSize );
private:
void InitBuffers ( void );
int DoTCPOpenSocket ( void );
int SetSocketOption ( const int inSocket, const int inSocketOption);
int DoTCPBind ( void );
int DoTCPListen ( void );
int DoTCPAccept ( void );
int DoTCPCloseSocket ( const int inSockFD );
protected:
UInt32 mLogMsgSessionID;
UInt32 mMyIPAddr; struct sockaddr_in mMySockAddr;
UInt32 mRemoteHostIPAddr; IPAddrStr mRemoteHostIPString; struct sockaddr_in mRemoteSockAddr;
int mListenFD;
int mConnectFD;
char *mErrorBuffer;
Boolean mAborting;
Boolean mWeHaveClosed;
int mOpenTimeout; int mRWTimeout; int mDefaultTimeout;
};
#endif // __DSTCPEndpoint_h__