Compare commits

...

66 Commits
5.15 ... 5.27

Author SHA1 Message Date
2dust
e4fa729071 Update AssemblyInfo.cs 2022-06-26 09:09:38 +08:00
2dust
b3e7eac895 Parse ss plugin obfs-host 2022-06-24 14:25:09 +08:00
2dust
c43675d987 Sort by test result 2022-06-24 13:56:01 +08:00
2dust
cdaff66126 add rule object doc 2022-06-24 09:54:52 +08:00
2dust
cf45e89b16 Support update clash core 2022-06-24 09:32:55 +08:00
2dust
aec8459761 Revert "Delete v2rayN.csproj"
This reverts commit 25c2871888.
2022-06-23 15:23:41 +08:00
2dust
de746375a9 Merge pull request #2417 from EdiWang/en-translation
Fix English translations
2022-06-23 15:21:07 +08:00
2dust
25c2871888 Delete v2rayN.csproj 2022-06-23 15:20:49 +08:00
2dust
28b2e1a405 Merge pull request #2415 from EdiWang/master
C# language usage improvements
2022-06-23 15:20:18 +08:00
Edi Wang
2603132dae fix English translations 2022-06-22 10:25:19 +08:00
Edi Wang
6f08cb0e88 C sharp language usage improvements 2022-06-22 09:48:00 +08:00
2dust
dd65c3fcaa ss supports transport settings 2022-06-19 20:43:33 +08:00
2dust
fec8641efe Update AssemblyInfo.cs 2022-06-12 19:36:36 +08:00
2dust
d5eaa56b60 refactor update core url 2022-06-06 17:28:38 +08:00
2dust
db7e8dd6dc Update MainFormHandler.cs 2022-06-06 15:10:09 +08:00
2dust
9415055e6f Timeout to 30s 2022-06-05 20:24:08 +08:00
2dust
f597f09914 Support 2022-blake3 share 2022-05-31 14:53:39 +08:00
2dust
7903228c13 Update AssemblyInfo.cs 2022-05-29 18:29:03 +08:00
2dust
4c2388749d add Shadowsocks-2022 for xray-core 2022-05-29 18:28:44 +08:00
2dust
89da3823a4 Update AssemblyInfo.cs 2022-05-29 09:40:34 +08:00
2dust
3a9a49b163 Update MsgFilterSetForm.Designer.cs 2022-05-29 09:40:31 +08:00
2dust
277b21dc86 add server filter 2022-05-29 09:32:31 +08:00
2dust
bc0e8c17ba refactor Move To menu 2022-05-29 08:43:05 +08:00
2dust
51d3df69bb refactor Move To menu 2022-05-29 08:42:22 +08:00
2dust
4913f6f37d rename 2022-05-29 08:33:25 +08:00
2dust
ff622e2ef6 Update v2rayN.csproj 2022-05-29 08:14:16 +08:00
2dust
50ad643abe Update Utils.cs 2022-05-12 09:50:48 +08:00
2dust
944849a381 v2ray_win_temp 2 guiTemp 2022-05-12 09:49:04 +08:00
2dust
6f485141f0 Improve speed test core support 2022-05-12 09:19:03 +08:00
2dust
3575291119 add multiple program auto run 2022-05-12 08:52:40 +08:00
2dust
e256ec5401 Update ConfigHandler.cs 2022-05-06 14:37:52 +08:00
2dust
3defba6290 Update ConfigHandler.cs 2022-05-06 13:35:30 +08:00
2dust
c201d986c5 Update AssemblyInfo.cs 2022-05-06 13:33:29 +08:00
2dust
36aad4424e Fix issue when saving gui config 2022-05-06 10:54:10 +08:00
2dust
b29fb1e2a3 add shadowsocks SIP008 https://shadowsocks.org/en/wiki/SIP008-Online-Configuration-Delivery.html 2022-05-02 20:15:19 +08:00
2dust
d5aa307efb Update AssemblyInfo.cs 2022-05-01 16:22:54 +08:00
2dust
48928613bf bug fix 2022-05-01 09:08:16 +08:00
2dust
52b8f480f6 Fix issue when saving gui config 2022-04-30 08:32:42 +08:00
2dust
bcda8bd602 Update subscription timeout is set to 30 seconds 2022-04-30 08:32:26 +08:00
2dust
2a11fe11e8 Fix issue when saving gui config 2022-04-29 10:58:51 +08:00
2dust
7ec0607fec Update AssemblyInfo.cs 2022-04-27 20:47:38 +08:00
2dust
aa41a8675e Advanced proxy settings, protocol selection (optional) 2022-04-27 20:46:07 +08:00
2dust
19f9bff6fe Support hysteria and naiveproxy subscription 2022-04-27 09:31:38 +08:00
2dust
4e65732a4e Update AssemblyInfo.cs 2022-04-26 20:06:46 +08:00
2dust
47c843bf09 Enable system proxy advanced settings, use socks protocol 2022-04-26 20:06:21 +08:00
2dust
a7741a0b7d Improve notify icon 2022-04-26 14:51:06 +08:00
2dust
6f3fbdfe17 Update AssemblyInfo.cs 2022-04-25 20:27:22 +08:00
2dust
3be93df63f bug fix 2022-04-25 19:07:09 +08:00
2dust
6259539c87 Enable system agent advanced settings 2022-04-25 18:56:09 +08:00
2dust
9654009650 Update HttpClientHelper.cs 2022-04-25 13:24:10 +08:00
2dust
62e796cf5a Update UpdateHandle.cs 2022-04-19 15:54:51 +08:00
2dust
af820bb0f2 Update AssemblyInfo.cs 2022-04-18 19:01:17 +08:00
2dust
8f5bb3591b Improve clone custom configuration 2022-04-18 18:59:41 +08:00
2dust
7eafae98d4 Turn off system proxy when not using proxy to update subscriptions 2022-04-18 18:59:01 +08:00
2dust
1d4e5baafb Domain and IP are automatically sorted when saving 2022-04-18 18:57:56 +08:00
2dust
9894aa053f Update AssemblyInfo.cs 2022-04-17 19:05:11 +08:00
2dust
4ada8fea27 add tray menu servers limit 2022-04-17 19:01:18 +08:00
2dust
4d013a206b Update MainMsgControl.zh-Hans.resx 2022-04-15 20:49:14 +08:00
2dust
2d8a707bed fix bug 2022-04-14 20:08:35 +08:00
2dust
0e55a859ea Update AssemblyInfo.cs 2022-04-14 18:30:15 +08:00
2dust
0b1ec520f4 fix 2022-04-14 17:01:51 +08:00
2dust
fcc5f29882 add auto update sub setting 2022-04-14 16:49:12 +08:00
2dust
d431c63245 Merge pull request #2192 from FrzMtrsprt/patch-1
Add support for Clash's modern CPU executable
2022-04-14 15:08:08 +08:00
FrzMtrsprt
15f8db64e7 Add support for Clash's modern CPU executable
Add support for clash-windows-amd64-v3.exe
2022-04-14 12:13:22 +08:00
2dust
c2ea14151e add naiveproxy 2022-04-14 11:10:06 +08:00
2dust
977f0428e2 Refactor Inbound 2022-04-14 09:56:11 +08:00
65 changed files with 4450 additions and 4584 deletions

View File

@@ -56,7 +56,7 @@ namespace v2rayN.Base
}
return null;
}
public async Task<string> GetAsync(HttpClient client, string url)
public async Task<string> GetAsync(HttpClient client, string url, CancellationToken token)
{
if (string.IsNullOrEmpty(url))
{
@@ -64,10 +64,7 @@ namespace v2rayN.Base
}
try
{
var cts = new CancellationTokenSource();
cts.CancelAfter(5000);
HttpResponseMessage response = await client.GetAsync(url, cts.Token);
HttpResponseMessage response = await client.GetAsync(url, token);
return await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
@@ -162,7 +159,7 @@ namespace v2rayN.Base
}
}
public async Task DownloadDataAsync4Speed(HttpClient client, string url, IProgress<double> progress, CancellationToken token)
public async Task DownloadDataAsync4Speed(HttpClient client, string url, IProgress<string> progress, CancellationToken token)
{
if (string.IsNullOrEmpty(url))
{
@@ -176,15 +173,15 @@ namespace v2rayN.Base
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
}
var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;
var canReportProgress = total != -1 && progress != null;
//var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;
//var canReportProgress = total != -1 && progress != null;
using (var stream = await response.Content.ReadAsStreamAsync())
{
var totalRead = 0L;
var buffer = new byte[1024 * 64];
var isMoreToRead = true;
var progressPercentage = 0;
string progressSpeed = string.Empty;
DateTime totalDatetime = DateTime.Now;
do
@@ -215,14 +212,13 @@ namespace v2rayN.Base
// TODO:
totalRead += read;
if (canReportProgress)
TimeSpan ts = (DateTime.Now - totalDatetime);
var speed = (totalRead * 1d / ts.TotalMilliseconds / 1000).ToString("#0.0");
if (progress != null)
{
TimeSpan ts = (DateTime.Now - totalDatetime);
var speed = totalRead * 1d / ts.TotalMilliseconds / 1000;
var percent = Convert.ToInt32((totalRead * 1d) / (total * 1d) * 100);
if (progressPercentage != percent)
if (progressSpeed != speed)
{
progressPercentage = percent;
progressSpeed = speed;
progress.Report(speed);
}
}

View File

@@ -16,37 +16,37 @@ namespace v2rayN.Base
UpdateStyles();
}
public void RegisterDragEvent(Action<int, int> _update)
public void RegisterDragEvent(Action<int, int> update)
{
_updateFunc = _update;
this.AllowDrop = true;
_updateFunc = update;
AllowDrop = true;
this.ItemDrag += new ItemDragEventHandler(this.lv_ItemDrag);
this.DragDrop += new DragEventHandler(this.lv_DragDrop);
this.DragEnter += new DragEventHandler(this.lv_DragEnter);
this.DragOver += new DragEventHandler(this.lv_DragOver);
this.DragLeave += new EventHandler(this.lv_DragLeave);
ItemDrag += lv_ItemDrag;
DragDrop += lv_DragDrop;
DragEnter += lv_DragEnter;
DragOver += lv_DragOver;
DragLeave += lv_DragLeave;
}
private void lv_DragDrop(object sender, DragEventArgs e)
{
int targetIndex = this.InsertionMark.Index;
int targetIndex = InsertionMark.Index;
if (targetIndex == -1)
{
return;
}
if (this.InsertionMark.AppearsAfterItem)
if (InsertionMark.AppearsAfterItem)
{
targetIndex++;
}
if (this.SelectedIndices.Count <= 0)
if (SelectedIndices.Count <= 0)
{
return;
}
_updateFunc(this.SelectedIndices[0], targetIndex);
_updateFunc(SelectedIndices[0], targetIndex);
//ListViewItem draggedItem = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
//this.BeginUpdate();
@@ -63,35 +63,35 @@ namespace v2rayN.Base
private void lv_DragLeave(object sender, EventArgs e)
{
this.InsertionMark.Index = -1;
InsertionMark.Index = -1;
}
private void lv_DragOver(object sender, DragEventArgs e)
{
Point targetPoint = this.PointToClient(new Point(e.X, e.Y));
int targetIndex = this.InsertionMark.NearestIndex(targetPoint);
Point targetPoint = PointToClient(new Point(e.X, e.Y));
int targetIndex = InsertionMark.NearestIndex(targetPoint);
if (targetIndex > -1)
{
Rectangle itemBounds = this.GetItemRect(targetIndex);
this.EnsureVisible(targetIndex);
Rectangle itemBounds = GetItemRect(targetIndex);
EnsureVisible(targetIndex);
if (targetPoint.Y > itemBounds.Top + (itemBounds.Height / 2))
{
this.InsertionMark.AppearsAfterItem = true;
InsertionMark.AppearsAfterItem = true;
}
else
{
this.InsertionMark.AppearsAfterItem = false;
InsertionMark.AppearsAfterItem = false;
}
}
this.InsertionMark.Index = targetIndex;
InsertionMark.Index = targetIndex;
}
private void lv_ItemDrag(object sender, ItemDragEventArgs e)
{
this.DoDragDrop(e.Item, DragDropEffects.Move);
this.InsertionMark.Index = -1;
DoDragDrop(e.Item, DragDropEffects.Move);
InsertionMark.Index = -1;
}
}
}

View File

@@ -22,6 +22,7 @@ namespace v2rayN.Forms
cmbCoreType.Items.Add("clash");
cmbCoreType.Items.Add("clash_meta");
cmbCoreType.Items.Add("hysteria");
cmbCoreType.Items.Add("naiveproxy");
cmbCoreType.Items.Add(string.Empty);
txtAddress.ReadOnly = true;
@@ -31,8 +32,10 @@ namespace v2rayN.Forms
}
else
{
vmessItem = new VmessItem();
vmessItem.groupId = groupId;
vmessItem = new VmessItem
{
groupId = groupId
};
ClearServer();
}
}
@@ -45,14 +48,7 @@ namespace v2rayN.Forms
txtRemarks.Text = vmessItem.remarks;
txtAddress.Text = vmessItem.address;
if (vmessItem.coreType == null)
{
cmbCoreType.Text = string.Empty;
}
else
{
cmbCoreType.Text = vmessItem.coreType.ToString();
}
cmbCoreType.Text = vmessItem.coreType == null ? string.Empty : vmessItem.coreType.ToString();
}
@@ -89,7 +85,7 @@ namespace v2rayN.Forms
if (ConfigHandler.EditCustomServer(ref config, vmessItem) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -99,14 +95,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
if (Utils.IsNullOrEmpty(vmessItem.indexId))
{
this.DialogResult = DialogResult.Cancel;
}
else
{
this.DialogResult = DialogResult.OK;
}
DialogResult = Utils.IsNullOrEmpty(vmessItem.indexId) ? DialogResult.Cancel : DialogResult.OK;
}
private void btnBrowse_Click(object sender, EventArgs e)
@@ -151,7 +140,7 @@ namespace v2rayN.Forms
return;
}
address = Path.Combine(Utils.GetConfigPath(), address);
address = Utils.GetConfigPath(address);
Process.Start(address);
}
}

View File

@@ -16,7 +16,7 @@ namespace v2rayN.Forms
private void AddServerForm_Load(object sender, EventArgs e)
{
this.Text = (eConfigType).ToString();
Text = (eConfigType).ToString();
cmbCoreType.Items.AddRange(Global.coreTypes.ToArray());
cmbCoreType.Items.Add(string.Empty);
@@ -32,8 +32,8 @@ namespace v2rayN.Forms
case EConfigType.Shadowsocks:
panSs.Dock = DockStyle.Fill;
panSs.Visible = true;
panTran.Visible = false;
this.Height = this.Height - panTran.Height;
//panTran.Visible = false;
//this.Height = this.Height - panTran.Height;
cmbSecurity3.Items.AddRange(LazyConfig.Instance.GetShadowsocksSecuritys().ToArray());
break;
@@ -41,7 +41,7 @@ namespace v2rayN.Forms
panSocks.Dock = DockStyle.Fill;
panSocks.Visible = true;
panTran.Visible = false;
this.Height = this.Height - panTran.Height;
Height = Height - panTran.Height;
break;
case EConfigType.VLESS:
panVless.Dock = DockStyle.Fill;
@@ -65,8 +65,10 @@ namespace v2rayN.Forms
}
else
{
vmessItem = new VmessItem();
vmessItem.groupId = groupId;
vmessItem = new VmessItem
{
groupId = groupId
};
ClearServer();
}
}
@@ -106,14 +108,7 @@ namespace v2rayN.Forms
break;
}
if (vmessItem.coreType == null)
{
cmbCoreType.Text = string.Empty;
}
else
{
cmbCoreType.Text = vmessItem.coreType.ToString();
}
cmbCoreType.Text = vmessItem.coreType == null ? string.Empty : vmessItem.coreType.ToString();
transportControl.BindingServer(vmessItem);
}
@@ -267,7 +262,7 @@ namespace v2rayN.Forms
if (ret == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -284,7 +279,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
}
}

View File

