diff --git a/Netch/Controllers/HTTPController.cs b/Netch/Controllers/HTTPController.cs index 0963ff29..3d86eb4c 100644 --- a/Netch/Controllers/HTTPController.cs +++ b/Netch/Controllers/HTTPController.cs @@ -38,7 +38,7 @@ namespace Netch.Controllers Global.Settings.Pac_Port = PortHelper.GetAvailablePort(); } - pacUrl = PACServerHandle.InitPACServer("127.0.0.1"); + pacUrl = PACServerHandle.InitPACServer(); } if (mode.Type is 3) @@ -76,7 +76,22 @@ namespace Netch.Controllers if (_oldState != null) { using var service = new ProxyService(); - service.Set(_oldState!); + try + { + if (_oldState.IsProxy && _oldState.ProxyServer == service.Query().ProxyServer || + _oldState.IsAutoProxyUrl && _oldState.AutoConfigUrl!.StartsWith(PACServerHandle.PacPrefix)) + { + service.Direct(); + return; + } + + service.Set(_oldState); + } + catch + { + service.Direct(); + throw; + } } }) }; diff --git a/Netch/Utils/HttpProxyHandler/PACServerHandle.cs b/Netch/Utils/HttpProxyHandler/PACServerHandle.cs index c252233a..d4c6451b 100644 --- a/Netch/Utils/HttpProxyHandler/PACServerHandle.cs +++ b/Netch/Utils/HttpProxyHandler/PACServerHandle.cs @@ -14,15 +14,15 @@ namespace Netch.Utils.HttpProxyHandler { private static HttpWebServer? _httpWebServer; private static string? _pacContent; + public static readonly string PacPrefix= $"http://127.0.0.1:{Global.Settings.Pac_Port}/pac/"; - public static string InitPACServer(string address) + public static string InitPACServer() { try { - _pacContent = GetPacList(address); - var prefixes = $"http://{address}:{Global.Settings.Pac_Port}/pac/"; + _pacContent = GetPacList("127.0.0.1"); - _httpWebServer = new HttpWebServer(SendResponse, prefixes); + _httpWebServer = new HttpWebServer(SendResponse, PacPrefix); Task.Run(() => _httpWebServer.StartWaitingRequest()); var pacUrl = GetPacUrl(); @@ -77,7 +77,7 @@ namespace Netch.Utils.HttpProxyHandler /// public static string GetPacUrl() { - return $"http://127.0.0.1:{Global.Settings.Pac_Port}/pac/?t={DateTime.Now:yyyyMMddHHmmssfff}"; + return PacPrefix + $"?t={DateTime.Now:yyyyMMddHHmmssfff}"; } } } \ No newline at end of file