Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

XPSocketClass.h

00001 /* START_LICENSE_HEADER
00002 
00003 Copyright (C) 2000 Martin Piper, original design and program code
00004 Copyright (C) 2001-2005 Replica Software
00005 
00006 This program file is copyright (C) Replica Software and can only be used under license.
00007 For more information visit: http://www.replicanet.com/
00008 Or email: info@replicanet.com
00009 
00010 END_LICENSE_HEADER */
00011 /* A class implementation of the C style XPSocket library */
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 //friend class XPStream;
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 /* To implement */
00173 #if 0
00174 
00175 extern char *XPSock_TranslateError(int /*errno*/);
00176 extern char *XPSock_TranslateErrorLong(int /*errno*/);
00177 
00178 extern int XPSock_GetHostName(char * /*name*/,int /*name_len*/);
00179 extern int XPSock_Resolve(t_XPAddress * /*resolve*/,char * /*input*/);
00180 
00181 extern int XPSock_UtilityGetFragment(char * /*buffer*/,int /*maxlen*/);
00182 extern int XPSock_UtilityGetInt(char * /*buffer*/,int /*offset*/);
00183 extern void XPSock_UtilitySetInt(char * /*buffer*/,int /*offset*/,int /*value*/);
00184 extern short XPSock_UtilityGetShort(char * /*buffer*/,int /*offset*/);
00185 extern void XPSock_UtilitySetShort(char * /*buffer*/,int /*offset*/,short /*value*/);
00186 #endif
00187 
00188 /* A macro to make our life easier */
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

Generated on Sun Oct 30 01:12:21 2005 for XPSockets by  doxygen 1.4.1