SSLSdk.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. namespace HPSocketCS
  7. {
  8. /// <summary>
  9. /// SSL 工作模式
  10. /// 描述:标识 SSL 的工作模式,客户端模式或服务端模式
  11. /// </summary>
  12. public enum SSLSessionMode
  13. {
  14. /// <summary>
  15. /// 客户端模式
  16. /// </summary>
  17. Client = 0,
  18. /// <summary>
  19. /// 服务端模式
  20. /// </summary>
  21. Server = 1,
  22. }
  23. /// <summary>
  24. /// 名称:SSL 验证模式
  25. /// 描述:SSL 验证模式选项,SSL_VM_PEER 可以和后面两个选项组合一起
  26. /// </summary>
  27. public enum SSLVerifyMode
  28. {
  29. /// <summary>
  30. /// SSL_VERIFY_NONE
  31. /// </summary>
  32. None = 0x00,
  33. /// <summary>
  34. /// SSL_VERIFY_PEER
  35. /// </summary>
  36. Peer = 0x01,
  37. /// <summary>
  38. /// SSL_VERIFY_FAIL_IF_NO_PEER_CERT
  39. /// </summary>
  40. FailIfNoPeerCert = 0x02,
  41. /// <summary>
  42. /// SSL_VERIFY_CLIENT_ONCE
  43. /// </summary>
  44. ClientOnce = 0x04,
  45. }
  46. /// <summary>
  47. /// SSL事件
  48. /// </summary>
  49. public class SSLEvent
  50. {
  51. public delegate HandleResult OnHandShakeEventHandler(IntPtr connId);
  52. }
  53. /// <summary>
  54. /// Unicode版本
  55. /// </summary>
  56. public class SSLSdk
  57. {
  58. /// <summary>
  59. /// HPSocket的文件路径
  60. /// </summary>
  61. #if DEBUG
  62. private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_UD.dll";
  63. #else
  64. private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_U.dll";
  65. #endif
  66. /**************** HPSocket4C-SSL 导出函数 ****************/
  67. /// <summary>
  68. /// 创建 HP_SSLServer 对象
  69. /// </summary>
  70. /// <param name="pListener"></param>
  71. /// <returns></returns>
  72. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  73. public static extern IntPtr Create_HP_SSLServer(IntPtr pListener);
  74. /// <summary>
  75. /// 创建 HP_SSLAgent 对象
  76. /// </summary>
  77. /// <param name="pListener"></param>
  78. /// <returns></returns>
  79. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  80. public static extern IntPtr Create_HP_SSLAgent(IntPtr pListener);
  81. /// <summary>
  82. /// 创建 HP_SSLClient 对象
  83. /// </summary>
  84. /// <param name="pListener"></param>
  85. /// <returns></returns>
  86. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  87. public static extern IntPtr Create_HP_SSLClient(IntPtr pListener);
  88. /// <summary>
  89. /// 创建 HP_SSLPullServer 对象
  90. /// </summary>
  91. /// <param name="pListener"></param>
  92. /// <returns></returns>
  93. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  94. public static extern IntPtr Create_HP_SSLPullServer(IntPtr pListener);
  95. /// <summary>
  96. /// 创建 HP_SSLPullAgent 对象
  97. /// </summary>
  98. /// <param name="pListener"></param>
  99. /// <returns></returns>
  100. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  101. public static extern IntPtr Create_HP_SSLPullAgent(IntPtr pListener);
  102. /// <summary>
  103. /// 创建 HP_SSLPullClient 对象
  104. /// </summary>
  105. /// <param name="pListener"></param>
  106. /// <returns></returns>
  107. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  108. public static extern IntPtr Create_HP_SSLPullClient(IntPtr pListener);
  109. /// <summary>
  110. /// 创建 HP_SSLPackServer 对象
  111. /// </summary>
  112. /// <param name="pListener"></param>
  113. /// <returns></returns>
  114. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  115. public static extern IntPtr Create_HP_SSLPackServer(IntPtr pListener);
  116. /// <summary>
  117. /// 创建 HP_SSLPackAgent 对象
  118. /// </summary>
  119. /// <param name="pListener"></param>
  120. /// <returns></returns>
  121. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  122. public static extern IntPtr Create_HP_SSLPackAgent(IntPtr pListener);
  123. /// <summary>
  124. /// 创建 HP_SSLPackClient 对象
  125. /// </summary>
  126. /// <param name="pListener"></param>
  127. /// <returns></returns>
  128. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  129. public static extern IntPtr Create_HP_SSLPackClient(IntPtr pListener);
  130. /// <summary>
  131. /// 销毁 HP_SSLServer 对象
  132. /// </summary>
  133. /// <param name="pObj"></param>
  134. /// <returns></returns>
  135. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  136. public static extern void Destroy_HP_SSLServer(IntPtr pObj);
  137. /// <summary>
  138. /// 销毁 HP_SSLAgent 对象
  139. /// </summary>
  140. /// <param name="pObj"></param>
  141. /// <returns></returns>
  142. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  143. public static extern void Destroy_HP_SSLAgent(IntPtr pObj);
  144. /// <summary>
  145. /// 销毁 HP_SSLClient 对象
  146. /// </summary>
  147. /// <param name="pObj"></param>
  148. /// <returns></returns>
  149. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  150. public static extern void Destroy_HP_SSLClient(IntPtr pObj);
  151. /// <summary>
  152. /// 销毁 HP_SSLPullServer 对象
  153. /// </summary>
  154. /// <param name="pObj"></param>
  155. /// <returns></returns>
  156. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  157. public static extern void Destroy_HP_SSLPullServer(IntPtr pObj);
  158. /// <summary>
  159. /// 销毁 HP_SSLPullAgent 对象
  160. /// </summary>
  161. /// <param name="pObj"></param>
  162. /// <returns></returns>
  163. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  164. public static extern void Destroy_HP_SSLPullAgent(IntPtr pObj);
  165. /// <summary>
  166. /// 销毁 HP_SSLPullClient 对象
  167. /// </summary>
  168. /// <param name="pObj"></param>
  169. /// <returns></returns>
  170. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  171. public static extern void Destroy_HP_SSLPullClient(IntPtr pObj);
  172. /// <summary>
  173. /// 销毁 HP_SSLPackServer 对象
  174. /// </summary>
  175. /// <param name="pObj"></param>
  176. /// <returns></returns>
  177. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  178. public static extern void Destroy_HP_SSLPackServer(IntPtr pObj);
  179. /// <summary>
  180. /// 销毁 HP_SSLPackAgent 对象
  181. /// </summary>
  182. /// <param name="pObj"></param>
  183. /// <returns></returns>
  184. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  185. public static extern void Destroy_HP_SSLPackAgent(IntPtr pObj);
  186. /// <summary>
  187. /// 销毁 HP_SSLPackClient 对象
  188. /// </summary>
  189. /// <param name="pObj"></param>
  190. /// <returns></returns>
  191. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  192. public static extern void Destroy_HP_SSLPackClient(IntPtr pObj);
  193. /************************ SSL 初始化方法 ****************************/
  194. /// <summary>
  195. /// 名称:初始化 SSL 全局环境参数
  196. /// 描述:SSL 全局环境参数必须在 SSL 通信组件启动前完成初始化,否则启动失败
  197. /// </summary>
  198. /// <param name="sessionMode">SSL 工作模式</param>
  199. /// <param name="verifyMode">SSL 验证模式</param>
  200. /// <param name="lpszPemCertFile">证书文件(客户端可选)</param>
  201. /// <param name="lpszPemKeyFile">私钥文件(客户端可选)</param>
  202. /// <param name="lpszKeyPasswod">私钥密码(没有密码则为空)</param>
  203. /// <param name="lpszCAPemCertFileOrPath">CA 证书文件或目录(单向验证或客户端可选)</param>
  204. /// <returns></returns>
  205. [DllImport(HPSOCKET_SSL_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
  206. public static extern bool HP_SSL_Initialize(SSLSessionMode sessionMode, SSLVerifyMode verifyMode, string lpszPemCertFile, string lpszPemKeyFile, string lpszKeyPasswod, string lpszCAPemCertFileOrPath);
  207. /*
  208. * public static extern bool HP_SSL_Initialize(SSLSessionMode sessionMode, SSLVerifyMode verifyMode, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszPemCertFile, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszPemKeyFile, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszKeyPasswod, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpszCAPemCertFileOrPath);
  209. */
  210. /// <summary>
  211. /// 清理 SSL 全局运行环境
  212. /// 描述:清理 SSL 全局运行环境,回收 SSL 相关内存
  213. /// 1、应用程序退出时会自动调用调用本方法
  214. /// 2、当要重新设置 SSL 全局环境参数时,需要先调用本方法清理原先的环境参数
  215. /// </summary>
  216. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  217. public static extern void HP_SSL_Cleanup();
  218. /// <summary>
  219. /// 清理线程局部环境 SSL 资源
  220. /// 描述:清理 SSL 全局运行环境,回收 SSL 相关内存
  221. /// 任何一个操作 SSL 的线程,通信结束时都需要清理线程局部环境 SSL 资源
  222. /// 1、主线程和 HP-Socket 工作线程在通信结束时会自动清理线程局部环境 SSL 资源。因此,一般情况下不必手工调用本方法
  223. /// 2、特殊情况下,当自定义线程参与 HP-Socket 通信操作并检查到 SSL 内存泄漏时,需在每次通信结束时自定义线程调用本方法
  224. /// </summary>
  225. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  226. public static extern void HP_SSL_RemoveThreadLocalState();
  227. /// <summary>
  228. /// 检查 SSL 全局运行环境是否初始化完成
  229. /// </summary>
  230. /// <returns></returns>
  231. [DllImport(HPSOCKET_SSL_DLL_PATH)]
  232. public static extern bool HP_SSL_IsValid();
  233. }
  234. }