00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __XPSOCKETCLASS_H__
00013 #define __XPSOCKETCLASS_H__
00014
00015 #include "XPSocket.h"
00016
00017 namespace RNReplicaNet
00018 {
00019
00027 class XPSocket
00028 {
00029 public:
00030 friend class XPSocketUrgent;
00031
00036 XPSocket();
00037
00042 virtual ~XPSocket();
00043
00048 static int GetLastError(void);
00049
00054 virtual int Create(void);
00055
00061 int Connect(const XPAddress &addr);
00062
00068 int Send(const char *data);
00069
00076 int Send(const char *data,const int len);
00077
00084 int Recv(char *const data,const int maxlen);
00085
00090 int Close(void);
00091
00097 int Listen(const int port = XPSOCK_PORT_ANY);
00098
00103 XPSocket *Accept(void);
00104
00110 int SetSendBuffer(const int size);
00111
00117 int SetRecvBuffer(const int size);
00118
00124 int GetAddress(XPAddress *const addr);
00125
00131 int GetPeerAddress(XPAddress *const addr);
00132
00137 static int GetMaxPacketSize(void) {return XPSOCK_MAXPACKETSIZE;};
00138
00144 int MutateSocket(XPSocket *socket);
00145
00150 bool IsAlive(void);
00151
00156 t_XPSocket *GetSocketPointer(void);
00157
00158 private:
00159
00160 t_XPSocket *mSocket;
00162 enum SocketState
00163 {
00164 TypeUndefined = 0,
00165 TypeTCP = 1,
00166 TypeUDP = 2
00167 };
00169 SocketState mSocketState;
00170 };
00171
00172
00173 #if 0
00174
00175 extern char *XPSock_TranslateError(int );
00176 extern char *XPSock_TranslateErrorLong(int );
00177
00178 extern int XPSock_GetHostName(char * ,int );
00179 extern int XPSock_Resolve(t_XPAddress * ,char * );
00180
00181 extern int XPSock_UtilityGetFragment(char * ,int );
00182 extern int XPSock_UtilityGetInt(char * ,int );
00183 extern void XPSock_UtilitySetInt(char * ,int ,int );
00184 extern short XPSock_UtilityGetShort(char * ,int );
00185 extern void XPSock_UtilitySetShort(char * ,int ,short );
00186 #endif
00187
00188
00189 #define SOCKET_ASSERT_TYPE(x) \
00190 if (mSocketState == (x)) \
00191 { \
00192 assert(0 && "XPSOCK_ILLEGALOPERATION"); \
00193 asocket_lasterror = XPSOCK_ILLEGALOPERATION; \
00194 return XPSOCK_EERROR; \
00195 } \
00196 if ((x) == TypeUDP) \
00197 { \
00198 mSocketState = TypeTCP; \
00199 } \
00200 else \
00201 { \
00202 mSocketState = TypeUDP; \
00203 }
00204
00205 #define SOCKET_ASSERT_TYPEP(x) \
00206 if (mSocketState == (x)) \
00207 { \
00208 assert(0 && "XPSOCK_ILLEGALOPERATION"); \
00209 asocket_lasterror = XPSOCK_ILLEGALOPERATION; \
00210 return pcXPSOCK_EERROR; \
00211 } \
00212 if ((x) == TypeUDP) \
00213 { \
00214 mSocketState = TypeTCP; \
00215 } \
00216 else \
00217 { \
00218 mSocketState = TypeUDP; \
00219 }
00220
00221 #define pcXPSOCK_EERROR ((XPSocket *) XPSOCK_EERROR)
00223 } // namespace RNXPSockets
00224
00225 #endif