@@ -7,7 +7,6 @@ namespace v2rayN.Forms
public partial class BaseForm : Form
{
protected static Config config;
protected static System.Drawing.Icon icon;
public BaseForm()
{
@@ -19,16 +18,14 @@ namespace v2rayN.Forms
{
try
{
if (icon == null)
string file = Utils.GetPath(Global.CustomIconName);
if (System.IO.File.Exists(file))
{
string file = Utils.GetPath(Global.CustomIconName);
if (!System.IO.File.Exists(file))
{
return;
}
icon = new System.Drawing.Icon(file);
Icon = new System.Drawing.Icon(file);
return;
}
this.Icon = icon;
Icon = Properties.Resources.NotifyIcon1;
}
catch (Exception e)
{

File diff suppressed because it is too large Load Diff

View File

@@ -101,7 +101,7 @@ namespace v2rayN.Forms
if (ConfigHandler.SaveConfig(ref config, false) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -111,7 +111,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void btnReset_Click(object sender, EventArgs e)

View File

@@ -23,7 +23,7 @@ namespace v2rayN.Forms
private void GroupSettingControl_Load(object sender, EventArgs e)
{
this.Height = grbMain.Height;
Height = grbMain.Height;
BindingSub();
}

View File

@@ -70,7 +70,7 @@ namespace v2rayN.Forms
{
if (ConfigHandler.SaveGroupItem(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -80,7 +80,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void btnAdd_Click(object sender, EventArgs e)

View File

@@ -30,7 +30,7 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.scMain = new System.Windows.Forms.SplitContainer();
this.scServers = new System.Windows.Forms.SplitContainer();
this.lvServers = new v2rayN.Base.ListViewFlickerFree();
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem();
@@ -46,8 +46,10 @@
this.menuRemoveDuplicateServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuCopyServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuSetDefaultServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuServerFilter = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.menuMoveToGroup = new System.Windows.Forms.ToolStripMenuItem();
this.menuMoveEvent = new System.Windows.Forms.ToolStripMenuItem();
this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem();
this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
@@ -58,6 +60,7 @@
this.menuTcpingServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem();
this.menuSortServerResult = new System.Windows.Forms.ToolStripMenuItem();
this.tsbTestMe = new System.Windows.Forms.ToolStripMenuItem();
this.menuClearServerStatistics = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
@@ -68,8 +71,8 @@
this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton();
this.tabGroup = new System.Windows.Forms.TabControl();
this.qrCodeControl = new v2rayN.Forms.QRCodeControl();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.scBig = new System.Windows.Forms.SplitContainer();
this.gbServers = new System.Windows.Forms.GroupBox();
this.mainMsgControl = new v2rayN.Forms.MainMsgControl();
this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components);
this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components);
@@ -109,6 +112,9 @@
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator();
this.tsbCheckUpdateClashCore = new System.Windows.Forms.ToolStripMenuItem();
this.tsbCheckUpdateClashMetaCore = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator();
this.tsbCheckUpdateGeo = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
@@ -121,35 +127,35 @@
this.tsbPromotion = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
this.tsbClose = new System.Windows.Forms.ToolStripButton();
((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
this.scMain.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.scServers)).BeginInit();
this.scServers.Panel1.SuspendLayout();
this.scServers.Panel2.SuspendLayout();
this.scServers.SuspendLayout();
this.cmsLv.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.scBig)).BeginInit();
this.scBig.Panel1.SuspendLayout();
this.scBig.Panel2.SuspendLayout();
this.scBig.SuspendLayout();
this.gbServers.SuspendLayout();
this.cmsMain.SuspendLayout();
this.tsMain.SuspendLayout();
this.SuspendLayout();
//
// scMain
// scServers
//
resources.ApplyResources(this.scMain, "scMain");
this.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.scMain.Name = "scMain";
resources.ApplyResources(this.scServers, "scServers");
this.scServers.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.scServers.Name = "scServers";
//
// scMain.Panel1
// scServers.Panel1
//
this.scMain.Panel1.Controls.Add(this.lvServers);
this.scMain.Panel1.Controls.Add(this.tabGroup);
this.scServers.Panel1.Controls.Add(this.lvServers);
this.scServers.Panel1.Controls.Add(this.tabGroup);
//
// scMain.Panel2
// scServers.Panel2
//
this.scMain.Panel2.Controls.Add(this.qrCodeControl);
this.scMain.TabStop = false;
this.scServers.Panel2.Controls.Add(this.qrCodeControl);
this.scServers.TabStop = false;
//
// lvServers
//
@@ -188,18 +194,17 @@
this.menuRemoveDuplicateServer,
this.menuCopyServer,
this.menuSetDefaultServer,
this.menuServerFilter,
this.toolStripSeparator3,
this.menuMoveToGroup,
this.menuMoveTop,
this.menuMoveUp,
this.menuMoveDown,
this.menuMoveBottom,
this.menuMoveEvent,
this.menuSelectAll,
this.toolStripSeparator9,
this.menuPingServer,
this.menuTcpingServer,
this.menuRealPingServer,
this.menuSpeedServer,
this.menuSortServerResult,
this.tsbTestMe,
this.menuClearServerStatistics,
this.toolStripSeparator6,
@@ -208,6 +213,7 @@
this.menuExport2ShareUrl,
this.menuExport2SubContent});
this.cmsLv.Name = "cmsLv";
this.cmsLv.OwnerItem = this.tsbServer;
resources.ApplyResources(this.cmsLv, "cmsLv");
//
// menuAddVmessServer
@@ -287,6 +293,12 @@
resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
//
// menuServerFilter
//
this.menuServerFilter.Name = "menuServerFilter";
resources.ApplyResources(this.menuServerFilter, "menuServerFilter");
this.menuServerFilter.Click += new System.EventHandler(this.menuServerFilter_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
@@ -298,6 +310,16 @@
resources.ApplyResources(this.menuMoveToGroup, "menuMoveToGroup");
this.menuMoveToGroup.Click += new System.EventHandler(this.menuMoveToGroup_Click);
//
// menuMoveEvent
//
this.menuMoveEvent.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuMoveTop,
this.menuMoveUp,
this.menuMoveDown,
this.menuMoveBottom});
this.menuMoveEvent.Name = "menuMoveEvent";
resources.ApplyResources(this.menuMoveEvent, "menuMoveEvent");
//
// menuMoveTop
//
this.menuMoveTop.Name = "menuMoveTop";
@@ -357,6 +379,12 @@
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
//
// menuSortServerResult
//
this.menuSortServerResult.Name = "menuSortServerResult";
resources.ApplyResources(this.menuSortServerResult, "menuSortServerResult");
this.menuSortServerResult.Click += new System.EventHandler(this.menuSortServerResult_Click);
//
// tsbTestMe
//
this.tsbTestMe.Name = "tsbTestMe";
@@ -417,25 +445,25 @@
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
this.qrCodeControl.Name = "qrCodeControl";
//
// splitContainer1
// scBig
//
resources.ApplyResources(this.splitContainer1, "splitContainer1");
this.splitContainer1.Name = "splitContainer1";
resources.ApplyResources(this.scBig, "scBig");
this.scBig.Name = "scBig";
//
// splitContainer1.Panel1
// scBig.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.groupBox1);
this.scBig.Panel1.Controls.Add(this.gbServers);
//
// splitContainer1.Panel2
// scBig.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.mainMsgControl);
this.scBig.Panel2.Controls.Add(this.mainMsgControl);
//
// groupBox1
// gbServers
//
this.groupBox1.Controls.Add(this.scMain);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
this.gbServers.Controls.Add(this.scServers);
resources.ApplyResources(this.gbServers, "gbServers");
this.gbServers.Name = "gbServers";
this.gbServers.TabStop = false;
//
// mainMsgControl
//
@@ -691,6 +719,9 @@
this.tsbCheckUpdateN,
this.tsbCheckUpdateCore,
this.tsbCheckUpdateXrayCore,
this.toolStripSeparator16,
this.tsbCheckUpdateClashCore,
this.tsbCheckUpdateClashMetaCore,
this.toolStripSeparator15,
this.tsbCheckUpdateGeo});
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
@@ -715,6 +746,23 @@
resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click);
//
// toolStripSeparator16
//
this.toolStripSeparator16.Name = "toolStripSeparator16";
resources.ApplyResources(this.toolStripSeparator16, "toolStripSeparator16");
//
// tsbCheckUpdateClashCore
//
this.tsbCheckUpdateClashCore.Name = "tsbCheckUpdateClashCore";
resources.ApplyResources(this.tsbCheckUpdateClashCore, "tsbCheckUpdateClashCore");
this.tsbCheckUpdateClashCore.Click += new System.EventHandler(this.tsbCheckUpdateClashCore_Click);
//
// tsbCheckUpdateClashMetaCore
//
this.tsbCheckUpdateClashMetaCore.Name = "tsbCheckUpdateClashMetaCore";
resources.ApplyResources(this.tsbCheckUpdateClashMetaCore, "tsbCheckUpdateClashMetaCore");
this.tsbCheckUpdateClashMetaCore.Click += new System.EventHandler(this.tsbCheckUpdateClashMetaCore_Click);
//
// toolStripSeparator15
//
this.toolStripSeparator15.Name = "toolStripSeparator15";
@@ -796,7 +844,7 @@
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.splitContainer1);
this.Controls.Add(this.scBig);
this.Controls.Add(this.panel1);
this.Controls.Add(this.tsMain);
this.MaximizeBox = true;
@@ -807,16 +855,16 @@
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.VisibleChanged += new System.EventHandler(this.MainForm_VisibleChanged);
this.Resize += new System.EventHandler(this.MainForm_Resize);
this.scMain.Panel1.ResumeLayout(false);
this.scMain.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit();
this.scMain.ResumeLayout(false);
this.scServers.Panel1.ResumeLayout(false);
this.scServers.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.scServers)).EndInit();
this.scServers.ResumeLayout(false);
this.cmsLv.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.scBig.Panel1.ResumeLayout(false);
this.scBig.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.scBig)).EndInit();
this.scBig.ResumeLayout(false);
this.gbServers.ResumeLayout(false);
this.cmsMain.ResumeLayout(false);
this.tsMain.ResumeLayout(false);
this.tsMain.PerformLayout();
@@ -827,7 +875,7 @@
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox gbServers;
private v2rayN.Base.ListViewFlickerFree lvServers;
private System.Windows.Forms.NotifyIcon notifyMain;
private System.Windows.Forms.ContextMenuStrip cmsMain;
@@ -851,10 +899,6 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode;
private System.Windows.Forms.ToolStripMenuItem menuGlobal;
@@ -862,7 +906,7 @@
private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer;
private System.Windows.Forms.SplitContainer scMain;
private System.Windows.Forms.SplitContainer scServers;
private QRCodeControl qrCodeControl;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator10;
private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate;
@@ -910,7 +954,7 @@
private System.Windows.Forms.ToolStripMenuItem tsbBackupGuiNConfig;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeo;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.SplitContainer scBig;
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdateViaProxy;
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubViaProxy;
private System.Windows.Forms.ToolStripMenuItem tsbGlobalHotkeySetting;
@@ -918,6 +962,16 @@
private System.Windows.Forms.ToolStripMenuItem tsbGroupSetting;
private System.Windows.Forms.ToolStripMenuItem menuMoveToGroup;
private MainMsgControl mainMsgControl;
private System.Windows.Forms.ToolStripMenuItem menuMoveEvent;
private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
private System.Windows.Forms.ToolStripMenuItem menuServerFilter;
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateClashCore;
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateClashMetaCore;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator16;
private System.Windows.Forms.ToolStripMenuItem menuSortServerResult;
}
}

View File

@@ -18,19 +18,20 @@ namespace v2rayN.Forms
{
private V2rayHandler v2rayHandler;
private List<VmessItem> lstSelecteds = new List<VmessItem>();
private StatisticsHandler statistics = null;
private List<VmessItem> lstVmess = null;
private StatisticsHandler statistics;
private List<VmessItem> lstVmess;
private string groupId = string.Empty;
private string serverFilter = string.Empty;
#region Window
public MainForm()
{
InitializeComponent();
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
ShowInTaskbar = false;
WindowState = FormWindowState.Minimized;
HideForm();
this.Text = Utils.GetVersion();
Text = Utils.GetVersion();
Global.processJob = new Job();
Application.ApplicationExit += (sender, args) =>
@@ -123,7 +124,10 @@ namespace v2rayN.Forms
{
try
{
v2rayHandler.V2rayStop();
Utils.SaveLog("MyAppExit Begin");
StorageUI();
ConfigHandler.SaveConfig(ref config);
//HttpProxyHandle.CloseHttpAgent(config);
if (blWindowsShutDown)
@@ -135,26 +139,27 @@ namespace v2rayN.Forms
SysProxyHandle.UpdateSysProxy(config, true);
}
StorageUI();
ConfigHandler.SaveConfig(ref config);
statistics?.SaveToFile();
statistics?.Close();
v2rayHandler.V2rayStop();
Utils.SaveLog("MyAppExit End");
}
catch { }
}
private void RestoreUI()
{
scMain.Panel2Collapsed = true;
scServers.Panel2Collapsed = true;
if (!config.uiItem.mainLocation.IsEmpty)
{
this.Location = config.uiItem.mainLocation;
Location = config.uiItem.mainLocation;
}
if (!config.uiItem.mainSize.IsEmpty)
{
this.Width = config.uiItem.mainSize.Width;
this.Height = config.uiItem.mainSize.Height;
Width = config.uiItem.mainSize.Width;
Height = config.uiItem.mainSize.Height;
}
@@ -167,9 +172,9 @@ namespace v2rayN.Forms
private void StorageUI()
{
config.uiItem.mainLocation = this.Location;
config.uiItem.mainLocation = Location;
config.uiItem.mainSize = new Size(this.Width, this.Height);
config.uiItem.mainSize = new Size(Width, Height);
for (int k = 0; k < lvServers.Columns.Count; k++)
{
@@ -182,7 +187,7 @@ namespace v2rayN.Forms
switch (Utils.ToInt(e.Name))
{
case (int)EGlobalHotkey.ShowForm:
if (this.ShowInTaskbar) HideForm(); else ShowForm();
if (ShowInTaskbar) HideForm(); else ShowForm();
break;
case (int)EGlobalHotkey.SystemProxyClear:
SetListenerType(ESysProxyType.ForcedClear);
@@ -207,7 +212,8 @@ namespace v2rayN.Forms
private void RefreshServers()
{
lstVmess = config.vmess
.Where(it => Utils.IsNullOrEmpty(groupId) ? true : it.groupId == groupId)
.Where(it => Utils.IsNullOrEmpty(groupId) || it.groupId == groupId)
.Where(it => Utils.IsNullOrEmpty(serverFilter) || it.remarks.Contains(serverFilter))
.OrderBy(it => it.sort)
.ToList();
@@ -345,7 +351,7 @@ namespace v2rayN.Forms
{
menuServers.DropDownItems.Clear();
if (lstVmess.Count > 30)
if (lstVmess.Count > config.trayMenuServersLimit)
{
menuServers.DropDownItems.Add(new ToolStripMenuItem(ResUI.TooManyServersTip));
return;
@@ -365,7 +371,7 @@ namespace v2rayN.Forms
{
ts.Checked = true;
}
ts.Click += new EventHandler(ts_Click);
ts.Click += ts_Click;
lst.Add(ts);
}
menuServers.DropDownItems.AddRange(lst.ToArray());
@@ -389,13 +395,6 @@ namespace v2rayN.Forms
{
}
private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
{
Utils.SetClipboardData(e.ClickedItem.Text);
}
}
private void lvServers_ColumnClick(object sender, ColumnClickEventArgs e)
{
@@ -416,7 +415,7 @@ namespace v2rayN.Forms
}
var tag = lvServers.Columns[e.Column].Tag?.ToString();
bool asc = Utils.IsNullOrEmpty(tag) ? true : !Convert.ToBoolean(tag);
bool asc = Utils.IsNullOrEmpty(tag) || !Convert.ToBoolean(tag);
if (ConfigHandler.SortServers(ref config, ref lstVmess, (EServerColName)e.Column, asc) != 0)
{
return;
@@ -466,7 +465,7 @@ namespace v2rayN.Forms
{
Tag = item.id,
};
ts.Click += new EventHandler(ts_Group_Click);
ts.Click += ts_Group_Click;
lst.Add(ts);
}
menuMoveToGroup.DropDownItems.AddRange(lst.ToArray());
@@ -517,7 +516,7 @@ namespace v2rayN.Forms
/// </summary>
async Task LoadV2ray()
{
this.BeginInvoke(new Action(() =>
BeginInvoke(new Action(() =>
{
tsbReload.Enabled = false;
}));
@@ -537,7 +536,7 @@ namespace v2rayN.Forms
ChangePACButtonStatus(config.sysProxyType);
this.BeginInvoke(new Action(() =>
BeginInvoke(new Action(() =>
{
tsbReload.Enabled = true;
}));
@@ -631,6 +630,12 @@ namespace v2rayN.Forms
case Keys.T:
menuSpeedServer_Click(null, null);
break;
case Keys.F:
menuServerFilter_Click(null, null);
break;
case Keys.E:
menuSortServerResult_Click(null, null);
break;
}
}
else
@@ -720,6 +725,17 @@ namespace v2rayN.Forms
SetDefaultServer(index);
}
private void menuServerFilter_Click(object sender, EventArgs e)
{
var fm = new MsgFilterSetForm();
fm.MsgFilter = serverFilter;
if (fm.ShowDialog() == DialogResult.OK)
{
serverFilter = fm.MsgFilter;
gbServers.Text = string.Format(ResUI.MsgServerTitle, serverFilter);
RefreshServers();
}
}
private void menuPingServer_Click(object sender, EventArgs e)
{
@@ -761,6 +777,10 @@ namespace v2rayN.Forms
ClearTestResult();
SpeedtestHandler statistics = new SpeedtestHandler(config, v2rayHandler, lstSelecteds, actionType, UpdateSpeedtestHandler);
}
private void menuSortServerResult_Click(object sender, EventArgs e)
{
lvServers_ColumnClick(null, new ColumnClickEventArgs((int)EServerColName.testResult));
}
private void tsbTestMe_Click(object sender, EventArgs e)
{
@@ -1072,8 +1092,8 @@ namespace v2rayN.Forms
private void menuExit_Click(object sender, EventArgs e)
{
this.Visible = false;
this.Close();
Visible = false;
Close();
Application.Exit();
}
@@ -1081,13 +1101,13 @@ namespace v2rayN.Forms
private void ShowForm()
{
this.Show();
if (this.WindowState == FormWindowState.Minimized)
Show();
if (WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
WindowState = FormWindowState.Normal;
}
this.Activate();
this.ShowInTaskbar = true;
Activate();
ShowInTaskbar = true;
//this.notifyIcon1.Visible = false;
mainMsgControl.ScrollToCaret();
@@ -1104,10 +1124,10 @@ namespace v2rayN.Forms
private void HideForm()
{
//this.WindowState = FormWindowState.Minimized;
this.Hide();
Hide();
//this.notifyMain.Icon = this.Icon;
this.notifyMain.Visible = true;
this.ShowInTaskbar = false;
notifyMain.Visible = true;
ShowInTaskbar = false;
SetVisibleCore(false);
}
@@ -1277,26 +1297,15 @@ namespace v2rayN.Forms
}
ConfigHandler.SaveConfig(ref config, false);
DisplayToolStatus();
}
private void DisplayToolStatus()
{
StringBuilder sb = new StringBuilder();
sb.Append($"{Global.InboundSocks} {Global.Loopback}:{config.GetLocalPort(Global.InboundSocks)}");
sb.Append(" | ");
sb.Append($"{Global.InboundHttp} {Global.Loopback}:{config.GetLocalPort(Global.InboundHttp)}");
mainMsgControl.DisplayToolStatus(config);
if (config.sysProxyType == ESysProxyType.ForcedChange)
BeginInvoke(new Action(() =>
{
sb.Append(" | ");
sb.Append($"{ResUI.SystemProxy} {Global.Loopback}:{config.GetLocalPort(Global.InboundHttp2)}");
}
mainMsgControl.SetToolSslInfo("inbound", sb.ToString());
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
notifyMain.Icon = Icon = MainFormHandler.Instance.GetNotifyIcon(config, Icon);
}));
}
#endregion
@@ -1312,10 +1321,7 @@ namespace v2rayN.Forms
menuExit_Click(null, null);
}
};
Task.Run(() =>
{
(new UpdateHandle()).CheckUpdateGuiN(config, _updateUI);
});
(new UpdateHandle()).CheckUpdateGuiN(config, _updateUI);
}
private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
@@ -1328,6 +1334,16 @@ namespace v2rayN.Forms
CheckUpdateCore(ECoreType.Xray);
}
private void tsbCheckUpdateClashCore_Click(object sender, EventArgs e)
{
CheckUpdateCore(ECoreType.clash);
}
private void tsbCheckUpdateClashMetaCore_Click(object sender, EventArgs e)
{
CheckUpdateCore(ECoreType.clash_meta);
}
private void CheckUpdateCore(ECoreType type)
{
void _updateUI(bool success, string msg)
@@ -1348,10 +1364,7 @@ namespace v2rayN.Forms
AppendText(false, ResUI.MsgUpdateV2rayCoreSuccessfully);
}
};
Task.Run(() =>
{
(new UpdateHandle()).CheckUpdateCore(type, config, _updateUI);
});
(new UpdateHandle()).CheckUpdateCore(type, config, _updateUI);
}
private void tsbCheckUpdateGeo_Click(object sender, EventArgs e)
@@ -1432,7 +1445,7 @@ namespace v2rayN.Forms
private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e)
{
bool bShow = tsbQRCodeSwitch.Checked;
scMain.Panel2Collapsed = !bShow;
scServers.Panel2Collapsed = !bShow;
}
#endregion
@@ -1491,7 +1504,7 @@ namespace v2rayN.Forms
ts.Checked = true;
mainMsgControl.SetToolSslInfo("routing", item.remarks);
}
ts.Click += new EventHandler(ts_Routing_Click);
ts.Click += ts_Routing_Click;
lst.Add(ts);
}
menuRoutings.DropDownItems.AddRange(lst.ToArray());
@@ -1515,5 +1528,6 @@ namespace v2rayN.Forms
}
}
#endregion
}
}

View File

