using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace HPSocketCS
{
public class HttpsAgent : SSLHttpAgent
{
public HttpsAgent()
: base()
{
}
///
///
///
/// 验证模式
/// 证书文件
/// 私钥文件
/// 私钥密码(没有密码则为空)
/// CA 证书文件或目录(单向验证或客户端可选)
public HttpsAgent(SSLVerifyMode verifyModel, string pemCertFile, string pemKeyFile, string keyPasswod, string caPemCertFileOrPath)
: base(verifyModel, pemCertFile, pemKeyFile, keyPasswod, caPemCertFileOrPath)
{
}
}
public class SSLHttpAgent : HttpAgent
{
///
/// 验证模式
///
public SSLVerifyMode VerifyMode { get; set; }
///
/// 证书文件(客户端可选)
///
public string PemCertFile { get; set; }
///
/// 私钥文件(客户端可选)
///
public string PemKeyFile { get; set; }
///
/// 私钥密码(没有密码则为空)
///
public string KeyPasswod { get; set; }
///
/// CA 证书文件或目录(单向验证或客户端可选)
///
public string CAPemCertFileOrPath { get; set; }
public SSLHttpAgent()
: base()
{
}
///
///
///
/// 验证模式
/// 证书文件
/// 私钥文件
/// 私钥密码(没有密码则为空)
/// CA 证书文件或目录(单向验证或客户端可选)
public SSLHttpAgent(SSLVerifyMode verifyModel, string pemCertFile, string pemKeyFile, string keyPasswod, string caPemCertFileOrPath)
{
this.VerifyMode = verifyModel;
this.PemCertFile = pemCertFile;
this.PemKeyFile = pemKeyFile;
this.KeyPasswod = keyPasswod;
this.CAPemCertFileOrPath = caPemCertFileOrPath;
}
protected override bool CreateListener()
{
if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero)
{
return false;
}
pListener = HttpSdk.Create_HP_HttpAgentListener();
if (pListener == IntPtr.Zero)
{
return false;
}
pAgent = SSLHttpSdk.Create_HP_HttpsAgent(pListener);
if (pAgent == IntPtr.Zero)
{
return false;
}
IsCreate = true;
return true;
}
///
/// 初始化SSL环境
///
///
public virtual bool Initialize()
{
if (pAgent != IntPtr.Zero)
{
PemCertFile = string.IsNullOrWhiteSpace(PemCertFile) ? null : PemCertFile;
PemKeyFile = string.IsNullOrWhiteSpace(PemKeyFile) ? null : PemKeyFile;
KeyPasswod = string.IsNullOrWhiteSpace(KeyPasswod) ? null : KeyPasswod;
CAPemCertFileOrPath = string.IsNullOrWhiteSpace(CAPemCertFileOrPath) ? null : CAPemCertFileOrPath;
return SSLSdk.HP_SSLAgent_SetupSSLContext(pAgent, VerifyMode, PemCertFile, PemKeyFile, KeyPasswod, CAPemCertFileOrPath);
}
return true;
}
///
/// 反初始化SSL环境
///
public virtual void Uninitialize()
{
if (pAgent != IntPtr.Zero)
{
SSLSdk.HP_SSLAgent_CleanupSSLContext(pAgent);
}
}
public override void Destroy()
{
Stop();
if (pAgent != IntPtr.Zero)
{
SSLHttpSdk.Destroy_HP_HttpsAgent(pAgent);
pAgent = IntPtr.Zero;
}
if (pListener != IntPtr.Zero)
{
HttpSdk.Destroy_HP_HttpAgentListener(pListener);
pListener = IntPtr.Zero;
}
IsCreate = false;
}
}
}