hxsock.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:13k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #if !defined( HXSOCK_H )
  36. #define HXSOCK_H
  37. #if !defined( _WINSOCKAPI_ )
  38. #include <winsock.h>
  39. #endif
  40. #include "hlxclib/assert.h"
  41. // Typedefs used to declare our function pointers, and for casting return value from
  42. // GetProcAddress().
  43. typedef SOCKET (PASCAL FAR *ACCEPT)( SOCKET, struct sockaddr FAR *, int FAR * );
  44. typedef int (PASCAL FAR *BIND)( SOCKET, const struct sockaddr FAR *, int );
  45. typedef int (PASCAL FAR * CLOSESOCKET)( SOCKET );
  46. typedef int (PASCAL FAR * CONNECT)( SOCKET, const struct sockaddr FAR *, int );
  47. typedef int (PASCAL FAR *IOCTLSOCKET)( SOCKET, long, u_long FAR * );
  48. typedef int (PASCAL FAR *GETPEERNAME)( SOCKET, struct sockaddr FAR *, int FAR * );
  49. typedef int (PASCAL FAR *GETSOCKNAME)( SOCKET, struct sockaddr FAR *, int FAR * );
  50. typedef int (PASCAL FAR *GETSOCKOPT)( SOCKET, int, int, char FAR *, int FAR * );
  51. typedef u_long (PASCAL FAR *HTONL)( u_long );
  52. typedef u_short (PASCAL FAR *HTONS)( u_short );
  53. typedef unsigned long (PASCAL FAR *INET_ADDR)( const char FAR * );
  54. typedef char FAR * (PASCAL FAR * INET_NTOA)( struct in_addr );
  55. typedef int (PASCAL FAR *LISTEN)( SOCKET, int );
  56. typedef u_long (PASCAL FAR * NTOHL)( u_long );
  57. typedef u_short (PASCAL FAR * NTOHS)( u_short );
  58. typedef int (PASCAL FAR * RECV)( SOCKET, char FAR *, int, int );
  59. typedef int (PASCAL FAR * RECVFROM)( SOCKET, char FAR *, int, int, struct sockaddr FAR *, int FAR * );
  60. typedef int (PASCAL FAR * SELECT)( int, fd_set FAR *, fd_set FAR *, fd_set FAR *, const struct timeval FAR * );
  61. typedef int (PASCAL FAR * SEND)( SOCKET, const char FAR *, int, int );
  62. typedef int (PASCAL FAR *SENDTO)( SOCKET, const char FAR *, int, int, const struct sockaddr FAR *, int );
  63. typedef int (PASCAL FAR *SETSOCKOPT)( SOCKET, int, int, const char FAR *, int );
  64. typedef int (PASCAL FAR *SHUTDOWN)( SOCKET, int );
  65. typedef SOCKET (PASCAL FAR *HXSOCKET)( int, int, int );
  66. typedef struct hostent FAR * (PASCAL FAR *GETHOSTBYADDR)( const char FAR *, int, int );
  67. typedef struct hostent FAR * (PASCAL FAR *GETHOSTBYNAME)( const char FAR * );
  68. typedef int (PASCAL FAR *GETHOSTNAME)( char FAR *, int );
  69. #ifndef _WINCE
  70. typedef struct servent FAR * (PASCAL FAR *GETSERVBYPORT)( int, const char FAR * );
  71. typedef struct servent FAR * (PASCAL FAR *GETSERVBYNAME)( const char FAR *, const char FAR * );
  72. typedef struct protoent FAR * (PASCAL FAR *GETPROTOBYNUMBER)( int );
  73. typedef struct protoent FAR * (PASCAL FAR *GETPROTOBYNAME)( const char FAR * );
  74. #endif /* _WINCE */
  75. typedef int (PASCAL FAR *WSASTARTUP)( WORD, LPWSADATA );
  76. typedef int (PASCAL FAR *WSACLEANUP)( void );
  77. typedef void (PASCAL FAR *WSASETLASTERROR)( int );
  78. typedef int (PASCAL FAR *WSAGETLASTERROR)( void );
  79. #ifndef _WINCE
  80. typedef BOOL (PASCAL FAR *WSAISBLOCKING)( void );
  81. typedef int (PASCAL FAR *WSAUNHOOKBLOCKINGHOOK)( void );
  82. typedef FARPROC (PASCAL FAR *WSASETBLOCKINGHOOK)( FARPROC );
  83. typedef int (PASCAL FAR *WSACANCELBLOCKINGCALL)( void );
  84. typedef HANDLE (PASCAL FAR *WSAASYNCGETSERVBYNAME)( HWND, u_int, const char FAR *, const char FAR *, char FAR *, int );
  85. typedef HANDLE (PASCAL FAR *WSAASYNCGETSERVBYPORT)( HWND, u_int, int, const char FAR *, char FAR *, int );
  86. typedef HANDLE (PASCAL FAR *WSAASYNCGETPROTOBYNAME)( HWND, u_int, const char FAR *, char FAR *, int );
  87. typedef HANDLE (PASCAL FAR *WSAASYNCGETPROTOBYNUMBER)( HWND, u_int, int, char FAR *, int );
  88. typedef HANDLE (PASCAL FAR *WSAASYNCGETHOSTBYNAME)( HWND, u_int, const char FAR *, char FAR *, int );
  89. typedef HANDLE (PASCAL FAR *WSAASYNCGETHOSTBYADDR)( HWND, u_int, const char FAR *, int, int, const char FAR *, int );
  90. typedef int (PASCAL FAR *WSACANCELASYNCREQUEST)( HANDLE );
  91. typedef int (PASCAL FAR *WSAASYNCSELECT)( SOCKET, HWND, u_int, long );
  92. #endif /* _WINCE */
  93. typedef int (PASCAL FAR *__WSAFDISSET)( SOCKET, fd_set FAR * );
  94. class CHXSock
  95. {                                  
  96. public:
  97. CHXSock();
  98. ~CHXSock();
  99. BOOL InitWinsock();
  100. BOOL WinSockAvail() { return( m_iInited ); }
  101.    /*
  102.     * These are the exported methods for this class, basically it's a wrapper for winsock
  103.     */
  104. // This function branches on whether the socket is TCP or UDP 
  105. // (different code for getting through a Firewall)
  106. int PASCAL FAR HXconnect( SOCKET s, const struct sockaddr FAR *name, int namelen );
  107. // This function branches on whether the socket is TCP or UDP 
  108. // (different code for getting through a Firewall)
  109. int PASCAL FAR HXbind ( SOCKET s, const struct sockaddr FAR *addr, int namelen );
  110. // This function branches on whether the socket is TCP or UDP 
  111. // (different code for getting through a Firewall)
  112. int PASCAL FAR HXlisten( SOCKET s, int backlog );
  113. // This function branches on whether the socket is TCP or UDP 
  114. // (different code for getting through a Firewall)
  115. int PASCAL FAR HXgetsockname( SOCKET s, struct sockaddr FAR *name, int FAR * namelen );
  116. // This function branches on whether the socket is TCP or UDP 
  117. // (different code for getting through a Firewall)
  118. u_int PASCAL FAR HXaccept( SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen );
  119. int PASCAL FAR HXclosesocket( SOCKET s );
  120. int PASCAL FAR HXioctlsocket( SOCKET s, long cmd, u_long FAR *argp );
  121. int PASCAL FAR HXgetpeername( SOCKET s, struct sockaddr FAR *name, int FAR * namelen );
  122. int PASCAL FAR HXgetsockopt( SOCKET s, int level, int optname, char FAR * optval, int FAR *optlen );
  123. u_long PASCAL FAR HXhtonl( u_long hostlong );
  124. u_short PASCAL FAR HXhtons( u_short hostshort );
  125. unsigned long PASCAL FAR HXinet_addr( const char FAR * cp );
  126. char FAR * PASCAL FAR HXinet_ntoa( struct in_addr in );
  127. u_long PASCAL FAR HXntohl( u_long netlong );
  128. u_short PASCAL FAR HXntohs( u_short netshort );
  129. int PASCAL FAR HXrecv( SOCKET s, char FAR * buf, int len, int flags );
  130. int PASCAL FAR HXrecvfrom( SOCKET s, char FAR * buf, int len, int flags, struct sockaddr FAR *from, int FAR * fromlen );
  131. int PASCAL FAR HXselect( int nfds, fd_set FAR *readfds, fd_set FAR *writefds, fd_set FAR *exceptfds, const struct timeval FAR *timeout );
  132. int PASCAL FAR HXsend( SOCKET s, const char FAR * buf, int len, int flags );
  133. int PASCAL FAR HXsendto( SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR *to, int tolen );
  134. int PASCAL FAR HXsetsockopt( SOCKET s, int level, int optname, const char FAR * optval, int optlen );
  135. int PASCAL FAR HXshutdown( SOCKET s, int how );
  136. SOCKET PASCAL FAR HXsocket( int af, int type, int protocol );
  137. /* Database function prototypes */
  138. struct hostent FAR * PASCAL FAR HXgethostbyaddr( const char FAR * addr, int len, int type );
  139. struct hostent FAR * PASCAL FAR HXgethostbyname( const char FAR * name );
  140. int PASCAL FAR  HXgethostname( char FAR * name, int namelen );
  141. #ifndef _WINCE
  142. struct servent FAR * PASCAL FAR HXgetservbyport( int port, const char FAR * proto );
  143. struct servent FAR * PASCAL FAR HXgetservbyname( const char FAR * name,
  144.  const char FAR * proto );
  145. struct protoent FAR * PASCAL FAR HXgetprotobynumber( int proto );
  146. struct protoent FAR * PASCAL FAR HXgetprotobyname( const char FAR * name );
  147. #endif /* _WINCE */
  148. /* Microsoft Windows Extension function prototypes */
  149. int PASCAL FAR HXWSAStartup( WORD wVersionRequired, LPWSADATA lpWSAData );
  150. int PASCAL FAR HXWSACleanup( void );
  151. void PASCAL FAR HXWSASetLastError( int iError );
  152. int PASCAL FAR HXWSAGetLastError( void );
  153. #ifndef _WINCE
  154. BOOL PASCAL FAR HXWSAIsBlocking( void );
  155. int PASCAL FAR HXWSAUnhookBlockingHook( void );
  156. FARPROC PASCAL FAR HXWSASetBlockingHook( FARPROC lpBlockFunc );
  157. int PASCAL FAR HXWSACancelBlockingCall( void );
  158. HANDLE PASCAL FAR HXWSAAsyncGetServByName( HWND hWnd, u_int wMsg, const char FAR * name, const char FAR * proto, char FAR * buf, int buflen );
  159. HANDLE PASCAL FAR HXWSAAsyncGetServByPort( HWND hWnd, u_int wMsg, int port, const char FAR * proto, char FAR * buf, int buflen );
  160. HANDLE PASCAL FAR HXWSAAsyncGetProtoByName( HWND hWnd, u_int wMsg, const char FAR * name, char FAR * buf, int buflen );
  161. HANDLE PASCAL FAR HXWSAAsyncGetProtoByNumber( HWND hWnd, u_int wMsg, int number, char FAR * buf, int buflen );
  162. HANDLE PASCAL FAR HXWSAAsyncGetHostByName( HWND hWnd, u_int wMsg, const char FAR * name, char FAR * buf, int buflen );
  163. HANDLE PASCAL FAR HXWSAAsyncGetHostByAddr( HWND hWnd, u_int wMsg, const char FAR * addr, int len, int type, const char FAR * buf, int buflen );
  164. int PASCAL FAR HXWSACancelAsyncRequest( HANDLE hAsyncTaskHandle );
  165. int PASCAL FAR HXWSAAsyncSelect( SOCKET s, HWND hWnd, u_int wMsg, long lEvent);
  166. #endif /* _WINCE */
  167. int PASCAL FAR HX__WSAFDIsSet( SOCKET s, fd_set FAR *fdSet );
  168. UINT8 HXGetVersion(void);
  169. protected:
  170. int m_iInited;
  171. HINSTANCE m_hLib;
  172. UINT8 m_nVersion;
  173. void SetInited( void );
  174. // Internal function pointers
  175. ACCEPT _hxaccept;
  176. BIND _hxbind;
  177. CLOSESOCKET _hxclosesocket;
  178. CONNECT _hxconnect;
  179. IOCTLSOCKET _hxioctlsocket;
  180. GETPEERNAME _hxgetpeername;
  181. GETSOCKNAME _hxgetsockname;
  182. GETSOCKOPT _hxgetsockopt;
  183. HTONL _hxhtonl;
  184. HTONS _hxhtons;
  185. INET_ADDR _hxinet_addr;
  186. INET_NTOA _hxinet_ntoa;
  187. LISTEN _hxlisten;
  188. NTOHL _hxntohl;
  189. NTOHS _hxntohs;
  190. RECV _hxrecv;
  191. RECVFROM _hxrecvfrom;
  192. SELECT _hxselect;
  193. SEND _hxsend;
  194. SENDTO _hxsendto;
  195. SETSOCKOPT _hxsetsockopt;
  196. SHUTDOWN _hxshutdown;
  197. HXSOCKET _hxsocket;
  198. /* Database function prototypes */
  199. GETHOSTBYADDR _hxgethostbyaddr;
  200. GETHOSTBYNAME _hxgethostbyname;
  201. GETHOSTNAME _hxgethostname;
  202. #ifndef _WINCE
  203. GETSERVBYPORT _hxgetservbyport;
  204. GETSERVBYNAME _hxgetservbyname;
  205. GETPROTOBYNUMBER _hxgetprotobynumber;
  206. GETPROTOBYNAME _hxgetprotobyname;
  207. #endif /* _WINCE */
  208. /* Microsoft Windows Extension function prototypes */
  209. WSASTARTUP _hxWSAStartup;
  210. WSACLEANUP _hxWSACleanup;
  211. WSASETLASTERROR _hxWSASetLastError;
  212. WSAGETLASTERROR _hxWSAGetLastError;
  213. #ifndef _WINCE
  214. WSAISBLOCKING _hxWSAIsBlocking;
  215. WSAUNHOOKBLOCKINGHOOK _hxWSAUnhookBlockingHook;
  216. WSASETBLOCKINGHOOK _hxWSASetBlockingHook;
  217. WSACANCELBLOCKINGCALL _hxWSACancelBlockingCall;
  218. WSAASYNCGETSERVBYNAME _hxWSAAsyncGetServByName;
  219. WSAASYNCGETSERVBYPORT _hxWSAAsyncGetServByPort;
  220. WSAASYNCGETPROTOBYNAME _hxWSAAsyncGetProtoByName;
  221. WSAASYNCGETPROTOBYNUMBER _hxWSAAsyncGetProtoByNumber;
  222. WSAASYNCGETHOSTBYNAME _hxWSAAsyncGetHostByName;
  223. WSAASYNCGETHOSTBYADDR _hxWSAAsyncGetHostByAddr;
  224. WSACANCELASYNCREQUEST _hxWSACancelAsyncRequest;
  225. WSAASYNCSELECT _hxWSAAsyncSelect;
  226. #endif /* _WINCE */
  227. __WSAFDISSET _hxWSAFDIsSet;
  228. BOOL LoadWinsock( void );
  229. void UnloadWinsock(BOOL bDestuction = TRUE);
  230. };
  231. // This is the one CHXSock object that we create
  232. extern CHXSock* sockObj;
  233. #define _INLINE_CHXSOCK_
  234. //#include "sock.inl"
  235. //#include "sock.h"
  236. #define __WSAFDIsSet( arg1, arg2 ) sockObj->HX__WSAFDIsSet( arg1, arg2 )
  237. #endif