@@ -118,11 +118,11 @@
<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="scMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<data name="scServers.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="scMain.Location" type="System.Drawing.Point, System.Drawing">
<data name="scServers.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 17</value>
</data>
<metadata name="cmsLv.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -203,6 +203,12 @@
<data name="menuSetDefaultServer.Text" xml:space="preserve">
<value>Set as active server (Enter)</value>
</data>
<data name="menuServerFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
</data>
<data name="menuServerFilter.Text" xml:space="preserve">
<value>Set server filter (Ctrl+F)</value>
</data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>352, 6</value>
</data>
@@ -213,29 +219,35 @@
<value>Move to Group</value>
</data>
<data name="menuMoveTop.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
<value>192, 22</value>
</data>
<data name="menuMoveTop.Text" xml:space="preserve">
<value>Move to top (T)</value>
</data>
<data name="menuMoveUp.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
<value>192, 22</value>
</data>
<data name="menuMoveUp.Text" xml:space="preserve">
<value>Up (U)</value>
</data>
<data name="menuMoveDown.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
<value>192, 22</value>
</data>
<data name="menuMoveDown.Text" xml:space="preserve">
<value>Down (D)</value>
</data>
<data name="menuMoveBottom.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
<value>192, 22</value>
</data>
<data name="menuMoveBottom.Text" xml:space="preserve">
<value>Move to bottom (B)</value>
</data>
<data name="menuMoveEvent.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
</data>
<data name="menuMoveEvent.Text" xml:space="preserve">
<value>Move to</value>
</data>
<data name="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
</data>
@@ -269,6 +281,12 @@
<data name="menuSpeedServer.Text" xml:space="preserve">
<value>Test servers download speed (Ctrl+T)</value>
</data>
<data name="menuSortServerResult.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
</data>
<data name="menuSortServerResult.Text" xml:space="preserve">
<value>Sort by test result (Ctrl+E)</value>
</data>
<data name="tsbTestMe.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 22</value>
</data>
@@ -308,8 +326,20 @@
<data name="menuExport2SubContent.Text" xml:space="preserve">
<value>Export subscription (base64) share to clipboard</value>
</data>
<data name="tsbServer.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbServer.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 53</value>
</data>
<data name="tsbServer.Text" xml:space="preserve">
<value>Servers</value>
</data>
<data name="tsbServer.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageAboveText</value>
</data>
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
<value>356, 666</value>
<value>356, 644</value>
</data>
<data name="&gt;&gt;cmsLv.Name" xml:space="preserve">
<value>cmsLv</value>
@@ -354,7 +384,7 @@
<value>v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvServers.Parent" xml:space="preserve">
<value>scMain.Panel1</value>
<value>scServers.Panel1</value>
</data>
<data name="&gt;&gt;lvServers.ZOrder" xml:space="preserve">
<value>0</value>
@@ -378,21 +408,21 @@
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tabGroup.Parent" xml:space="preserve">
<value>scMain.Panel1</value>
<value>scServers.Panel1</value>
</data>
<data name="&gt;&gt;tabGroup.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;scMain.Panel1.Name" xml:space="preserve">
<value>scMain.Panel1</value>
<data name="&gt;&gt;scServers.Panel1.Name" xml:space="preserve">
<value>scServers.Panel1</value>
</data>
<data name="&gt;&gt;scMain.Panel1.Type" xml:space="preserve">
<data name="&gt;&gt;scServers.Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;scMain.Panel1.Parent" xml:space="preserve">
<value>scMain</value>
<data name="&gt;&gt;scServers.Panel1.Parent" xml:space="preserve">
<value>scServers</value>
</data>
<data name="&gt;&gt;scMain.Panel1.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scServers.Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="qrCodeControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
@@ -417,102 +447,90 @@
<value>v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;qrCodeControl.Parent" xml:space="preserve">
<value>scMain.Panel2</value>
<value>scServers.Panel2</value>
</data>
<data name="&gt;&gt;qrCodeControl.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;scMain.Panel2.Name" xml:space="preserve">
<value>scMain.Panel2</value>
<data name="&gt;&gt;scServers.Panel2.Name" xml:space="preserve">
<value>scServers.Panel2</value>
</data>
<data name="&gt;&gt;scMain.Panel2.Type" xml:space="preserve">
<data name="&gt;&gt;scServers.Panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;scMain.Panel2.Parent" xml:space="preserve">
<value>scMain</value>
<data name="&gt;&gt;scServers.Panel2.Parent" xml:space="preserve">
<value>scServers</value>
</data>
<data name="&gt;&gt;scMain.Panel2.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scServers.Panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="scMain.Panel2MinSize" type="System.Int32, mscorlib">
<data name="scServers.Panel2MinSize" type="System.Int32, mscorlib">
<value>100</value>
</data>
<data name="scMain.Size" type="System.Drawing.Size, System.Drawing">
<data name="scServers.Size" type="System.Drawing.Size, System.Drawing">
<value>946, 280</value>
</data>
<data name="scMain.SplitterDistance" type="System.Int32, mscorlib">
<data name="scServers.SplitterDistance" type="System.Int32, mscorlib">
<value>686</value>
</data>
<data name="scMain.TabIndex" type="System.Int32, mscorlib">
<data name="scServers.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;scMain.Name" xml:space="preserve">
<value>scMain</value>
<data name="&gt;&gt;scServers.Name" xml:space="preserve">
<value>scServers</value>
</data>
<data name="&gt;&gt;scMain.Type" xml:space="preserve">
<data name="&gt;&gt;scServers.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;scMain.Parent" xml:space="preserve">
<value>groupBox1</value>
<data name="&gt;&gt;scServers.Parent" xml:space="preserve">
<value>gbServers</value>
</data>
<data name="&gt;&gt;scMain.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scServers.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tsbServer.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbServer.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 53</value>
</data>
<data name="tsbServer.Text" xml:space="preserve">
<value>Servers</value>
</data>
<data name="tsbServer.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageAboveText</value>
</data>
<data name="splitContainer1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<data name="scBig.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="splitContainer1.Location" type="System.Drawing.Point, System.Drawing">
<data name="scBig.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 66</value>
</data>
<data name="splitContainer1.Orientation" type="System.Windows.Forms.Orientation, System.Windows.Forms">
<data name="scBig.Orientation" type="System.Windows.Forms.Orientation, System.Windows.Forms">
<value>Horizontal</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<data name="gbServers.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<data name="gbServers.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<data name="gbServers.Size" type="System.Drawing.Size, System.Drawing">
<value>952, 300</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<data name="gbServers.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
<data name="&gt;&gt;gbServers.Name" xml:space="preserve">
<value>gbServers</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<data name="&gt;&gt;gbServers.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>splitContainer1.Panel1</value>
<data name="&gt;&gt;gbServers.Parent" xml:space="preserve">
<value>scBig.Panel1</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<data name="&gt;&gt;gbServers.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel1.Name" xml:space="preserve">
<value>splitContainer1.Panel1</value>
<data name="&gt;&gt;scBig.Panel1.Name" xml:space="preserve">
<value>scBig.Panel1</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel1.Type" xml:space="preserve">
<data name="&gt;&gt;scBig.Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel1.Parent" xml:space="preserve">
<value>splitContainer1</value>
<data name="&gt;&gt;scBig.Panel1.Parent" xml:space="preserve">
<value>scBig</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel1.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scBig.Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="mainMsgControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
@@ -534,42 +552,42 @@
<value>v2rayN.Forms.MainMsgControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;mainMsgControl.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
<value>scBig.Panel2</value>
</data>
<data name="&gt;&gt;mainMsgControl.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel2.Name" xml:space="preserve">
<value>splitContainer1.Panel2</value>
<data name="&gt;&gt;scBig.Panel2.Name" xml:space="preserve">
<value>scBig.Panel2</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel2.Type" xml:space="preserve">
<data name="&gt;&gt;scBig.Panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel2.Parent" xml:space="preserve">
<value>splitContainer1</value>
<data name="&gt;&gt;scBig.Panel2.Parent" xml:space="preserve">
<value>scBig</value>
</data>
<data name="&gt;&gt;splitContainer1.Panel2.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scBig.Panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="splitContainer1.Size" type="System.Drawing.Size, System.Drawing">
<data name="scBig.Size" type="System.Drawing.Size, System.Drawing">
<value>952, 527</value>
</data>
<data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib">
<data name="scBig.SplitterDistance" type="System.Int32, mscorlib">
<value>300</value>
</data>
<data name="splitContainer1.TabIndex" type="System.Int32, mscorlib">
<data name="scBig.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;splitContainer1.Name" xml:space="preserve">
<value>splitContainer1</value>
<data name="&gt;&gt;scBig.Name" xml:space="preserve">
<value>scBig</value>
</data>
<data name="&gt;&gt;splitContainer1.Type" xml:space="preserve">
<data name="&gt;&gt;scBig.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;splitContainer1.Parent" xml:space="preserve">
<data name="&gt;&gt;scBig.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;splitContainer1.ZOrder" xml:space="preserve">
<data name="&gt;&gt;scBig.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="notifyMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -813,28 +831,43 @@
<value>6, 56</value>
</data>
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
<value>v2rayN (this software)</value>
</data>
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
<value>Update v2flyCore</value>
<value>Update v2fly Core</value>
</data>
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
<value>Update XrayCore</value>
<value>Update Xray Core</value>
</data>
<data name="toolStripSeparator16.Size" type="System.Drawing.Size, System.Drawing">
<value>216, 6</value>
</data>
<data name="tsbCheckUpdateClashCore.Size" type="System.Drawing.Size, System.Drawing">
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateClashCore.Text" xml:space="preserve">
<value>Update clash Core</value>
</data>
<data name="tsbCheckUpdateClashMetaCore.Size" type="System.Drawing.Size, System.Drawing">
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateClashMetaCore.Text" xml:space="preserve">
<value>Update Clash.Meta Core</value>
</data>
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 6</value>
<value>216, 6</value>
</data>
<data name="tsbCheckUpdateGeo.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
<value>219, 22</value>
</data>
<data name="tsbCheckUpdateGeo.Text" xml:space="preserve">
<value>Update Geo files</value>
@@ -945,7 +978,7 @@
<value>True</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>90</value>
<value>64</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
@@ -1037,6 +1070,12 @@
<data name="&gt;&gt;menuSetDefaultServer.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuServerFilter.Name" xml:space="preserve">
<value>menuServerFilter</value>
</data>
<data name="&gt;&gt;menuServerFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
</data>
@@ -1049,6 +1088,12 @@
<data name="&gt;&gt;menuMoveToGroup.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuMoveEvent.Name" xml:space="preserve">
<value>menuMoveEvent</value>
</data>
<data name="&gt;&gt;menuMoveEvent.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuMoveTop.Name" xml:space="preserve">
<value>menuMoveTop</value>
</data>
@@ -1109,6 +1154,12 @@
<data name="&gt;&gt;menuSpeedServer.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuSortServerResult.Name" xml:space="preserve">
<value>menuSortServerResult</value>
</data>
<data name="&gt;&gt;menuSortServerResult.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsbTestMe.Name" xml:space="preserve">
<value>tsbTestMe</value>
</data>
@@ -1367,6 +1418,24 @@
<data name="&gt;&gt;tsbCheckUpdateXrayCore.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator16.Name" xml:space="preserve">
<value>toolStripSeparator16</value>
</data>
<data name="&gt;&gt;toolStripSeparator16.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsbCheckUpdateClashCore.Name" xml:space="preserve">
<value>tsbCheckUpdateClashCore</value>
</data>
<data name="&gt;&gt;tsbCheckUpdateClashCore.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsbCheckUpdateClashMetaCore.Name" xml:space="preserve">
<value>tsbCheckUpdateClashMetaCore</value>
</data>
<data name="&gt;&gt;tsbCheckUpdateClashMetaCore.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolStripSeparator15.Name" xml:space="preserve">
<value>toolStripSeparator15</value>
</data>

View File

@@ -555,4 +555,19 @@
<data name="menuMoveToGroup.Text" xml:space="preserve">
<value>移至分组</value>
</data>
<data name="menuMoveEvent.Text" xml:space="preserve">
<value>上下移至</value>
</data>
<data name="menuServerFilter.Text" xml:space="preserve">
<value>设置服务器过滤器 (Ctrl+F)</value>
</data>
<data name="tsbCheckUpdateClashCore.Text" xml:space="preserve">
<value>Update clash Core</value>
</data>
<data name="tsbCheckUpdateClashMetaCore.Text" xml:space="preserve">
<value>Update Clash.Meta Core</value>
</data>
<data name="menuSortServerResult.Text" xml:space="preserve">
<value>按测试结果排序 (Ctrl+E)</value>
</data>
</root>

View File

@@ -61,6 +61,7 @@ namespace v2rayN.Forms
this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
this.txtMsgBox.Name = "txtMsgBox";
this.txtMsgBox.ReadOnly = true;
this.txtMsgBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtMsgBox_KeyDown);
//
// cmsMsgBox
//
@@ -130,6 +131,7 @@ namespace v2rayN.Forms
this.toolSslServerSpeed,
this.toolSslBlank4});
this.ssMain.Name = "ssMain";
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
//
// toolSslInboundInfo
//

View File

@@ -9,13 +9,14 @@ using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Mode;
using v2rayN.Resx;
namespace v2rayN.Forms
{
public partial class MainMsgControl : UserControl
{
private string MsgFilter = string.Empty;
private string _msgFilter = string.Empty;
delegate void AppendTextDelegate(string text);
public MainMsgControl()
@@ -32,15 +33,15 @@ namespace v2rayN.Forms
public void AppendText(string text)
{
if (this.txtMsgBox.InvokeRequired)
if (txtMsgBox.InvokeRequired)
{
Invoke(new AppendTextDelegate(AppendText), new object[] { text });
Invoke(new AppendTextDelegate(AppendText), text);
}
else
{
if (!Utils.IsNullOrEmpty(MsgFilter))
if (!Utils.IsNullOrEmpty(_msgFilter))
{
if (!Regex.IsMatch(text, MsgFilter))
if (!Regex.IsMatch(text, _msgFilter))
{
return;
}
@@ -60,10 +61,10 @@ namespace v2rayN.Forms
{
ClearMsg();
}
this.txtMsgBox.AppendText(msg);
txtMsgBox.AppendText(msg);
if (!msg.EndsWith(Environment.NewLine))
{
this.txtMsgBox.AppendText(Environment.NewLine);
txtMsgBox.AppendText(Environment.NewLine);
}
}
@@ -78,6 +79,32 @@ namespace v2rayN.Forms
});
}
public void DisplayToolStatus(Config config)
{
StringBuilder sb = new StringBuilder();
sb.Append($"{ResUI.LabLocal}:");
sb.Append($"[{Global.InboundSocks}:{config.GetLocalPort(Global.InboundSocks)}]");
sb.Append(" | ");
if (config.sysProxyType == ESysProxyType.ForcedChange)
{
sb.Append($"[{Global.InboundHttp}({ResUI.SystemProxy}):{config.GetLocalPort(Global.InboundHttp)}]");
}
else
{
sb.Append($"[{Global.InboundHttp}:{config.GetLocalPort(Global.InboundHttp)}]");
}
if (config.inbound[0].allowLANConn)
{
sb.Append($" {ResUI.LabLAN}:");
sb.Append($"[{Global.InboundSocks}:{config.GetLocalPort(Global.InboundSocks2)}]");
sb.Append(" | ");
sb.Append($"[{Global.InboundHttp}:{config.GetLocalPort(Global.InboundHttp2)}]");
}
SetToolSslInfo("inbound", sb.ToString());
}
public void SetToolSslInfo(string type, string value)
{
switch (type)
@@ -97,7 +124,7 @@ namespace v2rayN.Forms
public void ScrollToCaret()
{
this.txtMsgBox.ScrollToCaret();
txtMsgBox.ScrollToCaret();
}
#endregion
@@ -105,24 +132,24 @@ namespace v2rayN.Forms
#region MsgBoxMenu
private void menuMsgBoxSelectAll_Click(object sender, EventArgs e)
{
this.txtMsgBox.Focus();
this.txtMsgBox.SelectAll();
txtMsgBox.Focus();
txtMsgBox.SelectAll();
}
private void menuMsgBoxCopy_Click(object sender, EventArgs e)
{
var data = this.txtMsgBox.SelectedText.TrimEx();
var data = txtMsgBox.SelectedText.TrimEx();
Utils.SetClipboardData(data);
}
private void menuMsgBoxCopyAll_Click(object sender, EventArgs e)
{
var data = this.txtMsgBox.Text;
var data = txtMsgBox.Text;
Utils.SetClipboardData(data);
}
private void menuMsgBoxClear_Click(object sender, EventArgs e)
{
this.txtMsgBox.Clear();
txtMsgBox.Clear();
}
private void menuMsgBoxAddRoutingRule_Click(object sender, EventArgs e)
{
@@ -155,11 +182,20 @@ namespace v2rayN.Forms
private void menuMsgBoxFilter_Click(object sender, EventArgs e)
{
var fm = new MsgFilterSetForm();
fm.MsgFilter = MsgFilter;
fm.MsgFilter = _msgFilter;
fm.ShowDefFilter = true;
if (fm.ShowDialog() == DialogResult.OK)
{
MsgFilter = fm.MsgFilter;
gbMsgTitle.Text = string.Format(ResUI.MsgInformationTitle, MsgFilter);
_msgFilter = fm.MsgFilter;
gbMsgTitle.Text = string.Format(ResUI.MsgInformationTitle, _msgFilter);
}
}
private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
{
Utils.SetClipboardData(e.ClickedItem.Text);
}
}
#endregion

View File

@@ -126,12 +126,12 @@
<data name="menuMsgBoxSelectAll.Text" xml:space="preserve">
<value>Select All (Ctrl+A)</value>
</data>
<data name="&gt;&gt;ssMain.Name" xml:space="preserve">
<value>ssMain</value>
</data>
<data name="&gt;&gt;menuMsgBoxSelectAll.Name" xml:space="preserve">
<value>menuMsgBoxSelectAll</value>
</data>
<data name="&gt;&gt;txtMsgBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="toolSslServerSpeed.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
@@ -146,9 +146,6 @@
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>227, 22</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuMsgBoxCopyAll.Name" xml:space="preserve">
<value>menuMsgBoxCopyAll</value>
</data>
@@ -173,8 +170,8 @@
<data name="&gt;&gt;toolSslBlank1.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
<data name="&gt;&gt;toolSslInboundInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolSslRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
<value>0, 17</value>
@@ -188,6 +185,9 @@
<data name="&gt;&gt;txtMsgBox.Name" xml:space="preserve">
<value>txtMsgBox</value>
</data>
<data name="toolSslBlank4.Size" type="System.Drawing.Size, System.Drawing">
<value>0, 17</value>
</data>
<data name="&gt;&gt;menuMsgBoxFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -209,9 +209,6 @@
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
<value>Add Routing Rule (Ctrl+V)</value>
</data>
<data name="&gt;&gt;toolSslServerSpeed.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="toolSslServerSpeed.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
@@ -224,15 +221,15 @@
<data name="toolSslInboundInfo.Text" xml:space="preserve">
<value>InboundInfo</value>
</data>
<data name="&gt;&gt;txtMsgBox.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;menuMsgBoxAddRoutingRule.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuMsgBoxClear.Name" xml:space="preserve">
<value>menuMsgBoxClear</value>
</data>
<data name="txtMsgBox.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="gbMsgTitle.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
@@ -242,9 +239,6 @@
<data name="txtMsgBox.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 17</value>
</data>
<data name="&gt;&gt;toolSslInboundInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;toolSslBlank4.Name" xml:space="preserve">
<value>toolSslBlank4</value>
</data>
@@ -260,15 +254,15 @@
<data name="toolSslBlank2.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 17</value>
</data>
<data name="&gt;&gt;menuMsgBoxAddRoutingRule.Name" xml:space="preserve">
<value>menuMsgBoxAddRoutingRule</value>
</data>
<data name="txtMsgBox.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="menuMsgBoxClear.Text" xml:space="preserve">
<value>Clear All</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 12</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtMsgBox.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
@@ -282,6 +276,9 @@
<data name="&gt;&gt;cmsMsgBox.Name" xml:space="preserve">
<value>cmsMsgBox</value>
</data>
<data name="txtMsgBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;cmsMsgBox.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -303,8 +300,8 @@
<data name="&gt;&gt;toolSslBlank4.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
<value>Copy All</value>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainMsgControl</value>
</data>
<data name="gbMsgTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
@@ -318,26 +315,29 @@
<data name="toolSslServerSpeed.RightToLeft" type="System.Windows.Forms.RightToLeft, System.Windows.Forms">
<value>No</value>
</data>
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
<value>Copy (Ctrl+C)</value>
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
<value>Copy All</value>
</data>
<data name="toolSslServerSpeed.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 17</value>
</data>
<data name="ssMain.Text" xml:space="preserve">
<value>statusStrip1</value>
</data>
<data name="&gt;&gt;menuMsgBoxSelectAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;menuMsgBoxAddRoutingRule.Name" xml:space="preserve">
<value>menuMsgBoxAddRoutingRule</value>
</data>
<data name="&gt;&gt;toolSslBlank2.Name" xml:space="preserve">
<value>toolSslBlank2</value>
</data>
<data name="&gt;&gt;menuMsgBoxCopyAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
<value>Set message filters</value>
</data>
<data name="toolSslServerSpeed.Text" xml:space="preserve">
<value>SPEED Disabled</value>
</data>
<data name="txtMsgBox.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<data name="&gt;&gt;txtMsgBox.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;gbMsgTitle.Name" xml:space="preserve">
<value>gbMsgTitle</value>
@@ -348,40 +348,37 @@
<data name="&gt;&gt;ssMain.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainMsgControl</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="txtMsgBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="&gt;&gt;menuMsgBoxSelectAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;menuMsgBoxCopy.Name" xml:space="preserve">
<value>menuMsgBoxCopy</value>
</data>
<data name="toolSslBlank4.Size" type="System.Drawing.Size, System.Drawing">
<value>0, 17</value>
<data name="&gt;&gt;txtMsgBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ssMain.Name" xml:space="preserve">
<value>ssMain</value>
<data name="&gt;&gt;toolSslServerSpeed.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
<value>Set message filters</value>
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
<value>Copy (Ctrl+C)</value>
</data>
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 136</value>
</data>
<data name="toolSslServerSpeed.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 17</value>
<data name="&gt;&gt;menuMsgBoxCopyAll.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="cmsMsgBox.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>zh-Hans</value>
<metadata name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 18</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 18</value>
<metadata name="cmsMsgBox.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -117,25 +117,56 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="gbMsgTitle.Text" xml:space="preserve">
<value>信息</value>
</data>
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
<value>快速添加路由规则 (Ctrl+V)</value>
</data>
<data name="menuMsgBoxClear.Text" xml:space="preserve">
<value>清除所有</value>
</data>
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
<value>复制 (Ctrl+C)</value>
</data>
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
<value>复制所有</value>
</data>
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
<value>设置信息过滤器</value>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxSelectAll.Text" xml:space="preserve">
<value>全选 (Ctrl+A)</value>
</data>
<data name="menuMsgBoxCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
<value>复制 (Ctrl+C)</value>
</data>
<data name="menuMsgBoxCopyAll.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
<value>复制所有</value>
</data>
<data name="menuMsgBoxClear.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxClear.Text" xml:space="preserve">
<value>清除所有</value>
</data>
<data name="menuMsgBoxAddRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
<value>快速添加路由规则 (Ctrl+V)</value>
</data>
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 22</value>
</data>
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
<value>设置信息过滤器</value>
</data>
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
<value>222, 136</value>
</data>
<data name="toolSslBlank1.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 17</value>
</data>
<data name="toolSslBlank2.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 17</value>
</data>
<data name="gbMsgTitle.Text" xml:space="preserve">
<value>信息</value>
</data>
<data name="toolSslServerSpeed.Text" xml:space="preserve">
<value>网速显示未启用</value>
</data>
</root>

View File

@@ -30,12 +30,13 @@
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MsgFilterSetForm));
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnFilderProxy = new System.Windows.Forms.Button();
this.btnFilterDirect = new System.Windows.Forms.Button();
this.txtMsgFilter = new System.Windows.Forms.TextBox();
this.panel2 = new System.Windows.Forms.Panel();
this.btnClose = new System.Windows.Forms.Button();
this.btnOK = new System.Windows.Forms.Button();
this.btnFilterDirect = new System.Windows.Forms.Button();
this.btnFilderProxy = new System.Windows.Forms.Button();
this.btnClear = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
@@ -49,6 +50,20 @@
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// btnFilderProxy
//
resources.ApplyResources(this.btnFilderProxy, "btnFilderProxy");
this.btnFilderProxy.Name = "btnFilderProxy";
this.btnFilderProxy.UseVisualStyleBackColor = true;
this.btnFilderProxy.Click += new System.EventHandler(this.btnFilderProxy_Click);
//
// btnFilterDirect
//
resources.ApplyResources(this.btnFilterDirect, "btnFilterDirect");
this.btnFilterDirect.Name = "btnFilterDirect";
this.btnFilterDirect.UseVisualStyleBackColor = true;
this.btnFilterDirect.Click += new System.EventHandler(this.btnFilterDirect_Click);
//
// txtMsgFilter
//
resources.ApplyResources(this.txtMsgFilter, "txtMsgFilter");
@@ -56,6 +71,7 @@
//
// panel2
//
this.panel2.Controls.Add(this.btnClear);
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
@@ -76,24 +92,18 @@
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// btnFilterDirect
// btnClear
//
resources.ApplyResources(this.btnFilterDirect, "btnFilterDirect");
this.btnFilterDirect.Name = "btnFilterDirect";
this.btnFilterDirect.UseVisualStyleBackColor = true;
this.btnFilterDirect.Click += new System.EventHandler(this.btnFilterDirect_Click);
//
// btnFilderProxy
//
resources.ApplyResources(this.btnFilderProxy, "btnFilderProxy");
this.btnFilderProxy.Name = "btnFilderProxy";
this.btnFilderProxy.UseVisualStyleBackColor = true;
this.btnFilderProxy.Click += new System.EventHandler(this.btnFilderProxy_Click);
resources.ApplyResources(this.btnClear, "btnClear");
this.btnClear.Name = "btnClear";
this.btnClear.UseVisualStyleBackColor = true;
this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
//
// MsgFilterSetForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.panel2);
this.Name = "MsgFilterSetForm";
@@ -114,5 +124,6 @@
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnFilderProxy;
private System.Windows.Forms.Button btnFilterDirect;
private System.Windows.Forms.Button btnClear;
}
}

