using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace HPSocketCS
{
///
/// SSL 工作模式
/// 描述:标识 SSL 的工作模式,客户端模式或服务端模式
///
public enum SSLSessionMode
{
///
/// 客户端模式
///
Client = 0,
///
/// 服务端模式
///
Server = 1,
}
///
/// 名称:SSL 验证模式
/// 描述:SSL 验证模式选项,SSL_VM_PEER 可以和后面两个选项组合一起
///
public enum SSLVerifyMode
{
///
/// SSL_VERIFY_NONE
///
None = 0x00,
///
/// SSL_VERIFY_PEER
///
Peer = 0x01,
///
/// SSL_VERIFY_FAIL_IF_NO_PEER_CERT
///
FailIfNoPeerCert = 0x02,
///
/// SSL_VERIFY_CLIENT_ONCE
///
ClientOnce = 0x04,
}
///
/// SSL事件
///
public class SSLEvent
{
public delegate HandleResult OnHandShakeEventHandler(IntPtr connId);
}
///
/// Unicode版本
///
public class SSLSdk
{
///
/// HPSocket的文件路径
///
#if DEBUG
private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_UD.dll";
#else
private const string HPSOCKET_SSL_DLL_PATH = "HPSocket4C-SSL_U.dll";
#endif
/**************** HPSocket4C-SSL 导出函数 ****************/
///
/// 创建 HP_SSLServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLServer(IntPtr pListener);
///
/// 创建 HP_SSLAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLAgent(IntPtr pListener);
///
/// 创建 HP_SSLClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLClient(IntPtr pListener);
///
/// 创建 HP_SSLPullServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPullServer(IntPtr pListener);
///
/// 创建 HP_SSLPullAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPullAgent(IntPtr pListener);
///
/// 创建 HP_SSLPullClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPullClient(IntPtr pListener);
///
/// 创建 HP_SSLPackServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPackServer(IntPtr pListener);
///
/// 创建 HP_SSLPackAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPackAgent(IntPtr pListener);
///
/// 创建 HP_SSLPackClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern IntPtr Create_HP_SSLPackClient(IntPtr pListener);
///
/// 销毁 HP_SSLServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLServer(IntPtr pObj);
///
/// 销毁 HP_SSLAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLAgent(IntPtr pObj);
///
/// 销毁 HP_SSLClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLClient(IntPtr pObj);
///
/// 销毁 HP_SSLPullServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPullServer(IntPtr pObj);
///
/// 销毁 HP_SSLPullAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPullAgent(IntPtr pObj);
///
/// 销毁 HP_SSLPullClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPullClient(IntPtr pObj);
///
/// 销毁 HP_SSLPackServer 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPackServer(IntPtr pObj);
///
/// 销毁 HP_SSLPackAgent 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPackAgent(IntPtr pObj);
///
/// 销毁 HP_SSLPackClient 对象
///
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void Destroy_HP_SSLPackClient(IntPtr pObj);
/************************ SSL 初始化方法 ****************************/
///
/// 名称:初始化 SSL 全局环境参数
/// 描述:SSL 全局环境参数必须在 SSL 通信组件启动前完成初始化,否则启动失败
///
/// SSL 工作模式
/// SSL 验证模式
/// 证书文件(客户端可选)
/// 私钥文件(客户端可选)
/// 私钥密码(没有密码则为空)
/// CA 证书文件或目录(单向验证或客户端可选)
///
[DllImport(HPSOCKET_SSL_DLL_PATH, CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool HP_SSL_Initialize(SSLSessionMode sessionMode, SSLVerifyMode verifyMode, string lpszPemCertFile, string lpszPemKeyFile, string lpszKeyPasswod, string lpszCAPemCertFileOrPath);
/*
* 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);
*/
///
/// 清理 SSL 全局运行环境
/// 描述:清理 SSL 全局运行环境,回收 SSL 相关内存
/// 1、应用程序退出时会自动调用调用本方法
/// 2、当要重新设置 SSL 全局环境参数时,需要先调用本方法清理原先的环境参数
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void HP_SSL_Cleanup();
///
/// 清理线程局部环境 SSL 资源
/// 描述:清理 SSL 全局运行环境,回收 SSL 相关内存
/// 任何一个操作 SSL 的线程,通信结束时都需要清理线程局部环境 SSL 资源
/// 1、主线程和 HP-Socket 工作线程在通信结束时会自动清理线程局部环境 SSL 资源。因此,一般情况下不必手工调用本方法
/// 2、特殊情况下,当自定义线程参与 HP-Socket 通信操作并检查到 SSL 内存泄漏时,需在每次通信结束时自定义线程调用本方法
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern void HP_SSL_RemoveThreadLocalState();
///
/// 检查 SSL 全局运行环境是否初始化完成
///
///
[DllImport(HPSOCKET_SSL_DLL_PATH)]
public static extern bool HP_SSL_IsValid();
}
}