HPSocket-SSL.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  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. #pragma once
  24. #include "HPSocket.h"
  25. #ifdef _SSL_SUPPORT
  26. /*****************************************************************************************************************************************************/
  27. /******************************************************************** SSL Exports ********************************************************************/
  28. /*****************************************************************************************************************************************************/
  29. /**************************************************/
  30. /************** HPSocket-SSL 导出函数 **************/
  31. // 创建 SSL ITcpServer 对象
  32. HPSOCKET_API ITcpServer* HP_Create_SSLServer(ITcpServerListener* pListener);
  33. // 创建 SSL ITcpAgent 对象
  34. HPSOCKET_API ITcpAgent* HP_Create_SSLAgent(ITcpAgentListener* pListener);
  35. // 创建 SSL ITcpClient 对象
  36. HPSOCKET_API ITcpClient* HP_Create_SSLClient(ITcpClientListener* pListener);
  37. // 创建 SSL ITcpPullServer 对象
  38. HPSOCKET_API ITcpPullServer* HP_Create_SSLPullServer(ITcpServerListener* pListener);
  39. // 创建 SSL ITcpPullAgent 对象
  40. HPSOCKET_API ITcpPullAgent* HP_Create_SSLPullAgent(ITcpAgentListener* pListener);
  41. // 创建 SSL ITcpPullClient 对象
  42. HPSOCKET_API ITcpPullClient* HP_Create_SSLPullClient(ITcpClientListener* pListener);
  43. // 创建 SSL ITcpPackServer 对象
  44. HPSOCKET_API ITcpPackServer* HP_Create_SSLPackServer(ITcpServerListener* pListener);
  45. // 创建 SSL ITcpPackAgent 对象
  46. HPSOCKET_API ITcpPackAgent* HP_Create_SSLPackAgent(ITcpAgentListener* pListener);
  47. // 创建 SSL ITcpPackClient 对象
  48. HPSOCKET_API ITcpPackClient* HP_Create_SSLPackClient(ITcpClientListener* pListener);
  49. // 销毁 SSL ITcpServer 对象
  50. HPSOCKET_API void HP_Destroy_SSLServer(ITcpServer* pServer);
  51. // 销毁 SSL ITcpAgent 对象
  52. HPSOCKET_API void HP_Destroy_SSLAgent(ITcpAgent* pAgent);
  53. // 销毁 SSL ITcpClient 对象
  54. HPSOCKET_API void HP_Destroy_SSLClient(ITcpClient* pClient);
  55. // 销毁 SSL ITcpPullServer 对象
  56. HPSOCKET_API void HP_Destroy_SSLPullServer(ITcpPullServer* pServer);
  57. // 销毁 SSL ITcpPullAgent 对象
  58. HPSOCKET_API void HP_Destroy_SSLPullAgent(ITcpPullAgent* pAgent);
  59. // 销毁 SSL ITcpPullClient 对象
  60. HPSOCKET_API void HP_Destroy_SSLPullClient(ITcpPullClient* pClient);
  61. // 销毁 SSL ITcpPackServer 对象
  62. HPSOCKET_API void HP_Destroy_SSLPackServer(ITcpPackServer* pServer);
  63. // 销毁 SSL ITcpPackAgent 对象
  64. HPSOCKET_API void HP_Destroy_SSLPackAgent(ITcpPackAgent* pAgent);
  65. // 销毁 SSL ITcpPackClient 对象
  66. HPSOCKET_API void HP_Destroy_SSLPackClient(ITcpPackClient* pClient);
  67. // SSL ITcpServer 对象创建器
  68. struct SSLServer_Creator
  69. {
  70. static ITcpServer* Create(ITcpServerListener* pListener)
  71. {
  72. return HP_Create_SSLServer(pListener);
  73. }
  74. static void Destroy(ITcpServer* pServer)
  75. {
  76. HP_Destroy_SSLServer(pServer);
  77. }
  78. };
  79. // SSL ITcpAgent 对象创建器
  80. struct SSLAgent_Creator
  81. {
  82. static ITcpAgent* Create(ITcpAgentListener* pListener)
  83. {
  84. return HP_Create_SSLAgent(pListener);
  85. }
  86. static void Destroy(ITcpAgent* pAgent)
  87. {
  88. HP_Destroy_SSLAgent(pAgent);
  89. }
  90. };
  91. // SSL ITcpClient 对象创建器
  92. struct SSLClient_Creator
  93. {
  94. static ITcpClient* Create(ITcpClientListener* pListener)
  95. {
  96. return HP_Create_SSLClient(pListener);
  97. }
  98. static void Destroy(ITcpClient* pClient)
  99. {
  100. HP_Destroy_SSLClient(pClient);
  101. }
  102. };
  103. // SSL ITcpPullServer 对象创建器
  104. struct SSLPullServer_Creator
  105. {
  106. static ITcpPullServer* Create(ITcpServerListener* pListener)
  107. {
  108. return HP_Create_SSLPullServer(pListener);
  109. }
  110. static void Destroy(ITcpPullServer* pServer)
  111. {
  112. HP_Destroy_SSLPullServer(pServer);
  113. }
  114. };
  115. // SSL ITcpPullAgent 对象创建器
  116. struct SSLPullAgent_Creator
  117. {
  118. static ITcpPullAgent* Create(ITcpAgentListener* pListener)
  119. {
  120. return HP_Create_SSLPullAgent(pListener);
  121. }
  122. static void Destroy(ITcpPullAgent* pAgent)
  123. {
  124. HP_Destroy_SSLPullAgent(pAgent);
  125. }
  126. };
  127. // SSL ITcpPullClient 对象创建器
  128. struct SSLPullClient_Creator
  129. {
  130. static ITcpPullClient* Create(ITcpClientListener* pListener)
  131. {
  132. return HP_Create_SSLPullClient(pListener);
  133. }
  134. static void Destroy(ITcpPullClient* pClient)
  135. {
  136. HP_Destroy_SSLPullClient(pClient);
  137. }
  138. };
  139. // SSL ITcpPackServer 对象创建器
  140. struct SSLPackServer_Creator
  141. {
  142. static ITcpPackServer* Create(ITcpServerListener* pListener)
  143. {
  144. return HP_Create_SSLPackServer(pListener);
  145. }
  146. static void Destroy(ITcpPackServer* pServer)
  147. {
  148. HP_Destroy_SSLPackServer(pServer);
  149. }
  150. };
  151. // SSL ITcpPackAgent 对象创建器
  152. struct SSLPackAgent_Creator
  153. {
  154. static ITcpPackAgent* Create(ITcpAgentListener* pListener)
  155. {
  156. return HP_Create_SSLPackAgent(pListener);
  157. }
  158. static void Destroy(ITcpPackAgent* pAgent)
  159. {
  160. HP_Destroy_SSLPackAgent(pAgent);
  161. }
  162. };
  163. // SSL ITcpPackClient 对象创建器
  164. struct SSLPackClient_Creator
  165. {
  166. static ITcpPackClient* Create(ITcpClientListener* pListener)
  167. {
  168. return HP_Create_SSLPackClient(pListener);
  169. }
  170. static void Destroy(ITcpPackClient* pClient)
  171. {
  172. HP_Destroy_SSLPackClient(pClient);
  173. }
  174. };
  175. // SSL ITcpServer 对象智能指针
  176. typedef CHPObjectPtr<ITcpServer, ITcpServerListener, SSLServer_Creator> CSSLServerPtr;
  177. // SSL ITcpAgent 对象智能指针
  178. typedef CHPObjectPtr<ITcpAgent, ITcpAgentListener, SSLAgent_Creator> CSSLAgentPtr;
  179. // SSL ITcpClient 对象智能指针
  180. typedef CHPObjectPtr<ITcpClient, ITcpClientListener, SSLClient_Creator> CSSLClientPtr;
  181. // SSL ITcpPullServer 对象智能指针
  182. typedef CHPObjectPtr<ITcpPullServer, ITcpServerListener, SSLPullServer_Creator> CSSLPullServerPtr;
  183. // SSL ITcpPullAgent 对象智能指针
  184. typedef CHPObjectPtr<ITcpPullAgent, ITcpAgentListener, SSLPullAgent_Creator> CSSLPullAgentPtr;
  185. // SSL ITcpPullClient 对象智能指针
  186. typedef CHPObjectPtr<ITcpPullClient, ITcpClientListener, SSLPullClient_Creator> CSSLPullClientPtr;
  187. // SSL ITcpPackServer 对象智能指针
  188. typedef CHPObjectPtr<ITcpPackServer, ITcpServerListener, SSLPackServer_Creator> CSSLPackServerPtr;
  189. // SSL ITcpPackAgent 对象智能指针
  190. typedef CHPObjectPtr<ITcpPackAgent, ITcpAgentListener, SSLPackAgent_Creator> CSSLPackAgentPtr;
  191. // SSL ITcpPackClient 对象智能指针
  192. typedef CHPObjectPtr<ITcpPackClient, ITcpClientListener, SSLPackClient_Creator> CSSLPackClientPtr;
  193. /*****************************************************************************************************************************************************/
  194. /*************************************************************** Global Function Exports *************************************************************/
  195. /*****************************************************************************************************************************************************/
  196. /*
  197. * 名称:SNI 默认回调函数
  198. * 描述:SSL Server 的 SetupSSLContext 方法中如果不指定 SNI 回调函数则使用此 SNI 默认回调函数
  199. *
  200. * 参数: lpszServerName -- 请求域名
  201. * pContext -- SSL Context 对象
  202. *
  203. * 返回值:SNI 主机证书对应的索引
  204. */
  205. HPSOCKET_API int __HP_CALL HP_SSL_DefaultServerNameCallback(LPCTSTR lpszServerName, PVOID pContext);
  206. /*
  207. * 名称:清理线程局部环境 SSL 资源
  208. * 描述:任何一个操作 SSL 的线程,通信结束时都需要清理线程局部环境 SSL 资源
  209. * 1、主线程和 HP-Socket 工作线程在通信结束时会自动清理线程局部环境 SSL 资源。因此,一般情况下不必手工调用本方法
  210. * 2、特殊情况下,当自定义线程参与 HP-Socket 通信操作并检查到 SSL 内存泄漏时,需在每次通信结束时自定义线程调用本方法
  211. *
  212. * 参数: dwThreadID -- 线程 ID(0:当前线程)
  213. *
  214. * 返回值:无
  215. */
  216. HPSOCKET_API void HP_SSL_RemoveThreadLocalState(THR_ID dwThreadID);
  217. /*****************************************************************************************************************************************************/
  218. /******************************************************************** HTTPS Exports ******************************************************************/
  219. /*****************************************************************************************************************************************************/
  220. #ifdef _HTTP_SUPPORT
  221. // 创建 IHttpsServer 对象
  222. HPSOCKET_API IHttpServer* HP_Create_HttpsServer(IHttpServerListener* pListener);
  223. // 创建 IHttpsAgent 对象
  224. HPSOCKET_API IHttpAgent* HP_Create_HttpsAgent(IHttpAgentListener* pListener);
  225. // 创建 IHttpsClient 对象
  226. HPSOCKET_API IHttpClient* HP_Create_HttpsClient(IHttpClientListener* pListener);
  227. // 创建 IHttpsSyncClient 对象
  228. HPSOCKET_API IHttpSyncClient* HP_Create_HttpsSyncClient(IHttpClientListener* pListener = nullptr);
  229. // 销毁 IHttpsServer 对象
  230. HPSOCKET_API void HP_Destroy_HttpsServer(IHttpServer* pServer);
  231. // 销毁 IHttpsAgent 对象
  232. HPSOCKET_API void HP_Destroy_HttpsAgent(IHttpAgent* pAgent);
  233. // 销毁 IHttpsClient 对象
  234. HPSOCKET_API void HP_Destroy_HttpsClient(IHttpClient* pClient);
  235. // 销毁 IHttpsSyncClient 对象
  236. HPSOCKET_API void HP_Destroy_HttpsSyncClient(IHttpSyncClient* pClient);
  237. // IHttpsServer 对象创建器
  238. struct HttpsServer_Creator
  239. {
  240. static IHttpServer* Create(IHttpServerListener* pListener)
  241. {
  242. return HP_Create_HttpsServer(pListener);
  243. }
  244. static void Destroy(IHttpServer* pServer)
  245. {
  246. HP_Destroy_HttpsServer(pServer);
  247. }
  248. };
  249. // IHttpsAgent 对象创建器
  250. struct HttpsAgent_Creator
  251. {
  252. static IHttpAgent* Create(IHttpAgentListener* pListener)
  253. {
  254. return HP_Create_HttpsAgent(pListener);
  255. }
  256. static void Destroy(IHttpAgent* pAgent)
  257. {
  258. HP_Destroy_HttpsAgent(pAgent);
  259. }
  260. };
  261. // IHttpsClient 对象创建器
  262. struct HttpsClient_Creator
  263. {
  264. static IHttpClient* Create(IHttpClientListener* pListener)
  265. {
  266. return HP_Create_HttpsClient(pListener);
  267. }
  268. static void Destroy(IHttpClient* pClient)
  269. {
  270. HP_Destroy_HttpsClient(pClient);
  271. }
  272. };
  273. // IHttpsSyncClient 对象创建器
  274. struct HttpsSyncClient_Creator
  275. {
  276. static IHttpSyncClient* Create(IHttpClientListener* pListener = nullptr)
  277. {
  278. return HP_Create_HttpsSyncClient(pListener);
  279. }
  280. static void Destroy(IHttpSyncClient* pClient)
  281. {
  282. HP_Destroy_HttpsSyncClient(pClient);
  283. }
  284. };
  285. // IHttpsServer 对象智能指针
  286. typedef CHPObjectPtr<IHttpServer, IHttpServerListener, HttpsServer_Creator> CHttpsServerPtr;
  287. // IHttpsAgent 对象智能指针
  288. typedef CHPObjectPtr<IHttpAgent, IHttpAgentListener, HttpsAgent_Creator> CHttpsAgentPtr;
  289. // IHttpsClient 对象智能指针
  290. typedef CHPObjectPtr<IHttpClient, IHttpClientListener, HttpsClient_Creator> CHttpsClientPtr;
  291. // IHttpsSyncClient 对象智能指针
  292. typedef CHPObjectPtr<IHttpSyncClient, IHttpClientListener, HttpsSyncClient_Creator> CHttpsSyncClientPtr;
  293. #endif
  294. #endif