View File

@@ -13,6 +13,7 @@ namespace v2rayN.Forms
public partial class MsgFilterSetForm : BaseForm
{
public string MsgFilter { get; set; }
public bool ShowDefFilter { get; set; }
public MsgFilterSetForm()
{
@@ -22,17 +23,19 @@ namespace v2rayN.Forms
private void MsgFilterSetForm_Load(object sender, EventArgs e)
{
txtMsgFilter.Text = MsgFilter;
btnFilderProxy.Visible =
btnFilterDirect.Visible = ShowDefFilter;
}
private void btnOK_Click(object sender, EventArgs e)
{
MsgFilter = txtMsgFilter.Text;
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void btnFilderProxy_Click(object sender, EventArgs e)
@@ -44,5 +47,11 @@ namespace v2rayN.Forms
{
txtMsgFilter.Text = "^(?!.*direct).*$";
}
private void btnClear_Click(object sender, EventArgs e)
{
MsgFilter = string.Empty;
DialogResult = DialogResult.OK;
}
}
}

View File

@@ -117,14 +117,78 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;btnFilderProxy.Name" xml:space="preserve">
<value>btnFilderProxy</value>
</data>
<data name="&gt;&gt;btnFilderProxy.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnFilderProxy.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnFilderProxy.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnFilterDirect.Name" xml:space="preserve">
<value>btnFilterDirect</value>
</data>
<data name="&gt;&gt;btnFilterDirect.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnFilterDirect.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;btnFilterDirect.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Name" xml:space="preserve">
<value>txtMsgFilter</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtMsgFilter.Parent" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;txtMsgFilter.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 76</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Filter</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnFilderProxy.Location" type="System.Drawing.Point, System.Drawing">
<value>157, 47</value>
</data>
<data name="btnFilderProxy.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnFilderProxy.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
@@ -143,7 +207,6 @@
<data name="&gt;&gt;btnFilderProxy.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnFilterDirect.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@@ -192,81 +255,33 @@
<data name="&gt;&gt;txtMsgFilter.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="btnClear.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<data name="btnClear.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 17</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 76</value>
<data name="btnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<data name="btnClear.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Filter</value>
<data name="btnClear.Text" xml:space="preserve">
<value>Clear</value>
</data>
<data name="&gt;&gt;groupBox1.Name" xml:space="preserve">
<value>groupBox1</value>
<data name="&gt;&gt;btnClear.Name" xml:space="preserve">
<value>btnClear</value>
</data>
<data name="&gt;&gt;groupBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnClose.Name" xml:space="preserve">
<value>btnClose</value>
</data>
<data name="&gt;&gt;btnClose.Type" xml:space="preserve">
<data name="&gt;&gt;btnClear.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnClose.Parent" xml:space="preserve">
<data name="&gt;&gt;btnClear.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<data name="&gt;&gt;btnClear.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnOK.Name" xml:space="preserve">
<value>btnOK</value>
</data>
<data name="&gt;&gt;btnOK.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnOK.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 76</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 60</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@@ -292,7 +307,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;btnClose.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@@ -319,6 +334,30 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 76</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>490, 60</value>
</data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View File

@@ -135,4 +135,7 @@
<data name="btnFilterDirect.Text" xml:space="preserve">
<value>过滤Direct</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>清空</value>
</data>
</root>

View File

@@ -68,6 +68,10 @@
this.txtKcpmtu = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.tabPage7 = new System.Windows.Forms.TabPage();
this.txttrayMenuServersLimit = new System.Windows.Forms.TextBox();
this.label17 = new System.Windows.Forms.Label();
this.txtautoUpdateSubInterval = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.chkEnableSecurityProtocolTls13 = new System.Windows.Forms.CheckBox();
this.chkEnableAutoAdjustMainLvColWidth = new System.Windows.Forms.CheckBox();
this.btnSetLoopback = new System.Windows.Forms.Button();
@@ -94,6 +98,8 @@
this.labCoreType1 = new System.Windows.Forms.Label();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label18 = new System.Windows.Forms.Label();
this.cmbSystemProxyAdvancedProtocol = new System.Windows.Forms.ComboBox();
this.label13 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.txtsystemProxyExceptions = new System.Windows.Forms.TextBox();
@@ -114,34 +120,33 @@
//
// btnClose
//
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// tabControl1
//
resources.ApplyResources(this.tabControl1, "tabControl1");
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage6);
this.tabControl1.Controls.Add(this.tabPage7);
this.tabControl1.Controls.Add(this.tabPageCoreType);
this.tabControl1.Controls.Add(this.tabPage3);
resources.ApplyResources(this.tabControl1, "tabControl1");
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
//
// tabPage1
//
resources.ApplyResources(this.tabPage1, "tabPage1");
this.tabPage1.Controls.Add(this.groupBox1);
resources.ApplyResources(this.tabPage1, "tabPage1");
this.tabPage1.Name = "tabPage1";
this.tabPage1.UseVisualStyleBackColor = true;
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.label16);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.txtpass);
@@ -158,6 +163,7 @@
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.txtlocalPort);
this.groupBox1.Controls.Add(this.label2);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -207,8 +213,8 @@
//
// cmbprotocol
//
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
this.cmbprotocol.FormattingEnabled = true;
this.cmbprotocol.Items.AddRange(new object[] {
resources.GetString("cmbprotocol.Items"),
@@ -234,7 +240,6 @@
//
// cmbloglevel
//
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbloglevel.FormattingEnabled = true;
this.cmbloglevel.Items.AddRange(new object[] {
@@ -243,6 +248,7 @@
resources.GetString("cmbloglevel.Items2"),
resources.GetString("cmbloglevel.Items3"),
resources.GetString("cmbloglevel.Items4")});
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
this.cmbloglevel.Name = "cmbloglevel";
//
// label5
@@ -262,10 +268,10 @@
//
// tabPage2
//
resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
this.tabPage2.Controls.Add(this.txtremoteDNS);
this.tabPage2.Controls.Add(this.label14);
resources.ApplyResources(this.tabPage2, "tabPage2");
this.tabPage2.Name = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
@@ -288,7 +294,6 @@
//
// tabPage6
//
resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Controls.Add(this.chkKcpcongestion);
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
this.tabPage6.Controls.Add(this.label10);
@@ -302,6 +307,7 @@
this.tabPage6.Controls.Add(this.label7);
this.tabPage6.Controls.Add(this.txtKcpmtu);
this.tabPage6.Controls.Add(this.label6);
resources.ApplyResources(this.tabPage6, "tabPage6");
this.tabPage6.Name = "tabPage6";
this.tabPage6.UseVisualStyleBackColor = true;
//
@@ -373,7 +379,10 @@
//
// tabPage7
//
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Controls.Add(this.txttrayMenuServersLimit);
this.tabPage7.Controls.Add(this.label17);
this.tabPage7.Controls.Add(this.txtautoUpdateSubInterval);
this.tabPage7.Controls.Add(this.label3);
this.tabPage7.Controls.Add(this.chkEnableSecurityProtocolTls13);
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
this.tabPage7.Controls.Add(this.btnSetLoopback);
@@ -385,9 +394,30 @@
this.tabPage7.Controls.Add(this.lbFreshrate);
this.tabPage7.Controls.Add(this.chkEnableStatistics);
this.tabPage7.Controls.Add(this.chkAutoRun);
resources.ApplyResources(this.tabPage7, "tabPage7");
this.tabPage7.Name = "tabPage7";
this.tabPage7.UseVisualStyleBackColor = true;
//
// txttrayMenuServersLimit
//
resources.ApplyResources(this.txttrayMenuServersLimit, "txttrayMenuServersLimit");
this.txttrayMenuServersLimit.Name = "txttrayMenuServersLimit";
//
// label17
//
resources.ApplyResources(this.label17, "label17");
this.label17.Name = "label17";
//
// txtautoUpdateSubInterval
//
resources.ApplyResources(this.txtautoUpdateSubInterval, "txtautoUpdateSubInterval");
this.txtautoUpdateSubInterval.Name = "txtautoUpdateSubInterval";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// chkEnableSecurityProtocolTls13
//
resources.ApplyResources(this.chkEnableSecurityProtocolTls13, "chkEnableSecurityProtocolTls13");
@@ -431,9 +461,9 @@
//
// cbFreshrate
//
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFreshrate.FormattingEnabled = true;
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
this.cbFreshrate.Name = "cbFreshrate";
//
// lbFreshrate
@@ -455,7 +485,6 @@
//
// tabPageCoreType
//
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
this.tabPageCoreType.Controls.Add(this.cmbCoreType6);
this.tabPageCoreType.Controls.Add(this.labCoreType6);
this.tabPageCoreType.Controls.Add(this.cmbCoreType5);
@@ -468,14 +497,15 @@
this.tabPageCoreType.Controls.Add(this.labCoreType2);
this.tabPageCoreType.Controls.Add(this.cmbCoreType1);
this.tabPageCoreType.Controls.Add(this.labCoreType1);
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
this.tabPageCoreType.Name = "tabPageCoreType";
this.tabPageCoreType.UseVisualStyleBackColor = true;
//
// cmbCoreType6
//
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
this.cmbCoreType6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType6.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
this.cmbCoreType6.Name = "cmbCoreType6";
//
// labCoreType6
@@ -485,9 +515,9 @@
//
// cmbCoreType5
//
resources.ApplyResources(this.cmbCoreType5, "cmbCoreType5");
this.cmbCoreType5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType5.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType5, "cmbCoreType5");
this.cmbCoreType5.Name = "cmbCoreType5";
//
// labCoreType5
@@ -497,9 +527,9 @@
//
// cmbCoreType4
//
resources.ApplyResources(this.cmbCoreType4, "cmbCoreType4");
this.cmbCoreType4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType4.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType4, "cmbCoreType4");
this.cmbCoreType4.Name = "cmbCoreType4";
//
// labCoreType4
@@ -509,9 +539,9 @@
//
// cmbCoreType3
//
resources.ApplyResources(this.cmbCoreType3, "cmbCoreType3");
this.cmbCoreType3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType3.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType3, "cmbCoreType3");
this.cmbCoreType3.Name = "cmbCoreType3";
//
// labCoreType3
@@ -521,9 +551,9 @@
//
// cmbCoreType2
//
resources.ApplyResources(this.cmbCoreType2, "cmbCoreType2");
this.cmbCoreType2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType2.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType2, "cmbCoreType2");
this.cmbCoreType2.Name = "cmbCoreType2";
//
// labCoreType2
@@ -533,9 +563,9 @@
//
// cmbCoreType1
//
resources.ApplyResources(this.cmbCoreType1, "cmbCoreType1");
this.cmbCoreType1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCoreType1.FormattingEnabled = true;
resources.ApplyResources(this.cmbCoreType1, "cmbCoreType1");
this.cmbCoreType1.Name = "cmbCoreType1";
//
// labCoreType1
@@ -545,20 +575,33 @@
//
// tabPage3
//
resources.ApplyResources(this.tabPage3, "tabPage3");
this.tabPage3.Controls.Add(this.groupBox2);
resources.ApplyResources(this.tabPage3, "tabPage3");
this.tabPage3.Name = "tabPage3";
this.tabPage3.UseVisualStyleBackColor = true;
//
// groupBox2
//
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.label18);
this.groupBox2.Controls.Add(this.cmbSystemProxyAdvancedProtocol);
this.groupBox2.Controls.Add(this.label13);
this.groupBox2.Controls.Add(this.label12);
this.groupBox2.Controls.Add(this.txtsystemProxyExceptions);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// cmbSystemProxyAdvancedProtocol
//
this.cmbSystemProxyAdvancedProtocol.FormattingEnabled = true;
resources.ApplyResources(this.cmbSystemProxyAdvancedProtocol, "cmbSystemProxyAdvancedProtocol");
this.cmbSystemProxyAdvancedProtocol.Name = "cmbSystemProxyAdvancedProtocol";
//
// label13
//
resources.ApplyResources(this.label13, "label13");
@@ -576,9 +619,9 @@
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.btnClose);
this.panel2.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// btnOK
@@ -697,5 +740,11 @@
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox txtpass;
private System.Windows.Forms.TextBox txtuser;
private System.Windows.Forms.TextBox txtautoUpdateSubInterval;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txttrayMenuServersLimit;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.ComboBox cmbSystemProxyAdvancedProtocol;
private System.Windows.Forms.Label label18;
}
}

View File

