00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _XPSOCK_H_
00013 #define _XPSOCK_H_
00014
00015 #include <string>
00016
00017 namespace RNReplicaNet
00018 {
00019
00020 #define _XPSOCK_VERSION 1100
00021
00022
00023
00027 #define XPSOCK_EOK (0)
00028 #define XPSOCK_EERROR (-1)
00029 #define XPSOCK_EWOULDBLOCK (-2)
00030 #define XPSOCK_ECLOSED (-3)
00031 #define XPSOCK_ENOEXIST (-4)
00032 #define XPSOCK_ENOMEMORY (-5)
00033 #define XPSOCK_ENOTASOCKET (-6)
00034 #define XPSOCK_ECANTLISTEN (-7)
00035 #define XPSOCK_ENOTALISTEN (-8)
00036 #define XPSOCK_ENOTCONNECTED (-9)
00037 #define XPSOCK_EBUFFEROVERFLOW (-10)
00038 #define XPSOCK_EUDPSENDFAILED (-11)
00039 #define XPSOCK_ECANTBIND (-12)
00040 #define XPSOCK_ECANTRESOLVE (-13)
00041 #define XPSOCK_EURGENTTOOBIG (-14)
00042 #define XPSOCK_BUFFERTOOSMALL (-15)
00043 #define XPSOCK_ILLEGALOPERATION (-16)
00044 #define XPSOCK_ECONNINPROGRESS (-17)
00045 #define XPSOCK_ESTACKSTARTFAILURE (-18)
00047 #define pXPSOCK_EERROR ((t_XPSocket *) XPSOCK_EERROR)
00049
00050 #define XPSOCK_TLOCALHOST (0)
00051 #define XPSOCK_TINET (1)
00052
00053
00054 #define XPSOCK_SNULL (0)
00055 #define XPSOCK_SLISTEN (1)
00056 #define XPSOCK_SCONNECT (2)
00057 #define XPSOCK_SCLOSE (3)
00058
00059
00060 #define XPSOCK_FNULL (0)
00061 #define XPSOCK_FPEEK (1)
00063 #define XPSOCK_FACK (2)
00066 #define XPSOCK_PORT_ANY (0)
00067 #define XPSOCK_PORT_LOCAL (-1)
00069 #define XPSOCK_MAXPACKETSIZE (8192)
00071 #define XPSOCK_URGENTMAXPACKETSIZE (2048)
00073
00074 #define XPSOCK_LOOPBACKBUFFER 20480
00075
00076
00077 #define XPSOCK_HARDWARE_AVAILABLE (1<<0)
00078 #define XPSOCK_HARDWARE_CABLE_CONNECTED (1<<1)
00079 #define XPSOCK_HARDWARE_10MBS (1<<2)
00080 #define XPSOCK_HARDWARE_100MBS (1<<3)
00081 #define XPSOCK_HARDWARE_FULL_DUPLEX (1<<4)
00082 #define XPSOCK_HARDWARE_HALF_DUPLEX (1<<5)
00083
00084
00085
00086
00090 struct XPAddress
00091 {
00095 XPAddress(std::string addr);
00096
00100 XPAddress(const int port,unsigned char addr1,unsigned char addr2,unsigned char addr3,unsigned char addr4);
00101
00105 XPAddress();
00106
00111 std::string Export(void);
00112
00113 int port;
00114 unsigned char addr[4];
00115 };
00116 typedef struct XPAddress t_XPAddress;
00117 typedef struct XPAddress XPAddress;
00118
00119
00120 inline bool operator== (const t_XPAddress& a,const t_XPAddress& b)
00121 {
00122 return (a.addr[0] == b.addr[0]) && (a.addr[1] == b.addr[1]) && (a.addr[2] == b.addr[2]) && (a.addr[3] == b.addr[3]);
00123 }
00124
00125 inline bool operator!= (const t_XPAddress& a,const t_XPAddress& b)
00126 {
00127 return !(a == b);
00128 }
00129
00130 typedef struct s_XPSocket t_XPSocket;
00131
00132 typedef struct s_XPSocket {
00133 int type;
00134 int state;
00135 int total_sent;
00136 int total_received;
00137 int total_accepts;
00138 int total_connects;
00139 int urgent;
00140 t_XPAddress addr;
00141 int wins_socket;
00142 t_XPSocket *loopback_socket;
00143 char *loopback_recvbuffer;
00144 int loopback_recvpos;
00145 int loopback_readpos;
00146 int loopback_pending;
00147 int port;
00148 } t_XPSocket;
00150 typedef struct s_XPErrorTranslate {
00151 int error;
00152 char *text;
00153 char *longtext;
00154 } t_XPErrorTranslate;
00156
00157 #define XPSOCK_PARANOID(x) if ((x) == NULL || (x) == pXPSOCK_EERROR)\
00158 {\
00159 asocket_lasterror = XPSOCK_ENOTASOCKET;\
00160 return XPSOCK_EERROR;\
00161 }
00162
00163
00164 #define XPSOCK_S_PARANOID(x) if ((x) == NULL || (x) == pXPSOCK_EERROR)\
00165 {\
00166 asocket_lasterror = XPSOCK_ENOTASOCKET;\
00167 return (t_XPSocket *) XPSOCK_EERROR;\
00168 }
00169
00170 }
00171
00172
00173
00174
00175 extern int XPSock_Init(void);
00176 extern int XPSock_Quit(void);
00177 extern RNReplicaNet::t_XPSocket *XPSock_Create(void);
00178 extern int XPSock_SetSendBuffer(RNReplicaNet::t_XPSocket * ,int );
00179 extern int XPSock_SetRecvBuffer(RNReplicaNet::t_XPSocket * ,int );
00180 extern int XPSock_Connect(RNReplicaNet::t_XPSocket * ,const RNReplicaNet::t_XPAddress * );
00181 extern int XPSock_Send(RNReplicaNet::t_XPSocket * ,const char * ,const int );
00182 extern int XPSock_Recv(RNReplicaNet::t_XPSocket * ,char * ,int ,int );
00183 extern int XPSock_Close(RNReplicaNet::t_XPSocket * );
00184 extern int XPSock_Listen(RNReplicaNet::t_XPSocket * ,int );
00185 extern RNReplicaNet::t_XPSocket *XPSock_Accept(RNReplicaNet::t_XPSocket * );
00186
00187 extern int XPSock_GetAddress(RNReplicaNet::t_XPSocket * ,RNReplicaNet::t_XPAddress * );
00188 extern int XPSock_GetPeerAddress(RNReplicaNet::t_XPSocket * ,RNReplicaNet::t_XPAddress * );
00189
00190 extern int XPSock_UrgentSetRawMode(RNReplicaNet::t_XPSocket * ,bool );
00191 extern RNReplicaNet::t_XPSocket *XPSock_UrgentCreate(int );
00192 extern int XPSock_UrgentMakeBroadcast(RNReplicaNet::t_XPSocket * );
00193 extern int XPSock_ProcessACKS(void);
00194 extern int XPSock_UrgentSendWithACK(RNReplicaNet::t_XPSocket * ,const char * ,int ,const RNReplicaNet::t_XPAddress * );
00195 extern int XPSock_UrgentSend(RNReplicaNet::t_XPSocket * ,const char * ,int ,const RNReplicaNet::t_XPAddress * );
00196 extern int XPSock_UrgentRecv(RNReplicaNet::t_XPSocket * ,char *const ,int ,int ,RNReplicaNet::t_XPAddress *const );
00197 extern int XPSock_UrgentListen(RNReplicaNet::t_XPSocket * );
00198
00199 extern char *XPSock_TranslateError(int );
00200 extern char *XPSock_TranslateErrorLong(int );
00201
00202 extern int XPSock_GetHostName(char * ,int );
00203 extern int XPSock_GetHostAddress(RNReplicaNet::XPAddress * );
00204 extern int XPSock_Resolve(RNReplicaNet::t_XPAddress * ,const char * );
00205
00206 extern int XPSock_UtilityGetFragment(char * ,int );
00207 extern int XPSock_UtilityGetInt(char * ,int );
00208 extern void XPSock_UtilitySetInt(char * ,int ,int );
00209 extern short XPSock_UtilityGetShort(char * ,int );
00210 extern void XPSock_UtilitySetShort(char * ,int ,short );
00211
00212 extern int XPSock_UtilityChecksum(char * ,int );
00213
00214 extern void XPSock_Poll(void);
00215
00216 extern void XPSock_SentHistogram(unsigned int * ,int );
00217 extern void XPSock_RecvHistogram(unsigned int * ,int );
00218
00219 extern int XPSock_GetHardwareStatus(void);
00220
00221
00222 extern int asocket_lasterror;
00224
00225 extern int asocket_packets_got;
00226 extern int asocket_packets_sent;
00227 extern int asocket_packets_got_size;
00228 extern int asocket_packets_sent_size;
00230
00231 extern bool gXPSock_PacketLossEmulation;
00232 extern float gXPSock_PacketLossEmulationPercent;
00233 extern bool gXPSock_PacketLatencyEmulation;
00234 extern float gXPSock_PacketLatencyEmulationBase;
00235 extern float gXPSock_PacketLatencyEmulationJitter;
00236
00237 #endif
00238