HPSocket.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Author : Bruce Liang
  5. * Website : https://github.com/ldcsaa
  6. * Project : https://github.com/ldcsaa/HP-Socket
  7. * Blog : http://www.cnblogs.com/ldcsaa
  8. * Wiki : http://www.oschina.net/p/hp-socket
  9. * QQ Group : 44636872, 75375912
  10. *
  11. * Licensed under the Apache License, Version 2.0 (the "License");
  12. * you may not use this file except in compliance with the License.
  13. * You may obtain a copy of the License at
  14. *
  15. * http://www.apache.org/licenses/LICENSE-2.0
  16. *
  17. * Unless required by applicable law or agreed to in writing, software
  18. * distributed under the License is distributed on an "AS IS" BASIS,
  19. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  20. * See the License for the specific language governing permissions and
  21. * limitations under the License.
  22. */
  23. #include "hpsocket/HPSocket.h"
  24. #include "TcpServer.h"
  25. #include "TcpAgent.h"
  26. #include "TcpClient.h"
  27. #include "TcpPullServer.h"
  28. #include "TcpPullClient.h"
  29. #include "TcpPullAgent.h"
  30. #include "TcpPackServer.h"
  31. #include "TcpPackClient.h"
  32. #include "TcpPackAgent.h"
  33. #include "HPThreadPool.h"
  34. #ifdef _UDP_SUPPORT
  35. #include "UdpServer.h"
  36. #include "UdpClient.h"
  37. #include "UdpCast.h"
  38. #include "UdpNode.h"
  39. #include "UdpArqServer.h"
  40. #include "UdpArqClient.h"
  41. #endif
  42. #ifdef _HTTP_SUPPORT
  43. #include "HttpServer.h"
  44. #include "HttpAgent.h"
  45. #include "HttpClient.h"
  46. #endif
  47. /*****************************************************************************************************************************************************/
  48. /****************************************************************** TCP/UDP Exports ******************************************************************/
  49. /*****************************************************************************************************************************************************/
  50. HPSOCKET_API ITcpServer* HP_Create_TcpServer(ITcpServerListener* pListener)
  51. {
  52. return new CTcpServer(pListener);
  53. }
  54. HPSOCKET_API ITcpAgent* HP_Create_TcpAgent(ITcpAgentListener* pListener)
  55. {
  56. return new CTcpAgent(pListener);
  57. }
  58. HPSOCKET_API ITcpClient* HP_Create_TcpClient(ITcpClientListener* pListener)
  59. {
  60. return new CTcpClient(pListener);
  61. }
  62. HPSOCKET_API ITcpPullServer* HP_Create_TcpPullServer(ITcpServerListener* pListener)
  63. {
  64. return (ITcpPullServer*)(new CTcpPullServer(pListener));
  65. }
  66. HPSOCKET_API ITcpPullAgent* HP_Create_TcpPullAgent(ITcpAgentListener* pListener)
  67. {
  68. return (ITcpPullAgent*)(new CTcpPullAgent(pListener));
  69. }
  70. HPSOCKET_API ITcpPullClient* HP_Create_TcpPullClient(ITcpClientListener* pListener)
  71. {
  72. return (ITcpPullClient*)(new CTcpPullClient(pListener));
  73. }
  74. HPSOCKET_API ITcpPackServer* HP_Create_TcpPackServer(ITcpServerListener* pListener)
  75. {
  76. return (ITcpPackServer*)(new CTcpPackServer(pListener));
  77. }
  78. HPSOCKET_API ITcpPackAgent* HP_Create_TcpPackAgent(ITcpAgentListener* pListener)
  79. {
  80. return (ITcpPackAgent*)(new CTcpPackAgent(pListener));
  81. }
  82. HPSOCKET_API ITcpPackClient* HP_Create_TcpPackClient(ITcpClientListener* pListener)
  83. {
  84. return (ITcpPackClient*)(new CTcpPackClient(pListener));
  85. }
  86. HPSOCKET_API void HP_Destroy_TcpServer(ITcpServer* pServer)
  87. {
  88. delete pServer;
  89. }
  90. HPSOCKET_API void HP_Destroy_TcpAgent(ITcpAgent* pAgent)
  91. {
  92. delete pAgent;
  93. }
  94. HPSOCKET_API void HP_Destroy_TcpClient(ITcpClient* pClient)
  95. {
  96. delete pClient;
  97. }
  98. HPSOCKET_API void HP_Destroy_TcpPullServer(ITcpPullServer* pServer)
  99. {
  100. delete pServer;
  101. }
  102. HPSOCKET_API void HP_Destroy_TcpPullAgent(ITcpPullAgent* pAgent)
  103. {
  104. delete pAgent;
  105. }
  106. HPSOCKET_API void HP_Destroy_TcpPullClient(ITcpPullClient* pClient)
  107. {
  108. delete pClient;
  109. }
  110. HPSOCKET_API void HP_Destroy_TcpPackServer(ITcpPackServer* pServer)
  111. {
  112. delete pServer;
  113. }
  114. HPSOCKET_API void HP_Destroy_TcpPackAgent(ITcpPackAgent* pAgent)
  115. {
  116. delete pAgent;
  117. }
  118. HPSOCKET_API void HP_Destroy_TcpPackClient(ITcpPackClient* pClient)
  119. {
  120. delete pClient;
  121. }
  122. #ifdef _UDP_SUPPORT
  123. HPSOCKET_API IUdpServer* HP_Create_UdpServer(IUdpServerListener* pListener)
  124. {
  125. return new CUdpServer(pListener);
  126. }
  127. HPSOCKET_API IUdpClient* HP_Create_UdpClient(IUdpClientListener* pListener)
  128. {
  129. return new CUdpClient(pListener);
  130. }
  131. HPSOCKET_API IUdpCast* HP_Create_UdpCast(IUdpCastListener* pListener)
  132. {
  133. return new CUdpCast(pListener);
  134. }
  135. HPSOCKET_API IUdpNode* HP_Create_UdpNode(IUdpNodeListener* pListener)
  136. {
  137. return new CUdpNode(pListener);
  138. }
  139. HPSOCKET_API IUdpArqServer* HP_Create_UdpArqServer(IUdpServerListener* pListener)
  140. {
  141. return (IUdpArqServer*)(new CUdpArqServer(pListener));
  142. }
  143. HPSOCKET_API IUdpArqClient* HP_Create_UdpArqClient(IUdpClientListener* pListener)
  144. {
  145. return (IUdpArqClient*)(new CUdpArqClient(pListener));
  146. }
  147. HPSOCKET_API void HP_Destroy_UdpServer(IUdpServer* pServer)
  148. {
  149. delete pServer;
  150. }
  151. HPSOCKET_API void HP_Destroy_UdpClient(IUdpClient* pClient)
  152. {
  153. delete pClient;
  154. }
  155. HPSOCKET_API void HP_Destroy_UdpCast(IUdpCast* pCast)
  156. {
  157. delete pCast;
  158. }
  159. HPSOCKET_API void HP_Destroy_UdpNode(IUdpNode* pNode)
  160. {
  161. delete pNode;
  162. }
  163. HPSOCKET_API void HP_Destroy_UdpArqServer(IUdpArqServer* pServer)
  164. {
  165. delete pServer;
  166. }
  167. HPSOCKET_API void HP_Destroy_UdpArqClient(IUdpArqClient* pClient)
  168. {
  169. delete pClient;
  170. }
  171. #endif
  172. /*****************************************************************************************************************************************************/
  173. /*************************************************************** Global Function Exports *************************************************************/
  174. /*****************************************************************************************************************************************************/
  175. HPSOCKET_API DWORD HP_GetHPSocketVersion()
  176. {
  177. return ::GetHPSocketVersion();
  178. }
  179. HPSOCKET_API LPCTSTR HP_GetSocketErrorDesc(EnSocketError enCode)
  180. {
  181. return ::GetSocketErrorDesc(enCode);
  182. }
  183. HPSOCKET_API DWORD SYS_GetLastError()
  184. {
  185. return ::GetLastError();
  186. }
  187. HPSOCKET_API LPCSTR SYS_GetLastErrorStr()
  188. {
  189. return ::GetLastErrorStr();
  190. }
  191. HPSOCKET_API int SYS_SetSocketOption(SOCKET sock, int level, int name, LPVOID val, int len)
  192. {
  193. return ::SSO_SetSocketOption(sock, level, name, val, len);
  194. }
  195. HPSOCKET_API int SYS_GetSocketOption(SOCKET sock, int level, int name, LPVOID val, int* len)
  196. {
  197. return ::SSO_GetSocketOption(sock, level, name, val, len);
  198. }
  199. HPSOCKET_API int SYS_IoctlSocket(SOCKET sock, long cmd, ULONG* arg)
  200. {
  201. return ::SSO_IoctlSocket(sock, cmd, arg);
  202. }
  203. HPSOCKET_API BOOL SYS_fcntl_SETFL(FD fd, INT fl, BOOL bSet)
  204. {
  205. return ::fcntl_SETFL(fd, fl, bSet);
  206. }
  207. HPSOCKET_API int SYS_SSO_NoBlock(SOCKET sock, BOOL bNoBlock)
  208. {
  209. return ::SSO_NoBlock(sock, bNoBlock);
  210. }
  211. HPSOCKET_API int SYS_SSO_NoDelay(SOCKET sock, BOOL bNoDelay)
  212. {
  213. return ::SSO_NoDelay(sock, bNoDelay);
  214. }
  215. HPSOCKET_API int SYS_SSO_DontLinger(SOCKET sock, BOOL bDont)
  216. {
  217. return ::SSO_DontLinger(sock, bDont);
  218. }
  219. HPSOCKET_API int SYS_SSO_Linger(SOCKET sock, USHORT l_onoff, USHORT l_linger)
  220. {
  221. return ::SSO_Linger(sock, l_onoff, l_linger);
  222. }
  223. HPSOCKET_API int SYS_SSO_RecvBuffSize(SOCKET sock, int size)
  224. {
  225. return ::SSO_RecvBuffSize(sock, size);
  226. }
  227. HPSOCKET_API int SYS_SSO_SendBuffSize(SOCKET sock, int size)
  228. {
  229. return ::SSO_SendBuffSize(sock, size);
  230. }
  231. HPSOCKET_API int SYS_SSO_RecvTimeOut(SOCKET sock, int ms)
  232. {
  233. return ::SSO_RecvTimeOut(sock, ms);
  234. }
  235. HPSOCKET_API int SYS_SSO_SendTimeOut(SOCKET sock, int ms)
  236. {
  237. return ::SSO_SendTimeOut(sock, ms);
  238. }
  239. HPSOCKET_API int SYS_SSO_ReuseAddress(SOCKET sock, EnReuseAddressPolicy opt)
  240. {
  241. return ::SSO_ReuseAddress(sock, opt);
  242. }
  243. HPSOCKET_API BOOL SYS_GetSocketLocalAddress(SOCKET socket, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
  244. {
  245. return ::GetSocketLocalAddress(socket, lpszAddress, iAddressLen, usPort);
  246. }
  247. HPSOCKET_API BOOL SYS_GetSocketRemoteAddress(SOCKET socket, TCHAR lpszAddress[], int& iAddressLen, USHORT& usPort)
  248. {
  249. return ::GetSocketRemoteAddress(socket, lpszAddress, iAddressLen, usPort);
  250. }
  251. HPSOCKET_API BOOL SYS_EnumHostIPAddresses(LPCTSTR lpszHost, EnIPAddrType enType, LPTIPAddr** lpppIPAddr, int& iIPAddrCount)
  252. {
  253. return ::EnumHostIPAddresses(lpszHost, enType, lpppIPAddr, iIPAddrCount);
  254. }
  255. HPSOCKET_API BOOL SYS_FreeHostIPAddresses(LPTIPAddr* lppIPAddr)
  256. {
  257. return ::FreeHostIPAddresses(lppIPAddr);
  258. }
  259. HPSOCKET_API BOOL SYS_IsIPAddress(LPCTSTR lpszAddress, EnIPAddrType* penType)
  260. {
  261. return ::IsIPAddress(lpszAddress, penType);
  262. }
  263. HPSOCKET_API BOOL SYS_GetIPAddress(LPCTSTR lpszHost, TCHAR lpszIP[], int& iIPLenth, EnIPAddrType& enType)
  264. {
  265. return ::GetIPAddress(lpszHost, lpszIP, iIPLenth, enType);
  266. }
  267. HPSOCKET_API ULONGLONG SYS_NToH64(ULONGLONG value)
  268. {
  269. return ::NToH64(value);
  270. }
  271. HPSOCKET_API ULONGLONG SYS_HToN64(ULONGLONG value)
  272. {
  273. return ::HToN64(value);
  274. }
  275. HPSOCKET_API USHORT SYS_SwapEndian16(USHORT value)
  276. {
  277. return ENDIAN_SWAP_16(value);
  278. }
  279. HPSOCKET_API DWORD SYS_SwapEndian32(DWORD value)
  280. {
  281. return ENDIAN_SWAP_32(value);
  282. }
  283. HPSOCKET_API BOOL SYS_IsLittleEndian()
  284. {
  285. return ::IsLittleEndian();
  286. }
  287. HPSOCKET_API LPBYTE SYS_Malloc(int size)
  288. {
  289. return MALLOC(BYTE, size);
  290. }
  291. HPSOCKET_API LPBYTE SYS_Realloc(LPBYTE p, int size)
  292. {
  293. return REALLOC(BYTE, p, size);
  294. }
  295. HPSOCKET_API VOID SYS_Free(LPBYTE p)
  296. {
  297. FREE(p);
  298. }
  299. HPSOCKET_API LPVOID SYS_Calloc(int number, int size)
  300. {
  301. return CALLOC(number, size);
  302. }
  303. HPSOCKET_API DWORD SYS_GuessBase64EncodeBound(DWORD dwSrcLen)
  304. {
  305. return ::GuessBase64EncodeBound(dwSrcLen);
  306. }
  307. HPSOCKET_API DWORD SYS_GuessBase64DecodeBound(const BYTE* lpszSrc, DWORD dwSrcLen)
  308. {
  309. return ::GuessBase64DecodeBound(lpszSrc, dwSrcLen);
  310. }
  311. HPSOCKET_API int SYS_Base64Encode(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  312. {
  313. return ::Base64Encode(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  314. }
  315. HPSOCKET_API int SYS_Base64Decode(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  316. {
  317. return ::Base64Decode(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  318. }
  319. HPSOCKET_API DWORD SYS_GuessUrlEncodeBound(const BYTE* lpszSrc, DWORD dwSrcLen)
  320. {
  321. return ::GuessUrlEncodeBound(lpszSrc, dwSrcLen);
  322. }
  323. HPSOCKET_API DWORD SYS_GuessUrlDecodeBound(const BYTE* lpszSrc, DWORD dwSrcLen)
  324. {
  325. return ::GuessUrlDecodeBound(lpszSrc, dwSrcLen);
  326. }
  327. HPSOCKET_API int SYS_UrlEncode(BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  328. {
  329. return ::UrlEncode(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  330. }
  331. HPSOCKET_API int SYS_UrlDecode(BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  332. {
  333. return ::UrlDecode(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  334. }
  335. #ifdef _ZLIB_SUPPORT
  336. HPSOCKET_API int SYS_Compress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  337. {
  338. return ::Compress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  339. }
  340. HPSOCKET_API int SYS_CompressEx(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen, int iLevel, int iMethod, int iWindowBits, int iMemLevel, int iStrategy)
  341. {
  342. return ::CompressEx(lpszSrc, dwSrcLen, lpszDest, dwDestLen, iLevel, iMethod, iWindowBits, iMemLevel, iStrategy);
  343. }
  344. HPSOCKET_API int SYS_Uncompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  345. {
  346. return ::Uncompress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  347. }
  348. HPSOCKET_API int SYS_UncompressEx(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen, int iWindowBits)
  349. {
  350. return ::UncompressEx(lpszSrc, dwSrcLen, lpszDest, dwDestLen, iWindowBits);
  351. }
  352. HPSOCKET_API DWORD SYS_GuessCompressBound(DWORD dwSrcLen, BOOL bGZip)
  353. {
  354. return ::GuessCompressBound(dwSrcLen, bGZip);
  355. }
  356. HPSOCKET_API int SYS_GZipCompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  357. {
  358. return ::GZipCompress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  359. }
  360. HPSOCKET_API int SYS_GZipUncompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  361. {
  362. return ::GZipUncompress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  363. }
  364. HPSOCKET_API DWORD SYS_GZipGuessUncompressBound(const BYTE* lpszSrc, DWORD dwSrcLen)
  365. {
  366. return ::GZipGuessUncompressBound(lpszSrc, dwSrcLen);
  367. }
  368. #endif
  369. #ifdef _BROTLI_SUPPORT
  370. HPSOCKET_API int SYS_BrotliCompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  371. {
  372. return ::BrotliCompress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  373. }
  374. HPSOCKET_API int SYS_BrotliCompressEx(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen, int iQuality, int iWindow, int iMode)
  375. {
  376. return ::BrotliCompressEx(lpszSrc, dwSrcLen, lpszDest, dwDestLen, iQuality, iWindow, (BrotliEncoderMode)iMode);
  377. }
  378. HPSOCKET_API int SYS_BrotliUncompress(const BYTE* lpszSrc, DWORD dwSrcLen, BYTE* lpszDest, DWORD& dwDestLen)
  379. {
  380. return ::BrotliUncompress(lpszSrc, dwSrcLen, lpszDest, dwDestLen);
  381. }
  382. HPSOCKET_API DWORD SYS_BrotliGuessCompressBound(DWORD dwSrcLen)
  383. {
  384. return ::BrotliGuessCompressBound(dwSrcLen);
  385. }
  386. #endif
  387. #ifdef _ICONV_SUPPORT
  388. HPSOCKET_API BOOL SYS_CharsetConvert(LPCSTR lpszFromCharset, LPCSTR lpszToCharset, LPCSTR lpszInBuf, int iInBufLen, LPSTR lpszOutBuf, int& iOutBufLen)
  389. {
  390. return ::CharsetConvert(lpszFromCharset, lpszToCharset, lpszInBuf, iInBufLen, lpszOutBuf, iOutBufLen);
  391. }
  392. HPSOCKET_API BOOL SYS_GbkToUnicodeEx(const char szSrc[], int iSrcLength, WCHAR szDest[], int& iDestLength)
  393. {
  394. return ::GbkToUnicodeEx(szSrc, iSrcLength, szDest, iDestLength);
  395. }
  396. HPSOCKET_API BOOL SYS_UnicodeToGbkEx(const WCHAR szSrc[], int iSrcLength, char szDest[], int& iDestLength)
  397. {
  398. return ::UnicodeToGbkEx(szSrc, iSrcLength, szDest, iDestLength);
  399. }
  400. HPSOCKET_API BOOL SYS_Utf8ToUnicodeEx(const char szSrc[], int iSrcLength, WCHAR szDest[], int& iDestLength)
  401. {
  402. return ::Utf8ToUnicodeEx(szSrc, iSrcLength, szDest, iDestLength);
  403. }
  404. HPSOCKET_API BOOL SYS_UnicodeToUtf8Ex(const WCHAR szSrc[], int iSrcLength, char szDest[], int& iDestLength)
  405. {
  406. return ::UnicodeToUtf8Ex(szSrc, iSrcLength, szDest, iDestLength);
  407. }
  408. HPSOCKET_API BOOL SYS_GbkToUtf8Ex(const char szSrc[], int iSrcLength, char szDest[], int& iDestLength)
  409. {
  410. return ::GbkToUtf8Ex(szSrc, iSrcLength, szDest, iDestLength);
  411. }
  412. HPSOCKET_API BOOL SYS_Utf8ToGbkEx(const char szSrc[], int iSrcLength, char szDest[], int& iDestLength)
  413. {
  414. return ::Utf8ToGbkEx(szSrc, iSrcLength, szDest, iDestLength);
  415. }
  416. HPSOCKET_API BOOL SYS_GbkToUnicode(const char szSrc[], WCHAR szDest[], int& iDestLength)
  417. {
  418. return ::GbkToUnicode(szSrc, szDest, iDestLength);
  419. }
  420. HPSOCKET_API BOOL SYS_UnicodeToGbk(const WCHAR szSrc[], char szDest[], int& iDestLength)
  421. {
  422. return ::UnicodeToGbk(szSrc, szDest, iDestLength);
  423. }
  424. HPSOCKET_API BOOL SYS_Utf8ToUnicode(const char szSrc[], WCHAR szDest[], int& iDestLength)
  425. {
  426. return ::Utf8ToUnicode(szSrc, szDest, iDestLength);
  427. }
  428. HPSOCKET_API BOOL SYS_UnicodeToUtf8(const WCHAR szSrc[], char szDest[], int& iDestLength)
  429. {
  430. return ::UnicodeToUtf8(szSrc, szDest, iDestLength);
  431. }
  432. HPSOCKET_API BOOL SYS_GbkToUtf8(const char szSrc[], char szDest[], int& iDestLength)
  433. {
  434. return ::GbkToUtf8(szSrc, szDest, iDestLength);
  435. }
  436. HPSOCKET_API BOOL SYS_Utf8ToGbk(const char szSrc[], char szDest[], int& iDestLength)
  437. {
  438. return ::Utf8ToGbk(szSrc, szDest, iDestLength);
  439. }
  440. #endif
  441. /*****************************************************************************************************************************************************/
  442. /******************************************************************** HTTP Exports *******************************************************************/
  443. /*****************************************************************************************************************************************************/
  444. #ifdef _HTTP_SUPPORT
  445. HPSOCKET_API IHttpServer* HP_Create_HttpServer(IHttpServerListener* pListener)
  446. {
  447. return (IHttpServer*)(new CHttpServer(pListener));
  448. }
  449. HPSOCKET_API IHttpAgent* HP_Create_HttpAgent(IHttpAgentListener* pListener)
  450. {
  451. return (IHttpAgent*)(new CHttpAgent(pListener));
  452. }
  453. HPSOCKET_API IHttpClient* HP_Create_HttpClient(IHttpClientListener* pListener)
  454. {
  455. return (IHttpClient*)(new CHttpClient(pListener));
  456. }
  457. HPSOCKET_API IHttpSyncClient* HP_Create_HttpSyncClient(IHttpClientListener* pListener)
  458. {
  459. return (IHttpSyncClient*)(new CHttpSyncClient(pListener));
  460. }
  461. HPSOCKET_API void HP_Destroy_HttpServer(IHttpServer* pServer)
  462. {
  463. delete pServer;
  464. }
  465. HPSOCKET_API void HP_Destroy_HttpAgent(IHttpAgent* pAgent)
  466. {
  467. delete pAgent;
  468. }
  469. HPSOCKET_API void HP_Destroy_HttpClient(IHttpClient* pClient)
  470. {
  471. delete pClient;
  472. }
  473. HPSOCKET_API void HP_Destroy_HttpSyncClient(IHttpSyncClient* pClient)
  474. {
  475. delete pClient;
  476. }
  477. /**************************************************************************/
  478. /*************************** HTTP Cookie 管理方法 **************************/
  479. HPSOCKET_API BOOL HP_HttpCookie_MGR_LoadFromFile(LPCSTR lpszFile, BOOL bKeepExists)
  480. {
  481. return g_CookieMgr.LoadFromFile(lpszFile, bKeepExists);
  482. }
  483. HPSOCKET_API BOOL HP_HttpCookie_MGR_SaveToFile(LPCSTR lpszFile, BOOL bKeepExists)
  484. {
  485. return g_CookieMgr.SaveToFile(lpszFile, bKeepExists);
  486. }
  487. HPSOCKET_API BOOL HP_HttpCookie_MGR_ClearCookies(LPCSTR lpszDomain, LPCSTR lpszPath)
  488. {
  489. return g_CookieMgr.ClearCookies(lpszDomain, lpszPath);
  490. }
  491. HPSOCKET_API BOOL HP_HttpCookie_MGR_RemoveExpiredCookies(LPCSTR lpszDomain, LPCSTR lpszPath)
  492. {
  493. return g_CookieMgr.RemoveExpiredCookies(lpszDomain, lpszPath);
  494. }
  495. HPSOCKET_API BOOL HP_HttpCookie_MGR_SetCookie(LPCSTR lpszName, LPCSTR lpszValue, LPCSTR lpszDomain, LPCSTR lpszPath, int iMaxAge, BOOL bHttpOnly, BOOL bSecure, int enSameSite, BOOL bOnlyUpdateValueIfExists)
  496. {
  497. return g_CookieMgr.SetCookie(lpszName, lpszValue, lpszDomain, lpszPath, iMaxAge, bHttpOnly, bSecure, (CCookie::EnSameSite)enSameSite, bOnlyUpdateValueIfExists);
  498. }
  499. HPSOCKET_API BOOL HP_HttpCookie_MGR_DeleteCookie(LPCSTR lpszDomain, LPCSTR lpszPath, LPCSTR lpszName)
  500. {
  501. return g_CookieMgr.DeleteCookie(lpszDomain, lpszPath, lpszName);
  502. }
  503. HPSOCKET_API void HP_HttpCookie_MGR_SetEnableThirdPartyCookie(BOOL bEnableThirdPartyCookie)
  504. {
  505. g_CookieMgr.SetEnableThirdPartyCookie(bEnableThirdPartyCookie);
  506. }
  507. HPSOCKET_API BOOL HP_HttpCookie_MGR_IsEnableThirdPartyCookie()
  508. {
  509. return g_CookieMgr.IsEnableThirdPartyCookie();
  510. }
  511. HPSOCKET_API BOOL HP_HttpCookie_HLP_ParseExpires(LPCSTR lpszExpires, __time64_t& tmExpires)
  512. {
  513. return CCookie::ParseExpires(lpszExpires, tmExpires);
  514. }
  515. HPSOCKET_API BOOL HP_HttpCookie_HLP_MakeExpiresStr(char lpszBuff[], int& iBuffLen, __time64_t tmExpires)
  516. {
  517. return CCookie::MakeExpiresStr(lpszBuff, iBuffLen, tmExpires);
  518. }
  519. HPSOCKET_API BOOL HP_HttpCookie_HLP_ToString(char lpszBuff[], int& iBuffLen, LPCSTR lpszName, LPCSTR lpszValue, LPCSTR lpszDomain, LPCSTR lpszPath, int iMaxAge, BOOL bHttpOnly, BOOL bSecure, int enSameSite)
  520. {
  521. return CCookie::ToString(lpszBuff, iBuffLen, lpszName, lpszValue, lpszDomain, lpszPath, iMaxAge, bHttpOnly, bSecure, (CCookie::EnSameSite)enSameSite);
  522. }
  523. HPSOCKET_API __time64_t HP_HttpCookie_HLP_CurrentUTCTime()
  524. {
  525. return CCookie::CurrentUTCTime();
  526. }
  527. HPSOCKET_API __time64_t HP_HttpCookie_HLP_MaxAgeToExpires(int iMaxAge)
  528. {
  529. return CCookie::MaxAgeToExpires(iMaxAge);
  530. }
  531. HPSOCKET_API int HP_HttpCookie_HLP_ExpiresToMaxAge(__time64_t tmExpires)
  532. {
  533. return CCookie::ExpiresToMaxAge(tmExpires);
  534. }
  535. /*****************************************************************************************************************************************************/
  536. /************************************************************ HTTP Global Function Exports ***********************************************************/
  537. /*****************************************************************************************************************************************************/
  538. #endif
  539. /*****************************************************************************************************************************************************/
  540. /**************************************************************** Thread Pool Exports ****************************************************************/
  541. /*****************************************************************************************************************************************************/
  542. HPSOCKET_API IHPThreadPool* HP_Create_ThreadPool(IHPThreadPoolListener* pListener)
  543. {
  544. return new CHPThreadPool(pListener);
  545. }
  546. HPSOCKET_API void HP_Destroy_ThreadPool(IHPThreadPool* pThreadPool)
  547. {
  548. delete pThreadPool;
  549. }
  550. HPSOCKET_API LPTSocketTask HP_Create_SocketTaskObj(Fn_SocketTaskProc fnTaskProc, PVOID pSender, CONNID dwConnID, LPCBYTE pBuffer, INT iBuffLen, EnTaskBufferType enBuffType, WPARAM wParam, LPARAM lParam)
  551. {
  552. return ::CreateSocketTaskObj(fnTaskProc, pSender, dwConnID, pBuffer, iBuffLen, enBuffType, wParam, lParam);
  553. }
  554. HPSOCKET_API void HP_Destroy_SocketTaskObj(LPTSocketTask pTask)
  555. {
  556. ::DestroySocketTaskObj(pTask);
  557. }
  558. /*****************************************************************************************************************************************************/
  559. /********************************************************* Compressor / Decompressor Exports *********************************************************/
  560. /*****************************************************************************************************************************************************/
  561. HPSOCKET_API void HP_Destroy_Compressor(IHPCompressor* pCompressor)
  562. {
  563. ::DestroyCompressor(pCompressor);
  564. }
  565. HPSOCKET_API void HP_Destroy_Decompressor(IHPDecompressor* pDecompressor)
  566. {
  567. ::DestroyDecompressor(pDecompressor);
  568. }
  569. #ifdef _ZLIB_SUPPORT
  570. HPSOCKET_API IHPCompressor* HP_Create_ZLibCompressor(Fn_CompressDataCallback fnCallback, int iWindowBits, int iLevel, int iMethod, int iMemLevel, int iStrategy, DWORD dwBuffSize)
  571. {
  572. return ::CreateZLibCompressor(fnCallback, iWindowBits, iLevel, iMethod, iMemLevel, iStrategy, dwBuffSize);
  573. }
  574. HPSOCKET_API IHPCompressor* HP_Create_GZipCompressor(Fn_CompressDataCallback fnCallback, int iLevel, int iMethod, int iMemLevel, int iStrategy, DWORD dwBuffSize)
  575. {
  576. return ::CreateGZipCompressor(fnCallback, iLevel, iMethod, iMemLevel, iStrategy, dwBuffSize);
  577. }
  578. HPSOCKET_API IHPDecompressor* HP_Create_ZLibDecompressor(Fn_DecompressDataCallback fnCallback, int iWindowBits, DWORD dwBuffSize)
  579. {
  580. return ::CreateZLibDecompressor(fnCallback, iWindowBits, dwBuffSize);
  581. }
  582. HPSOCKET_API IHPDecompressor* HP_Create_GZipDecompressor(Fn_DecompressDataCallback fnCallback, DWORD dwBuffSize)
  583. {
  584. return ::CreateGZipDecompressor(fnCallback, dwBuffSize);
  585. }
  586. #endif
  587. #ifdef _BROTLI_SUPPORT
  588. HPSOCKET_API IHPCompressor* HP_Create_BrotliCompressor(Fn_CompressDataCallback fnCallback, int iQuality, int iWindow, int iMode, DWORD dwBuffSize)
  589. {
  590. return ::CreateBrotliCompressor(fnCallback, iQuality, iWindow, iMode, dwBuffSize);
  591. }
  592. HPSOCKET_API IHPDecompressor* HP_Create_BrotliDecompressor(Fn_DecompressDataCallback fnCallback, DWORD dwBuffSize)
  593. {
  594. return ::CreateBrotliDecompressor(fnCallback, dwBuffSize);
  595. }
  596. #endif