@@ -18,6 +18,8 @@ namespace v2rayN.Forms
private void OptionSettingForm_Load(object sender, EventArgs e)
{
cmbSystemProxyAdvancedProtocol.Items.AddRange(Global.IEProxyProtocols.ToArray());
InitBase();
InitKCP();
@@ -58,6 +60,8 @@ namespace v2rayN.Forms
chkdefAllowInsecure.Checked = config.defAllowInsecure;
txtsystemProxyExceptions.Text = config.systemProxyExceptions;
cmbSystemProxyAdvancedProtocol.Text = config.systemProxyAdvancedProtocol;
}
@@ -111,9 +115,12 @@ namespace v2rayN.Forms
}
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
chkEnableSecurityProtocolTls13.Checked = config.enableSecurityProtocolTls13;
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
txtautoUpdateSubInterval.Text = config.autoUpdateSubInterval.ToString();
txttrayMenuServersLimit.Text = config.trayMenuServersLimit.ToString();
}
private void InitCoreType()
@@ -170,7 +177,7 @@ namespace v2rayN.Forms
if (ConfigHandler.SaveConfig(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -250,6 +257,8 @@ namespace v2rayN.Forms
config.systemProxyExceptions = txtsystemProxyExceptions.Text.TrimEx();
config.systemProxyAdvancedProtocol = cmbSystemProxyAdvancedProtocol.Text.TrimEx();
return 0;
}
@@ -304,10 +313,12 @@ namespace v2rayN.Forms
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
config.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
config.uiItem.enableAutoAdjustMainLvColWidth = chkEnableAutoAdjustMainLvColWidth.Checked;
config.enableSecurityProtocolTls13 = chkEnableSecurityProtocolTls13.Checked;
config.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
config.autoUpdateSubInterval = Utils.ToInt(txtautoUpdateSubInterval.Text);
config.trayMenuServersLimit = Utils.ToInt(txttrayMenuServersLimit.Text);
return 0;
}
@@ -324,7 +335,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
@@ -337,6 +348,6 @@ namespace v2rayN.Forms
{
Process.Start(Utils.GetPath("EnableLoopback.exe"));
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -121,15 +121,120 @@
<value>取消(&amp;C)</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 469</value>
</data>
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value> Core:基础设置 </value>
</data>
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value> Core:DNS设置 </value>
</data>
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage6.Text" xml:space="preserve">
<value> Core:KCP设置 </value>
</data>
<data name="txttrayMenuServersLimit.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 211</value>
</data>
<data name="label17.Size" type="System.Drawing.Size, System.Drawing">
<value>185, 12</value>
</data>
<data name="label17.Text" xml:space="preserve">
<value>托盘右键菜单服务器展示数量限制</value>
</data>
<data name="txtautoUpdateSubInterval.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 184</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 12</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>自动更新订阅的间隔(单位小时)</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>
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
<value>自动调整服务器列宽在更新订阅后</value>
</data>
<data name="btnSetLoopback.Text" xml:space="preserve">
<value>解除Windows10 UWP应用回环代理限制</value>
</data>
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 157</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>191, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>自动更新Geo文件的间隔(单位小时)</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 16</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
<value>更新Core时忽略Geo文件</value>
</data>
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 16</value>
</data>
<data name="chkKeepOlderDedupl.Text" xml:space="preserve">
<value>去重时保留序号较小的项</value>
</data>
<data name="cbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
<value>431, 37</value>
</data>
<data name="lbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
<value>339, 41</value>
</data>
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 12</value>
</data>
<data name="lbFreshrate.Text" xml:space="preserve">
<value>统计刷新频率</value>
</data>
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 16</value>
</data>
<data name="chkEnableStatistics.Text" xml:space="preserve">
<value>启用统计(实时网速显示和使用流量显示,需要重启)</value>
</data>
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 16</value>
</data>
<data name="chkAutoRun.Text" xml:space="preserve">
<value>开机自动启动(可能会不成功)</value>
</data>
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage7.Text" xml:space="preserve">
<value> v2rayN设置 </value>
</data>
<data name="tabPageCoreType.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPageCoreType.Text" xml:space="preserve">
<value> Core类型设置 </value>
</data>
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value> 系统代理设置 </value>
</data>
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>662, 469</value>
</data>
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 437</value>
</data>
@@ -220,12 +325,6 @@
<data name="label2.Text" xml:space="preserve">
<value>本地监听端口</value>
</data>
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value> Core:DNS设置 </value>
</data>
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
<value>161, 12</value>
</data>
@@ -238,81 +337,6 @@
<data name="label14.Text" xml:space="preserve">
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
</data>
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage6.Text" xml:space="preserve">
<value> Core:KCP设置 </value>
</data>
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage7.Text" xml:space="preserve">
<value> v2rayN设置 </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>
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
<value>自动调整服务器列宽在更新订阅后</value>
</data>
<data name="btnSetLoopback.Text" xml:space="preserve">
<value>解除Windows10 UWP应用回环代理限制</value>
</data>
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
<value>274, 134</value>
</data>
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
<value>227, 12</value>
</data>
<data name="label15.Text" xml:space="preserve">
<value>自动更新订阅和Geo文件的间隔(单位小时)</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 16</value>
</data>
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
<value>更新Core时忽略Geo文件</value>
</data>
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 16</value>
</data>
<data name="chkKeepOlderDedupl.Text" xml:space="preserve">
<value>去重时保留序号较小的项</value>
</data>
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 12</value>
</data>
<data name="lbFreshrate.Text" xml:space="preserve">
<value>统计刷新频率</value>
</data>
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
<value>372, 16</value>
</data>
<data name="chkEnableStatistics.Text" xml:space="preserve">
<value>启用统计(实时网速显示和使用流量显示需要重启v2rayN客户端)</value>
</data>
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 16</value>
</data>
<data name="chkAutoRun.Text" xml:space="preserve">
<value>开机自动启动(可能会不成功)</value>
</data>
<data name="tabPageCoreType.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPageCoreType.Text" xml:space="preserve">
<value> Core类型设置 </value>
</data>
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
<data name="tabPage3.Text" xml:space="preserve">
<value> 系统代理设置 </value>
</data>
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
<value>654, 443</value>
</data>
@@ -349,4 +373,7 @@
<data name="$this.Text" xml:space="preserve">
<value>参数设置</value>
</data>
<data name="label18.Text" xml:space="preserve">
<value>高级代理设置, 协议选择(可选)</value>
</data>
</root>

View File

@@ -42,6 +42,7 @@
this.label4 = new System.Windows.Forms.Label();
this.cmbOutboundTag = new System.Windows.Forms.ComboBox();
this.panel4 = new System.Windows.Forms.Panel();
this.chkAutoSort = new System.Windows.Forms.CheckBox();
this.btnClose = new System.Windows.Forms.Button();
this.btnOK = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
@@ -49,6 +50,7 @@
this.txtIP = new System.Windows.Forms.TextBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtDomain = new System.Windows.Forms.TextBox();
this.linkRuleobjectDoc = new System.Windows.Forms.LinkLabel();
this.panel3.SuspendLayout();
this.panel4.SuspendLayout();
this.panel2.SuspendLayout();
@@ -63,7 +65,7 @@
//
// panel3
//
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Controls.Add(this.linkRuleobjectDoc);
this.panel3.Controls.Add(this.chkEnabled);
this.panel3.Controls.Add(this.clbInboundTag);
this.panel3.Controls.Add(this.label2);
@@ -74,6 +76,7 @@
this.panel3.Controls.Add(this.labRoutingTips);
this.panel3.Controls.Add(this.label4);
this.panel3.Controls.Add(this.cmbOutboundTag);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// chkEnabled
@@ -84,12 +87,14 @@
//
// clbInboundTag
//
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
this.clbInboundTag.CheckOnClick = true;
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
this.clbInboundTag.FormattingEnabled = true;
this.clbInboundTag.Items.AddRange(new object[] {
resources.GetString("clbInboundTag.Items"),
resources.GetString("clbInboundTag.Items1")});
resources.GetString("clbInboundTag.Items1"),
resources.GetString("clbInboundTag.Items2"),
resources.GetString("clbInboundTag.Items3")});
this.clbInboundTag.MultiColumn = true;
this.clbInboundTag.Name = "clbInboundTag";
//
@@ -100,8 +105,8 @@
//
// clbProtocol
//
resources.ApplyResources(this.clbProtocol, "clbProtocol");
this.clbProtocol.CheckOnClick = true;
resources.ApplyResources(this.clbProtocol, "clbProtocol");
this.clbProtocol.FormattingEnabled = true;
this.clbProtocol.Items.AddRange(new object[] {
resources.GetString("clbProtocol.Items"),
@@ -127,8 +132,8 @@
//
// labRoutingTips
//
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
this.labRoutingTips.Name = "labRoutingTips";
//
// label4
@@ -138,26 +143,33 @@
//
// cmbOutboundTag
//
resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbOutboundTag.FormattingEnabled = true;
this.cmbOutboundTag.Items.AddRange(new object[] {
resources.GetString("cmbOutboundTag.Items"),
resources.GetString("cmbOutboundTag.Items1"),
resources.GetString("cmbOutboundTag.Items2")});
resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
this.cmbOutboundTag.Name = "cmbOutboundTag";
//
// panel4
//
resources.ApplyResources(this.panel4, "panel4");
this.panel4.Controls.Add(this.chkAutoSort);
this.panel4.Controls.Add(this.btnClose);
this.panel4.Controls.Add(this.btnOK);
resources.ApplyResources(this.panel4, "panel4");
this.panel4.Name = "panel4";
//
// chkAutoSort
//
resources.ApplyResources(this.chkAutoSort, "chkAutoSort");
this.chkAutoSort.Name = "chkAutoSort";
this.chkAutoSort.UseVisualStyleBackColor = true;
//
// btnClose
//
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
resources.ApplyResources(this.btnClose, "btnClose");
this.btnClose.Name = "btnClose";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
@@ -171,15 +183,15 @@
//
// panel2
//
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Controls.Add(this.groupBox2);
this.panel2.Controls.Add(this.groupBox1);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// groupBox2
//
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Controls.Add(this.txtIP);
resources.ApplyResources(this.groupBox2, "groupBox2");
this.groupBox2.Name = "groupBox2";
this.groupBox2.TabStop = false;
//
@@ -190,8 +202,8 @@
//
// groupBox1
//
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Controls.Add(this.txtDomain);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
@@ -200,6 +212,13 @@
resources.ApplyResources(this.txtDomain, "txtDomain");
this.txtDomain.Name = "txtDomain";
//
// linkRuleobjectDoc
//
resources.ApplyResources(this.linkRuleobjectDoc, "linkRuleobjectDoc");
this.linkRuleobjectDoc.Name = "linkRuleobjectDoc";
this.linkRuleobjectDoc.TabStop = true;
this.linkRuleobjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkRuleobjectDoc_LinkClicked);
//
// RoutingRuleSettingDetailsForm
//
resources.ApplyResources(this, "$this");
@@ -214,6 +233,7 @@
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.panel4.ResumeLayout(false);
this.panel4.PerformLayout();
this.panel2.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
@@ -245,5 +265,7 @@
private System.Windows.Forms.CheckedListBox clbInboundTag;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox chkEnabled;
private System.Windows.Forms.CheckBox chkAutoSort;
private System.Windows.Forms.LinkLabel linkRuleobjectDoc;
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
using v2rayN.Base;
using v2rayN.Handler;
@@ -48,8 +49,16 @@ namespace v2rayN.Forms
}
rulesItem.inboundTag = inboundTag;
rulesItem.outboundTag = cmbOutboundTag.Text;
rulesItem.domain = Utils.String2ListSorted(txtDomain.Text);
rulesItem.ip = Utils.String2ListSorted(txtIP.Text);
if (chkAutoSort.Checked)
{
rulesItem.domain = Utils.String2ListSorted(txtDomain.Text);
rulesItem.ip = Utils.String2ListSorted(txtIP.Text);
}
else
{
rulesItem.domain = Utils.String2List(txtDomain.Text);
rulesItem.ip = Utils.String2List(txtIP.Text);
}
var protocol = new List<string>();
for (int i = 0; i < clbProtocol.Items.Count; i++)
@@ -107,34 +116,33 @@ namespace v2rayN.Forms
private void btnOK_Click(object sender, EventArgs e)
{
EndBindingData();
var hasRule = false;
if (rulesItem.domain != null && rulesItem.domain.Count > 0)
{
hasRule = true;
}
if (rulesItem.ip != null && rulesItem.ip.Count > 0)
{
hasRule = true;
}
if (rulesItem.protocol != null && rulesItem.protocol.Count > 0)
{
hasRule = true;
}
if (!Utils.IsNullOrEmpty(rulesItem.port))
{
hasRule = true;
}
bool hasRule =
rulesItem.domain != null
&& rulesItem.domain.Count > 0
|| rulesItem.ip != null
&& rulesItem.ip.Count > 0
|| rulesItem.protocol != null
&& rulesItem.protocol.Count > 0
|| !Utils.IsNullOrEmpty(rulesItem.port);
if (!hasRule)
{
UI.ShowWarning(string.Format(ResUI.RoutingRuleDetailRequiredTips, "Port/Protocol/Domain/IP"));
return;
}
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void linkRuleobjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://www.v2fly.org/config/routing.html#ruleobject");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -170,4 +170,10 @@
<data name="$this.Text" xml:space="preserve">
<value>路由规则详情设置</value>
</data>
<data name="chkAutoSort.Text" xml:space="preserve">
<value>保存时Domain和IP自动排序</value>
</data>
<data name="linkRuleobjectDoc.Text" xml:space="preserve">
<value>规则详细说明文档</value>
</data>
</root>

View File

@@ -15,9 +15,9 @@ namespace v2rayN.Forms
{
get; set;
}
protected RoutingItem routingItem = null;
protected RoutingItem routingItem;
private List<int> lvSelecteds = new List<int>();
private readonly List<int> lvSelecteds = new List<int>();
public RoutingRuleSettingForm()
{
InitializeComponent();
@@ -25,14 +25,7 @@ namespace v2rayN.Forms
private void RoutingRuleSettingForm_Load(object sender, EventArgs e)
{
if (EditIndex >= 0)
{
routingItem = config.routings[EditIndex];
}
else
{
routingItem = new RoutingItem();
}
routingItem = EditIndex >= 0 ? config.routings[EditIndex] : new RoutingItem();
if (routingItem.rules == null)
{
routingItem.rules = new List<RulesItem>();
@@ -86,10 +79,8 @@ namespace v2rayN.Forms
lvRoutings.BeginUpdate();
lvRoutings.Items.Clear();
for (int k = 0; k < routingItem.rules.Count; k++)
foreach (var item in routingItem.rules)
{
var item = routingItem.rules[k];
ListViewItem lvItem = new ListViewItem("");
Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
Utils.AddSubItem(lvItem, "port", item.port);
@@ -112,7 +103,7 @@ namespace v2rayN.Forms
if (ConfigHandler.AddRoutingItem(ref config, routingItem, EditIndex) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -122,7 +113,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void btnBrowse_Click(object sender, EventArgs e)
{

View File

@@ -10,8 +10,8 @@ namespace v2rayN.Forms
{
public partial class RoutingSettingForm : BaseForm
{
private List<int> lvSelecteds = new List<int>();
private RoutingItem lockedItem;
private readonly List<int> _lvSelecteds = new List<int>();
private RoutingItem _lockedItem;
public RoutingSettingForm()
{
InitializeComponent();
@@ -58,7 +58,7 @@ namespace v2rayN.Forms
if (ConfigHandler.SaveRouting(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -68,7 +68,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void chkenableRoutingAdvanced_CheckedChanged_1(object sender, EventArgs e)
{
@@ -78,20 +78,20 @@ namespace v2rayN.Forms
{
if (chkenableRoutingAdvanced.Checked)
{
this.tabPageProxy.Parent = null;
this.tabPageDirect.Parent = null;
this.tabPageBlock.Parent = null;
this.tabPageRuleList.Parent = tabNormal;
tabPageProxy.Parent = null;
tabPageDirect.Parent = null;
tabPageBlock.Parent = null;
tabPageRuleList.Parent = tabNormal;
MenuItemBasic.Enabled = false;
MenuItemAdvanced.Enabled = true;
}
else
{
this.tabPageProxy.Parent = tabNormal;
this.tabPageDirect.Parent = tabNormal;
this.tabPageBlock.Parent = tabNormal;
this.tabPageRuleList.Parent = null;
tabPageProxy.Parent = tabNormal;
tabPageDirect.Parent = tabNormal;
tabPageBlock.Parent = tabNormal;
tabPageRuleList.Parent = null;
MenuItemBasic.Enabled = true;
MenuItemAdvanced.Enabled = false;
}
@@ -102,31 +102,31 @@ namespace v2rayN.Forms
#region locked
private void BindingLockedData()
{
lockedItem = ConfigHandler.GetLockedRoutingItem(ref config);
if (lockedItem != null)
_lockedItem = ConfigHandler.GetLockedRoutingItem(ref config);
if (_lockedItem != null)
{
txtProxyDomain.Text = Utils.List2String(lockedItem.rules[0].domain, true);
txtProxyIp.Text = Utils.List2String(lockedItem.rules[0].ip, true);
txtProxyDomain.Text = Utils.List2String(_lockedItem.rules[0].domain, true);
txtProxyIp.Text = Utils.List2String(_lockedItem.rules[0].ip, true);
txtDirectDomain.Text = Utils.List2String(lockedItem.rules[1].domain, true);
txtDirectIp.Text = Utils.List2String(lockedItem.rules[1].ip, true);
txtDirectDomain.Text = Utils.List2String(_lockedItem.rules[1].domain, true);
txtDirectIp.Text = Utils.List2String(_lockedItem.rules[1].ip, true);
txtBlockDomain.Text = Utils.List2String(lockedItem.rules[2].domain, true);
txtBlockIp.Text = Utils.List2String(lockedItem.rules[2].ip, true);
txtBlockDomain.Text = Utils.List2String(_lockedItem.rules[2].domain, true);
txtBlockIp.Text = Utils.List2String(_lockedItem.rules[2].ip, true);
}
}
private void EndBindingLockedData()
{
if (lockedItem != null)
if (_lockedItem != null)
{
lockedItem.rules[0].domain = Utils.String2List(txtProxyDomain.Text.TrimEx());
lockedItem.rules[0].ip = Utils.String2List(txtProxyIp.Text.TrimEx());
_lockedItem.rules[0].domain = Utils.String2List(txtProxyDomain.Text.TrimEx());
_lockedItem.rules[0].ip = Utils.String2List(txtProxyIp.Text.TrimEx());
lockedItem.rules[1].domain = Utils.String2List(txtDirectDomain.Text.TrimEx());
lockedItem.rules[1].ip = Utils.String2List(txtDirectIp.Text.TrimEx());
_lockedItem.rules[1].domain = Utils.String2List(txtDirectDomain.Text.TrimEx());
_lockedItem.rules[1].ip = Utils.String2List(txtDirectIp.Text.TrimEx());
lockedItem.rules[2].domain = Utils.String2List(txtBlockDomain.Text.TrimEx());
lockedItem.rules[2].ip = Utils.String2List(txtBlockIp.Text.TrimEx());
_lockedItem.rules[2].domain = Utils.String2List(txtBlockDomain.Text.TrimEx());
_lockedItem.rules[2].ip = Utils.String2List(txtBlockIp.Text.TrimEx());
}
}
@@ -207,7 +207,7 @@ namespace v2rayN.Forms
private int GetLvSelectedIndex()
{
int index = -1;
lvSelecteds.Clear();
_lvSelecteds.Clear();
try
{
if (lvRoutings.SelectedIndices.Count <= 0)
@@ -219,7 +219,7 @@ namespace v2rayN.Forms
index = lvRoutings.SelectedIndices[0];
foreach (int i in lvRoutings.SelectedIndices)
{
lvSelecteds.Add(i);
_lvSelecteds.Add(i);
}
return index;
}
@@ -264,7 +264,7 @@ namespace v2rayN.Forms
{
return;
}
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
for (int k = _lvSelecteds.Count - 1; k >= 0; k--)
{
config.routings.RemoveAt(index);
}

View File

@@ -9,7 +9,7 @@ namespace v2rayN.Forms
public partial class ServerTransportControl : UserControl
{
public bool AllowXtls { get; set; }
private VmessItem vmessItem = null;
private VmessItem vmessItem;
public ServerTransportControl()
{

View File

@@ -26,7 +26,7 @@ namespace v2rayN.Forms
private void SubSettingControl_Load(object sender, EventArgs e)
{
this.Height = grbMain.Height;
Height = grbMain.Height;
groupItem = LazyConfig.Instance.GetConfig().groupItem;
@@ -90,7 +90,7 @@ namespace v2rayN.Forms
private void btnShare_Click(object sender, EventArgs e)
{
if (this.Height <= grbMain.Height)
if (Height <= grbMain.Height)
{
if (Utils.IsNullOrEmpty(subItem.url))
{
@@ -98,11 +98,11 @@ namespace v2rayN.Forms
return;
}
picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url);
this.Height = grbMain.Height + 200;
Height = grbMain.Height + 200;
}
else
{
this.Height = grbMain.Height;
Height = grbMain.Height;
}
}
}

View File

@@ -71,7 +71,7 @@ namespace v2rayN.Forms
{
if (ConfigHandler.SaveSubItem(ref config) == 0)
{
this.DialogResult = DialogResult.OK;
DialogResult = DialogResult.OK;
}
else
{
@@ -81,7 +81,7 @@ namespace v2rayN.Forms
private void btnClose_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
private void btnAdd_Click(object sender, EventArgs e)

View File

@@ -17,6 +17,8 @@ namespace v2rayN
public const string clashCoreUrl = "https://github.com/Dreamacro/clash/releases";
public const string clashMetaCoreUrl = "https://github.com/MetaCubeX/Clash.Meta/releases";
public const string hysteriaCoreUrl = "https://github.com/HyNetwork/hysteria/releases";
public const string naiveproxyCoreUrl = "https://github.com/klzgrad/naiveproxy/releases";
public const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
@@ -65,9 +67,10 @@ namespace v2rayN
/// </summary>
public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt";
public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_";
public const string v2raySampleInbound = "v2rayN.Sample.SampleInbound.txt";
/// <summary>
/// 默认加密方式
@@ -112,6 +115,7 @@ namespace v2rayN
public const string InboundSocks = "socks";
public const string InboundHttp = "http";
public const string InboundSocks2 = "socks2";
public const string InboundHttp2 = "http2";
public const string Loopback = "127.0.0.1";
public const string InboundAPITagName = "api";
@@ -196,12 +200,19 @@ namespace v2rayN
public const string StatisticLogOverall = "StatisticLogOverall.json";
public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*";
public static readonly List<string> IEProxyProtocols = new List<string> {
"{ip}:{http_port}",
"socks={ip}:{socks_port}",
"http={ip}:{http_port};https={ip}:{http_port};ftp={ip}:{http_port};socks={ip}:{socks_port}",
"http=http://{ip}:{http_port};https=http://{ip}:{http_port}",
""
};
public const string RoutingRuleComma = "<COMMA>";
public static readonly List<string> vmessSecuritys = new List<string> { "aes-128-gcm", "chacha20-poly1305", "auto", "none", "zero" };
public static readonly List<string> ssSecuritys = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" };
public static readonly List<string> ssSecuritysInXray = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "none", "plain" };
public static readonly List<string> ssSecuritysInXray = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "none", "plain", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" };
public static readonly List<string> xtlsFlows = new List<string> { "", "xtls-rprx-origin", "xtls-rprx-origin-udp443", "xtls-rprx-direct", "xtls-rprx-direct-udp443" };
public static readonly List<string> networks = new List<string> { "tcp", "kcp", "ws", "h2", "quic", "grpc" };
public static readonly List<string> kcpHeaderTypes = new List<string> { "srtp", "utp", "wechat-video", "dtls", "wireguard" };

View File

@@ -6,6 +6,7 @@ using v2rayN.Mode;
using v2rayN.Base;
using System.Linq;
using v2rayN.Tool;
using System.Threading.Tasks;
namespace v2rayN.Handler
{
@@ -207,7 +208,28 @@ namespace v2rayN.Handler
{
lock (objLock)
{
Utils.ToJsonFile(config, Utils.GetPath(configRes));
try
{
//save temp file
var resPath = Utils.GetPath(configRes);
var tempPath = $"{resPath}_temp";
if (Utils.ToJsonFile(config, tempPath) != 0)
{
return;
}
if (File.Exists(resPath))
{
File.Delete(resPath);
}
//rename
File.Move(tempPath, resPath);
}
catch (Exception ex)
{
Utils.SaveLog("ToJsonFile", ex);
}
}
}
@@ -282,9 +304,19 @@ namespace v2rayN.Handler
{
VmessItem vmessItem = Utils.DeepCopy(item);
vmessItem.indexId = string.Empty;
vmessItem.remarks = string.Format("{0}-clone", item.remarks);
vmessItem.remarks = $"{item.remarks}-clone";
AddServerCommon(ref config, vmessItem);
if (vmessItem.configType == EConfigType.Custom)
{
vmessItem.address = Utils.GetConfigPath(vmessItem.address);
if (AddCustomServer(ref config, vmessItem, false) == 0)
{
}
}
else
{
AddServerCommon(ref config, vmessItem);
}
}
ToJsonFile(config);
@@ -437,12 +469,12 @@ namespace v2rayN.Handler
return -1;
}
var ext = Path.GetExtension(fileName);
string newFileName = string.Format("{0}{1}", Utils.GetGUID(), ext);
string newFileName = $"{Utils.GetGUID()}{ext}";
//newFileName = Path.Combine(Utils.GetTempPath(), newFileName);
try
{
File.Copy(fileName, Path.Combine(Utils.GetConfigPath(), newFileName));
File.Copy(fileName, Utils.GetConfigPath(newFileName));
if (blDelete)
{
File.Delete(fileName);
@@ -457,7 +489,7 @@ namespace v2rayN.Handler
vmessItem.configType = EConfigType.Custom;
if (Utils.IsNullOrEmpty(vmessItem.remarks))
{
vmessItem.remarks = string.Format("import custom@{0}", DateTime.Now.ToShortDateString());
vmessItem.remarks = $"import custom@{DateTime.Now.ToShortDateString()}";
}
@@ -782,7 +814,7 @@ namespace v2rayN.Handler
&& o.path == n.path
&& o.streamSecurity == n.streamSecurity
&& o.flow == n.flow
&& (remarks ? o.remarks == n.remarks : true);
&& (!remarks || o.remarks == n.remarks);
}
private static int RemoveVmessItem(Config config, int index)
@@ -940,14 +972,39 @@ namespace v2rayN.Handler
vmessItem.address = fileName;
vmessItem.remarks = "clash_custom";
}
//Is hysteria configuration
else if (clipboardData.IndexOf("server") >= 0
&& clipboardData.IndexOf("up") >= 0
&& clipboardData.IndexOf("down") >= 0
&& clipboardData.IndexOf("listen") >= 0)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, clipboardData);
vmessItem.coreType = ECoreType.hysteria;
vmessItem.address = fileName;
vmessItem.remarks = "hysteria_custom";
}
//Is naiveproxy configuration
else if (clipboardData.IndexOf("listen") >= 0
&& clipboardData.IndexOf("proxy") >= 0)
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
File.WriteAllText(fileName, clipboardData);
vmessItem.coreType = ECoreType.naiveproxy;
vmessItem.address = fileName;
vmessItem.remarks = "naiveproxy_custom";
}
//Is Other configuration
else
{
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.txt");
File.WriteAllText(fileName, clipboardData);
return -1;
//var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.txt");
//File.WriteAllText(fileName, clipboardData);
vmessItem.address = fileName;
vmessItem.remarks = "other_custom";
//vmessItem.address = fileName;
//vmessItem.remarks = "other_custom";
}
if (!Utils.IsNullOrEmpty(subid))
@@ -977,6 +1034,56 @@ namespace v2rayN.Handler
}
}
private static int AddBatchServers4SsSIP008(ref Config config, string clipboardData, string subid, List<VmessItem> lstOriSub, string groupId)
{
if (Utils.IsNullOrEmpty(clipboardData))
{
return -1;
}
if (!Utils.IsNullOrEmpty(subid))
{
RemoveServerViaSubid(ref config, subid);
}
//SsSIP008
var lstSsServer = Utils.FromJson<List<SsServer>>(clipboardData);
if (lstSsServer == null || lstSsServer.Count <= 0)
{
var ssSIP008 = Utils.FromJson<SsSIP008>(clipboardData);
if (ssSIP008?.servers != null && ssSIP008.servers.Count > 0)
{
lstSsServer = ssSIP008.servers;
}
}
if (lstSsServer != null && lstSsServer.Count > 0)
{
int counter = 0;
foreach (var it in lstSsServer)
{
var ssItem = new VmessItem()
{
subid = subid,
groupId = groupId,
remarks = it.remarks,
security = it.method,
id = it.password,
address = it.server,
port = Utils.ToInt(it.server_port)
};
if (AddShadowsocksServer(ref config, ssItem, false) == 0)
{
counter++;
}
}
ToJsonFile(config);
return counter;
}
return -1;
}
public static int AddBatchServers(ref Config config, string clipboardData, string subid, string groupId)
{
List<VmessItem> lstOriSub = null;
@@ -991,6 +1098,11 @@ namespace v2rayN.Handler
counter = AddBatchServers(ref config, Utils.Base64Decode(clipboardData), subid, lstOriSub, groupId);
}
if (counter < 1)
{
counter = AddBatchServers4SsSIP008(ref config, clipboardData, subid, lstOriSub, groupId);
}
//maybe other sub
if (counter < 1)
{
@@ -1042,12 +1154,9 @@ namespace v2rayN.Handler
return -1;
}
foreach (SubItem item in config.subItem)
foreach (var item in config.subItem.Where(item => Utils.IsNullOrEmpty(item.id)))
{
if (Utils.IsNullOrEmpty(item.id))
{
item.id = Utils.GetGUID(false);
}
item.id = Utils.GetGUID(false);
}
ToJsonFile(config);
@@ -1091,12 +1200,9 @@ namespace v2rayN.Handler
return -1;
}
foreach (GroupItem item in config.groupItem)
foreach (var item in config.groupItem.Where(item => Utils.IsNullOrEmpty(item.id)))
{
if (Utils.IsNullOrEmpty(item.id))
{
item.id = Utils.GetGUID(false);
}
item.id = Utils.GetGUID(false);
}
ToJsonFile(config);
@@ -1206,6 +1312,10 @@ namespace v2rayN.Handler
{
config.routingIndex = 0;
}
if (config.trayMenuServersLimit <= 0)
{
config.trayMenuServersLimit = 30;
}
Global.reloadV2ray = true;

View File

@@ -29,8 +29,8 @@ namespace v2rayN.Handler
public ResultEventArgs(bool success, string msg)
{
this.Success = success;
this.Msg = msg;
Success = success;
Msg = msg;
}
}
@@ -46,12 +46,12 @@ namespace v2rayN.Handler
Proxy = webProxy
});
var progress = new Progress<double>();
var progress = new Progress<string>();
progress.ProgressChanged += (sender, value) =>
{
if (UpdateCompleted != null)
{
string msg = string.Format("{0} M/s", value.ToString("#0.0")).PadLeft(9, ' ');
string msg = $"{value} M/s".PadLeft(9, ' ');
UpdateCompleted(this, new ResultEventArgs(false, msg));
}
};
@@ -88,7 +88,7 @@ namespace v2rayN.Handler
{
if (UpdateCompleted != null)
{
string msg = string.Format("...{0}%", value);
string msg = $"...{value}%";
UpdateCompleted(this, new ResultEventArgs(value > 100 ? true : false, msg));
}
};
@@ -156,7 +156,11 @@ namespace v2rayN.Handler
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Utils.Base64Encode(uri.UserInfo));
}
var result = await HttpClientHelper.GetInstance().GetAsync(client, url);
var cts = new CancellationTokenSource();
cts.CancelAfter(1000 * 30);
var result = await HttpClientHelper.GetInstance().GetAsync(client, url, cts.Token);
return result;
}
catch (Exception ex)
@@ -172,7 +176,7 @@ namespace v2rayN.Handler
{
if (webProxy == null)
{
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2);
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
webProxy = new WebProxy(Global.Loopback, httpPort);
}
@@ -202,7 +206,7 @@ namespace v2rayN.Handler
try
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
myHttpWebRequest.Timeout = 5000;
myHttpWebRequest.Timeout = 30 * 1000;
myHttpWebRequest.Proxy = webProxy;
Stopwatch timer = new Stopwatch();
@@ -233,7 +237,7 @@ namespace v2rayN.Handler
{
return null;
}
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2);
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
var webProxy = new WebProxy(Global.Loopback, httpPort);
if (RunAvailabilityCheck(webProxy) > 0)
{

View File

@@ -11,10 +11,8 @@ namespace v2rayN.Handler
private Config _config;
private List<CoreInfo> coreInfos;
public static LazyConfig Instance
{
get { return _instance.Value; }
}
public static LazyConfig Instance => _instance.Value;
public void SetConfig(ref Config config)
{
_config = config;
@@ -66,12 +64,24 @@ namespace v2rayN.Handler
{
coreInfos = new List<CoreInfo>();
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.v2rayN,
coreUrl = Global.NUrl,
coreLatestUrl = Global.NUrl + "/latest",
coreDownloadUrl32 = Global.NUrl + "/download/{0}/v2rayN.zip",
coreDownloadUrl64 = Global.NUrl + "/download/{0}/v2rayN.zip",
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.v2fly,
coreExes = new List<string> { "wv2ray", "v2ray" },
arguments = "",
coreUrl = Global.v2flyCoreUrl,
coreLatestUrl = Global.v2flyCoreUrl + "/latest",
coreDownloadUrl32 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
coreDownloadUrl64 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
match = "V2Ray"
});
@@ -81,24 +91,33 @@ namespace v2rayN.Handler
coreExes = new List<string> { "xray" },
arguments = "",
coreUrl = Global.xrayCoreUrl,
coreLatestUrl = Global.xrayCoreUrl + "/latest",
coreDownloadUrl32 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
coreDownloadUrl64 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
match = "Xray"
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.clash,
coreExes = new List<string> { "clash-windows-amd64", "clash-windows-386", "clash" },
coreExes = new List<string> { "clash-windows-amd64-v3", "clash-windows-amd64", "clash-windows-386", "clash" },
arguments = "-f config.json",
coreUrl = Global.clashCoreUrl
coreUrl = Global.clashCoreUrl,
coreLatestUrl = Global.clashCoreUrl + "/latest",
coreDownloadUrl32 = Global.clashCoreUrl + "/download/{0}/clash-windows-386-{0}.zip",
coreDownloadUrl64 = Global.clashCoreUrl + "/download/{0}/clash-windows-amd64-{0}.zip",
match = "v"
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.clash_meta,
coreExes = new List<string> { "Clash.Meta-windows-amd64v1", "Clash.Meta-windows-amd64", "Clash.Meta-windows-386", "Clash.Meta", "clash" },
arguments = "-f config.yaml",
arguments = "-f config.json",
coreUrl = Global.clashMetaCoreUrl,
match = "Clash Meta"
coreLatestUrl = Global.clashMetaCoreUrl + "/latest",
coreDownloadUrl32 = Global.clashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-386-{0}.zip",
coreDownloadUrl64 = Global.clashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-amd64-compatible-{0}.zip",
});
coreInfos.Add(new CoreInfo
@@ -106,7 +125,18 @@ namespace v2rayN.Handler
coreType = ECoreType.hysteria,
coreExes = new List<string> { "hysteria-tun-windows-6.0-amd64", "hysteria-tun-windows-6.0-386", "hysteria" },
arguments = "",
coreUrl = Global.hysteriaCoreUrl
coreUrl = Global.hysteriaCoreUrl,
coreLatestUrl = Global.hysteriaCoreUrl + "/latest",
coreDownloadUrl32 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-tun-windows-6.0-386.exe",
coreDownloadUrl64 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-tun-windows-6.0-amd64.exe",
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.naiveproxy,
coreExes = new List<string> { "naiveproxy", "naive" },
arguments = "config.json",
coreUrl = Global.naiveproxyCoreUrl
});
}

View File

@@ -24,20 +24,65 @@ namespace v2rayN.Handler
//private List<int> _selecteds;
//private Thread _workThread;
//Action<int, string> _updateFunc;
public static MainFormHandler Instance
{
get { return instance.Value; }
}
public static MainFormHandler Instance => instance.Value;
public Icon GetNotifyIcon(Config config, Icon def)
{
try
{
int index = (int)config.sysProxyType;
//Load from routing setting
var createdIcon = GetNotifyIcon4Routing(config);
if (createdIcon != null)
{
return createdIcon;
}
//Load from local file
var fileName = Utils.GetPath($"NotifyIcon{index + 1}.ico");
if (File.Exists(fileName))
{
return new Icon(fileName);
}
switch (index)
{
case 0:
return Properties.Resources.NotifyIcon1;
case 1:
return Properties.Resources.NotifyIcon2;
case 2:
return Properties.Resources.NotifyIcon3;
}
return Properties.Resources.NotifyIcon1;
}
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
return def;
}
}
private Icon GetNotifyIcon4Routing(Config config)
{
try
{
if (!config.enableRoutingAdvanced)
{
return null;
}
var item = config.routings[config.routingIndex];
if (Utils.IsNullOrEmpty(item.customIcon) || !File.Exists(item.customIcon))
{
return null;
}
Color color = ColorTranslator.FromHtml("#3399CC");
int index = (int)config.sysProxyType;
if (index > 0)
{
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
//color = ColorTranslator.FromHtml(new string[] { "#CC0066", "#CC6600", "#99CC99", "#666699" }[index - 1]);
color = (new[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
}
int width = 128;
@@ -47,23 +92,10 @@ namespace v2rayN.Handler
Graphics graphics = Graphics.FromImage(bitmap);
SolidBrush drawBrush = new SolidBrush(color);
var customIcon = false;
if (config.enableRoutingAdvanced)
{
var item = config.routings[config.routingIndex];
if (!Utils.IsNullOrEmpty(item.customIcon) && File.Exists(item.customIcon))
{
graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height));
graphics.DrawImage(new Bitmap(item.customIcon), 0, 0, width, height);
customIcon = true;
}
}
if (!customIcon)
{
graphics.FillEllipse(drawBrush, new Rectangle(0, 0, width, height));
int zoom = 16;
graphics.DrawImage(new Bitmap(Properties.Resources.notify, width - zoom, width - zoom), zoom / 2, zoom / 2);
}
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height));
graphics.DrawImage(new Bitmap(item.customIcon), 0, 0, width, height);
graphics.FillEllipse(drawBrush, width/2, width/2, width/2, width/2);
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
@@ -76,7 +108,7 @@ namespace v2rayN.Handler
catch (Exception ex)
{
Utils.SaveLog(ex.Message, ex);
return def;
return null;
}
}
@@ -208,40 +240,54 @@ namespace v2rayN.Handler
private void UpdateTaskRun(Config config, Action<bool, string> update)
{
var autoUpdateSubTime = DateTime.Now;
var autoUpdateGeoTime = DateTime.Now;
Thread.Sleep(60000);
Utils.SaveLog("UpdateTaskRun");
var updateHandle = new UpdateHandle();
while (true)
{
Thread.Sleep(60000);
if (config.autoUpdateInterval <= 0)
var dtNow = DateTime.Now;
if (config.autoUpdateSubInterval > 0)
{
continue;
if ((dtNow - autoUpdateSubTime).Hours % config.autoUpdateSubInterval == 0)
{
updateHandle.UpdateSubscriptionProcess(config, true, (bool success, string msg) =>
{
update(success, msg);
if (success)
Utils.SaveLog("subscription" + msg);
});
autoUpdateSubTime = dtNow;
}
Thread.Sleep(60000);
}
Utils.SaveLog("UpdateTaskRun");
updateHandle.UpdateSubscriptionProcess(config, true, (bool success, string msg) =>
if (config.autoUpdateInterval > 0)
{
update(success, msg);
if (success)
Utils.SaveLog("subscription" + msg);
});
if ((dtNow - autoUpdateGeoTime).Hours % config.autoUpdateInterval == 0)
{
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
{
update(false, msg);
if (success)
Utils.SaveLog("geosite" + msg);
});
Thread.Sleep(60000);
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
{
update(false, msg);
if (success)
Utils.SaveLog("geoip" + msg);
});
autoUpdateGeoTime = dtNow;
}
}
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
{
update(false, msg);
if (success)
Utils.SaveLog("geosite" + msg);
});
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
{
update(false, msg);
if (success)
Utils.SaveLog("geoip" + msg);
});
Thread.Sleep(1000 * 3600 * config.autoUpdateInterval);
Thread.Sleep(1000 * 3600);
}
}

View File

@@ -81,7 +81,7 @@ namespace v2rayN.Handler
url = Utils.ToJson(vmessQRCode);
url = Utils.Base64Encode(url);
url = string.Format("{0}{1}", Global.vmessProtocol, url);
url = $"{Global.vmessProtocol}{url}";
return url;
}
@@ -104,7 +104,7 @@ namespace v2rayN.Handler
//new Sip002
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
url = $"{Global.ssProtocol}{url}{remark}";
return url;
}
@@ -125,7 +125,7 @@ namespace v2rayN.Handler
//new
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
url = $"{Global.socksProtocol}{url}{remark}";
return url;
}
@@ -145,7 +145,7 @@ namespace v2rayN.Handler
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
url = $"{Global.trojanProtocol}{url}{query}{remark}";
return url;
}
@@ -173,7 +173,7 @@ namespace v2rayN.Handler
item.id,
GetIpv6(item.address),
item.port);
url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark);
url = $"{Global.vlessProtocol}{url}{query}{remark}";
return url;
}
private static string GetIpv6(string address)
@@ -207,40 +207,20 @@ namespace v2rayN.Handler
{
dicQuery.Add("alpn", Utils.UrlEncode(Utils.List2String(item.alpn)));
}
if (!Utils.IsNullOrEmpty(item.network))
{
dicQuery.Add("type", item.network);
}
else
{
dicQuery.Add("type", "tcp");
}
dicQuery.Add("type", !Utils.IsNullOrEmpty(item.network) ? item.network : "tcp");
switch (item.network)
{
case "tcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : "none");
if (!Utils.IsNullOrEmpty(item.requestHost))
{
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
}
break;
case "kcp":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : "none");
if (!Utils.IsNullOrEmpty(item.path))
{
dicQuery.Add("seed", Utils.UrlEncode(item.path));
@@ -272,14 +252,7 @@ namespace v2rayN.Handler
break;
case "quic":
if (!Utils.IsNullOrEmpty(item.headerType))
{
dicQuery.Add("headerType", item.headerType);
}
else
{
dicQuery.Add("headerType", "none");
}
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : "none");
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
dicQuery.Add("key", Utils.UrlEncode(item.path));
break;
@@ -341,11 +314,7 @@ namespace v2rayN.Handler
{
msg = ResUI.ConfigurationFormatIncorrect;
vmessItem = ResolveSSLegacy(result);
if (vmessItem == null)
{
vmessItem = ResolveSip002(result);
}
vmessItem = ResolveSSLegacy(result) ?? ResolveSip002(result);
if (vmessItem == null)
{
return null;
@@ -361,11 +330,7 @@ namespace v2rayN.Handler
{
msg = ResUI.ConfigurationFormatIncorrect;
vmessItem = ResolveSocksNew(result);
if (vmessItem == null)
{
vmessItem = ResolveSocks(result);
}
vmessItem = ResolveSocksNew(result) ?? ResolveSocks(result);
if (vmessItem == null)
{
return null;
@@ -407,9 +372,11 @@ namespace v2rayN.Handler
private static VmessItem ResolveVmess(string result, out string msg)
{
msg = string.Empty;
VmessItem vmessItem = new VmessItem();
var vmessItem = new VmessItem
{
configType = EConfigType.Vmess
};
vmessItem.configType = EConfigType.Vmess;
result = result.Substring(Global.vmessProtocol.Length);
result = Utils.Base64Decode(result);
@@ -432,14 +399,7 @@ namespace v2rayN.Handler
vmessItem.alterId = Utils.ToInt(vmessQRCode.aid);
vmessItem.security = Utils.ToString(vmessQRCode.scy);
if (!Utils.IsNullOrEmpty(vmessQRCode.scy))
{
vmessItem.security = vmessQRCode.scy;
}
else
{
vmessItem.security = Global.DefaultSecurity;
}
vmessItem.security = !Utils.IsNullOrEmpty(vmessQRCode.scy) ? vmessQRCode.scy : Global.DefaultSecurity;
if (!Utils.IsNullOrEmpty(vmessQRCode.net))
{
vmessItem.network = vmessQRCode.net;
@@ -594,22 +554,47 @@ namespace v2rayN.Handler
address = parsedUrl.IdnHost,
port = parsedUrl.Port,
};
// parse base64 UserInfo
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.UriEscaped);
string userInfo = Utils.Base64Decode(rawUserInfo);
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
if (userInfoParts.Length != 2)
//2022-blake3
if (rawUserInfo.Contains(":"))
{
return null;
string[] userInfoParts = rawUserInfo.Split(new[] { ':' }, 2);
if (userInfoParts.Length != 2)
{
return null;
}
server.security = userInfoParts[0];
server.id = Utils.UrlDecode(userInfoParts[1]);
}
else
{
// parse base64 UserInfo
string userInfo = Utils.Base64Decode(rawUserInfo);
string[] userInfoParts = userInfo.Split(new[] { ':' }, 2);
if (userInfoParts.Length != 2)
{
return null;
}
server.security = userInfoParts[0];
server.id = userInfoParts[1];
}
server.security = userInfoParts[0];
server.id = userInfoParts[1];
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
if (queryParameters["plugin"] != null)
{
return null;
//obfs-host exists
var obfsHost = queryParameters["plugin"].Split(';').FirstOrDefault(t => t.Contains("obfs-host"));
if (queryParameters["plugin"].Contains("obfs=http") && !Utils.IsNullOrEmpty(obfsHost))
{
obfsHost = obfsHost.Replace("obfs-host=", "");
server.network = Global.DefaultNetwork;
server.headerType = Global.TcpHeaderHttp;
server.requestHost = obfsHost;
}
else
{
return null;
}
}
return server;
@@ -655,8 +640,10 @@ namespace v2rayN.Handler
private static VmessItem ResolveSocks(string result)
{
VmessItem vmessItem = new VmessItem();
vmessItem.configType = EConfigType.Socks;
VmessItem vmessItem = new VmessItem
{
configType = EConfigType.Socks
};
result = result.Substring(Global.socksProtocol.Length);
//remark
int indexRemark = result.IndexOf("#");
@@ -720,7 +707,7 @@ namespace v2rayN.Handler
// parse base64 UserInfo
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
string userInfo = Utils.Base64Decode(rawUserInfo);
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
string[] userInfoParts = userInfo.Split(new[] { ':' }, 2);
if (userInfoParts.Length == 2)
{
server.security = userInfoParts[0];

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;
@@ -43,19 +44,19 @@ namespace v2rayN.Handler
if (actionType == ESpeedActionType.Ping)
{
Task.Run(() => RunPing());
Task.Run(RunPing);
}
else if (actionType == ESpeedActionType.Tcping)
{
Task.Run(() => RunTcping());
Task.Run(RunTcping);
}
else if (actionType == ESpeedActionType.Realping)
{
Task.Run(() => RunRealPing());
Task.Run(RunRealPing);
}
else if (actionType == ESpeedActionType.Speedtest)
{
Task.Run(() => RunSpeedTestAsync());
Task.Run(RunSpeedTestAsync);
}
}
@@ -63,12 +64,8 @@ namespace v2rayN.Handler
{
try
{
foreach (var it in _selecteds)
foreach (var it in _selecteds.Where(it => it.configType != EConfigType.Custom))
{
if (it.configType == EConfigType.Custom)
{
continue;
}
try
{
Task.Run(() => updateFun(it));
@@ -252,7 +249,7 @@ namespace v2rayN.Handler
{
return "Timeout";
}
return string.Format("{0}{1}", time, unit).PadLeft(8, ' ');
return $"{time}{unit}".PadLeft(8, ' ');
}
}
}

View File

@@ -31,13 +31,7 @@ namespace v2rayN.Handler
}
public List<ServerStatItem> Statistic
{
get
{
return serverStatistics_.server;
}
}
public List<ServerStatItem> Statistic => serverStatistics_.server;
public StatisticsHandler(Mode.Config config, Action<ulong, ulong, List<ServerStatItem>> update)
{
@@ -68,7 +62,7 @@ namespace v2rayN.Handler
GrpcInit();
Task.Run(() => Run());
Task.Run(Run);
}
private void GrpcInit()

View File

@@ -59,7 +59,8 @@ namespace v2rayN.Handler
try
{
int port = config.GetLocalPort(Global.InboundHttp2);
int port = config.GetLocalPort(Global.InboundHttp);
int portSocks = config.GetLocalPort(Global.InboundSocks);
if (port <= 0)
{
return false;
@@ -67,7 +68,20 @@ namespace v2rayN.Handler
if (type == ESysProxyType.ForcedChange)
{
var strExceptions = $"{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}";
SetIEProxy(true, $"{Global.Loopback}:{port}", strExceptions);
var strProxy = string.Empty;
if (Utils.IsNullOrEmpty(config.systemProxyAdvancedProtocol))
{
strProxy = $"{Global.Loopback}:{port}";
}
else
{
strProxy = config.systemProxyAdvancedProtocol
.Replace("{ip}", Global.Loopback)
.Replace("{http_port}", port.ToString())
.Replace("{socks_port}", portSocks.ToString());
}
SetIEProxy(true, strProxy, strExceptions);
}
else if (type == ESysProxyType.ForcedClear)
{
@@ -96,41 +110,6 @@ namespace v2rayN.Handler
}
}
public static void SetIEProxy(bool enable, bool global, string strProxy)
{
//Read();
//if (!_userSettings.UserSettingsRecorded)
//{
// // record user settings
// ExecSysproxy("query");
// //ParseQueryStr(_queryStr);
//}
string arguments;
if (enable)
{
arguments = global
? $"global {strProxy} {Global.IEProxyExceptions}"
: $"pac {strProxy}";
}
else
{
// restore user settings
string flags = _userSettings.Flags;
string proxy_server = _userSettings.ProxyServer ?? "-";
string bypass_list = _userSettings.BypassList ?? "-";
string pac_url = _userSettings.PacUrl ?? "-";
arguments = $"set {flags} {proxy_server} {bypass_list} {pac_url}";
// have to get new settings
_userSettings.UserSettingsRecorded = false;
}
//Save();
ExecSysproxy(arguments);
}
public static void SetIEProxy(bool global, string strProxy, string strExceptions)
{

View File

@@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using v2rayN.Base;
@@ -25,19 +26,11 @@ namespace v2rayN.Handler
public ResultEventArgs(bool success, string msg)
{
this.Success = success;
this.Msg = msg;
Success = success;
Msg = msg;
}
}
private readonly string nLatestUrl = Global.NUrl + "/latest";
private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip";
private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest";
private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip";
private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest";
private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip";
private const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
public void CheckUpdateGuiN(Config config, Action<bool, string> update)
{
_config = config;
@@ -178,6 +171,16 @@ namespace v2rayN.Handler
Task.Run(async () =>
{
//Turn off system proxy
bool bSysProxyType = false;
if (!blProxy && config.sysProxyType == ESysProxyType.ForcedChange)
{
bSysProxyType = true;
config.sysProxyType = ESysProxyType.ForcedClear;
SysProxyHandle.UpdateSysProxy(config, false);
Thread.Sleep(3000);
}
foreach (var item in config.subItem)
{
if (item.enabled == false)
@@ -206,18 +209,21 @@ namespace v2rayN.Handler
else
{
int ret = ConfigHandler.AddBatchServers(ref config, result, id, groupId);
if (ret > 0)
{
_updateFunc(false, $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}");
}
else
{
_updateFunc(false, $"{hashCode}{ResUI.MsgFailedImportSubscription}");
}
_updateFunc(false,
ret > 0
? $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}"
: $"{hashCode}{ResUI.MsgFailedImportSubscription}");
}
_updateFunc(false, $"-------------------------------------------------------");
_updateFunc(false, "-------------------------------------------------------");
}
//restore system proxy
if (bSysProxyType)
{
config.sysProxyType = ESysProxyType.ForcedChange;
SysProxyHandle.UpdateSysProxy(config, false);
}
_updateFunc(true, $"{ResUI.MsgUpdateSubscriptionEnd}");
});
}
@@ -226,7 +232,7 @@ namespace v2rayN.Handler
{
_config = config;
_updateFunc = update;
var url = string.Format(geoUrl, geoName);
var url = string.Format(Global.geoUrl, geoName);
DownloadHandle downloadHandle = null;
if (downloadHandle == null)
@@ -288,23 +294,8 @@ namespace v2rayN.Handler
{
try
{
string url;
if (type == ECoreType.v2fly)
{
url = v2flyCoreLatestUrl;
}
else if (type == ECoreType.Xray)
{
url = xrayCoreLatestUrl;
}
else if (type == ECoreType.v2rayN)
{
url = nLatestUrl;
}
else
{
throw new ArgumentException("Type");
}
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
string url = coreInfo.coreLatestUrl;
var result = await (new DownloadHandle()).UrlRedirectAsync(url, true);
if (!Utils.IsNullOrEmpty(result))
@@ -336,7 +327,7 @@ namespace v2rayN.Handler
string filePath = string.Empty;
foreach (string name in coreInfo.coreExes)
{
string vName = string.Format("{0}.exe", name);
string vName = $"{name}.exe";
vName = Utils.GetPath(vName);
if (File.Exists(vName))
{
@@ -378,33 +369,46 @@ namespace v2rayN.Handler
try
{
string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
string curVersion;
string message;
string url;
if (type == ECoreType.v2fly)
switch (type)
{
curVersion = "v" + getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion);
string osBit = Environment.Is64BitProcess ? "64" : "32";
url = string.Format(v2flyCoreUrl, version, osBit);
}
else if (type == ECoreType.Xray)
{
curVersion = "v" + getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion);
string osBit = Environment.Is64BitProcess ? "64" : "32";
url = string.Format(xrayCoreUrl, version, osBit);
}
else if (type == ECoreType.v2rayN)
{
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
message = string.Format(ResUI.IsLatestN, curVersion);
url = string.Format(nUrl, version);
}
else
{
throw new ArgumentException("Type");
case ECoreType.v2fly:
case ECoreType.Xray:
{
curVersion = "v" + getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion);
string osBit = Environment.Is64BitProcess ? "64" : "32";
url = string.Format(coreInfo.coreDownloadUrl64, version, osBit);
break;
}
case ECoreType.clash:
case ECoreType.clash_meta:
{
curVersion = "";//getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion);
if (Environment.Is64BitProcess)
{
url = string.Format(coreInfo.coreDownloadUrl64, version);
}
else
{
url = string.Format(coreInfo.coreDownloadUrl32, version);
}
break;
}
case ECoreType.v2rayN:
{
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
message = string.Format(ResUI.IsLatestN, curVersion);
url = string.Format(coreInfo.coreDownloadUrl64, version);
break;
}
default:
throw new ArgumentException("Type");
}
if (curVersion == version)

View File

@@ -146,48 +146,35 @@ namespace v2rayN.Handler
{
try
{
Inbounds inbound = v2rayConfig.inbounds[0];
inbound.tag = Global.InboundSocks;
inbound.port = config.inbound[0].localPort;
inbound.protocol = config.inbound[0].protocol;
if (config.inbound[0].allowLANConn)
{
inbound.listen = "0.0.0.0";
}
else
{
inbound.listen = Global.Loopback;
}
//udp
inbound.settings.udp = config.inbound[0].udpEnabled;
inbound.sniffing.enabled = config.inbound[0].sniffingEnabled;
v2rayConfig.inbounds = new List<Inbounds>();
Inbounds inbound = GetInbound(config.inbound[0], Global.InboundSocks, 0, true);
v2rayConfig.inbounds.Add(inbound);
//http
Inbounds inbound2 = v2rayConfig.inbounds[1];
inbound2.tag = Global.InboundHttp;
inbound2.port = config.GetLocalPort(Global.InboundHttp);
inbound2.protocol = Global.InboundHttp;
inbound2.listen = inbound.listen;
inbound2.settings.allowTransparent = false;
inbound2.sniffing.enabled = inbound.sniffing.enabled;
Inbounds inbound2 = GetInbound(config.inbound[0], Global.InboundHttp, 1, false);
v2rayConfig.inbounds.Add(inbound2);
//auth
if (!Utils.IsNullOrEmpty(config.inbound[0].user) && !Utils.IsNullOrEmpty(config.inbound[0].pass))
if (config.inbound[0].allowLANConn)
{
inbound.settings.auth = "password";
inbound.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
inbound2.settings.auth = "password";
inbound2.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
}
Inbounds inbound3 = GetInbound(config.inbound[0], Global.InboundSocks2, 2, true);
inbound3.listen = "0.0.0.0";
v2rayConfig.inbounds.Add(inbound3);
//http Loopback
Inbounds inbound3 = v2rayConfig.inbounds[2];
inbound3.tag = Global.InboundHttp2;
inbound3.port = config.GetLocalPort(Global.InboundHttp2);
inbound3.protocol = Global.InboundHttp;
inbound3.listen = Global.Loopback;
inbound3.settings.allowTransparent = false;
inbound3.sniffing.enabled = inbound.sniffing.enabled;
Inbounds inbound4 = GetInbound(config.inbound[0], Global.InboundHttp2, 3, false);
inbound4.listen = "0.0.0.0";
v2rayConfig.inbounds.Add(inbound4);
//auth
if (!Utils.IsNullOrEmpty(config.inbound[0].user) && !Utils.IsNullOrEmpty(config.inbound[0].pass))
{
inbound3.settings.auth = "password";
inbound3.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
inbound4.settings.auth = "password";
inbound4.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
}
}
}
catch
{
@@ -195,6 +182,28 @@ namespace v2rayN.Handler
return 0;
}
private static Inbounds GetInbound(InItem inItem, string tag, int offset, bool bSocks)
{
string result = Utils.GetEmbedText(Global.v2raySampleInbound);
if (Utils.IsNullOrEmpty(result))
{
return null;
}
var inbound = Utils.FromJson<Inbounds>(result);
if (inbound == null)
{
return null;
}
inbound.tag = tag;
inbound.port = inItem.localPort + offset;
inbound.protocol = bSocks ? Global.InboundSocks : Global.InboundHttp;
inbound.settings.udp = inItem.udpEnabled;
inbound.sniffing.enabled = inItem.sniffingEnabled;
return inbound;
}
/// <summary>
/// 路由
/// </summary>
@@ -397,9 +406,7 @@ namespace v2rayN.Handler
outbound.mux.enabled = config.muxEnabled;
outbound.mux.concurrency = config.muxEnabled ? 8 : -1;
//远程服务器底层传输配置
StreamSettings streamSettings = outbound.streamSettings;
boundStreamSettings(node, "out", ref streamSettings);
boundStreamSettings(node, "out", outbound.streamSettings);
outbound.protocol = Global.vmessProtocolLite;
outbound.settings.servers = null;
@@ -420,14 +427,7 @@ namespace v2rayN.Handler
serversItem.address = node.address;
serversItem.port = node.port;
serversItem.password = node.id;
if (LazyConfig.Instance.GetShadowsocksSecuritys().Contains(node.security))
{
serversItem.method = node.security;
}
else
{
serversItem.method = "none";
}
serversItem.method = LazyConfig.Instance.GetShadowsocksSecuritys().Contains(node.security) ? node.security : "none";
serversItem.ota = false;
@@ -436,6 +436,7 @@ namespace v2rayN.Handler
outbound.mux.enabled = false;
outbound.mux.concurrency = -1;
boundStreamSettings(node, "out", outbound.streamSettings);
outbound.protocol = Global.ssProtocolLite;
outbound.settings.vnext = null;
@@ -513,9 +514,7 @@ namespace v2rayN.Handler
outbound.mux.enabled = config.muxEnabled;
outbound.mux.concurrency = config.muxEnabled ? 8 : -1;
//远程服务器底层传输配置
StreamSettings streamSettings = outbound.streamSettings;
boundStreamSettings(node, "out", ref streamSettings);
boundStreamSettings(node, "out", outbound.streamSettings);
//if xtls
if (node.streamSecurity == Global.StreamSecurityX)
@@ -576,10 +575,7 @@ namespace v2rayN.Handler
outbound.mux.enabled = false;
outbound.mux.concurrency = -1;
//远程服务器底层传输配置
StreamSettings streamSettings = outbound.streamSettings;
boundStreamSettings(node, "out", ref streamSettings);
boundStreamSettings(node, "out", outbound.streamSettings);
outbound.protocol = Global.trojanProtocolLite;
outbound.settings.vnext = null;
@@ -592,18 +588,18 @@ namespace v2rayN.Handler
}
/// <summary>
/// vmess协议远程服务器底层传输配置
/// 底层传输配置
/// </summary>
/// <param name="node"></param>
/// <param name="iobound"></param>
/// <param name="streamSettings"></param>
/// <returns></returns>
private static int boundStreamSettings(VmessItem node, string iobound, ref StreamSettings streamSettings)
private static int boundStreamSettings(VmessItem node, string iobound, StreamSettings streamSettings)
{
try
{
var config = LazyConfig.Instance.GetConfig();
//远程服务器底层传输配置
streamSettings.network = node.GetNetwork();
string host = node.requestHost.TrimEx();
string sni = node.sni;
@@ -758,10 +754,12 @@ namespace v2rayN.Handler
}
break;
case "grpc":
var grpcSettings = new GrpcSettings();
var grpcSettings = new GrpcSettings
{
serviceName = node.path,
multiMode = (node.headerType == Global.GrpcmultiMode)
};
grpcSettings.serviceName = node.path;
grpcSettings.multiMode = (node.headerType == Global.GrpcmultiMode ? true : false);
streamSettings.grpcSettings = grpcSettings;
break;
default:
@@ -782,7 +780,7 @@ namespace v2rayN.Handler
string request = Utils.GetEmbedText(Global.v2raySampleHttprequestFileName);
string[] arrHost = host.Split(',');
string host2 = string.Join("\",\"", arrHost);
request = request.Replace("$requestHost$", string.Format("\"{0}\"", host2));
request = request.Replace("$requestHost$", $"\"{host2}\"");
//request = request.Replace("$requestHost$", string.Format("\"{0}\"", config.requestHost()));
//填入自定义Path
@@ -792,7 +790,7 @@ namespace v2rayN.Handler
string[] arrPath = node.path.Split(',');
pathHttp = string.Join("\",\"", arrPath);
}
request = request.Replace("$requestPath$", string.Format("\"{0}\"", pathHttp));
request = request.Replace("$requestPath$", $"\"{pathHttp}\"");
tcpSettings.header.request = Utils.FromJson<object>(request);
}
else if (iobound.Equals("in"))
@@ -879,7 +877,7 @@ namespace v2rayN.Handler
policyObj.system = policySystemSetting;
v2rayConfig.policy = policyObj;
if (!v2rayConfig.inbounds.Exists(item => { return item.tag == tag; }))
if (!v2rayConfig.inbounds.Exists(item => item.tag == tag))
{
Inbounds apiInbound = new Inbounds();
Inboundsettings apiInboundSettings = new Inboundsettings();
@@ -892,7 +890,7 @@ namespace v2rayN.Handler
v2rayConfig.inbounds.Add(apiInbound);
}
if (!v2rayConfig.routing.rules.Exists(item => { return item.outboundTag == tag; }))
if (!v2rayConfig.routing.rules.Exists(item => item.outboundTag == tag))
{
RulesItem apiRoutingRule = new RulesItem
{
@@ -932,7 +930,7 @@ namespace v2rayN.Handler
string addressFileName = node.address;
if (!File.Exists(addressFileName))
{
addressFileName = Path.Combine(Utils.GetConfigPath(), addressFileName);
addressFileName = Utils.GetConfigPath(addressFileName);
}
if (!File.Exists(addressFileName))
{
@@ -958,7 +956,7 @@ namespace v2rayN.Handler
break;
case ECoreType.clash:
case ECoreType.clash_meta:
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2)}");
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp)}");
fileContent.Add($"socks-port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundSocks)}");
break;
}
@@ -1079,9 +1077,7 @@ namespace v2rayN.Handler
inbound.settings.decryption = node.security;
}
//远程服务器底层传输配置
StreamSettings streamSettings = inbound.streamSettings;
boundStreamSettings(node, "in", ref streamSettings);
boundStreamSettings(node, "in", inbound.streamSettings);
}
catch
{
@@ -1170,7 +1166,7 @@ namespace v2rayN.Handler
vmessItem.port = outbound.settings.vnext[0].port;
vmessItem.id = outbound.settings.vnext[0].users[0].id;
vmessItem.alterId = outbound.settings.vnext[0].users[0].alterId;
vmessItem.remarks = string.Format("import@{0}", DateTime.Now.ToShortDateString());
vmessItem.remarks = $"import@{DateTime.Now.ToShortDateString()}";
//tcp or kcp
if (outbound.streamSettings != null
@@ -1315,7 +1311,7 @@ namespace v2rayN.Handler
vmessItem.id = inbound.settings.clients[0].id;
vmessItem.alterId = inbound.settings.clients[0].alterId;
vmessItem.remarks = string.Format("import@{0}", DateTime.Now.ToShortDateString());
vmessItem.remarks = $"import@{DateTime.Now.ToShortDateString()}";
//tcp or kcp
if (inbound.streamSettings != null

View File

@@ -175,7 +175,7 @@ namespace v2rayN.Handler
string fileName = string.Empty;
foreach (string name in lstCoreTemp)
{
string vName = string.Format("{0}.exe", name);
string vName = $"{name}.exe";
vName = Utils.GetPath(vName);
if (File.Exists(vName))
{
@@ -217,14 +217,14 @@ namespace v2rayN.Handler
StandardOutputEncoding = Encoding.UTF8
}
};
p.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
p.OutputDataReceived += (sender, e) =>
{
if (!String.IsNullOrEmpty(e.Data))
{
string msg = e.Data + Environment.NewLine;
ShowMsg(false, msg);
}
});
};
p.Start();
p.PriorityClass = ProcessPriorityClass.High;
p.BeginOutputReadLine();
@@ -254,7 +254,7 @@ namespace v2rayN.Handler
try
{
string fileName = V2rayFindexe(new List<string> { "xray" });
string fileName = V2rayFindexe(new List<string> { "xray", "wv2ray", "v2ray" });
if (fileName == "") return -1;
Process p = new Process
@@ -272,14 +272,14 @@ namespace v2rayN.Handler
StandardOutputEncoding = Encoding.UTF8
}
};
p.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
p.OutputDataReceived += (sender, e) =>
{
if (!String.IsNullOrEmpty(e.Data))
{
string msg = e.Data + Environment.NewLine;
ShowMsg(false, msg);
}
});
};
p.Start();
p.BeginOutputReadLine();

