mirror of https://github.com/2dust/v2rayN
Optimize system proxy code
parent
215308c329
commit
373ee6586a
|
@ -43,6 +43,7 @@ namespace v2rayN
|
||||||
Init();
|
Init();
|
||||||
Logging.LoggingEnabled(_config.guiItem.enableLog);
|
Logging.LoggingEnabled(_config.guiItem.enableLog);
|
||||||
Logging.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}");
|
Logging.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}");
|
||||||
|
Logging.SaveLog($"{Environment.OSVersion} - {(Environment.Is64BitOperatingSystem ? 64 : 32)}");
|
||||||
Logging.ClearLogs();
|
Logging.ClearLogs();
|
||||||
|
|
||||||
Thread.CurrentThread.CurrentUICulture = new(_config.uiItem.currentLanguage);
|
Thread.CurrentThread.CurrentUICulture = new(_config.uiItem.currentLanguage);
|
||||||
|
|
|
@ -28,6 +28,8 @@ namespace v2rayN.Handler
|
||||||
/// <exception cref="ApplicationException">Error message with win32 error code</exception>
|
/// <exception cref="ApplicationException">Error message with win32 error code</exception>
|
||||||
/// <returns>true: one of connection is successfully updated proxy settings</returns>
|
/// <returns>true: one of connection is successfully updated proxy settings</returns>
|
||||||
public static bool SetProxy(string? strProxy, string? exceptions, int type)
|
public static bool SetProxy(string? strProxy, string? exceptions, int type)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
// set proxy for LAN
|
// set proxy for LAN
|
||||||
bool result = SetConnectionProxy(null, strProxy, exceptions, type);
|
bool result = SetConnectionProxy(null, strProxy, exceptions, type);
|
||||||
|
@ -39,6 +41,12 @@ namespace v2rayN.Handler
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logging.SaveLog(ex.Message, ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static bool SetConnectionProxy(string? connectionName, string? strProxy, string? exceptions, int type)
|
private static bool SetConnectionProxy(string? connectionName, string? strProxy, string? exceptions, int type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,30 +6,7 @@ namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
public static class SysProxyHandle
|
public static class SysProxyHandle
|
||||||
{
|
{
|
||||||
//private const string _userWininetConfigFile = "user-wininet.json";
|
private const string _regPath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings";
|
||||||
|
|
||||||
//private static string _queryStr;
|
|
||||||
|
|
||||||
// In general, this won't change
|
|
||||||
// format:
|
|
||||||
// <flags><CR-LF>
|
|
||||||
// <proxy-server><CR-LF>
|
|
||||||
// <bypass-list><CR-LF>
|
|
||||||
// <pac-url>
|
|
||||||
|
|
||||||
private enum RET_ERRORS : int
|
|
||||||
{
|
|
||||||
RET_NO_ERROR = 0,
|
|
||||||
INVALID_FORMAT = 1,
|
|
||||||
NO_PERMISSION = 2,
|
|
||||||
SYSCALL_FAILED = 3,
|
|
||||||
NO_MEMORY = 4,
|
|
||||||
INVAILD_OPTION_COUNT = 5,
|
|
||||||
};
|
|
||||||
|
|
||||||
static SysProxyHandle()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool UpdateSysProxy(Config config, bool forceDisable)
|
public static bool UpdateSysProxy(Config config, bool forceDisable)
|
||||||
{
|
{
|
||||||
|
@ -65,11 +42,17 @@ namespace v2rayN.Handler
|
||||||
.Replace("{http_port}", port.ToString())
|
.Replace("{http_port}", port.ToString())
|
||||||
.Replace("{socks_port}", portSocks.ToString());
|
.Replace("{socks_port}", portSocks.ToString());
|
||||||
}
|
}
|
||||||
ProxySetting.SetProxy(strProxy, strExceptions, 2); // set a named proxy
|
if (!ProxySetting.SetProxy(strProxy, strExceptions, 2))
|
||||||
|
{
|
||||||
|
SetProxy(strProxy, strExceptions, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == ESysProxyType.ForcedClear)
|
else if (type == ESysProxyType.ForcedClear)
|
||||||
{
|
{
|
||||||
ProxySetting.UnsetProxy(); // set to no proxy
|
if (!ProxySetting.UnsetProxy())
|
||||||
|
{
|
||||||
|
UnsetProxy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == ESysProxyType.Unchanged)
|
else if (type == ESysProxyType.Unchanged)
|
||||||
{
|
{
|
||||||
|
@ -78,7 +61,10 @@ namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
PacHandler.Start(Utils.GetConfigPath(), port, portPac);
|
PacHandler.Start(Utils.GetConfigPath(), port, portPac);
|
||||||
var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
|
var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
|
||||||
ProxySetting.SetProxy(strProxy, "", 4); // use pac script url for auto-config proxy
|
if (!ProxySetting.SetProxy(strProxy, "", 4))
|
||||||
|
{
|
||||||
|
SetProxy(strProxy, "", 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != ESysProxyType.Pac)
|
if (type != ESysProxyType.Pac)
|
||||||
|
@ -95,14 +81,38 @@ namespace v2rayN.Handler
|
||||||
|
|
||||||
public static void ResetIEProxy4WindowsShutDown()
|
public static void ResetIEProxy4WindowsShutDown()
|
||||||
{
|
{
|
||||||
try
|
SetProxy(null, null, 1);
|
||||||
{
|
|
||||||
//TODO To be verified
|
|
||||||
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
|
|
||||||
}
|
}
|
||||||
catch
|
|
||||||
|
private static void UnsetProxy()
|
||||||
{
|
{
|
||||||
|
SetProxy(null, null, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool SetProxy(string? strProxy, string? exceptions, int type)
|
||||||
|
{
|
||||||
|
if (type == 1)
|
||||||
|
{
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyEnable", 0);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyServer", string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyOverride", string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "AutoConfigURL", string.Empty);
|
||||||
|
}
|
||||||
|
if (type == 2)
|
||||||
|
{
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyEnable", 1);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyServer", strProxy ?? string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyOverride", exceptions ?? string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "AutoConfigURL", string.Empty);
|
||||||
|
}
|
||||||
|
else if (type == 4)
|
||||||
|
{
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyEnable", 0);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyServer", string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "ProxyOverride", string.Empty);
|
||||||
|
Utils.RegWriteValue(_regPath, "AutoConfigURL", strProxy ?? string.Empty);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue