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

XPSocket.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 /* XPSocket.h */
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 /* Some error return defines */
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 /* Probable XP socket types */
00050 #define XPSOCK_TLOCALHOST   (0)
00051 #define XPSOCK_TINET        (1)
00052 
00053 /* XP socket status */
00054 #define XPSOCK_SNULL        (0)
00055 #define XPSOCK_SLISTEN      (1)
00056 #define XPSOCK_SCONNECT     (2)
00057 #define XPSOCK_SCLOSE       (3)
00058 
00059 /* Flags to pass to XPSock_Recv */
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 /* Some constants for the local loop back sockets */
00074 #define XPSOCK_LOOPBACKBUFFER   20480
00075 
00076 /* Flags returned by XPSock_GetHardwareStatus */
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 /* Structs and their type defs */
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 /* A useful operator to compare addresses */
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])/* && (a.port == b.port)*/;
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 /* Macros to make life easier */
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 } // namespace RNXPSockets
00171 
00172 // Return error values are either pXPSOCK_EERROR, XPSOCK_EERROR or pXPSOCK_EOK
00173 
00174 /* All the global functions */
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 * /*socket*/,int /*size*/);
00179 extern int XPSock_SetRecvBuffer(RNReplicaNet::t_XPSocket * /*socket*/,int /*size*/);
00180 extern int XPSock_Connect(RNReplicaNet::t_XPSocket * /*socket*/,const RNReplicaNet::t_XPAddress * /*addr*/);
00181 extern int XPSock_Send(RNReplicaNet::t_XPSocket * /*socket*/,const char * /*data*/,const int /*len*/);
00182 extern int XPSock_Recv(RNReplicaNet::t_XPSocket * /*socket*/,char * /*data*/,int /*maxlen*/,int /*flag*/);
00183 extern int XPSock_Close(RNReplicaNet::t_XPSocket * /*socket*/);
00184 extern int XPSock_Listen(RNReplicaNet::t_XPSocket * /*socket*/,int /*port*/);
00185 extern RNReplicaNet::t_XPSocket *XPSock_Accept(RNReplicaNet::t_XPSocket * /*socket*/);
00186 
00187 extern int XPSock_GetAddress(RNReplicaNet::t_XPSocket * /*socket*/,RNReplicaNet::t_XPAddress * /*addr*/);
00188 extern int XPSock_GetPeerAddress(RNReplicaNet::t_XPSocket * /*socket*/,RNReplicaNet::t_XPAddress * /*addr*/);
00189 
00190 extern int XPSock_UrgentSetRawMode(RNReplicaNet::t_XPSocket * /*socket*/,bool /*RawMode*/);
00191 extern RNReplicaNet::t_XPSocket *XPSock_UrgentCreate(int /*port*/);
00192 extern int XPSock_UrgentMakeBroadcast(RNReplicaNet::t_XPSocket * /*socket*/);
00193 extern int XPSock_ProcessACKS(void);
00194 extern int XPSock_UrgentSendWithACK(RNReplicaNet::t_XPSocket * /*socket*/,const char * /*data*/,int /*len*/,const RNReplicaNet::t_XPAddress * /*addr*/);
00195 extern int XPSock_UrgentSend(RNReplicaNet::t_XPSocket * /*socket*/,const char * /*data*/,int /*len*/,const RNReplicaNet::t_XPAddress * /*addr*/);
00196 extern int XPSock_UrgentRecv(RNReplicaNet::t_XPSocket * /*socket*/,char *const /*data*/,int /*maxlen*/,int /*flag*/,RNReplicaNet::t_XPAddress *const /*addr*/);
00197 extern int XPSock_UrgentListen(RNReplicaNet::t_XPSocket * /*socket*/);
00198 
00199 extern char *XPSock_TranslateError(int /*errno*/);
00200 extern char *XPSock_TranslateErrorLong(int /*errno*/);
00201 
00202 extern int XPSock_GetHostName(char * /*name*/,int /*name_len*/);
00203 extern int XPSock_GetHostAddress(RNReplicaNet::XPAddress * /*addr*/);
00204 extern int XPSock_Resolve(RNReplicaNet::t_XPAddress * /*resolve*/,const char * /*input*/);
00205 
00206 extern int XPSock_UtilityGetFragment(char * /*buffer*/,int /*maxlen*/);
00207 extern int XPSock_UtilityGetInt(char * /*buffer*/,int /*offset*/);
00208 extern void XPSock_UtilitySetInt(char * /*buffer*/,int /*offset*/,int /*value*/);
00209 extern short XPSock_UtilityGetShort(char * /*buffer*/,int /*offset*/);
00210 extern void XPSock_UtilitySetShort(char * /*buffer*/,int /*offset*/,short /*value*/);
00211 
00212 extern int XPSock_UtilityChecksum(char * /*buffer*/,int /*length*/);
00213 
00214 extern void XPSock_Poll(void);
00215 
00216 extern void XPSock_SentHistogram(unsigned int * /*classes*/,int /*numClasses*/);
00217 extern void XPSock_RecvHistogram(unsigned int * /*classes*/,int /*numClasses*/);
00218 
00219 extern int XPSock_GetHardwareStatus(void);
00220 
00221 // The global variables
00222 extern int asocket_lasterror;                       
00224 /* Extern the counters */
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 // Only use these if you know exactly what you are doing
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 

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