View File

@@ -124,17 +124,19 @@ namespace v2rayN.Mode
{
get; set;
}
public string systemProxyAdvancedProtocol { get; set; }
public int autoUpdateInterval { get; set; } = 0;
public int autoUpdateInterval
{
get; set;
} = 0;
public int autoUpdateSubInterval { get; set; } = 0;
public bool enableSecurityProtocolTls13
{
get; set;
}
public int trayMenuServersLimit { get; set; }
#endregion
#region other entities
@@ -208,27 +210,27 @@ namespace v2rayN.Mode
public int GetLocalPort(string protocol)
{
if (protocol == Global.InboundHttp)
int localPort = inbound.FirstOrDefault(t => t.protocol == Global.InboundSocks).localPort;
if (protocol == Global.InboundSocks)
{
return GetLocalPort(Global.InboundSocks) + 1;
return localPort;
}
else if (protocol == Global.InboundHttp)
{
return localPort + 1;
}
else if (protocol == Global.InboundSocks2)
{
return localPort + 2;
}
else if (protocol == Global.InboundHttp2)
{
return GetLocalPort(Global.InboundSocks) + 2;
return localPort + 3;
}
else if (protocol == "speedtest")
{
return GetLocalPort(Global.InboundSocks) + 103;
}
int localPort = 0;
foreach (InItem inItem in inbound)
{
if (inItem.protocol.Equals(protocol))
{
localPort = inItem.localPort;
break;
}
return localPort + 103;
}
return localPort;
}

