net.h

Go to the documentation of this file.
00001 
00025 #include "bool.h"
00026 #ifndef WIN32
00027 #include <errno.h>
00028 #endif
00029 
00043 #define PORT_SRV     26000
00044 
00047 #define PORT_STSYNC  26001
00048 
00051 #define PORT_CLI     26002
00052 
00058 #define PORT_CTSYNC  26003
00059 
00067 #ifdef WIN32
00068 #define CloseSocket(s)  if (s != -1) { closesocket(s); s = -1; }
00069 #else
00070 #define CloseSocket(s)  if (s != -1) { close(s); s = -1; }
00071 #endif
00072 
00080 #define MSG_WRITE_8(ptr, val)   *((ptr)++) = (val)
00081 
00092 #define MSG_WRITE_8C(ptr, index, val)   (ptr)[index] = (val)
00093 
00102 #define MSG_WRITE_16(ptr, val)  *((ptr)++) = ((val) >> 8); \
00103                                 *((ptr)++) = ((val) & 0xFF)
00104 
00115 #define MSG_WRITE_16C(ptr, index, val)   (ptr)[index] = ((val) >> 8);\
00116                                          (ptr)[index + 1] = ((val) & 0xFF)
00117 
00126 #define MSG_WRITE_32(ptr, val)  *((ptr)++) = ((val) >> 24); \
00127                                 *((ptr)++) = ((val) >> 16) & 0xFF; \
00128                                 *((ptr)++) = ((val) >> 8)  & 0xFF; \
00129                                 *((ptr)++) = ((val) & 0xFF)
00130 
00141 #define MSG_WRITE_32C(ptr, index, val)  (ptr)[index] = ((val) >> 24); \
00142                                     (ptr)[index + 1] = ((val) >> 16) & 0xFF; \
00143                                     (ptr)[index + 2] = ((val) >> 8) & 0xFF; \
00144                                     (ptr)[index + 3] = ((val) & 0xFF)
00145 
00153 #define MSG_READ_8(ptr, val)   (val) = *((ptr)++)
00154 
00162 #define MSG_READ_16(ptr, val)  (val) =  (Uint8)*((ptr)++) << 8; \
00163                                (val) |= (Uint8)*((ptr)++)
00164 
00175 #define MSG_READ_16C(ptr, index, val) (val) =  ((Uint8*)(ptr))[index] << 8; \
00176                                       (val) |= ((Uint8*)(ptr))[index + 1]
00177 
00185 #define MSG_READ_32(ptr, val)  (val) =  (Uint8)*((ptr)++) << 24; \
00186                                (val) |= (Uint8)*((ptr)++) << 16; \
00187                                (val) |= (Uint8)*((ptr)++) << 8; \
00188                                (val) |= (Uint8)*((ptr)++)
00189 
00200 #define MSG_READ_32C(ptr, index, val) \
00201         (val) =  ((Uint8*)(ptr))[index] << 24; \
00202         (val) |= ((Uint8*)(ptr))[index + 1] << 16; \
00203         (val) |= ((Uint8*)(ptr))[index + 2] << 8; \
00204         (val) |= ((Uint8*)(ptr))[index + 3]
00205 
00209 enum {
00214     NETSTATE_INIT,
00219     NETSTATE_SEARCHING,
00226     NETSTATE_CONNECTING,
00231     NETSTATE_RCVCFG,
00236     NETSTATE_CLIENT,
00242     NETSTATE_CLIDISCONN,
00246     NETSTATE_SERVER,
00252     NETSTATE_SRVDISCONN,
00260     NETSTATE_SRVDENY,
00267     NETSTATE_DISCONN,
00271     NETSTATE_SEARCHERR,
00276     NETSTATE_SRVERR,
00280     NETSTATE_CONERR
00281 };
00282 
00286 extern unsigned int networkState;
00287 
00302 Bool NetInit(char *srv);
00303 
00315 Bool NetInitSrv();
00316 
00322 void NetUninit();
00323 
00337 void NetDisconnect();
00338 
00348 Bool NetCliToSrv();
00349 
00356 Bool NetSrvToCli();
00357 
00367 int UnicastSocket(void *addr, Bool block);
00368 
00369 // Make error handing more consistent across Unix-like systems and Windows
00370 
00378 #ifdef WIN32
00379 #define GetNetErrorVal()  WSAGetLastError()
00380 #define EWOULDBLOCK  WSAEWOULDBLOCK
00381 #define EBADF        WSAEBADF
00382 #define EFAULT       WSAEFAULT
00383 #define EINTR        WSAEINTR
00384 #define EINVAL       WSAEINVAL
00385 #define ENOTSOCK     WSAENOTSOCK
00386 #define EADDRINUSE   WSAEADDRINUSE
00387 #define ENETDOWN     WSAENETDOWN
00388 #define ENETUNREACH  WSAENETUNREACH
00389 #define ECONNRESET   WSAECONNREFUSED
00390 #define ECONNREFUSED WSAECONNRESET 
00391 #define EHOSTUNREACH WSAEHOSTUNREACH
00392 #else
00393 #define GetNetErrorVal()  errno
00394 #endif
00395 
00401 extern int netError;
00402 
00410 const rtsa_char *GetNetErrorString(int err);
00411 

Generated on Mon May 28 04:41:39 2007 for Retro Tank Super Attack by  doxygen 1.5.2