HPSocket4C-SSL.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Version : 3.6.1
  5. * Author : Bruce Liang
  6. * Website : http://www.jessma.org
  7. * Project : https://github.com/ldcsaa
  8. * Blog : http://www.cnblogs.com/ldcsaa
  9. * Wiki : http://www.oschina.net/p/hp-socket
  10. * QQ Group : 75375912
  11. *
  12. * Licensed under the Apache License, Version 2.0 (the "License");
  13. * you may not use this file except in compliance with the License.
  14. * You may obtain a copy of the License at
  15. *
  16. * http://www.apache.org/licenses/LICENSE-2.0
  17. *
  18. * Unless required by applicable law or agreed to in writing, software
  19. * distributed under the License is distributed on an "AS IS" BASIS,
  20. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  21. * See the License for the specific language governing permissions and
  22. * limitations under the License.
  23. */
  24. /******************************************************************************
  25. Module: HPSocket-SSL for C
  26. Desc: 导出纯 C 函数,让其它语言(如:C / C# / Delphi 等)能方便地使用 HPSocket SSL
  27. Usage:
  28. 方法一:
  29. --------------------------------------------------------------------------------------
  30. 0. (C/C++ 程序)包含 HPSocket4C-SSL.h 头文件
  31. 1. 启动通信前调用 SSL_Initialize() 函数初始化 SSL 全局环境参数,并确保方法返回成功
  32. 2. 使用 HPSocket SSL 组件执行通信(参考:HPSocket4C.h)
  33. 3. 通信结束后调用 SSL_Cleanup() 函数清理 SSL 全局运行环境
  34. 方法二:
  35. --------------------------------------------------------------------------------------
  36. 1. 应用程序把需要用到的导出函数封装到特定语言的包装类中
  37. 2. 通过包装类封装后,以面向对象的方式使用 HPSocket SSL
  38. Release:
  39. <-- 动态链接库 -->
  40. 1. x86/HPSocket4C-SSL.dll - (32位/MBCS/Release)
  41. 2. x86/HPSocket4C-SSL_D.dll - (32位/MBCS/DeBug)
  42. 3. x86/HPSocket4C-SSL_U.dll - (32位/UNICODE/Release)
  43. 4. x86/HPSocket4C-SSL_UD.dll - (32位/UNICODE/DeBug)
  44. 5. x64/HPSocket4C-SSL.dll - (64位/MBCS/Release)
  45. 6. x64/HPSocket4C-SSL_D.dll - (64位/MBCS/DeBug)
  46. 7. x64/HPSocket4C-SSL_U.dll - (64位/UNICODE/Release)
  47. 8. x64/HPSocket4C-SSL_UD.dll - (64位/UNICODE/DeBug)
  48. <-- 静态链接库 -->
  49. !!注意!!:使用 HPSocket 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIB
  50. 1. x86/static/HPSocket4C-SSL.lib - (32位/MBCS/Release)
  51. 2. x86/static/HPSocket4C-SSL_D.lib - (32位/MBCS/DeBug)
  52. 3. x86/static/HPSocket4C-SSL_U.lib - (32位/UNICODE/Release)
  53. 4. x86/static/HPSocket4C-SSL_UD.lib - (32位/UNICODE/DeBug)
  54. 5. x64/static/HPSocket4C-SSL.lib - (64位/MBCS/Release)
  55. 6. x64/static/HPSocket4C-SSL_D.lib - (64位/MBCS/DeBug)
  56. 7. x64/static/HPSocket4C-SSL_U.lib - (64位/UNICODE/Release)
  57. 8. x64/static/HPSocket4C-SSL_UD.lib - (64位/UNICODE/DeBug)
  58. ******************************************************************************/
  59. #pragma once
  60. #ifndef _SSL_SUPPORT
  61. #define _SSL_SUPPORT
  62. #endif
  63. #include "HPSocket4C.h"
  64. /************************************************************************
  65. 名称:定义 SSL Socket 对象指针类型别名
  66. 描述:把 SSL Socket 对象指针定义为更直观的别名
  67. ************************************************************************/
  68. typedef HP_Object HP_SSLServer;
  69. typedef HP_Object HP_SSLAgent;
  70. typedef HP_Object HP_SSLClient;
  71. typedef HP_Object HP_SSLPullServer;
  72. typedef HP_Object HP_SSLPullAgent;
  73. typedef HP_Object HP_SSLPullClient;
  74. typedef HP_Object HP_SSLPackServer;
  75. typedef HP_Object HP_SSLPackAgent;
  76. typedef HP_Object HP_SSLPackClient;
  77. typedef HP_Object HP_HttpsServer;
  78. typedef HP_Object HP_HttpsAgent;
  79. typedef HP_Object HP_HttpsClient;
  80. /*****************************************************************************************************************************************************/
  81. /******************************************************************** SSL Exports ********************************************************************/
  82. /*****************************************************************************************************************************************************/
  83. /********************************************************/
  84. /************** HPSocket4C-SSL 对象创建函数 **************/
  85. // 创建 HP_SSLServer 对象
  86. HPSOCKET_API HP_SSLServer __stdcall Create_HP_SSLServer(HP_TcpServerListener pListener);
  87. // 创建 HP_SSLAgent 对象
  88. HPSOCKET_API HP_SSLAgent __stdcall Create_HP_SSLAgent(HP_TcpAgentListener pListener);
  89. // 创建 HP_SSLClient 对象
  90. HPSOCKET_API HP_SSLClient __stdcall Create_HP_SSLClient(HP_TcpClientListener pListener);
  91. // 创建 HP_SSLPullServer 对象
  92. HPSOCKET_API HP_SSLPullServer __stdcall Create_HP_SSLPullServer(HP_TcpPullServerListener pListener);
  93. // 创建 HP_SSLPullAgent 对象
  94. HPSOCKET_API HP_SSLPullAgent __stdcall Create_HP_SSLPullAgent(HP_TcpPullAgentListener pListener);
  95. // 创建 HP_SSLPullClient 对象
  96. HPSOCKET_API HP_SSLPullClient __stdcall Create_HP_SSLPullClient(HP_TcpPullClientListener pListener);
  97. // 创建 HP_SSLPackServer 对象
  98. HPSOCKET_API HP_SSLPackServer __stdcall Create_HP_SSLPackServer(HP_TcpServerListener pListener);
  99. // 创建 HP_SSLPackAgent 对象
  100. HPSOCKET_API HP_SSLPackAgent __stdcall Create_HP_SSLPackAgent(HP_TcpAgentListener pListener);
  101. // 创建 HP_SSLPackClient 对象
  102. HPSOCKET_API HP_SSLPackClient __stdcall Create_HP_SSLPackClient(HP_TcpClientListener pListener);
  103. // 销毁 HP_SSLServer 对象
  104. HPSOCKET_API void __stdcall Destroy_HP_SSLServer(HP_SSLServer pServer);
  105. // 销毁 HP_SSLAgent 对象
  106. HPSOCKET_API void __stdcall Destroy_HP_SSLAgent(HP_SSLAgent pAgent);
  107. // 销毁 HP_SSLClient 对象
  108. HPSOCKET_API void __stdcall Destroy_HP_SSLClient(HP_SSLClient pClient);
  109. // 销毁 HP_SSLPullServer 对象
  110. HPSOCKET_API void __stdcall Destroy_HP_SSLPullServer(HP_SSLPullServer pServer);
  111. // 销毁 HP_SSLPullAgent 对象
  112. HPSOCKET_API void __stdcall Destroy_HP_SSLPullAgent(HP_SSLPullAgent pAgent);
  113. // 销毁 HP_SSLPullClient 对象
  114. HPSOCKET_API void __stdcall Destroy_HP_SSLPullClient(HP_SSLPullClient pClient);
  115. // 销毁 HP_SSLPackServer 对象
  116. HPSOCKET_API void __stdcall Destroy_HP_SSLPackServer(HP_SSLPackServer pServer);
  117. // 销毁 HP_SSLPackAgent 对象
  118. HPSOCKET_API void __stdcall Destroy_HP_SSLPackAgent(HP_SSLPackAgent pAgent);
  119. // 销毁 HP_SSLPackClient 对象
  120. HPSOCKET_API void __stdcall Destroy_HP_SSLPackClient(HP_SSLPackClient pClient);
  121. /*****************************************************************************************************************************************************/
  122. /******************************************************************** HTTPS Exports ******************************************************************/
  123. /*****************************************************************************************************************************************************/
  124. /****************************************************/
  125. /**************** HTTPS 对象创建函数 *****************/
  126. // 创建 HP_HttpsServer 对象
  127. HPSOCKET_API HP_HttpsServer __stdcall Create_HP_HttpsServer(HP_HttpServerListener pListener);
  128. // 创建 HP_HttpsAgent 对象
  129. HPSOCKET_API HP_HttpsAgent __stdcall Create_HP_HttpsAgent(HP_HttpAgentListener pListener);
  130. // 创建 HP_HttpsClient 对象
  131. HPSOCKET_API HP_HttpsClient __stdcall Create_HP_HttpsClient(HP_HttpClientListener pListener);
  132. // 销毁 HP_HttpsServer 对象
  133. HPSOCKET_API void __stdcall Destroy_HP_HttpsServer(HP_HttpsServer pServer);
  134. // 销毁 HP_HttpsAgent 对象
  135. HPSOCKET_API void __stdcall Destroy_HP_HttpsAgent(HP_HttpsAgent pAgent);
  136. // 销毁 HP_HttpsClient 对象
  137. HPSOCKET_API void __stdcall Destroy_HP_HttpsClient(HP_HttpsClient pClient);
  138. /*****************************************************************************************************************************************************/
  139. /*************************************************************** Global Function Exports *************************************************************/
  140. /*****************************************************************************************************************************************************/
  141. /***************************************************************************************/
  142. /************************************ SSL 初始化方法 ************************************/
  143. /*
  144. * 名称:初始化 SSL 全局环境参数
  145. * 描述:SSL 全局环境参数必须在 SSL 通信组件启动前完成初始化,否则启动失败
  146. *
  147. * 参数: enSessionMode -- SSL 工作模式(参考 EnSSLSessionMode)
  148. * iVerifyMode -- SSL 验证模式(参考 EnSSLVerifyMode)
  149. * lpszPemCertFile -- 证书文件(客户端可选)
  150. * lpszPemKeyFile -- 私钥文件(客户端可选)
  151. * lpszKeyPasswod -- 私钥密码(没有密码则为空)
  152. * lpszCAPemCertFileOrPath -- CA 证书文件或目录(单向验证或客户端可选)
  153. *
  154. * 返回值: TRUE -- 成功
  155. * FALSE -- 失败,可通过 SYS_GetLastError() 获取失败原因
  156. */
  157. HPSOCKET_API BOOL __stdcall HP_SSL_Initialize(En_HP_SSLSessionMode enSessionMode, int iVerifyMode /* SSL_VM_NONE */, LPCTSTR lpszPemCertFile /* nullptr */, LPCTSTR lpszPemKeyFile /* nullptr */, LPCTSTR lpszKeyPasswod /* nullptr */, LPCTSTR lpszCAPemCertFileOrPath /* nullptr */);
  158. /*
  159. * 名称:清理 SSL 全局运行环境
  160. * 描述:清理 SSL 全局运行环境,回收 SSL 相关内存
  161. * 1、应用程序退出时会自动调用本方法
  162. * 2、当要重新设置 SSL 全局环境参数时,需要先调用本方法清理原先的环境参数
  163. *
  164. * 参数: 无
  165. *
  166. * 返回值:无
  167. */
  168. HPSOCKET_API void __stdcall HP_SSL_Cleanup();
  169. /*
  170. * 名称:清理线程局部环境 SSL 资源
  171. * 描述:任何一个操作 SSL 的线程,通信结束时都需要清理线程局部环境 SSL 资源
  172. * 1、主线程和 HP-Socket 工作线程在通信结束时会自动清理线程局部环境 SSL 资源。因此,一般情况下不必手工调用本方法
  173. * 2、特殊情况下,当自定义线程参与 HP-Socket 通信操作并检查到 SSL 内存泄漏时,需在每次通信结束时自定义线程调用本方法
  174. *
  175. * 参数: dwThreadID -- 线程 ID(0:当前线程)
  176. *
  177. * 返回值:无
  178. */
  179. HPSOCKET_API void __stdcall HP_SSL_RemoveThreadLocalState(DWORD dwThreadID);
  180. /* 检查 SSL 全局运行环境是否初始化完成 */
  181. HPSOCKET_API BOOL __stdcall HP_SSL_IsValid();