View File

@@ -14,6 +14,12 @@ namespace v2rayN.Mode
public string coreUrl { get; set; }
public string coreLatestUrl { get; set; }
public string coreDownloadUrl32 { get; set; }
public string coreDownloadUrl64 { get; set; }
public string match { get; set; }
}
}

View File

@@ -8,6 +8,7 @@ namespace v2rayN.Mode
clash = 11,
clash_meta = 12,
hysteria = 21,
naiveproxy = 22,
v2rayN = 99
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
namespace v2rayN.Mode
{
public class SsSIP008
{
public List<SsServer> servers { get; set; }
}
[Serializable]
public class SsServer
{
public string remarks { get; set; }
public string server { get; set; }
public string server_port { get; set; }
public string method { get; set; }
public string password { get; set; }
public string plugin { get; set; }
}
}

View File

@@ -25,8 +25,8 @@ namespace v2rayN
}
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
//AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

View File

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

View File

@@ -110,6 +110,36 @@ namespace v2rayN.Properties {
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon NotifyIcon1 {
get {
object obj = ResourceManager.GetObject("NotifyIcon1", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon NotifyIcon2 {
get {
object obj = ResourceManager.GetObject("NotifyIcon2", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon NotifyIcon3 {
get {
object obj = ResourceManager.GetObject("NotifyIcon3", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>

View File

@@ -157,4 +157,13 @@
<data name="share" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="NotifyIcon1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\NotifyIcon1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="NotifyIcon2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\NotifyIcon2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="NotifyIcon3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\NotifyIcon3.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -127,7 +127,7 @@
<value>Please check the server settings first</value>
</data>
<data name="ConfigurationFormatIncorrect" xml:space="preserve">
<value> configuration format is incorrect</value>
<value>Invalid configuration format</value>
</data>
<data name="CustomServerTips" xml:space="preserve">
<value>Note that custom configuration relies entirely on your own configuration and does not work with all settings. If you want to use the system proxy, please modify the listening port manually.</value>
@@ -136,7 +136,7 @@
<value>Downloading...</value>
</data>
<data name="downloadSpeed" xml:space="preserve">
<value>DOWN</value>
<value>Download</value>
</data>
<data name="DownloadYesNo" xml:space="preserve">
<value>Whether to download? {0}</value>
@@ -214,10 +214,10 @@
<value>Test Results</value>
</data>
<data name="LvTodayDownloadDataAmount" xml:space="preserve">
<value>Today download traffic</value>
<value>Download traffic today</value>
</data>
<data name="LvTodayUploadDataAmount" xml:space="preserve">
<value>Today upload traffic</value>
<value>Upload traffic today</value>
</data>
<data name="LvTotalDownloadDataAmount" xml:space="preserve">
<value>Total download traffic</value>
@@ -229,7 +229,7 @@
<value>Transport</value>
</data>
<data name="MediumFresh" xml:space="preserve">
<value>MediumFresh</value>
<value>Medium</value>
</data>
<data name="MsgClearSubscription" xml:space="preserve">
<value>Clear original subscription content</value>
@@ -241,7 +241,7 @@
<value>Failed to import subscription content</value>
</data>
<data name="MsgGetSubscriptionSuccessfully" xml:space="preserve">
<value>Get the subscription content successfully</value>
<value>Get subscription content successfully</value>
</data>
<data name="MsgNoValidSubscription" xml:space="preserve">
<value>No valid subscriptions set</value>
@@ -301,7 +301,7 @@
<value>Scan completed, no valid QR code found</value>
</data>
<data name="OperationFailed" xml:space="preserve">
<value> operation failed, please check retry</value>
<value> operation failed, please check and retry</value>
</data>
<data name="PleaseFillRemarks" xml:space="preserve">
<value>Please Fill Remarks</value>
@@ -310,13 +310,13 @@
<value>Please select the encryption method</value>
</data>
<data name="PleaseSelectProtocol" xml:space="preserve">
<value>Please select an agreement</value>
<value>Please select a protocol</value>
</data>
<data name="PleaseSelectServer" xml:space="preserve">
<value>Please select the server first</value>
</data>
<data name="QuickFresh" xml:space="preserve">
<value>QuickFresh</value>
<value>Fast</value>
</data>
<data name="RemoveDuplicateServerResult" xml:space="preserve">
<value>Servers deduplication completed. Old: {0}, New: {1}.</value>
@@ -331,23 +331,23 @@
<value>The server configuration file is saved at: {0}</value>
</data>
<data name="SlowFresh" xml:space="preserve">
<value>SlowFresh</value>
<value>Slow</value>
</data>
<data name="SpeedServerTips" xml:space="preserve">
<value>Note: After this function relies on the Http global proxy test, please manually adjust the Http global proxy and active node!</value>
<value>Note: This feature relies on the Http global proxy. Please manually adjust the Http global proxy and active node after testing.</value>
</data>
<data name="StartPacFailed" xml:space="preserve">
<value>PAC failed to start. Run it with Admin right.</value>
<value>PAC failed to start. Please run this program as Administrator.</value>
</data>
<data name="StartService" xml:space="preserve">
<value>Start service ({0})...</value>
</data>
<data name="SuccessfulConfiguration" xml:space="preserve">
<value>Successful configuration
<value>Configuration successful
{0}</value>
</data>
<data name="SuccessfullyImportedCustomServer" xml:space="preserve">
<value>Successfully imported custom configuration server</value>
<value>Custom configuration server imported successfully.</value>
</data>
<data name="SuccessfullyImportedServerViaClipboard" xml:space="preserve">
<value>{0} servers have been imported from clipboard.</value>
@@ -389,7 +389,7 @@
<value>Download GeoFile: {0} successfully</value>
</data>
<data name="MsgInformationTitle" xml:space="preserve">
<value>Informations (Filter : {0})</value>
<value>Information (Filter : {0})</value>
</data>
<data name="LvCustomIcon" xml:space="preserve">
<value>Custom Icon</value>
@@ -463,4 +463,13 @@
<data name="TooManyServersTip" xml:space="preserve">
<value>Too many servers, please open the main interface</value>
</data>
<data name="LabLAN" xml:space="preserve">
<value>LAN</value>
</data>
<data name="LabLocal" xml:space="preserve">
<value>Local</value>
</data>
<data name="MsgServerTitle" xml:space="preserve">
<value>Servers (Filter : {0})</value>
</data>
</root>

View File

@@ -463,4 +463,13 @@
<data name="TooManyServersTip" xml:space="preserve">
<value>服务器太多,请打开主界面操作</value>
</data>
<data name="LabLAN" xml:space="preserve">
<value>局域网</value>
</data>
<data name="LabLocal" xml:space="preserve">
<value>本地</value>
</data>
<data name="MsgServerTitle" xml:space="preserve">
<value>服务器 (过滤器 : {0})</value>
</data>
</root>

View File

@@ -0,0 +1,18 @@
{
"tag": "tag1",
"port": 10808,
"protocol": "socks",
"listen": "127.0.0.1",
"settings": {
"auth": "noauth",
"udp": true,
"allowTransparent": false
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}

View File

@@ -13,23 +13,27 @@ namespace v2rayN.Tool
{
public static void Setup()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
var hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
var patternLayout = new PatternLayout
{
ConversionPattern = "%date [%thread] %-5level %logger - %message%newline"
};
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.RollingStyle = RollingFileAppender.RollingMode.Date;
roller.DatePattern = "yyyy-MM-dd'.txt'";
roller.File = Utils.GetPath(@"guiLogs\");
roller.Layout = patternLayout;
roller.StaticLogFileName = false;
var roller = new RollingFileAppender
{
AppendToFile = true,
RollingStyle = RollingFileAppender.RollingMode.Date,
DatePattern = "yyyy-MM-dd'.txt'",
File = Utils.GetPath(@"guiLogs\"),
Layout = patternLayout,
StaticLogFileName = false
};
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
MemoryAppender memory = new MemoryAppender();
var memory = new MemoryAppender();
memory.ActivateOptions();
hierarchy.Root.AddAppender(memory);

View File

@@ -23,6 +23,7 @@ using Newtonsoft.Json.Linq;
using System.Web;
using log4net;
using System.Linq;
using System.Security.Cryptography;
namespace v2rayN
{
@@ -397,6 +398,20 @@ namespace v2rayN
{
return HttpUtility.UrlDecode(url);
}
public static string GetMD5(string str)
{
var md5 = MD5.Create();
byte[] byteOld = Encoding.UTF8.GetBytes(str);
byte[] byteNew = md5.ComputeHash(byteOld);
StringBuilder sb = new StringBuilder();
foreach (byte b in byteNew)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
#endregion
@@ -529,7 +544,13 @@ namespace v2rayN
#region
private static string autoRunName = "v2rayNAutoRun";
private static string autoRunName
{
get
{
return $"v2rayNAutoRun_{GetMD5(StartupPath())}";
}
}
private static string autoRunRegPath
{
get
@@ -930,7 +951,7 @@ namespace v2rayN
public static string GetDownloadFileName(string url)
{
var fileName = System.IO.Path.GetFileName(url);
var fileName = Path.GetFileName(url);
fileName += "_temp";
return fileName;
@@ -961,7 +982,7 @@ namespace v2rayN
// return path to store temporary files
public static string GetTempPath(string filename = "")
{
string _tempPath = Path.Combine(StartupPath(), "v2ray_win_temp");
string _tempPath = Path.Combine(StartupPath(), "guiTemps");
if (!Directory.Exists(_tempPath))
{
Directory.CreateDirectory(_tempPath);

View File

@@ -216,6 +216,7 @@
<Compile Include="Mode\SysproxyConfig.cs" />
<Compile Include="Mode\EConfigType.cs" />
<Compile Include="Mode\ServerTestItem.cs" />
<Compile Include="Mode\SsSIP008.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
@@ -306,6 +307,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Forms\OptionSettingForm.zh-Hans.resx">
<DependentUpon>OptionSettingForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\QRCodeControl.zh-Hans.resx">
<DependentUpon>QRCodeControl.cs</DependentUpon>
@@ -474,6 +476,10 @@
<None Include="Resources\minimize.png" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\NotifyIcon1.ico" />
<Content Include="Resources\NotifyIcon2.ico" />
<Content Include="Resources\NotifyIcon3.ico" />
<EmbeddedResource Include="Sample\SampleInbound.txt" />
<None Include="Resources\share.png" />
<None Include="Resources\promotion.png" />
<None Include="Resources\sub.png" />
@@ -484,13 +490,13 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf">
<Version>3.20.0</Version>
<Version>3.21.1</Version>
</PackageReference>
<PackageReference Include="Grpc.Core">
<Version>2.45.0</Version>
<Version>2.46.3</Version>
</PackageReference>
<PackageReference Include="Grpc.Tools">
<Version>2.45.0</Version>
<Version>2.46.3</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 60 KiB