Compare commits

..

5 Commits
4.33 ... 4.34

Author SHA1 Message Date
2dust
ba8f24d398 Update AssemblyInfo.cs 2022-03-02 19:50:17 +08:00
2dust
31b7857238 bug fix 2022-03-02 19:49:57 +08:00
2dust
fada5f99bb enable Security Protocol Tls13 option 2022-02-26 12:27:59 +08:00
2dust
734df5def5 Update subscription is to keep the same item 2022-02-25 19:05:54 +08:00
2dust
03ad07733f Refactor some code 2022-02-24 20:45:24 +08:00
22 changed files with 508 additions and 776 deletions

View File

@@ -1,17 +1,14 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
using v2rayN.Handler;
using v2rayN.HttpProxyHandler;
using v2rayN.Mode;
using v2rayN.Base;
using v2rayN.Tool;
using System.Diagnostics;
using System.Drawing;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Handler;
using v2rayN.Mode;
using v2rayN.Tool;
namespace v2rayN.Forms
{
@@ -125,11 +122,11 @@ namespace v2rayN.Forms
//HttpProxyHandle.CloseHttpAgent(config);
if (blWindowsShutDown)
{
HttpProxyHandle.ResetIEProxy4WindowsShutDown();
SysProxyHandle.ResetIEProxy4WindowsShutDown();
}
else
{
HttpProxyHandle.UpdateSysProxy(config, true);
SysProxyHandle.UpdateSysProxy(config, true);
}
ConfigHandler.SaveConfig(ref config);
@@ -1214,7 +1211,7 @@ namespace v2rayN.Forms
private void ChangePACButtonStatus(ESysProxyType type)
{
HttpProxyHandle.UpdateSysProxy(config, false);
SysProxyHandle.UpdateSysProxy(config, false);
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
{

View File

@@ -69,6 +69,7 @@
this.txtKcpmtu = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.tabPage7 = new System.Windows.Forms.TabPage();
this.chkEnableSecurityProtocolTls13 = new System.Windows.Forms.CheckBox();
this.chkEnableAutoAdjustMainLvColWidth = new System.Windows.Forms.CheckBox();
this.btnSetLoopback = new System.Windows.Forms.Button();
this.txtautoUpdateInterval = new System.Windows.Forms.TextBox();
@@ -376,6 +377,7 @@
// tabPage7
//
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Controls.Add(this.chkEnableSecurityProtocolTls13);
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
this.tabPage7.Controls.Add(this.btnSetLoopback);
this.tabPage7.Controls.Add(this.txtautoUpdateInterval);
@@ -392,6 +394,12 @@
this.tabPage7.Name = "tabPage7";
this.tabPage7.UseVisualStyleBackColor = true;
//
// chkEnableSecurityProtocolTls13
//
resources.ApplyResources(this.chkEnableSecurityProtocolTls13, "chkEnableSecurityProtocolTls13");
this.chkEnableSecurityProtocolTls13.Name = "chkEnableSecurityProtocolTls13";
this.chkEnableSecurityProtocolTls13.UseVisualStyleBackColor = true;
//
// chkEnableAutoAdjustMainLvColWidth
//
resources.ApplyResources(this.chkEnableAutoAdjustMainLvColWidth, "chkEnableAutoAdjustMainLvColWidth");
@@ -614,5 +622,6 @@
private System.Windows.Forms.Label label15;
private System.Windows.Forms.Button btnSetLoopback;
private System.Windows.Forms.CheckBox chkEnableAutoAdjustMainLvColWidth;
private System.Windows.Forms.CheckBox chkEnableSecurityProtocolTls13;
}
}

View File

@@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using v2rayN.Handler;
using v2rayN.Base;
using v2rayN.HttpProxyHandler;
using v2rayN.Mode;
using System.Diagnostics;
using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Handler;
using v2rayN.Mode;
namespace v2rayN.Forms
{
@@ -126,6 +124,7 @@ namespace v2rayN.Forms
cmbCoreType.SelectedIndex = (int)config.coreType;
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
chkEnableSecurityProtocolTls13.Checked = config.enableSecurityProtocolTls13;
}
private void btnOK_Click(object sender, EventArgs e)
{
@@ -310,6 +309,7 @@ namespace v2rayN.Forms
config.coreType = (ECoreType)cmbCoreType.SelectedIndex;
config.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
config.uiItem.enableAutoAdjustMainLvColWidth = chkEnableAutoAdjustMainLvColWidth.Checked;
config.enableSecurityProtocolTls13 = chkEnableSecurityProtocolTls13.Checked;
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -226,6 +226,9 @@
<data name="tabPage6.Text" xml:space="preserve">
<value> Core:KCP设置 </value>
</data>
<data name="chkEnableSecurityProtocolTls13.Text" xml:space="preserve">
<value>启用安全协议TLS v1.3 (订阅/检查更新/测速)</value>
</data>
<data name="chkEnableAutoAdjustMainLvColWidth.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 16</value>
</data>

View File

@@ -175,10 +175,7 @@ namespace v2rayN
/// Language
/// </summary>
public const string MyRegKeyLanguage = "CurrentLanguage";
/// <summary>
///
/// </summary>
public const string MyRegKeySecurityProtocolTls13 = "SecurityProtocolTls13";
/// <summary>
/// Icon
/// </summary>

View File

@@ -176,13 +176,14 @@ namespace v2rayN.Handler
VmessItem vmessItem = config.vmess[i];
UpgradeServerVersion(ref vmessItem);
if (string.IsNullOrEmpty(vmessItem.indexId))
if (Utils.IsNullOrEmpty(vmessItem.indexId))
{
vmessItem.indexId = Utils.GetGUID(false);
}
}
}
LazyConfig.Instance.SetConfig(ref config);
return 0;
}
@@ -297,7 +298,8 @@ namespace v2rayN.Handler
sni = config.vmess[index].sni
};
config.vmess.Insert(index + 1, vmessItem); // 插入到下一项
//config.vmess.Insert(index + 1, vmessItem); // 插入到下一项
AddServerCommon(ref config, vmessItem);
ToJsonFile(config);
@@ -723,6 +725,15 @@ namespace v2rayN.Handler
{
return -1;
}
var indexId = config.indexId();
//copy sub items
List<VmessItem> lstOriSub = null;
if (!Utils.IsNullOrEmpty(subid))
{
lstOriSub = config.vmess.Where(it => it.subid == subid).ToList();
RemoveServerViaSubid(ref config, subid);
}
//if (clipboardData.IndexOf("vmess") >= 0 && clipboardData.IndexOf("vmess") == clipboardData.LastIndexOf("vmess"))
//{
// clipboardData = clipboardData.Replace("\r\n", "").Replace("\n", "");
@@ -734,7 +745,7 @@ namespace v2rayN.Handler
foreach (string str in arrData)
{
//maybe sub
if (string.IsNullOrEmpty(subid) && (str.StartsWith(Global.httpsProtocol) || str.StartsWith(Global.httpProtocol)))
if (Utils.IsNullOrEmpty(subid) && (str.StartsWith(Global.httpsProtocol) || str.StartsWith(Global.httpProtocol)))
{
if (AddSubItem(ref config, str) == 0)
{
@@ -747,7 +758,18 @@ namespace v2rayN.Handler
{
continue;
}
vmessItem.subid = subid;
//exist sub items
if (!Utils.IsNullOrEmpty(subid))
{
var existItem = lstOriSub?.FirstOrDefault(t => CompareVmessItem(t, vmessItem, true));
if (existItem != null)
{
vmessItem = existItem;
}
vmessItem.subid = subid;
}
if (vmessItem.configType == (int)EConfigType.Vmess)
{
if (AddServer(ref config, vmessItem, -1, false) == 0)
@@ -784,6 +806,9 @@ namespace v2rayN.Handler
}
}
}
SetIndex(ref config, indexId);
ToJsonFile(config);
return countServers;
}
@@ -954,31 +979,15 @@ namespace v2rayN.Handler
{
var indexId = config.indexId();
List<Mode.VmessItem> source = config.vmess;
List<VmessItem> source = config.vmess;
bool keepOlder = config.keepOlderDedupl;
List<Mode.VmessItem> list = new List<Mode.VmessItem>();
List<VmessItem> list = new List<VmessItem>();
if (!keepOlder) source.Reverse(); // Remove the early items first
bool _isAdded(Mode.VmessItem o, Mode.VmessItem n)
foreach (VmessItem item in source)
{
return o.configVersion == n.configVersion &&
o.configType == n.configType &&
o.address == n.address &&
o.port == n.port &&
o.id == n.id &&
o.alterId == n.alterId &&
o.security == n.security &&
o.network == n.network &&
o.headerType == n.headerType &&
o.requestHost == n.requestHost &&
o.path == n.path &&
o.streamSecurity == n.streamSecurity;
// skip (will remove) different remarks
}
foreach (Mode.VmessItem item in source)
{
if (!list.Exists(i => _isAdded(i, item)))
if (!list.Exists(i => CompareVmessItem(i, item, false)))
{
list.Add(item);
}
@@ -993,7 +1002,10 @@ namespace v2rayN.Handler
public static int AddServerCommon(ref Config config, VmessItem vmessItem)
{
vmessItem.indexId = Utils.GetGUID(false);
if (Utils.IsNullOrEmpty(vmessItem.indexId))
{
vmessItem.indexId = Utils.GetGUID(false);
}
vmessItem.configVersion = 2;
if (Utils.IsNullOrEmpty(vmessItem.allowInsecure))
{
@@ -1040,6 +1052,29 @@ namespace v2rayN.Handler
return 0;
}
private static bool CompareVmessItem(VmessItem o, VmessItem n, bool remarks)
{
if (o == null || n == null)
{
return false;
}
return o.configVersion == n.configVersion
&& o.configType == n.configType
&& o.address == n.address
&& o.port == n.port
&& o.id == n.id
&& o.alterId == n.alterId
&& o.security == n.security
&& o.network == n.network
&& o.headerType == n.headerType
&& o.requestHost == n.requestHost
&& o.path == n.path
&& o.streamSecurity == n.streamSecurity
&& o.flow == n.flow
&& (remarks ? o.remarks == n.remarks : true);
}
#endregion
#region UI

View File

@@ -37,7 +37,7 @@ namespace v2rayN.Handler
WebClientEx ws = new WebClientEx();
try
{
Utils.SetSecurityProtocol();
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
progressPercentage = -1;
@@ -136,7 +136,7 @@ namespace v2rayN.Handler
string source = string.Empty;
try
{
Utils.SetSecurityProtocol();
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
WebClientEx ws = new WebClientEx();
if (webProxy != null)
@@ -187,7 +187,7 @@ namespace v2rayN.Handler
string source = string.Empty;
try
{
Utils.SetSecurityProtocol();
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
WebClientEx ws = new WebClientEx();
@@ -205,7 +205,7 @@ namespace v2rayN.Handler
WebClientEx ws = new WebClientEx();
try
{
Utils.SetSecurityProtocol();
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
progressPercentage = -1;

View File

@@ -0,0 +1,24 @@
using System;
using v2rayN.Mode;
namespace v2rayN.Handler
{
public sealed class LazyConfig
{
private static readonly Lazy<LazyConfig> _instance = new Lazy<LazyConfig>(() => new LazyConfig());
private Config _config;
public static LazyConfig Instance
{
get { return _instance.Value; }
}
public void SetConfig(ref Config config)
{
_config = config;
}
public Config GetConfig()
{
return _config;
}
}
}

View File

@@ -9,9 +9,9 @@ using v2rayN.Mode;
namespace v2rayN.Handler
{
class MainFormHandler
public sealed class MainFormHandler
{
private static MainFormHandler instance;
private static readonly Lazy<MainFormHandler> instance = new Lazy<MainFormHandler>(() => new MainFormHandler());
Action<bool, string> _updateUI;
//private DownloadHandle downloadHandle2;
@@ -22,16 +22,8 @@ namespace v2rayN.Handler
//Action<int, string> _updateFunc;
public static MainFormHandler Instance
{
get
{
if (instance == null)
{
instance = new MainFormHandler();
}
return instance;
}
get { return instance.Value; }
}
public Icon GetNotifyIcon(Config config, Icon def)
{
try

View File

@@ -2,7 +2,7 @@
using System;
using System.Runtime.InteropServices;
namespace v2rayN.HttpProxyHandler
namespace v2rayN.Handler
{
class ProxySetting
{

View File

@@ -8,7 +8,7 @@ using v2rayN.Mode;
using v2rayN.Properties;
using v2rayN.Tool;
namespace v2rayN.HttpProxyHandler
namespace v2rayN.Handler
{
public static class SysProxyHandle
{
@@ -47,6 +47,56 @@ namespace v2rayN.HttpProxyHandler
}
}
public static bool UpdateSysProxy(Config config, bool forceDisable)
{
var type = config.sysProxyType;
if (forceDisable && type == ESysProxyType.ForcedChange)
{
type = ESysProxyType.ForcedClear;
}
try
{
Global.httpPort = config.GetLocalPort(Global.InboundHttp);
int port = Global.httpPort;
if (port <= 0)
{
return false;
}
if (type == ESysProxyType.ForcedChange)
{
var strExceptions = $"{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}";
SetIEProxy(true, $"{Global.Loopback}:{port}", strExceptions);
}
else if (type == ESysProxyType.ForcedClear)
{
ResetIEProxy();
}
else if (type == ESysProxyType.Unchanged)
{
}
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
}
return true;
}
public static void ResetIEProxy4WindowsShutDown()
{
try
{
//TODO To be verified
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
}
catch
{
}
}
public static void SetIEProxy(bool enable, bool global, string strProxy)
{
//Read();

View File

@@ -204,8 +204,8 @@ namespace v2rayN.Handler
return;
}
ConfigHandler.RemoveServerViaSubid(ref config, id);
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
//ConfigHandler.RemoveServerViaSubid(ref config, id);
//_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
// RefreshServers();
int ret = MainFormHandler.Instance.AddBatchServers(config, result, id);
if (ret > 0)
@@ -293,7 +293,7 @@ namespace v2rayN.Handler
{
try
{
Utils.SetSecurityProtocol();
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
WebRequestHandler webRequestHandler = new WebRequestHandler
{
AllowAutoRedirect = false

View File

@@ -1,199 +0,0 @@
using System;
using v2rayN.Mode;
namespace v2rayN.HttpProxyHandler
{
/// <summary>
/// 系统代理(http)模式
/// </summary>
public enum ListenerType
{
noHttpProxy = 0,
GlobalHttp = 1,
HttpOpenAndClear = 2,
HttpOpenOnly = 3,
}
/// <summary>
/// 系统代理(http)总处理
/// 启动privoxy提供http协议
/// 设置IE系统代理
/// </summary>
class HttpProxyHandle
{
private static bool Update(Config config, bool forceDisable)
{
// ListenerType type = config.listenerType;
var type = ListenerType.noHttpProxy;
if (forceDisable)
{
type = ListenerType.noHttpProxy;
}
try
{
if (type != ListenerType.noHttpProxy)
{
int port = Global.httpPort;
if (port <= 0)
{
return false;
}
if (type == ListenerType.GlobalHttp)
{
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
}
else if (type == ListenerType.HttpOpenAndClear)
{
SysProxyHandle.ResetIEProxy();
}
else if (type == ListenerType.HttpOpenOnly)
{
//SysProxyHandle.ResetIEProxy();
}
}
else
{
SysProxyHandle.ResetIEProxy();
}
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
}
return true;
}
/// <summary>
/// 启用系统代理(http)
/// </summary>
/// <param name="config"></param>
private static void StartHttpAgent(Config config)
{
try
{
int localPort = config.GetLocalPort(Global.InboundSocks);
if (localPort > 0)
{
PrivoxyHandler.Instance.Restart(localPort, config);
if (PrivoxyHandler.Instance.RunningPort > 0)
{
Global.sysAgent = true;
Global.socksPort = localPort;
Global.httpPort = PrivoxyHandler.Instance.RunningPort;
}
}
}
catch
{
}
}
/// <summary>
/// 关闭系统代理
/// </summary>
/// <param name="config"></param>
public static void CloseHttpAgent(Config config)
{
try
{
//if (config.listenerType != ListenerType.HttpOpenOnly)
//{
// Update(config, true);
//}
PrivoxyHandler.Instance.Stop();
Global.sysAgent = false;
Global.socksPort = 0;
Global.httpPort = 0;
}
catch
{
}
}
/// <summary>
/// 重启系统代理(http)
/// </summary>
/// <param name="config"></param>
/// <param name="forced"></param>
public static void RestartHttpAgent(Config config, bool forced)
{
bool isRestart = false;
//if (config.listenerType == ListenerType.noHttpProxy)
//{
// // 关闭http proxy时直接返回
// return;
//}
//强制重启或者socks端口变化
if (forced)
{
isRestart = true;
}
else
{
int localPort = config.GetLocalPort(Global.InboundSocks);
if (localPort != Global.socksPort)
{
isRestart = true;
}
}
if (isRestart)
{
CloseHttpAgent(config);
StartHttpAgent(config);
}
Update(config, false);
}
public static bool UpdateSysProxy(Config config, bool forceDisable)
{
var type = config.sysProxyType;
if (forceDisable && type == ESysProxyType.ForcedChange)
{
type = ESysProxyType.ForcedClear;
}
try
{
Global.httpPort = config.GetLocalPort(Global.InboundHttp);
int port = Global.httpPort;
if (port <= 0)
{
return false;
}
if (type == ESysProxyType.ForcedChange)
{
var strExceptions = $"{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}";
SysProxyHandle.SetIEProxy(true, $"{Global.Loopback}:{port}", strExceptions);
}
else if (type == ESysProxyType.ForcedClear)
{
SysProxyHandle.ResetIEProxy();
}
else if (type == ESysProxyType.Unchanged)
{
}
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
}
return true;
}
public static void ResetIEProxy4WindowsShutDown()
{
try
{
//TODO To be verified
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
}
catch
{
}
}
}
}

View File

@@ -1,194 +0,0 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using v2rayN.Mode;
using v2rayN.Properties;
using v2rayN.Tool;
namespace v2rayN.HttpProxyHandler
{
/// <summary>
/// Privoxy处理类提供http协议代理
/// </summary>
class PrivoxyHandler
{
/// <summary>
/// 单例
/// </summary>
private static PrivoxyHandler instance;
private static int _uid;
private static string _uniqueConfigFile;
private Process _process;
private static string _privoxyName = "v2ray_privoxy";
static PrivoxyHandler()
{
try
{
_uid = Application.StartupPath.GetHashCode();
_uniqueConfigFile = string.Format("privoxy_{0}.conf", _uid);
FileManager.UncompressFile(Utils.GetTempPath($"{_privoxyName}.exe"), Resources.privoxy_exe);
}
catch (IOException ex)
{
Utils.SaveLog(ex.Message, ex);
}
}
/// <summary>
/// 单例
/// </summary>
public static PrivoxyHandler Instance
{
get
{
if (instance == null)
{
instance = new PrivoxyHandler();
}
return instance;
}
}
public int RunningPort
{
get; set;
}
public void Restart(int localPort, Config config)
{
Stop();
Start(localPort, config);
}
public void Start(int localPort, Config config)
{
try
{
if (_process == null)
{
string privoxyConfig = "";//Resources.privoxy_conf;
RunningPort = config.GetLocalPort(Global.InboundHttp);
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
if (config.allowLANConn)
{
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0");
}
else
{
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", Global.Loopback);
}
FileManager.ByteArrayToFile(Utils.GetTempPath(_uniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig));
_process = new Process
{
// Configure the process using the StartInfo properties.
StartInfo =
{
FileName = $"{_privoxyName}.exe",
Arguments = _uniqueConfigFile,
WorkingDirectory = Utils.GetTempPath(),
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true,
CreateNoWindow = true
}
};
_process.Start();
/*
* Add this process to job obj associated with this ss process, so that
* when ss exit unexpectedly, this process will be forced killed by system.
*/
Global.processJob.AddProcess(_process.Handle);
}
}
catch (Exception ex)
{
RunningPort = 0;
Utils.SaveLog(ex.Message, ex);
}
}
public void Stop()
{
if (_process != null)
{
KillProcess(_process);
_process.Dispose();
_process = null;
RunningPort = 0;
}
else
{
Process[] existingPrivoxy = Process.GetProcessesByName(_privoxyName);
foreach (Process p in existingPrivoxy.Where(IsChildProcess))
{
KillProcess(p);
}
}
}
private static void KillProcess(Process p)
{
try
{
p.CloseMainWindow();
p.WaitForExit(100);
if (!p.HasExited)
{
p.Kill();
p.WaitForExit(100);
}
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
}
}
/*
* We won't like to kill other ss instances' v2ray_privoxy.exe.
* This function will check whether the given process is created
* by this process by checking the module path or command line.
*
* Since it's required to put ss in different dirs to run muti instances,
* different instance will create their unique "privoxy_UID.conf" where
* UID is hash of ss's location.
*/
private static bool IsChildProcess(Process process)
{
try
{
/*
* Under PortableMode, we could identify it by the path of v2ray_privoxy.exe.
*/
string path = process.MainModule.FileName;
return Utils.GetTempPath($"{_privoxyName}.exe").Equals(path);
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
/*
* Sometimes Process.GetProcessesByName will return some processes that
* are already dead, and that will cause exceptions here.
* We could simply ignore those exceptions.
*/
//Logging.LogUsefulException(ex);
return false;
}
}
}
}

View File

@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using v2rayN.Base;
using v2rayN.HttpProxyHandler;
namespace v2rayN.Mode
@@ -12,13 +11,7 @@ namespace v2rayN.Mode
[Serializable]
public class Config
{
/// <summary>
/// 本地监听
/// </summary>
public List<InItem> inbound
{
get; set;
}
#region property
/// <summary>
/// 允许日志
@@ -44,14 +37,6 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// vmess服务器信息
/// </summary>
public List<VmessItem> vmess
{
get; set;
}
/// <summary>
/// 允许Mux多路复用
/// </summary>
@@ -60,14 +45,6 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// KcpItem
/// </summary>
public KcpItem kcpItem
{
get; set;
}
/// <summary>
///
/// </summary>
@@ -108,7 +85,6 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// 自定义远程DNS
/// </summary>
@@ -125,20 +101,6 @@ namespace v2rayN.Mode
get; set;
}
/// <summary>
/// 订阅
/// </summary>
public List<SubItem> subItem
{
get; set;
}
/// <summary>
/// UI
/// </summary>
public UIItem uiItem
{
get; set;
}
/// <summary>
/// 域名解析策略
/// </summary>
@@ -154,10 +116,6 @@ namespace v2rayN.Mode
{
get; set;
}
public List<RoutingItem> routings
{
get; set;
}
public bool enableRoutingAdvanced
{
get; set;
@@ -185,11 +143,66 @@ namespace v2rayN.Mode
get; set;
} = 0;
public bool enableSecurityProtocolTls13
{
get; set;
}
#endregion
#region other entities
/// <summary>
/// 本地监听
/// </summary>
public List<InItem> inbound
{
get; set;
}
/// <summary>
/// vmess服务器信息
/// </summary>
public List<VmessItem> vmess
{
get; set;
}
/// <summary>
/// KcpItem
/// </summary>
public KcpItem kcpItem
{
get; set;
}
/// <summary>
/// 订阅
/// </summary>
public List<SubItem> subItem
{
get; set;
}
/// <summary>
/// UI
/// </summary>
public UIItem uiItem
{
get; set;
}
public List<RoutingItem> routings
{
get; set;
}
public ConstItem constItem
{
get; set;
}
#region
#endregion
#region function
public string address()
{
@@ -391,6 +404,7 @@ namespace v2rayN.Mode
}
return vmess.FindIndex(it => it.indexId == indexId);
}
#endregion
}

View File

@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
// 方法是按如下所示使用“*”:
//[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("4.33")]
[assembly: AssemblyFileVersion("4.34")]

View File

@@ -47,8 +47,8 @@ namespace v2rayN.Properties {
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@@ -120,16 +120,6 @@ namespace v2rayN.Properties {
}
}
/// <summary>
/// 查找 System.Byte[] 类型的本地化资源。
/// </summary>
internal static byte[] privoxy_exe {
get {
object obj = ResourceManager.GetObject("privoxy_exe", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>

View File

@@ -118,9 +118,6 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="privoxy_exe" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\privoxy.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="about" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\about.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

View File

@@ -715,11 +715,9 @@ namespace v2rayN
return lstIPAddress;
}
public static void SetSecurityProtocol()
public static void SetSecurityProtocol(bool enableSecurityProtocolTls13)
{
string securityProtocolTls13 = RegReadValue(Global.MyRegPath, Global.MyRegKeySecurityProtocolTls13, "0");
if (securityProtocolTls13.Equals("1"))
if (enableSecurityProtocolTls13)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls

View File

@@ -149,6 +149,7 @@
<Compile Include="Forms\ServerTransportControl.Designer.cs">
<DependentUpon>ServerTransportControl.cs</DependentUpon>
</Compile>
<Compile Include="Handler\LazyConfig.cs" />
<Compile Include="Handler\ShareHandler.cs" />
<Compile Include="Handler\UpdateHandle.cs" />
<Compile Include="Mode\ComboItem.cs" />
@@ -198,13 +199,11 @@
<Compile Include="Handler\SpeedtestHandler.cs" />
<Compile Include="Handler\StatisticsHandler.cs" />
<Compile Include="Handler\DownloadHandle.cs" />
<Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
<Compile Include="HttpProxyHandler\ProxySetting.cs" />
<Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
<Compile Include="Handler\ProxySetting.cs" />
<Compile Include="Base\WebClientEx.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="HttpProxyHandler\SysProxyHandle.cs" />
<Compile Include="Handler\SysProxyHandle.cs" />
<Compile Include="Mode\ECoreType.cs" />
<Compile Include="Mode\ESysProxyType.cs" />
<Compile Include="Mode\EMove.cs" />
@@ -466,7 +465,6 @@
<EmbeddedResource Include="Sample\SampleServerConfig.txt" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\privoxy.exe.gz" />
<None Include="Resources\restart.png" />
</ItemGroup>
<ItemGroup>