mirror of https://github.com/2dust/v2rayN
2dust
5 years ago
7 changed files with 65 additions and 102 deletions
@ -1,93 +0,0 @@ |
|||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.IO; |
|
||||||
using System.Net; |
|
||||||
using System.Text; |
|
||||||
using Newtonsoft.Json; |
|
||||||
using v2rayN.Base; |
|
||||||
using v2rayN.Mode; |
|
||||||
using v2rayN.Properties; |
|
||||||
|
|
||||||
namespace v2rayN.HttpProxyHandler |
|
||||||
{ |
|
||||||
/// <summary> |
|
||||||
/// 提供PAC功能支持 |
|
||||||
/// </summary> |
|
||||||
class PACListHandle |
|
||||||
{ |
|
||||||
public event EventHandler<ResultEventArgs> UpdateCompleted; |
|
||||||
|
|
||||||
public event ErrorEventHandler Error; |
|
||||||
|
|
||||||
public class ResultEventArgs : EventArgs |
|
||||||
{ |
|
||||||
public bool Success; |
|
||||||
|
|
||||||
public ResultEventArgs(bool success) |
|
||||||
{ |
|
||||||
this.Success = success; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static readonly IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' }; |
|
||||||
|
|
||||||
public void UpdatePACFromGFWList(Config config) |
|
||||||
{ |
|
||||||
string url = Global.GFWLIST_URL; |
|
||||||
if (!Utils.IsNullOrEmpty(config.urlGFWList)) |
|
||||||
{ |
|
||||||
url = config.urlGFWList; |
|
||||||
} |
|
||||||
|
|
||||||
//默认用户已开启系统代理 |
|
||||||
//var httpProxy = config.inbound.FirstOrDefault(x => x.protocol=="http"); |
|
||||||
//if (httpProxy == null) |
|
||||||
//{ |
|
||||||
// throw new Exception("未发现HTTP代理,无法设置代理更新"); |
|
||||||
//} |
|
||||||
var http = new WebClientEx(); |
|
||||||
//http.Headers.Add("Connection", "Close"); |
|
||||||
//http.Proxy = new WebProxy(IPAddress.Loopback.ToString(), httpProxy.localPort); |
|
||||||
http.DownloadStringCompleted += http_DownloadStringCompleted; |
|
||||||
http.DownloadStringAsync(new Uri(url)); |
|
||||||
} |
|
||||||
|
|
||||||
private void http_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), e.Result, Encoding.UTF8); |
|
||||||
List<string> lines = ParseResult(e.Result); |
|
||||||
string abpContent = Utils.UnGzip(Resources.abp_js); |
|
||||||
abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); |
|
||||||
File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8); |
|
||||||
if (UpdateCompleted != null) UpdateCompleted(this, new ResultEventArgs(true)); |
|
||||||
} |
|
||||||
catch (Exception ex) |
|
||||||
{ |
|
||||||
Utils.SaveLog(ex.Message, ex); |
|
||||||
|
|
||||||
if (Error != null) Error(this, new ErrorEventArgs(ex)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static List<string> ParseResult(string response) |
|
||||||
{ |
|
||||||
byte[] bytes = Convert.FromBase64String(response); |
|
||||||
string content = Encoding.UTF8.GetString(bytes); |
|
||||||
List<string> valid_lines = new List<string>(); |
|
||||||
using (var sr = new StringReader(content)) |
|
||||||
{ |
|
||||||
foreach (var line in sr.NonWhiteSpaceLines()) |
|
||||||
{ |
|
||||||
if (line.BeginWithAny(IgnoredLineBegins)) |
|
||||||
continue; |
|
||||||
valid_lines.Add(line); |
|
||||||
} |
|
||||||
} |
|
||||||
return valid_lines; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue