diff --git a/v2rayN/v2rayN/Handler/ProxySetting.cs b/v2rayN/v2rayN/Common/ProxySetting.cs
similarity index 83%
rename from v2rayN/v2rayN/Handler/ProxySetting.cs
rename to v2rayN/v2rayN/Common/ProxySetting.cs
index 061ab88749..cab0763317 100644
--- a/v2rayN/v2rayN/Handler/ProxySetting.cs
+++ b/v2rayN/v2rayN/Common/ProxySetting.cs
@@ -1,10 +1,38 @@
using System.Runtime.InteropServices;
-using static v2rayN.Handler.ProxySetting.InternetConnectionOption;
+using static v2rayN.Common.ProxySetting.InternetConnectionOption;
-namespace v2rayN.Handler
+namespace v2rayN.Common
{
internal class ProxySetting
{
+ private const string _regPath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings";
+
+ private static bool SetProxyFallback(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;
+ }
+
///
// set to use no proxy
///
@@ -43,6 +71,7 @@ public static bool SetProxy(string? strProxy, string? exceptions, int type)
}
catch (Exception ex)
{
+ SetProxyFallback(strProxy, exceptions, type);
Logging.SaveLog(ex.Message, ex);
return false;
}
@@ -102,25 +131,25 @@ private static bool SetConnectionProxy(string? connectionName, string? strProxy,
}
else
{
- list.szConnection = IntPtr.Zero;
+ list.szConnection = nint.Zero;
}
list.dwOptionCount = options.Length;
list.dwOptionError = 0;
int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
// make a pointer out of all that ...
- IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length); // !! remember to deallocate memory 4
+ nint optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length); // !! remember to deallocate memory 4
// copy the array over into that spot in memory ...
for (int i = 0; i < options.Length; ++i)
{
if (Environment.Is64BitOperatingSystem)
{
- IntPtr opt = new(optionsPtr.ToInt64() + (i * optSize));
+ nint opt = new(optionsPtr.ToInt64() + i * optSize);
Marshal.StructureToPtr(options[i], opt, false);
}
else
{
- IntPtr opt = new(optionsPtr.ToInt32() + (i * optSize));
+ nint opt = new(optionsPtr.ToInt32() + i * optSize);
Marshal.StructureToPtr(options[i], opt, false);
}
}
@@ -128,11 +157,11 @@ private static bool SetConnectionProxy(string? connectionName, string? strProxy,
list.options = optionsPtr;
// and then make a pointer out of the whole list
- IntPtr ipcoListPtr = Marshal.AllocCoTaskMem(list.dwSize); // !! remember to deallocate memory 5
+ nint ipcoListPtr = Marshal.AllocCoTaskMem(list.dwSize); // !! remember to deallocate memory 5
Marshal.StructureToPtr(list, ipcoListPtr, false);
// and finally, call the API method!
- bool isSuccess = NativeMethods.InternetSetOption(IntPtr.Zero,
+ bool isSuccess = NativeMethods.InternetSetOption(nint.Zero,
InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
ipcoListPtr, list.dwSize);
int returnvalue = 0; // ERROR_SUCCESS
@@ -143,12 +172,12 @@ private static bool SetConnectionProxy(string? connectionName, string? strProxy,
else
{
// Notify the system that the registry settings have been changed and cause them to be refreshed
- NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
- NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
+ NativeMethods.InternetSetOption(nint.Zero, InternetOption.INTERNET_OPTION_SETTINGS_CHANGED, nint.Zero, 0);
+ NativeMethods.InternetSetOption(nint.Zero, InternetOption.INTERNET_OPTION_REFRESH, nint.Zero, 0);
}
// FREE the data ASAP
- if (list.szConnection != IntPtr.Zero) Marshal.FreeHGlobal(list.szConnection); // release mem 3
+ if (list.szConnection != nint.Zero) Marshal.FreeHGlobal(list.szConnection); // release mem 3
if (optionCount > 1)
{
Marshal.FreeHGlobal(options[1].m_Value.m_StringPtr); // release mem 1
@@ -212,12 +241,12 @@ private static IEnumerable EnumerateRasEntries()
public struct InternetPerConnOptionList
{
public int dwSize; // size of the INTERNET_PER_CONN_OPTION_LIST struct
- public IntPtr szConnection; // connection name to set/query options
+ public nint szConnection; // connection name to set/query options
public int dwOptionCount; // number of options to set/query
public int dwOptionError; // on error, which option failed
//[MarshalAs(UnmanagedType.)]
- public IntPtr options;
+ public nint options;
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
@@ -244,7 +273,7 @@ public struct InternetConnectionOptionValue
public int m_Int;
[FieldOffset(0)]
- public IntPtr m_StringPtr;
+ public nint m_StringPtr;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
@@ -316,7 +345,7 @@ internal static class NativeMethods
{
[DllImport("WinInet.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength);
+ public static extern bool InternetSetOption(nint hInternet, InternetOption dwOption, nint lpBuffer, int dwBufferLength);
[DllImport("Rasapi32.dll", CharSet = CharSet.Auto)]
public static extern uint RasEnumEntries(
diff --git a/v2rayN/v2rayN/Converters/DelayColorConverter.cs b/v2rayN/v2rayN/Converters/DelayColorConverter.cs
index b5c915651c..d65c67da31 100644
--- a/v2rayN/v2rayN/Converters/DelayColorConverter.cs
+++ b/v2rayN/v2rayN/Converters/DelayColorConverter.cs
@@ -11,7 +11,7 @@ public object Convert(object value, Type targetType, object parameter, System.Gl
if (delay <= 0)
return new SolidColorBrush(Colors.Red);
- if (delay <= 200)
+ if (delay <= 500)
return new SolidColorBrush(Colors.Green);
else
return new SolidColorBrush(Colors.IndianRed);
diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/Statistics/StatisticsHandler.cs
similarity index 99%
rename from v2rayN/v2rayN/Handler/StatisticsHandler.cs
rename to v2rayN/v2rayN/Handler/Statistics/StatisticsHandler.cs
index f99a461bec..a14a6dd889 100644
--- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs
+++ b/v2rayN/v2rayN/Handler/Statistics/StatisticsHandler.cs
@@ -1,6 +1,6 @@
using v2rayN.Models;
-namespace v2rayN.Handler
+namespace v2rayN.Handler.Statistics
{
internal class StatisticsHandler
{
diff --git a/v2rayN/v2rayN/Handler/StatisticsSingbox.cs b/v2rayN/v2rayN/Handler/Statistics/StatisticsSingbox.cs
similarity index 99%
rename from v2rayN/v2rayN/Handler/StatisticsSingbox.cs
rename to v2rayN/v2rayN/Handler/Statistics/StatisticsSingbox.cs
index d7a8b97e97..ee5aa5d316 100644
--- a/v2rayN/v2rayN/Handler/StatisticsSingbox.cs
+++ b/v2rayN/v2rayN/Handler/Statistics/StatisticsSingbox.cs
@@ -3,7 +3,7 @@
using v2rayN.Enums;
using v2rayN.Models;
-namespace v2rayN.Handler
+namespace v2rayN.Handler.Statistics
{
internal class StatisticsSingbox
{
diff --git a/v2rayN/v2rayN/Handler/StatisticsV2ray.cs b/v2rayN/v2rayN/Handler/Statistics/StatisticsV2ray.cs
similarity index 99%
rename from v2rayN/v2rayN/Handler/StatisticsV2ray.cs
rename to v2rayN/v2rayN/Handler/Statistics/StatisticsV2ray.cs
index 0be8a61728..b1aa91fdf9 100644
--- a/v2rayN/v2rayN/Handler/StatisticsV2ray.cs
+++ b/v2rayN/v2rayN/Handler/Statistics/StatisticsV2ray.cs
@@ -4,7 +4,7 @@
using v2rayN.Enums;
using v2rayN.Models;
-namespace v2rayN.Handler
+namespace v2rayN.Handler.Statistics
{
internal class StatisticsV2ray
{
diff --git a/v2rayN/v2rayN/Handler/SysProxyHandle.cs b/v2rayN/v2rayN/Handler/SysProxyHandle.cs
index 6bd261f914..075a46f54a 100644
--- a/v2rayN/v2rayN/Handler/SysProxyHandle.cs
+++ b/v2rayN/v2rayN/Handler/SysProxyHandle.cs
@@ -1,4 +1,5 @@
using PacLib;
+using v2rayN.Common;
using v2rayN.Enums;
using v2rayN.Models;
@@ -42,17 +43,11 @@ public static bool UpdateSysProxy(Config config, bool forceDisable)
.Replace("{http_port}", port.ToString())
.Replace("{socks_port}", portSocks.ToString());
}
- if (!ProxySetting.SetProxy(strProxy, strExceptions, 2))
- {
- SetProxy(strProxy, strExceptions, 2);
- }
+ ProxySetting.SetProxy(strProxy, strExceptions, 2);
}
else if (type == ESysProxyType.ForcedClear)
{
- if (!ProxySetting.UnsetProxy())
- {
- UnsetProxy();
- }
+ ProxySetting.UnsetProxy();
}
else if (type == ESysProxyType.Unchanged)
{
@@ -61,10 +56,7 @@ public static bool UpdateSysProxy(Config config, bool forceDisable)
{
PacHandler.Start(Utils.GetConfigPath(), port, portPac);
var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
- if (!ProxySetting.SetProxy(strProxy, "", 4))
- {
- SetProxy(strProxy, "", 4);
- }
+ ProxySetting.SetProxy(strProxy, "", 4);
}
if (type != ESysProxyType.Pac)
@@ -81,38 +73,7 @@ public static bool UpdateSysProxy(Config config, bool forceDisable)
public static void ResetIEProxy4WindowsShutDown()
{
- SetProxy(null, null, 1);
- }
-
- 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;
+ ProxySetting.UnsetProxy();
}
}
}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs
index ca93bf0581..db9f1c4c97 100644
--- a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs
+++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs
@@ -17,6 +17,7 @@
using v2rayN.Enums;
using v2rayN.Handler;
using v2rayN.Handler.Fmt;
+using v2rayN.Handler.Statistics;
using v2rayN.Models;
using v2rayN.Resx;
using v2rayN.Views;