📄 proxydetectaction.cs
字号:
namespace Imps.Client.CommLayer.NetworkDetect
{
using Imps.Client.Core;
using Imps.Client.Resource;
using Imps.Client.Utils;
using Imps.Utils;
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading;
public class ProxyDetectAction : DetectAction
{
public ProxyDetectAction()
{
base.Description = "代理服务器";
base.NextStage = NetworkDetectStage.Finished;
}
public override void BeginDetectAction()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartDetect), this);
}
public override void CancelDetectAction()
{
}
public override void Dispose()
{
}
private void StartDetect(object state)
{
List<DetectResult> details = new List<DetectResult>();
NetworkProxy httpProxy = base.DetectData.NetworkSetting.HttpProxy;
if (base.DetectData.NetworkSetting.UseHttpProxy)
{
int? proxyPort = null;
string proxyServer = string.Empty;
if (base.DetectData.NetworkSetting.UseIeProxy)
{
IeConfig.ReadIeHttpProxySetting(out proxyServer, out proxyPort);
}
else
{
proxyServer = base.DetectData.NetworkSetting.HttpProxy.ServerUri;
proxyPort = new int?(base.DetectData.NetworkSetting.HttpProxy.ServerPort);
}
httpProxy.ServerPort = proxyPort.GetValueOrDefault(0x1f90);
httpProxy.ServerUri = (proxyServer == null) ? string.Empty : proxyServer;
if (httpProxy.ServerUri.Length > 0)
{
TryConnectHttpProxy(httpProxy.ServerUri, httpProxy.ServerPort, httpProxy.UserName, httpProxy.Password, details);
}
else
{
details.Add(new DetectResult(DetectStatus.Passed, StringTable.NetworkDetect.NoHttpProxy));
}
}
else
{
details.Add(new DetectResult(DetectStatus.Passed, StringTable.NetworkDetect.HttpProxyNotEnabled));
}
bool passed = true;
List<DetectResult>.Enumerator enumerator = details.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
if (enumerator.get_Current().Status != DetectStatus.Passed)
{
passed = false;
goto Label_0141;
}
}
}
finally
{
enumerator.Dispose();
}
Label_0141:
base.FireDetecFinsihedEvent(this, new DetectEventArgs(passed, details));
}
private static void TryConnectHttpProxy(string ServerUri, int port, string UserName, string Password, List<DetectResult> details)
{
try
{
WebProxy proxy = new WebProxy(string.Format("{0}:{1}", ServerUri, port), UserName.Length > 0);
if (UserName.IndexOf('\\') > -1)
{
string domain = UserName.Substring(0, UserName.IndexOf('\\'));
UserName = UserName.Substring(UserName.IndexOf('\\') + 1);
proxy.Credentials = new NetworkCredential(UserName, Password, domain);
}
else
{
proxy.Credentials = new NetworkCredential(UserName, Password);
}
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Imps.Client.Core.FixedClientSetting.Instance.TestConnectionUrl);
request.Proxy = proxy;
request.KeepAlive = false;
using (HttpWebResponse response = ((HttpWebResponse) request.GetResponse()))
{
details.Add(new DetectResult(DetectStatus.Passed, StringTable.NetworkDetect.HttpProxyPassed));
}
}
catch (Exception exception)
{
details.Add(new DetectResult(DetectStatus.Failed, StringTable.NetworkDetect.HttpProxyNotPassed));
ClientLogger.WriteGeneral(exception.ToString());
}
}
public override NetworkDetectStage CurrentStage
{
get
{
return NetworkDetectStage.Proxy;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -