mirror of
				https://github.com/2dust/v2rayN.git
				synced 2025-11-04 06:22:52 +00:00 
			
		
		
		
	up pac
This commit is contained in:
		
							parent
							
								
									5cadf59e10
								
							
						
					
					
						commit
						cb074528f4
					
				
					 7 changed files with 65 additions and 102 deletions
				
			
		| 
						 | 
					@ -11,13 +11,14 @@ using v2rayN.Mode;
 | 
				
			||||||
using v2rayN.Base;
 | 
					using v2rayN.Base;
 | 
				
			||||||
using v2rayN.Tool;
 | 
					using v2rayN.Tool;
 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
 | 
					using v2rayN.Properties;
 | 
				
			||||||
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace v2rayN.Forms
 | 
					namespace v2rayN.Forms
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public partial class MainForm : BaseForm
 | 
					    public partial class MainForm : BaseForm
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private V2rayHandler v2rayHandler;     
 | 
					        private V2rayHandler v2rayHandler;     
 | 
				
			||||||
        private PACListHandle pacListHandle;
 | 
					 | 
				
			||||||
        private List<int> lvSelecteds = new List<int>();
 | 
					        private List<int> lvSelecteds = new List<int>();
 | 
				
			||||||
        private StatisticsHandler statistics = null;
 | 
					        private StatisticsHandler statistics = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1272,13 +1273,21 @@ namespace v2rayN.Forms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
 | 
					        private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            DownloadHandle pacListHandle = null;
 | 
				
			||||||
            if (pacListHandle == null)
 | 
					            if (pacListHandle == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                pacListHandle = new PACListHandle();
 | 
					                pacListHandle = new DownloadHandle();
 | 
				
			||||||
                pacListHandle.UpdateCompleted += (sender2, args) =>
 | 
					                pacListHandle.UpdateCompleted += (sender2, args) =>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (args.Success)
 | 
					                    if (args.Success)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        var result = args.Msg;
 | 
				
			||||||
 | 
					                        if (Utils.IsNullOrEmpty(result))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            return;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        pacListHandle.GenPacFile(result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully"));
 | 
					                        AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully"));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
| 
						 | 
					@ -1292,7 +1301,7 @@ namespace v2rayN.Forms
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            AppendText(false, UIRes.I18N("MsgStartUpdatingPAC"));
 | 
					            AppendText(false, UIRes.I18N("MsgStartUpdatingPAC"));
 | 
				
			||||||
            pacListHandle.UpdatePACFromGFWList(config);
 | 
					            pacListHandle.WebDownloadString(config.urlGFWList);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void tsbCheckClearPACList_Click(object sender, EventArgs e)
 | 
					        private void tsbCheckClearPACList_Click(object sender, EventArgs e)
 | 
				
			||||||
| 
						 | 
					@ -1425,8 +1434,6 @@ namespace v2rayN.Forms
 | 
				
			||||||
                downloadHandle3.WebDownloadString(url);
 | 
					                downloadHandle3.WebDownloadString(url);
 | 
				
			||||||
                AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
 | 
					                AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -823,6 +823,9 @@
 | 
				
			||||||
  <data name="tsbCheckClearPACList.Text" xml:space="preserve">
 | 
					  <data name="tsbCheckClearPACList.Text" xml:space="preserve">
 | 
				
			||||||
    <value>Simplify PAC (please set Core route)</value>
 | 
					    <value>Simplify PAC (please set Core route)</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
 | 
					  <data name="tsbCheckClearPACList.Visible" type="System.Boolean, mscorlib">
 | 
				
			||||||
 | 
					    <value>False</value>
 | 
				
			||||||
 | 
					  </data>
 | 
				
			||||||
  <data name="tsbCheckUpdate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
 | 
					  <data name="tsbCheckUpdate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
 | 
				
			||||||
    <value>Magenta</value>
 | 
					    <value>Magenta</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -432,7 +432,7 @@
 | 
				
			||||||
    <value>232, 22</value>
 | 
					    <value>232, 22</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
  <data name="tsbCheckUpdatePACList.Text" xml:space="preserve">
 | 
					  <data name="tsbCheckUpdatePACList.Text" xml:space="preserve">
 | 
				
			||||||
    <value>检查更新PAC (需要Http代理)</value>
 | 
					    <value>检查更新PAC</value>
 | 
				
			||||||
  </data>
 | 
					  </data>
 | 
				
			||||||
  <data name="tsbCheckClearPACList.Size" type="System.Drawing.Size, System.Drawing">
 | 
					  <data name="tsbCheckClearPACList.Size" type="System.Drawing.Size, System.Drawing">
 | 
				
			||||||
    <value>232, 22</value>
 | 
					    <value>232, 22</value>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,13 @@
 | 
				
			||||||
using System;
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Diagnostics;
 | 
					using System.Diagnostics;
 | 
				
			||||||
using System.IO;
 | 
					using System.IO;
 | 
				
			||||||
using System.Net;
 | 
					using System.Net;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
using v2rayN.Base;
 | 
					using v2rayN.Base;
 | 
				
			||||||
using v2rayN.Mode;
 | 
					using v2rayN.Mode;
 | 
				
			||||||
 | 
					using v2rayN.Properties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace v2rayN.Handler
 | 
					namespace v2rayN.Handler
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -289,5 +293,46 @@ namespace v2rayN.Handler
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region PAC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string GenPacFile(string result)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8);
 | 
				
			||||||
 | 
					                List<string> lines = ParsePacResult(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);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Utils.SaveLog(ex.Message, ex);
 | 
				
			||||||
 | 
					                return ex.Message;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return string.Empty;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private List<string> ParsePacResult(string response)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -403,6 +403,8 @@ namespace v2rayN.Handler
 | 
				
			||||||
                    //远程服务器地址和端口
 | 
					                    //远程服务器地址和端口
 | 
				
			||||||
                    serversItem.address = config.address();
 | 
					                    serversItem.address = config.address();
 | 
				
			||||||
                    serversItem.port = config.port();
 | 
					                    serversItem.port = config.port();
 | 
				
			||||||
 | 
					                    serversItem.method = null;
 | 
				
			||||||
 | 
					                    serversItem.password = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!Utils.IsNullOrEmpty(config.security())
 | 
					                    if (!Utils.IsNullOrEmpty(config.security())
 | 
				
			||||||
                        && !Utils.IsNullOrEmpty(config.id()))
 | 
					                        && !Utils.IsNullOrEmpty(config.id()))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -187,7 +187,6 @@
 | 
				
			||||||
    <Compile Include="Base\HttpWebServer.cs" />
 | 
					    <Compile Include="Base\HttpWebServer.cs" />
 | 
				
			||||||
    <Compile Include="Base\HttpWebServerB.cs" />
 | 
					    <Compile Include="Base\HttpWebServerB.cs" />
 | 
				
			||||||
    <Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
 | 
					    <Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
 | 
				
			||||||
    <Compile Include="HttpProxyHandler\PACListHandle.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="HttpProxyHandler\PACServerHandle.cs" />
 | 
					    <Compile Include="HttpProxyHandler\PACServerHandle.cs" />
 | 
				
			||||||
    <Compile Include="HttpProxyHandler\ProxySetting.cs" />
 | 
					    <Compile Include="HttpProxyHandler\ProxySetting.cs" />
 | 
				
			||||||
    <Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
 | 
					    <Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue