Compare commits
44 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2053d5a77 | ||
|
|
ae6b3ef7fb | ||
|
|
359c6e0f02 | ||
|
|
9a8b4593e1 | ||
|
|
02fc631e3c | ||
|
|
19e03a1fdd | ||
|
|
5ea6279711 | ||
|
|
c44578c341 | ||
|
|
ab34d3fe30 | ||
|
|
5aa27c14c6 | ||
|
|
a5e9edb2e5 | ||
|
|
bbd8ef1f26 | ||
|
|
ad8afa0d3d | ||
|
|
5198f30363 | ||
|
|
50e55761ab | ||
|
|
7cb67aa49c | ||
|
|
1d4993180a | ||
|
|
73a36d5556 | ||
|
|
368e489190 | ||
|
|
d582d4846e | ||
|
|
87ffad398e | ||
|
|
439e7eaca0 | ||
|
|
90d703ae91 | ||
|
|
2d80c90f78 | ||
|
|
b54c8e97bd | ||
|
|
58e69a6644 | ||
|
|
f09a13259f | ||
|
|
8775c5e1f2 | ||
|
|
61b7997ae9 | ||
|
|
99fa98844c | ||
|
|
6e5781c633 | ||
|
|
b58e524d78 | ||
|
|
0d669af44e | ||
|
|
a331c70233 | ||
|
|
fd7d688e6b | ||
|
|
069d47f01b | ||
|
|
3079f1c651 | ||
|
|
f5ecda9255 | ||
|
|
d83ae315ed | ||
|
|
2b40e87eb9 | ||
|
|
f7e3eb180b | ||
|
|
209786cdb6 | ||
|
|
d418f79d8f | ||
|
|
eddd38ff03 |
58
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
Normal file
58
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Bug 报告
|
||||
description: 在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||
title: "[Bug]: "
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: input
|
||||
id: "expectation"
|
||||
attributes:
|
||||
label: "预期情况"
|
||||
description: "描述你认为应该发生什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "describe-the-bug"
|
||||
attributes:
|
||||
label: "实际情况"
|
||||
description: "描述实际发生了什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "reproduction-method"
|
||||
attributes:
|
||||
label: "复现方法"
|
||||
description: "在BUG出现前执行了哪些操作"
|
||||
placeholder: 标序号
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "log"
|
||||
attributes:
|
||||
label: "日志信息"
|
||||
description: "位置在软件当前目录下的guiLogs"
|
||||
placeholder: 在日志开始和结束位置粘贴冒号后的内容:```
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "more"
|
||||
attributes:
|
||||
label: "额外信息"
|
||||
description: "可选"
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: "latest-version"
|
||||
attributes:
|
||||
label: "我确认已更新至最新版本"
|
||||
description: "否则请更新后尝试"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: "issues"
|
||||
attributes:
|
||||
label: "我确认已查询历史issues"
|
||||
description: "否则请查询后提出"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
34
.github/ISSUE_TEMPLATE/02_feature_request.yml
vendored
Normal file
34
.github/ISSUE_TEMPLATE/02_feature_request.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Feature 请求
|
||||
description: "为这个项目提出一个建议"
|
||||
title: "[Feature request]: "
|
||||
labels: ['enhancement']
|
||||
body:
|
||||
- type: input
|
||||
id: problem
|
||||
attributes:
|
||||
label: 相关问题
|
||||
description: "清楚而简洁地描述问题是什么。"
|
||||
placeholder: "当我想要……时,软件不能……"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: way-to-solve
|
||||
attributes:
|
||||
label: 描述你希望的解决方案
|
||||
description: "你希望发生什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: instead
|
||||
attributes:
|
||||
label: 描述你所考虑的替代方案
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: "issues"
|
||||
attributes:
|
||||
label: "我确认已查询历史issues"
|
||||
description: "否则请查询后提出"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
33
.github/ISSUE_TEMPLATE/bug---.md
vendored
33
.github/ISSUE_TEMPLATE/bug---.md
vendored
@@ -1,33 +0,0 @@
|
||||
---
|
||||
name: Bug 报告
|
||||
about: 在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||
title: "[BUG]"
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||
|
||||
### 预期行为
|
||||
描述你认为应该发生什么
|
||||
|
||||
### 实际行为
|
||||
描述实际发生了什么
|
||||
|
||||
### 复现方法
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### 日志信息,位置在当前目录下的guiLogs
|
||||
<details>
|
||||
|
||||
```
|
||||
在这里粘贴日志
|
||||
```
|
||||
</details>
|
||||
|
||||
### 环境信息(客户端请升级至最新正式版)
|
||||
|
||||
### 额外信息(可选)
|
||||
20
.github/ISSUE_TEMPLATE/feature---.md
vendored
20
.github/ISSUE_TEMPLATE/feature---.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature 请求
|
||||
about: 为这个项目提出一个建议
|
||||
title: "[Feature request]"
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**你的功能请求是否与一个问题有关?请描述。**
|
||||
清楚而简洁地描述问题是什么。例如。我总是感到沮丧,当 [...]
|
||||
|
||||
**描述你希望的解决方案**
|
||||
对你希望发生的事情进行清晰、简明的描述。
|
||||
|
||||
**描述你所考虑的替代方案**
|
||||
对你考虑过的任何替代解决方案或功能进行清晰、简洁的描述。
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -8,11 +8,11 @@ A V2Ray client for Windows, support [Xray core](https://github.com/XTLS/Xray-cor
|
||||
[](https://t.me/v2rayn)
|
||||
|
||||
### How to use
|
||||
- If you are newbie please download v2rayN-Core.zip from releases
|
||||
- Otherwise please download v2rayN.zip (Also need to download v2ray core in the same folder)
|
||||
- If you are new to this, please download v2rayN-Core.zip from [releases](https://github.com/2dust/v2rayN/releases)
|
||||
- Otherwise please download v2rayN.zip (you will also need to download v2ray core into the same folder with v2rayN.exe)
|
||||
- Run v2rayN.exe
|
||||
|
||||
### Requirements
|
||||
- Microsoft [.NET Framework 4.8](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-web-installer)
|
||||
- Microsoft [.NET Framework 4.8 Runtime](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-offline-installer)
|
||||
- v2fly core [https://github.com/v2fly/v2ray-core/releases](https://github.com/v2fly/v2ray-core/releases)
|
||||
- Xray core [https://github.com/XTLS/Xray-core/releases](https://github.com/XTLS/Xray-core/releases)
|
||||
|
||||
@@ -45,16 +45,9 @@ namespace v2rayN.Base
|
||||
{
|
||||
return null;
|
||||
}
|
||||
try
|
||||
{
|
||||
HttpResponseMessage response = await httpClient.GetAsync(url);
|
||||
HttpResponseMessage response = await httpClient.GetAsync(url);
|
||||
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
return null;
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
public async Task<string> GetAsync(HttpClient client, string url, CancellationToken token)
|
||||
{
|
||||
@@ -62,16 +55,12 @@ namespace v2rayN.Base
|
||||
{
|
||||
return null;
|
||||
}
|
||||
try
|
||||
HttpResponseMessage response = await client.GetAsync(url, token);
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
HttpResponseMessage response = await client.GetAsync(url, token);
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("GetAsync", ex);
|
||||
}
|
||||
return null;
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
|
||||
public async Task PutAsync(string url, Dictionary<string, string> headers)
|
||||
|
||||
@@ -93,5 +93,20 @@ namespace v2rayN.Base
|
||||
DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
InsertionMark.Index = -1;
|
||||
}
|
||||
public void SetScrollPosition(int pos)
|
||||
{
|
||||
pos = Math.Min(Items.Count - 1, pos);
|
||||
|
||||
if (pos < 0 || pos >= Items.Count)
|
||||
return;
|
||||
|
||||
EnsureVisible(pos);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
if (TopItem != null && TopItem.Index != pos)
|
||||
TopItem = Items[pos];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
32
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
32
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
@@ -31,6 +31,9 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer2Form));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtPreSocksPort = new System.Windows.Forms.TextBox();
|
||||
this.btnEdit = new System.Windows.Forms.Button();
|
||||
this.cmbCoreType = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType = new System.Windows.Forms.Label();
|
||||
@@ -49,14 +52,18 @@
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.txtPreSocksPort);
|
||||
this.groupBox1.Controls.Add(this.btnEdit);
|
||||
this.groupBox1.Controls.Add(this.cmbCoreType);
|
||||
this.groupBox1.Controls.Add(this.labCoreType);
|
||||
@@ -66,10 +73,24 @@
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtPreSocksPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPreSocksPort, "txtPreSocksPort");
|
||||
this.txtPreSocksPort.Name = "txtPreSocksPort";
|
||||
//
|
||||
// btnEdit
|
||||
//
|
||||
resources.ApplyResources(this.btnEdit, "btnEdit");
|
||||
@@ -79,9 +100,9 @@
|
||||
//
|
||||
// cmbCoreType
|
||||
//
|
||||
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||
this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||
this.cmbCoreType.Name = "cmbCoreType";
|
||||
//
|
||||
// labCoreType
|
||||
@@ -123,9 +144,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
|
||||
@@ -174,5 +195,8 @@
|
||||
private System.Windows.Forms.ComboBox cmbCoreType;
|
||||
private System.Windows.Forms.Label labCoreType;
|
||||
private System.Windows.Forms.Button btnEdit;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtPreSocksPort;
|
||||
private System.Windows.Forms.Label label3;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
@@ -18,11 +19,15 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddServer2Form_Load(object sender, EventArgs e)
|
||||
{
|
||||
cmbCoreType.Items.AddRange(Global.coreTypes.ToArray());
|
||||
cmbCoreType.Items.Add("clash");
|
||||
cmbCoreType.Items.Add("clash_meta");
|
||||
cmbCoreType.Items.Add("hysteria");
|
||||
cmbCoreType.Items.Add("naiveproxy");
|
||||
List<string> coreTypes = new List<string>();
|
||||
foreach (ECoreType it in Enum.GetValues(typeof(ECoreType)))
|
||||
{
|
||||
if (it == ECoreType.v2rayN)
|
||||
continue;
|
||||
coreTypes.Add(it.ToString());
|
||||
}
|
||||
|
||||
cmbCoreType.Items.AddRange(coreTypes.ToArray());
|
||||
cmbCoreType.Items.Add(string.Empty);
|
||||
|
||||
txtAddress.ReadOnly = true;
|
||||
@@ -47,6 +52,7 @@ namespace v2rayN.Forms
|
||||
{
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPreSocksPort.Text = vmessItem.preSocksPort.ToString();
|
||||
|
||||
cmbCoreType.Text = vmessItem.coreType == null ? string.Empty : vmessItem.coreType.ToString();
|
||||
}
|
||||
@@ -74,6 +80,8 @@ namespace v2rayN.Forms
|
||||
return;
|
||||
}
|
||||
vmessItem.remarks = remarks;
|
||||
vmessItem.preSocksPort = Utils.ToInt(txtPreSocksPort.Text);
|
||||
|
||||
if (Utils.IsNullOrEmpty(cmbCoreType.Text))
|
||||
{
|
||||
vmessItem.coreType = null;
|
||||
|
||||
@@ -118,390 +118,456 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>370, 41</value>
|
||||
</data>
|
||||
<data name=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>* After setting this value, an socks service will be started using V2ray to provide functions such as speed display</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="labCoreType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 157</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
</data>
|
||||
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="labCoreType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Custom configuration server</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 110</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>357, 17</value>
|
||||
</data>
|
||||
<data name=">>panel1.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="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>46</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.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=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 37</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>450, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<data name="btnEdit.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>43</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.Name" xml:space="preserve">
|
||||
<value>txtPreSocksPort</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="txtPreSocksPort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>45</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
<data name="btnEdit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>208, 110</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>&Edit</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Type" xml:space="preserve">
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 21</value>
|
||||
</data>
|
||||
<data name=">>label13.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="btnBrowse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>AddServer2Form</value>
|
||||
</data>
|
||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>446, 26</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.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=">>labCoreType.Name" xml:space="preserve">
|
||||
<value>labCoreType</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>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=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 20</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="labCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>42</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.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=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<data name="txtPreSocksPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 21</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnEdit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 10</value>
|
||||
</data>
|
||||
<data name="btnEdit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>208, 110</value>
|
||||
</data>
|
||||
<data name="btnEdit.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnEdit.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>43</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>&Edit</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Name" xml:space="preserve">
|
||||
<value>btnEdit</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.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=">>btnEdit.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 157</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 20</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Name" xml:space="preserve">
|
||||
<value>cmbCoreType</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labCoreType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labCoreType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 161</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name="labCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>42</value>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core Type</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Name" xml:space="preserve">
|
||||
<value>labCoreType</value>
|
||||
<data name="txtPreSocksPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 195</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnBrowse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 110</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<data name="btnEdit.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>&Browse</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Name" xml:space="preserve">
|
||||
<value>btnBrowse</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.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=">>btnBrowse.Parent" xml:space="preserve">
|
||||
<data name=">>cmbCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
</data>
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 37</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||
<value>txtAddress</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.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=">>txtAddress.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>446, 26</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name=">>label13.Name" xml:space="preserve">
|
||||
<value>label13</value>
|
||||
</data>
|
||||
<data name=">>label13.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label13.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.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=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name=">>btnEdit.Name" xml:space="preserve">
|
||||
<value>btnEdit</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 27</value>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<data name=">>label6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</value>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>229, 189</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>44</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="labCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 161</value>
|
||||
</data>
|
||||
<data name=">>label13.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name=">>btnClose.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="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Name" xml:space="preserve">
|
||||
<value>cmbCoreType</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>&Browse</value>
|
||||
</data>
|
||||
<data name=">>label6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 189</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>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=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>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=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>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, 199</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Pre-Socks Port</value>
|
||||
</data>
|
||||
<data name=">>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=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>357, 17</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>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=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 259</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 10</value>
|
||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
<data name="btnEdit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
<data name=">>labCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<data name=">>txtPreSocksPort.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="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 199</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 319</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Name" xml:space="preserve">
|
||||
<value>btnBrowse</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 249</value>
|
||||
</data>
|
||||
<data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>label13.Name" xml:space="preserve">
|
||||
<value>label13</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||
<value>txtAddress</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.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="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 27</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 259</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Custom configuration server</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>AddServer2Form</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,34 +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="$this.Text" xml:space="preserve">
|
||||
<value>自定义配置</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>浏览(&B)</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>编辑(&E)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>337, 41</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>* 自定义配置的Socks端口值,可不设置;当设置此值后,将使用V2ray-core额外启动一个前置Socks服务,提供分流和速度显示等功能</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Socks端口</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>编辑(&E)</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core类型</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>浏览(&B)</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>自定义配置</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -23,7 +23,7 @@ namespace v2rayN.Forms
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
panVmess.Dock = DockStyle.Fill;
|
||||
panVmess.Visible = true;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace v2rayN.Forms
|
||||
//panTran.Visible = false;
|
||||
//this.Height = this.Height - panTran.Height;
|
||||
|
||||
cmbSecurity3.Items.AddRange(LazyConfig.Instance.GetShadowsocksSecuritys().ToArray());
|
||||
cmbSecurity3.Items.AddRange(LazyConfig.Instance.GetShadowsocksSecuritys(vmessItem).ToArray());
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
panSocks.Dock = DockStyle.Fill;
|
||||
@@ -84,7 +84,7 @@ namespace v2rayN.Forms
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
txtId.Text = vmessItem.id;
|
||||
txtAlterId.Text = vmessItem.alterId.ToString();
|
||||
cmbSecurity.Text = vmessItem.security;
|
||||
@@ -124,7 +124,7 @@ namespace v2rayN.Forms
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
txtId.Text = "";
|
||||
txtAlterId.Text = "0";
|
||||
cmbSecurity.Text = Global.DefaultSecurity;
|
||||
@@ -164,7 +164,7 @@ namespace v2rayN.Forms
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
id = txtId.Text;
|
||||
alterId = txtAlterId.Text;
|
||||
security = cmbSecurity.Text;
|
||||
@@ -241,7 +241,7 @@ namespace v2rayN.Forms
|
||||
int ret = -1;
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
ret = ConfigHandler.AddServer(ref config, vmessItem);
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
|
||||
9
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
9
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
@@ -111,6 +111,7 @@
|
||||
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateSagerNetCore = 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();
|
||||
@@ -718,6 +719,7 @@
|
||||
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsbCheckUpdateN,
|
||||
this.tsbCheckUpdateCore,
|
||||
this.tsbCheckUpdateSagerNetCore,
|
||||
this.tsbCheckUpdateXrayCore,
|
||||
this.toolStripSeparator16,
|
||||
this.tsbCheckUpdateClashCore,
|
||||
@@ -740,6 +742,12 @@
|
||||
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
|
||||
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
|
||||
//
|
||||
// tsbCheckUpdateSagerNetCore
|
||||
//
|
||||
this.tsbCheckUpdateSagerNetCore.Name = "tsbCheckUpdateSagerNetCore";
|
||||
resources.ApplyResources(this.tsbCheckUpdateSagerNetCore, "tsbCheckUpdateSagerNetCore");
|
||||
this.tsbCheckUpdateSagerNetCore.Click += new System.EventHandler(this.tsbCheckUpdateSagerNetCore_Click);
|
||||
//
|
||||
// tsbCheckUpdateXrayCore
|
||||
//
|
||||
this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
|
||||
@@ -972,6 +980,7 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateClashMetaCore;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator16;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSortServerResult;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateSagerNetCore;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -87,6 +87,12 @@ namespace v2rayN.Forms
|
||||
MainFormHandler.Instance.RegisterGlobalHotkey(config, OnHotkeyHandler, UpdateTaskHandler);
|
||||
|
||||
_ = LoadV2ray();
|
||||
|
||||
if (!Utils.CheckForDotNetVersion())
|
||||
{
|
||||
UI.ShowWarning(ResUI.NetFrameworkRequirementsTip);
|
||||
AppendText(false, ResUI.NetFrameworkRequirementsTip);
|
||||
}
|
||||
}
|
||||
|
||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
@@ -340,7 +346,7 @@ namespace v2rayN.Forms
|
||||
if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0)
|
||||
{
|
||||
lvServers.Items[index].Selected = true;
|
||||
lvServers.EnsureVisible(index); // workaround
|
||||
lvServers.SetScrollPosition(index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -666,7 +672,7 @@ namespace v2rayN.Forms
|
||||
|
||||
private void menuAddVmessServer_Click(object sender, EventArgs e)
|
||||
{
|
||||
ShowServerForm(EConfigType.Vmess, -1);
|
||||
ShowServerForm(EConfigType.VMess, -1);
|
||||
}
|
||||
|
||||
private void menuAddVlessServer_Click(object sender, EventArgs e)
|
||||
@@ -799,12 +805,20 @@ namespace v2rayN.Forms
|
||||
private void menuExport2ClientConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
MainFormHandler.Instance.Export2ClientConfig(lstVmess[index], config);
|
||||
}
|
||||
|
||||
private void menuExport2ServerConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
MainFormHandler.Instance.Export2ServerConfig(lstVmess[index], config);
|
||||
}
|
||||
|
||||
@@ -924,7 +938,23 @@ namespace v2rayN.Forms
|
||||
}
|
||||
if (ConfigHandler.SetDefaultServer(ref config, lstVmess[index]) == 0)
|
||||
{
|
||||
RefreshServers();
|
||||
//RefreshServers();
|
||||
for (int k = 0; k < lstVmess.Count; k++)
|
||||
{
|
||||
if (config.IsActiveNode(lstVmess[k]))
|
||||
{
|
||||
lvServers.Items[k].SubItems[0].Text = "√";
|
||||
lvServers.Items[k].ForeColor = Color.DodgerBlue;
|
||||
lvServers.Items[k].Font = new Font(lvServers.Font, FontStyle.Bold);
|
||||
}
|
||||
else
|
||||
{
|
||||
lvServers.Items[k].SubItems[0].Text = "";
|
||||
lvServers.Items[k].ForeColor = lvServers.ForeColor;
|
||||
lvServers.Items[k].Font = new Font(lvServers.Font, FontStyle.Regular);
|
||||
}
|
||||
}
|
||||
RefreshServersMenu();
|
||||
_ = LoadV2ray();
|
||||
}
|
||||
return 0;
|
||||
@@ -1074,7 +1104,7 @@ namespace v2rayN.Forms
|
||||
/// <param name="msg"></param>
|
||||
private void notifyMsg(string msg)
|
||||
{
|
||||
notifyMain.Text = msg;
|
||||
notifyMain.Text = (msg.Length <= 63 ? msg : msg.Substring(1, 63));
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -1115,7 +1145,7 @@ namespace v2rayN.Forms
|
||||
if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0)
|
||||
{
|
||||
lvServers.Items[index].Selected = true;
|
||||
lvServers.EnsureVisible(index); // workaround
|
||||
lvServers.SetScrollPosition(index);
|
||||
}
|
||||
|
||||
SetVisibleCore(true);
|
||||
@@ -1130,6 +1160,12 @@ namespace v2rayN.Forms
|
||||
ShowInTaskbar = false;
|
||||
|
||||
SetVisibleCore(false);
|
||||
|
||||
//write Handle to reg
|
||||
if (IsHandleCreated)
|
||||
{
|
||||
Utils.RegWriteValue(Global.MyRegPath, Utils.WindowHwndKey, Convert.ToString((long)Handle));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -1175,8 +1211,8 @@ namespace v2rayN.Forms
|
||||
{
|
||||
try
|
||||
{
|
||||
up /= (ulong)(config.statisticsFreshRate / 1000f);
|
||||
down /= (ulong)(config.statisticsFreshRate / 1000f);
|
||||
up /= (ulong)(config.statisticsFreshRate);
|
||||
down /= (ulong)(config.statisticsFreshRate);
|
||||
mainMsgControl.SetToolSslInfo("speed", string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down)));
|
||||
|
||||
foreach (var it in statistics)
|
||||
@@ -1244,7 +1280,6 @@ namespace v2rayN.Forms
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectServer);
|
||||
return;
|
||||
}
|
||||
if (ConfigHandler.MoveServer(ref config, ref lstVmess, index, eMove) == 0)
|
||||
@@ -1329,6 +1364,11 @@ namespace v2rayN.Forms
|
||||
CheckUpdateCore(ECoreType.v2fly);
|
||||
}
|
||||
|
||||
private void tsbCheckUpdateSagerNetCore_Click(object sender, EventArgs e)
|
||||
{
|
||||
CheckUpdateCore(ECoreType.SagerNet);
|
||||
}
|
||||
|
||||
private void tsbCheckUpdateXrayCore_Click(object sender, EventArgs e)
|
||||
{
|
||||
CheckUpdateCore(ECoreType.Xray);
|
||||
|
||||
@@ -842,6 +842,9 @@
|
||||
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
|
||||
<value>Update v2fly Core</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateSagerNetCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>219, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>219, 22</value>
|
||||
</data>
|
||||
@@ -1412,6 +1415,12 @@
|
||||
<data name=">>tsbCheckUpdateCore.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=">>tsbCheckUpdateSagerNetCore.Name" xml:space="preserve">
|
||||
<value>tsbCheckUpdateSagerNetCore</value>
|
||||
</data>
|
||||
<data name=">>tsbCheckUpdateSagerNetCore.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=">>tsbCheckUpdateXrayCore.Name" xml:space="preserve">
|
||||
<value>tsbCheckUpdateXrayCore</value>
|
||||
</data>
|
||||
@@ -1514,4 +1523,7 @@
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateSagerNetCore.Text" xml:space="preserve">
|
||||
<value>Update SagerNet Core</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -570,4 +570,7 @@
|
||||
<data name="menuSortServerResult.Text" xml:space="preserve">
|
||||
<value>按测试结果排序 (Ctrl+E)</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateSagerNetCore.Text" xml:space="preserve">
|
||||
<value>SagerNet-Core</value>
|
||||
</data>
|
||||
</root>
|
||||
83
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
83
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
@@ -50,6 +50,8 @@
|
||||
this.txtlocalPort = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.cmbdomainStrategy4Freedom = new System.Windows.Forms.ComboBox();
|
||||
this.label19 = new System.Windows.Forms.Label();
|
||||
this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.txtremoteDNS = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
@@ -68,6 +70,7 @@
|
||||
this.txtKcpmtu = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.tabPage7 = new System.Windows.Forms.TabPage();
|
||||
this.numStatisticsFreshRate = new System.Windows.Forms.NumericUpDown();
|
||||
this.txttrayMenuServersLimit = new System.Windows.Forms.TextBox();
|
||||
this.label17 = new System.Windows.Forms.Label();
|
||||
this.txtautoUpdateSubInterval = new System.Windows.Forms.TextBox();
|
||||
@@ -79,7 +82,6 @@
|
||||
this.label15 = new System.Windows.Forms.Label();
|
||||
this.chkIgnoreGeoUpdateCore = new System.Windows.Forms.CheckBox();
|
||||
this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox();
|
||||
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
||||
this.lbFreshrate = new System.Windows.Forms.Label();
|
||||
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
||||
this.chkAutoRun = new System.Windows.Forms.CheckBox();
|
||||
@@ -112,6 +114,7 @@
|
||||
this.tabPage2.SuspendLayout();
|
||||
this.tabPage6.SuspendLayout();
|
||||
this.tabPage7.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numStatisticsFreshRate)).BeginInit();
|
||||
this.tabPageCoreType.SuspendLayout();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
@@ -120,33 +123,34 @@
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
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
|
||||
//
|
||||
this.tabPage1.Controls.Add(this.groupBox1);
|
||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||
this.tabPage1.Controls.Add(this.groupBox1);
|
||||
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);
|
||||
@@ -163,7 +167,6 @@
|
||||
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;
|
||||
//
|
||||
@@ -213,8 +216,8 @@
|
||||
//
|
||||
// cmbprotocol
|
||||
//
|
||||
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
|
||||
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbprotocol.FormattingEnabled = true;
|
||||
this.cmbprotocol.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbprotocol.Items"),
|
||||
@@ -240,6 +243,7 @@
|
||||
//
|
||||
// cmbloglevel
|
||||
//
|
||||
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
||||
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbloglevel.FormattingEnabled = true;
|
||||
this.cmbloglevel.Items.AddRange(new object[] {
|
||||
@@ -248,7 +252,6 @@
|
||||
resources.GetString("cmbloglevel.Items2"),
|
||||
resources.GetString("cmbloglevel.Items3"),
|
||||
resources.GetString("cmbloglevel.Items4")});
|
||||
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
||||
this.cmbloglevel.Name = "cmbloglevel";
|
||||
//
|
||||
// label5
|
||||
@@ -268,13 +271,32 @@
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||
this.tabPage2.Controls.Add(this.cmbdomainStrategy4Freedom);
|
||||
this.tabPage2.Controls.Add(this.label19);
|
||||
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;
|
||||
//
|
||||
// cmbdomainStrategy4Freedom
|
||||
//
|
||||
resources.ApplyResources(this.cmbdomainStrategy4Freedom, "cmbdomainStrategy4Freedom");
|
||||
this.cmbdomainStrategy4Freedom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainStrategy4Freedom.FormattingEnabled = true;
|
||||
this.cmbdomainStrategy4Freedom.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items1"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items2"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items3")});
|
||||
this.cmbdomainStrategy4Freedom.Name = "cmbdomainStrategy4Freedom";
|
||||
//
|
||||
// label19
|
||||
//
|
||||
resources.ApplyResources(this.label19, "label19");
|
||||
this.label19.Name = "label19";
|
||||
//
|
||||
// linkDnsObjectDoc
|
||||
//
|
||||
resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc");
|
||||
@@ -294,6 +316,7 @@
|
||||
//
|
||||
// tabPage6
|
||||
//
|
||||
resources.ApplyResources(this.tabPage6, "tabPage6");
|
||||
this.tabPage6.Controls.Add(this.chkKcpcongestion);
|
||||
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
|
||||
this.tabPage6.Controls.Add(this.label10);
|
||||
@@ -307,7 +330,6 @@
|
||||
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;
|
||||
//
|
||||
@@ -379,6 +401,8 @@
|
||||
//
|
||||
// tabPage7
|
||||
//
|
||||
resources.ApplyResources(this.tabPage7, "tabPage7");
|
||||
this.tabPage7.Controls.Add(this.numStatisticsFreshRate);
|
||||
this.tabPage7.Controls.Add(this.txttrayMenuServersLimit);
|
||||
this.tabPage7.Controls.Add(this.label17);
|
||||
this.tabPage7.Controls.Add(this.txtautoUpdateSubInterval);
|
||||
@@ -390,14 +414,17 @@
|
||||
this.tabPage7.Controls.Add(this.label15);
|
||||
this.tabPage7.Controls.Add(this.chkIgnoreGeoUpdateCore);
|
||||
this.tabPage7.Controls.Add(this.chkKeepOlderDedupl);
|
||||
this.tabPage7.Controls.Add(this.cbFreshrate);
|
||||
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;
|
||||
//
|
||||
// numStatisticsFreshRate
|
||||
//
|
||||
resources.ApplyResources(this.numStatisticsFreshRate, "numStatisticsFreshRate");
|
||||
this.numStatisticsFreshRate.Name = "numStatisticsFreshRate";
|
||||
//
|
||||
// txttrayMenuServersLimit
|
||||
//
|
||||
resources.ApplyResources(this.txttrayMenuServersLimit, "txttrayMenuServersLimit");
|
||||
@@ -459,13 +486,6 @@
|
||||
this.chkKeepOlderDedupl.Name = "chkKeepOlderDedupl";
|
||||
this.chkKeepOlderDedupl.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// cbFreshrate
|
||||
//
|
||||
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbFreshrate.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
||||
this.cbFreshrate.Name = "cbFreshrate";
|
||||
//
|
||||
// lbFreshrate
|
||||
//
|
||||
resources.ApplyResources(this.lbFreshrate, "lbFreshrate");
|
||||
@@ -485,6 +505,7 @@
|
||||
//
|
||||
// tabPageCoreType
|
||||
//
|
||||
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType6);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType6);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType5);
|
||||
@@ -497,15 +518,14 @@
|
||||
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
|
||||
@@ -515,9 +535,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
|
||||
@@ -527,9 +547,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
|
||||
@@ -539,9 +559,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
|
||||
@@ -551,9 +571,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
|
||||
@@ -563,9 +583,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
|
||||
@@ -575,19 +595,19 @@
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
this.tabPage3.Controls.Add(this.groupBox2);
|
||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
||||
this.tabPage3.Controls.Add(this.groupBox2);
|
||||
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;
|
||||
//
|
||||
@@ -598,8 +618,8 @@
|
||||
//
|
||||
// cmbSystemProxyAdvancedProtocol
|
||||
//
|
||||
this.cmbSystemProxyAdvancedProtocol.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbSystemProxyAdvancedProtocol, "cmbSystemProxyAdvancedProtocol");
|
||||
this.cmbSystemProxyAdvancedProtocol.FormattingEnabled = true;
|
||||
this.cmbSystemProxyAdvancedProtocol.Name = "cmbSystemProxyAdvancedProtocol";
|
||||
//
|
||||
// label13
|
||||
@@ -619,9 +639,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
|
||||
@@ -657,6 +677,7 @@
|
||||
this.tabPage6.PerformLayout();
|
||||
this.tabPage7.ResumeLayout(false);
|
||||
this.tabPage7.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numStatisticsFreshRate)).EndInit();
|
||||
this.tabPageCoreType.ResumeLayout(false);
|
||||
this.tabPageCoreType.PerformLayout();
|
||||
this.tabPage3.ResumeLayout(false);
|
||||
@@ -704,7 +725,6 @@
|
||||
private System.Windows.Forms.CheckBox chkAllowLANConn;
|
||||
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
||||
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
||||
private System.Windows.Forms.ComboBox cbFreshrate;
|
||||
private System.Windows.Forms.Label lbFreshrate;
|
||||
private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
|
||||
private System.Windows.Forms.CheckBox chkdefAllowInsecure;
|
||||
@@ -746,5 +766,8 @@
|
||||
private System.Windows.Forms.Label label17;
|
||||
private System.Windows.Forms.ComboBox cmbSystemProxyAdvancedProtocol;
|
||||
private System.Windows.Forms.Label label18;
|
||||
private System.Windows.Forms.NumericUpDown numStatisticsFreshRate;
|
||||
private System.Windows.Forms.ComboBox cmbdomainStrategy4Freedom;
|
||||
private System.Windows.Forms.Label label19;
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ namespace v2rayN.Forms
|
||||
private void OptionSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
cmbSystemProxyAdvancedProtocol.Items.AddRange(Global.IEProxyProtocols.ToArray());
|
||||
|
||||
|
||||
InitBase();
|
||||
|
||||
InitKCP();
|
||||
@@ -56,6 +56,7 @@ namespace v2rayN.Forms
|
||||
|
||||
//remoteDNS
|
||||
txtremoteDNS.Text = config.remoteDNS;
|
||||
cmbdomainStrategy4Freedom.Text = config.domainStrategy4Freedom;
|
||||
|
||||
chkdefAllowInsecure.Checked = config.defAllowInsecure;
|
||||
|
||||
@@ -88,32 +89,9 @@ namespace v2rayN.Forms
|
||||
chkAutoRun.Checked = Utils.IsAutoRun();
|
||||
|
||||
chkEnableStatistics.Checked = config.enableStatistics;
|
||||
numStatisticsFreshRate.Value = config.statisticsFreshRate;
|
||||
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
||||
|
||||
ComboItem[] cbSource = new ComboItem[]
|
||||
{
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = ResUI.QuickFresh},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = ResUI.MediumFresh},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = ResUI.SlowFresh},
|
||||
};
|
||||
cbFreshrate.DataSource = cbSource;
|
||||
|
||||
cbFreshrate.DisplayMember = "Text";
|
||||
cbFreshrate.ValueMember = "ID";
|
||||
|
||||
switch (config.statisticsFreshRate)
|
||||
{
|
||||
case (int)Global.StatisticsFreshRate.quick:
|
||||
cbFreshrate.SelectedItem = cbSource[0];
|
||||
break;
|
||||
case (int)Global.StatisticsFreshRate.medium:
|
||||
cbFreshrate.SelectedItem = cbSource[1];
|
||||
break;
|
||||
case (int)Global.StatisticsFreshRate.slow:
|
||||
cbFreshrate.SelectedItem = cbSource[2];
|
||||
break;
|
||||
}
|
||||
|
||||
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
|
||||
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
|
||||
chkEnableSecurityProtocolTls13.Checked = config.enableSecurityProtocolTls13;
|
||||
@@ -252,6 +230,7 @@ namespace v2rayN.Forms
|
||||
|
||||
//remoteDNS
|
||||
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||
config.domainStrategy4Freedom = cmbdomainStrategy4Freedom.Text;
|
||||
|
||||
config.defAllowInsecure = chkdefAllowInsecure.Checked;
|
||||
|
||||
@@ -309,7 +288,8 @@ namespace v2rayN.Forms
|
||||
|
||||
bool lastEnableStatistics = config.enableStatistics;
|
||||
config.enableStatistics = chkEnableStatistics.Checked;
|
||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||
config.statisticsFreshRate = Convert.ToInt32(numStatisticsFreshRate.Value);
|
||||
|
||||
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
|
||||
|
||||
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -121,120 +121,15 @@
|
||||
<value>取消(&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>
|
||||
@@ -325,24 +220,144 @@
|
||||
<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="cmbdomainStrategy4Freedom.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>223, 413</value>
|
||||
</data>
|
||||
<data name="label19.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 417</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Text" xml:space="preserve">
|
||||
<value>支持填写DnsObject,JSON格式</value>
|
||||
</data>
|
||||
<data name="txtremoteDNS.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>638, 366</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<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="numStatisticsFreshRate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>472, 37</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="lbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>339, 41</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>125, 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="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>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>例外</value>
|
||||
</data>
|
||||
<data name="label18.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 12</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>高级代理设置, 协议选择(可选)</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
@@ -373,7 +388,4 @@
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>参数设置</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>高级代理设置, 协议选择(可选)</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -31,6 +31,7 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingDetailsForm));
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.linkRuleobjectDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.clbInboundTag = new System.Windows.Forms.CheckedListBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
@@ -50,7 +51,6 @@
|
||||
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();
|
||||
@@ -65,6 +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);
|
||||
@@ -76,9 +77,15 @@
|
||||
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";
|
||||
//
|
||||
// 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);
|
||||
//
|
||||
// chkEnabled
|
||||
//
|
||||
resources.ApplyResources(this.chkEnabled, "chkEnabled");
|
||||
@@ -87,8 +94,8 @@
|
||||
//
|
||||
// clbInboundTag
|
||||
//
|
||||
this.clbInboundTag.CheckOnClick = true;
|
||||
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
|
||||
this.clbInboundTag.CheckOnClick = true;
|
||||
this.clbInboundTag.FormattingEnabled = true;
|
||||
this.clbInboundTag.Items.AddRange(new object[] {
|
||||
resources.GetString("clbInboundTag.Items"),
|
||||
@@ -105,8 +112,8 @@
|
||||
//
|
||||
// clbProtocol
|
||||
//
|
||||
this.clbProtocol.CheckOnClick = true;
|
||||
resources.ApplyResources(this.clbProtocol, "clbProtocol");
|
||||
this.clbProtocol.CheckOnClick = true;
|
||||
this.clbProtocol.FormattingEnabled = true;
|
||||
this.clbProtocol.Items.AddRange(new object[] {
|
||||
resources.GetString("clbProtocol.Items"),
|
||||
@@ -132,8 +139,8 @@
|
||||
//
|
||||
// labRoutingTips
|
||||
//
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// label4
|
||||
@@ -143,21 +150,21 @@
|
||||
//
|
||||
// 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
|
||||
@@ -168,8 +175,8 @@
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
@@ -183,15 +190,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
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.txtIP);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Controls.Add(this.txtIP);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
@@ -202,8 +209,8 @@
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.txtDomain);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.txtDomain);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
@@ -212,13 +219,6 @@
|
||||
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");
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -118,14 +118,20 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="linkRuleobjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name="linkRuleobjectDoc.Text" xml:space="preserve">
|
||||
<value>规则详细说明文档</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>670, 18</value>
|
||||
<value>670, 48</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>372, 16</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>272, 20</value>
|
||||
<value>347, 20</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>279, 20</value>
|
||||
@@ -154,6 +160,12 @@
|
||||
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>120, 16</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 16</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Text" xml:space="preserve">
|
||||
<value>保存时Domain和IP自动排序</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
@@ -170,10 +182,4 @@
|
||||
<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>
|
||||
15
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
15
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
@@ -45,6 +45,7 @@
|
||||
this.menuRemove = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuImportAdvancedRules = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItemAdvanced = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
@@ -71,7 +72,6 @@
|
||||
this.txtBlockDomain = new System.Windows.Forms.TextBox();
|
||||
this.tabPageRuleList = new System.Windows.Forms.TabPage();
|
||||
this.lvRoutings = new v2rayN.Base.ListViewFlickerFree();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.cmsLv.SuspendLayout();
|
||||
@@ -135,9 +135,6 @@
|
||||
//
|
||||
this.cmbdomainMatcher.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainMatcher.FormattingEnabled = true;
|
||||
this.cmbdomainMatcher.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainMatcher.Items"),
|
||||
resources.GetString("cmbdomainMatcher.Items1")});
|
||||
resources.ApplyResources(this.cmbdomainMatcher, "cmbdomainMatcher");
|
||||
this.cmbdomainMatcher.Name = "cmbdomainMatcher";
|
||||
//
|
||||
@@ -209,6 +206,11 @@
|
||||
resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting");
|
||||
this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// menuImportAdvancedRules
|
||||
//
|
||||
this.menuImportAdvancedRules.Name = "menuImportAdvancedRules";
|
||||
@@ -390,11 +392,6 @@
|
||||
this.lvRoutings.View = System.Windows.Forms.View.Details;
|
||||
this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// RoutingSettingForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace v2rayN.Forms
|
||||
private void RoutingSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
ConfigHandler.InitBuiltinRouting(ref config);
|
||||
cmbdomainMatcher.Items.AddRange(Global.domainMatchers.ToArray());
|
||||
|
||||
cmbdomainStrategy.Text = config.domainStrategy;
|
||||
chkenableRoutingAdvanced.Checked = config.enableRoutingAdvanced;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,11 +13,13 @@ namespace v2rayN
|
||||
public const string UpdateUrl = AboutUrl + @"/releases";
|
||||
public const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases";
|
||||
public const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases";
|
||||
public const string SagerNetCoreUrl = "https://github.com/SagerNet/v2ray-core/releases";
|
||||
public const string NUrl = @"https://github.com/2dust/v2rayN/releases";
|
||||
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 tuicCoreUrl = "https://github.com/EAimTY/tuic/releases";
|
||||
public const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
|
||||
|
||||
|
||||
@@ -191,12 +193,6 @@ namespace v2rayN
|
||||
/// </summary>
|
||||
public const string CustomIconName = "v2rayN.ico";
|
||||
|
||||
public enum StatisticsFreshRate
|
||||
{
|
||||
quick = 1000,
|
||||
medium = 2000,
|
||||
slow = 3000
|
||||
}
|
||||
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.*";
|
||||
@@ -212,11 +208,13 @@ namespace v2rayN
|
||||
|
||||
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> ssSecuritysInSagerNet = new List<string> { "none", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "rc4", "rc4-md5", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-cfb8", "aes-192-cfb8", "aes-256-cfb8", "aes-128-ofb", "aes-192-ofb", "aes-256-ofb", "bf-cfb", "cast5-cfb", "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", "camellia-128-cfb8", "camellia-192-cfb8", "camellia-256-cfb8", "salsa20", "chacha20", "chacha20-ietf", "xchacha20" };
|
||||
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" };
|
||||
public static readonly List<string> coreTypes = new List<string> { "v2fly", "Xray" };
|
||||
public static readonly List<string> coreTypes = new List<string> { "v2fly", "SagerNet", "Xray" };
|
||||
public static readonly List<string> domainMatchers = new List<string> { "linear", "mph", "" };
|
||||
public const string GrpcgunMode = "gun";
|
||||
public const string GrpcmultiMode = "multi";
|
||||
|
||||
|
||||
@@ -54,11 +54,9 @@ namespace v2rayN.Handler
|
||||
//Mux
|
||||
muxEnabled = false,
|
||||
|
||||
// 默认不开启统计
|
||||
enableStatistics = false,
|
||||
|
||||
// 默认中等刷新率
|
||||
statisticsFreshRate = (int)Global.StatisticsFreshRate.medium,
|
||||
statisticsFreshRate = 1,
|
||||
|
||||
enableRoutingAdvanced = true
|
||||
};
|
||||
@@ -97,10 +95,10 @@ namespace v2rayN.Handler
|
||||
{
|
||||
config.domainStrategy = "IPIfNonMatch";
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(config.domainMatcher))
|
||||
{
|
||||
config.domainMatcher = "linear";
|
||||
}
|
||||
//if (Utils.IsNullOrEmpty(config.domainMatcher))
|
||||
//{
|
||||
// config.domainMatcher = "linear";
|
||||
//}
|
||||
|
||||
//kcp
|
||||
if (config.kcpItem == null)
|
||||
@@ -158,7 +156,10 @@ namespace v2rayN.Handler
|
||||
{
|
||||
config.groupItem = new List<GroupItem>();
|
||||
}
|
||||
|
||||
if (config.statisticsFreshRate > 100)
|
||||
{
|
||||
config.statisticsFreshRate = 1;
|
||||
}
|
||||
|
||||
if (config == null
|
||||
|| config.vmess.Count <= 0
|
||||
@@ -245,7 +246,7 @@ namespace v2rayN.Handler
|
||||
/// <returns></returns>
|
||||
public static int AddServer(ref Config config, VmessItem vmessItem, bool toFile = true)
|
||||
{
|
||||
vmessItem.configType = EConfigType.Vmess;
|
||||
vmessItem.configType = EConfigType.VMess;
|
||||
|
||||
vmessItem.address = vmessItem.address.TrimEx();
|
||||
vmessItem.id = vmessItem.id.TrimEx();
|
||||
@@ -480,8 +481,9 @@ namespace v2rayN.Handler
|
||||
File.Delete(fileName);
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -527,7 +529,7 @@ namespace v2rayN.Handler
|
||||
vmessItem.id = vmessItem.id.TrimEx();
|
||||
vmessItem.security = vmessItem.security.TrimEx();
|
||||
|
||||
if (!LazyConfig.Instance.GetShadowsocksSecuritys().Contains(vmessItem.security))
|
||||
if (!LazyConfig.Instance.GetShadowsocksSecuritys(vmessItem).Contains(vmessItem.security))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
@@ -609,7 +611,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (vmessItem.configType == EConfigType.Vmess)
|
||||
if (vmessItem.configType == EConfigType.VMess)
|
||||
{
|
||||
string path = "";
|
||||
string host = "";
|
||||
@@ -814,6 +816,7 @@ namespace v2rayN.Handler
|
||||
&& o.path == n.path
|
||||
&& o.streamSecurity == n.streamSecurity
|
||||
&& o.flow == n.flow
|
||||
&& o.sni == n.sni
|
||||
&& (!remarks || o.remarks == n.remarks);
|
||||
}
|
||||
|
||||
@@ -896,7 +899,7 @@ namespace v2rayN.Handler
|
||||
//groupId
|
||||
vmessItem.groupId = groupId;
|
||||
|
||||
if (vmessItem.configType == EConfigType.Vmess)
|
||||
if (vmessItem.configType == EConfigType.VMess)
|
||||
{
|
||||
if (AddServer(ref config, vmessItem, false) == 0)
|
||||
{
|
||||
@@ -976,7 +979,9 @@ namespace v2rayN.Handler
|
||||
else if (clipboardData.IndexOf("server") >= 0
|
||||
&& clipboardData.IndexOf("up") >= 0
|
||||
&& clipboardData.IndexOf("down") >= 0
|
||||
&& clipboardData.IndexOf("listen") >= 0)
|
||||
&& clipboardData.IndexOf("listen") >= 0
|
||||
&& clipboardData.IndexOf("<html>") < 0
|
||||
&& clipboardData.IndexOf("<body>") < 0)
|
||||
{
|
||||
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
|
||||
File.WriteAllText(fileName, clipboardData);
|
||||
@@ -987,7 +992,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
//Is naiveproxy configuration
|
||||
else if (clipboardData.IndexOf("listen") >= 0
|
||||
&& clipboardData.IndexOf("proxy") >= 0)
|
||||
&& clipboardData.IndexOf("proxy") >= 0
|
||||
&& clipboardData.IndexOf("<html>") < 0
|
||||
&& clipboardData.IndexOf("<body>") < 0)
|
||||
{
|
||||
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json");
|
||||
File.WriteAllText(fileName, clipboardData);
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -66,7 +67,11 @@ namespace v2rayN.Handler
|
||||
catch (Exception ex)
|
||||
{
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -104,7 +109,11 @@ namespace v2rayN.Handler
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,6 +175,11 @@ namespace v2rayN.Handler
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -238,13 +252,35 @@ namespace v2rayN.Handler
|
||||
return null;
|
||||
}
|
||||
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
|
||||
var webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||
if (RunAvailabilityCheck(webProxy) > 0)
|
||||
if (!SocketCheck(Global.Loopback, httpPort))
|
||||
{
|
||||
return webProxy;
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
return new WebProxy(Global.Loopback, httpPort);
|
||||
}
|
||||
|
||||
private bool SocketCheck(string ip, int port)
|
||||
{
|
||||
Socket sock = null;
|
||||
try
|
||||
{
|
||||
IPAddress ipa = IPAddress.Parse(ip);
|
||||
IPEndPoint point = new IPEndPoint(ipa, port);
|
||||
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
sock.Connect(point);
|
||||
return true;
|
||||
}
|
||||
catch { }
|
||||
finally
|
||||
{
|
||||
if (sock != null)
|
||||
{
|
||||
sock.Close();
|
||||
sock.Dispose();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,14 +22,18 @@ namespace v2rayN.Handler
|
||||
return _config;
|
||||
}
|
||||
|
||||
public List<string> GetShadowsocksSecuritys()
|
||||
public List<string> GetShadowsocksSecuritys(VmessItem vmessItem)
|
||||
{
|
||||
if (GetCoreType(null, EConfigType.Shadowsocks) == ECoreType.v2fly)
|
||||
if (GetCoreType(vmessItem, EConfigType.Shadowsocks) == ECoreType.v2fly)
|
||||
{
|
||||
return Global.ssSecuritys;
|
||||
}
|
||||
if (GetCoreType(vmessItem, EConfigType.Shadowsocks) == ECoreType.Xray)
|
||||
{
|
||||
return Global.ssSecuritysInXray;
|
||||
}
|
||||
|
||||
return Global.ssSecuritysInXray;
|
||||
return Global.ssSecuritysInSagerNet;
|
||||
}
|
||||
|
||||
public ECoreType GetCoreType(VmessItem vmessItem, EConfigType eConfigType)
|
||||
@@ -82,7 +86,21 @@ namespace v2rayN.Handler
|
||||
coreLatestUrl = Global.v2flyCoreUrl + "/latest",
|
||||
coreDownloadUrl32 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
match = "V2Ray"
|
||||
match = "V2Ray",
|
||||
versionArg = "-version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.SagerNet,
|
||||
coreExes = new List<string> { "v2ray" },
|
||||
arguments = "run",
|
||||
coreUrl = Global.SagerNetCoreUrl,
|
||||
coreLatestUrl = Global.SagerNetCoreUrl + "/latest",
|
||||
coreDownloadUrl32 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
match = "V2Ray",
|
||||
versionArg = "version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
@@ -94,7 +112,8 @@ namespace v2rayN.Handler
|
||||
coreLatestUrl = Global.xrayCoreUrl + "/latest",
|
||||
coreDownloadUrl32 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
|
||||
match = "Xray"
|
||||
match = "Xray",
|
||||
versionArg = "-version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
@@ -106,18 +125,21 @@ namespace v2rayN.Handler
|
||||
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"
|
||||
match = "v",
|
||||
versionArg = "-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" },
|
||||
coreExes = new List<string> { "Clash.Meta-windows-amd64-compatible", "Clash.Meta-windows-amd64", "Clash.Meta-windows-386", "Clash.Meta", "clash" },
|
||||
arguments = "-f config.json",
|
||||
coreUrl = Global.clashMetaCoreUrl,
|
||||
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",
|
||||
match = "v",
|
||||
versionArg = "-v"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
@@ -138,6 +160,14 @@ namespace v2rayN.Handler
|
||||
arguments = "config.json",
|
||||
coreUrl = Global.naiveproxyCoreUrl
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.tuic,
|
||||
coreExes = new List<string> { "tuic-client", "tuic" },
|
||||
arguments = "-c config.json",
|
||||
coreUrl = Global.tuicCoreUrl
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace v2rayN.Handler
|
||||
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);
|
||||
graphics.FillEllipse(drawBrush, width / 2, width / 2, width / 2, width / 2);
|
||||
|
||||
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
|
||||
|
||||
@@ -118,8 +118,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (item.configType != EConfigType.Vmess
|
||||
&& item.configType != EConfigType.VLESS)
|
||||
if (item.configType == EConfigType.Custom)
|
||||
{
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
return;
|
||||
@@ -158,7 +157,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (item.configType != EConfigType.Vmess
|
||||
if (item.configType != EConfigType.VMess
|
||||
&& item.configType != EConfigType.VLESS)
|
||||
{
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Drawing;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using ZXing;
|
||||
using ZXing.QrCode;
|
||||
|
||||
@@ -34,8 +35,9 @@ namespace v2rayN.Handler
|
||||
img = (Image)bmp;
|
||||
return img;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return img;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace v2rayN.Handler
|
||||
|
||||
switch (item.configType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
url = ShareVmess(item);
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
@@ -51,8 +51,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
return url;
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@@ -360,8 +361,9 @@ namespace v2rayN.Handler
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.Incorrectconfiguration;
|
||||
return null;
|
||||
}
|
||||
@@ -374,7 +376,7 @@ namespace v2rayN.Handler
|
||||
msg = string.Empty;
|
||||
var vmessItem = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Vmess
|
||||
configType = EConfigType.VMess
|
||||
};
|
||||
|
||||
result = result.Substring(Global.vmessProtocol.Length);
|
||||
@@ -422,7 +424,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
VmessItem vmessItem = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Vmess
|
||||
configType = EConfigType.VMess
|
||||
};
|
||||
result = result.Substring(Global.vmessProtocol.Length);
|
||||
int indexSplit = result.IndexOf("?");
|
||||
@@ -460,7 +462,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
VmessItem i = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Vmess,
|
||||
configType = EConfigType.VMess,
|
||||
security = "auto"
|
||||
};
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
}
|
||||
Thread.Sleep(config_.statisticsFreshRate);
|
||||
Thread.Sleep(1000 * config_.statisticsFreshRate);
|
||||
channel_.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -198,16 +198,31 @@ namespace v2rayN.Handler
|
||||
continue;
|
||||
}
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}");
|
||||
var result = await (new DownloadHandle()).DownloadStringAsync(url, blProxy, userAgent);
|
||||
var downloadHandle = new DownloadHandle();
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{args.GetException().Message}");
|
||||
};
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}");
|
||||
var result = await downloadHandle.DownloadStringAsync(url, blProxy, userAgent);
|
||||
if (blProxy && Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
result = await downloadHandle.DownloadStringAsync(url, false, userAgent);
|
||||
}
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}");
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgSubscriptionDecodingFailed}");
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}");
|
||||
if (result.Length < 99)
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{result}");
|
||||
}
|
||||
|
||||
int ret = ConfigHandler.AddBatchServers(ref config, result, id, groupId);
|
||||
_updateFunc(false,
|
||||
ret > 0
|
||||
@@ -345,7 +360,7 @@ namespace v2rayN.Handler
|
||||
|
||||
Process p = new Process();
|
||||
p.StartInfo.FileName = filePath;
|
||||
p.StartInfo.Arguments = "-version";
|
||||
p.StartInfo.Arguments = coreInfo.versionArg;
|
||||
p.StartInfo.WorkingDirectory = Utils.StartupPath();
|
||||
p.StartInfo.UseShellExecute = false;
|
||||
p.StartInfo.RedirectStandardOutput = true;
|
||||
@@ -354,7 +369,19 @@ namespace v2rayN.Handler
|
||||
p.Start();
|
||||
p.WaitForExit(5000);
|
||||
string echo = p.StandardOutput.ReadToEnd();
|
||||
string version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value;
|
||||
string version = string.Empty;
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.SagerNet:
|
||||
case ECoreType.Xray:
|
||||
version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value;
|
||||
break;
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
version = Regex.Match(echo, $"v[0-9.]+").Groups[0].Value;
|
||||
break;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -377,6 +404,7 @@ namespace v2rayN.Handler
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.SagerNet:
|
||||
case ECoreType.Xray:
|
||||
{
|
||||
curVersion = "v" + getCoreVersion(type);
|
||||
@@ -388,7 +416,7 @@ namespace v2rayN.Handler
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
{
|
||||
curVersion = "";//getCoreVersion(type);
|
||||
curVersion = getCoreVersion(type);
|
||||
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||
if (Environment.Is64BitProcess)
|
||||
{
|
||||
|
||||
@@ -27,8 +27,9 @@ namespace v2rayN.Handler
|
||||
/// <param name="fileName"></param>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
public static int GenerateClientConfig(VmessItem node, string fileName, bool blExport, out string msg)
|
||||
public static int GenerateClientConfig(VmessItem node, string fileName, out string msg, out string content)
|
||||
{
|
||||
content = string.Empty;
|
||||
try
|
||||
{
|
||||
if (node == null)
|
||||
@@ -42,55 +43,34 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return GenerateClientCustomConfig(node, fileName, out msg);
|
||||
}
|
||||
|
||||
//取得默认配置
|
||||
string result = Utils.GetEmbedText(SampleClient);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
else
|
||||
{
|
||||
msg = ResUI.FailedGetDefaultConfiguration;
|
||||
return -1;
|
||||
V2rayConfig v2rayConfig = null;
|
||||
if (GenerateClientConfigContent(node, false, ref v2rayConfig, out msg) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
content = Utils.ToJson(v2rayConfig);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||
}
|
||||
}
|
||||
|
||||
//转成Json
|
||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||
if (v2rayConfig == null)
|
||||
{
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
|
||||
var config = LazyConfig.Instance.GetConfig();
|
||||
|
||||
//开始修改配置
|
||||
log(config, ref v2rayConfig, blExport);
|
||||
|
||||
//本地端口
|
||||
inbound(config, ref v2rayConfig);
|
||||
|
||||
//路由
|
||||
routing(config, ref v2rayConfig);
|
||||
|
||||
//outbound
|
||||
outbound(node, ref v2rayConfig);
|
||||
|
||||
//dns
|
||||
dns(config, ref v2rayConfig);
|
||||
|
||||
// TODO: 统计配置
|
||||
statistic(config, ref v2rayConfig);
|
||||
|
||||
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||
|
||||
msg = string.Format(ResUI.SuccessfulConfiguration, $"[{config.GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("GenerateClientConfig", ex);
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 日志
|
||||
/// </summary>
|
||||
@@ -130,8 +110,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -176,8 +157,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -218,7 +200,7 @@ namespace v2rayN.Handler
|
||||
&& v2rayConfig.routing.rules != null)
|
||||
{
|
||||
v2rayConfig.routing.domainStrategy = config.domainStrategy;
|
||||
v2rayConfig.routing.domainMatcher = config.domainMatcher;
|
||||
v2rayConfig.routing.domainMatcher = Utils.IsNullOrEmpty(config.domainMatcher) ? null : config.domainMatcher;
|
||||
|
||||
if (config.enableRoutingAdvanced)
|
||||
{
|
||||
@@ -246,8 +228,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -345,8 +328,9 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -363,7 +347,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
var config = LazyConfig.Instance.GetConfig();
|
||||
Outbounds outbound = v2rayConfig.outbounds[0];
|
||||
if (node.configType == EConfigType.Vmess)
|
||||
if (node.configType == EConfigType.VMess)
|
||||
{
|
||||
VnextItem vnextItem;
|
||||
if (outbound.settings.vnext.Count <= 0)
|
||||
@@ -427,7 +411,7 @@ namespace v2rayN.Handler
|
||||
serversItem.address = node.address;
|
||||
serversItem.port = node.port;
|
||||
serversItem.password = node.id;
|
||||
serversItem.method = LazyConfig.Instance.GetShadowsocksSecuritys().Contains(node.security) ? node.security : "none";
|
||||
serversItem.method = LazyConfig.Instance.GetShadowsocksSecuritys(node).Contains(node.security) ? node.security : "none";
|
||||
|
||||
|
||||
serversItem.ota = false;
|
||||
@@ -581,8 +565,9 @@ namespace v2rayN.Handler
|
||||
outbound.settings.vnext = null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -804,8 +789,9 @@ namespace v2rayN.Handler
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -825,6 +811,14 @@ namespace v2rayN.Handler
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Outbound Freedom domainStrategy
|
||||
if (!string.IsNullOrWhiteSpace(config.domainStrategy4Freedom))
|
||||
{
|
||||
var outbound = v2rayConfig.outbounds[1];
|
||||
outbound.settings.domainStrategy = config.domainStrategy4Freedom;
|
||||
outbound.settings.userLevel = 0;
|
||||
}
|
||||
|
||||
var obj = Utils.ParseJson(config.remoteDNS);
|
||||
if (obj != null && obj.ContainsKey("servers"))
|
||||
{
|
||||
@@ -849,8 +843,9 @@ namespace v2rayN.Handler
|
||||
};
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -947,22 +942,39 @@ namespace v2rayN.Handler
|
||||
}
|
||||
|
||||
//overwrite port
|
||||
var fileContent = File.ReadAllLines(fileName).ToList();
|
||||
var coreType = LazyConfig.Instance.GetCoreType(node, node.configType);
|
||||
switch (coreType)
|
||||
if (node.preSocksPort <= 0)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.Xray:
|
||||
break;
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp)}");
|
||||
fileContent.Add($"socks-port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundSocks)}");
|
||||
break;
|
||||
}
|
||||
File.WriteAllLines(fileName, fileContent);
|
||||
var fileContent = File.ReadAllLines(fileName).ToList();
|
||||
var coreType = LazyConfig.Instance.GetCoreType(node, node.configType);
|
||||
switch (coreType)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.SagerNet:
|
||||
case ECoreType.Xray:
|
||||
break;
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
//remove the original
|
||||
var indexPort = fileContent.FindIndex(t => t.Contains("port:"));
|
||||
if (indexPort >= 0)
|
||||
{
|
||||
fileContent.RemoveAt(indexPort);
|
||||
}
|
||||
indexPort = fileContent.FindIndex(t => t.Contains("socks-port:"));
|
||||
if (indexPort >= 0)
|
||||
{
|
||||
fileContent.RemoveAt(indexPort);
|
||||
}
|
||||
|
||||
msg = string.Format(ResUI.SuccessfulConfiguration, $"[{LazyConfig.Instance.GetConfig().GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp)}");
|
||||
fileContent.Add($"socks-port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundSocks)}");
|
||||
break;
|
||||
}
|
||||
File.WriteAllLines(fileName, fileContent);
|
||||
}
|
||||
|
||||
//msg = string.Format(ResUI.SuccessfulConfiguration, $"[{LazyConfig.Instance.GetConfig().GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||
msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -973,6 +985,66 @@ namespace v2rayN.Handler
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int GenerateClientConfigContent(VmessItem node, bool blExport, ref V2rayConfig v2rayConfig, out string msg)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (node == null)
|
||||
{
|
||||
msg = ResUI.CheckServerSettings;
|
||||
return -1;
|
||||
}
|
||||
|
||||
msg = ResUI.InitialConfiguration;
|
||||
|
||||
//取得默认配置
|
||||
string result = Utils.GetEmbedText(SampleClient);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
msg = ResUI.FailedGetDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
|
||||
//转成Json
|
||||
v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||
if (v2rayConfig == null)
|
||||
{
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
|
||||
var config = LazyConfig.Instance.GetConfig();
|
||||
|
||||
//开始修改配置
|
||||
log(config, ref v2rayConfig, blExport);
|
||||
|
||||
//本地端口
|
||||
inbound(config, ref v2rayConfig);
|
||||
|
||||
//路由
|
||||
routing(config, ref v2rayConfig);
|
||||
|
||||
//outbound
|
||||
outbound(node, ref v2rayConfig);
|
||||
|
||||
//dns
|
||||
dns(config, ref v2rayConfig);
|
||||
|
||||
//stat
|
||||
statistic(config, ref v2rayConfig);
|
||||
|
||||
//msg = string.Format(ResUI.SuccessfulConfiguration, $"[{config.GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||
msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("GenerateClientConfig", ex);
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生成服务端端配置
|
||||
@@ -1028,8 +1100,9 @@ namespace v2rayN.Handler
|
||||
|
||||
msg = string.Format(ResUI.SuccessfulConfiguration, node.GetSummary());
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return -1;
|
||||
}
|
||||
@@ -1064,7 +1137,7 @@ namespace v2rayN.Handler
|
||||
usersItem.id = node.id;
|
||||
usersItem.email = Global.userEMail;
|
||||
|
||||
if (node.configType == EConfigType.Vmess)
|
||||
if (node.configType == EConfigType.VMess)
|
||||
{
|
||||
inbound.protocol = Global.vmessProtocolLite;
|
||||
usersItem.alterId = node.alterId;
|
||||
@@ -1079,8 +1152,9 @@ namespace v2rayN.Handler
|
||||
|
||||
boundStreamSettings(node, "in", inbound.streamSettings);
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1100,8 +1174,9 @@ namespace v2rayN.Handler
|
||||
v2rayConfig.outbounds[0].settings = null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1246,8 +1321,9 @@ namespace v2rayN.Handler
|
||||
vmessItem.streamSecurity = Global.StreamSecurity;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.IncorrectClientConfiguration;
|
||||
return null;
|
||||
}
|
||||
@@ -1391,8 +1467,9 @@ namespace v2rayN.Handler
|
||||
vmessItem.streamSecurity = Global.StreamSecurity;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.IncorrectClientConfiguration;
|
||||
return null;
|
||||
}
|
||||
@@ -1408,7 +1485,12 @@ namespace v2rayN.Handler
|
||||
/// <returns></returns>
|
||||
public static int Export2ClientConfig(VmessItem node, string fileName, out string msg)
|
||||
{
|
||||
return GenerateClientConfig(node, fileName, true, out msg);
|
||||
V2rayConfig v2rayConfig = null;
|
||||
if (GenerateClientConfigContent(node, true, ref v2rayConfig, out msg) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1455,12 +1537,18 @@ namespace v2rayN.Handler
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return "";
|
||||
}
|
||||
List<IPEndPoint> lstIpEndPoints = null;
|
||||
List<IPEndPoint> lstIpEndPoints = new List<IPEndPoint>();
|
||||
List<TcpConnectionInformation> lstTcpConns = new List<TcpConnectionInformation>();
|
||||
try
|
||||
{
|
||||
lstIpEndPoints = new List<IPEndPoint>(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners());
|
||||
lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners());
|
||||
lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners());
|
||||
lstTcpConns.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
catch { }
|
||||
|
||||
log(configCopy, ref v2rayConfig, false);
|
||||
//routing(config, ref v2rayConfig);
|
||||
@@ -1480,7 +1568,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (it.configType == EConfigType.Vmess || it.configType == EConfigType.VLESS)
|
||||
if (it.configType == EConfigType.VMess || it.configType == EConfigType.VLESS)
|
||||
{
|
||||
if (!Utils.IsGuidByParse(configCopy.GetVmessItem(it.indexId).id))
|
||||
{
|
||||
@@ -1496,6 +1584,10 @@ namespace v2rayN.Handler
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (lstTcpConns != null && lstTcpConns.FindIndex(_it => _it.LocalEndPoint.Port == k) >= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
//found
|
||||
port = k;
|
||||
httpPort = port + 1;
|
||||
@@ -1536,8 +1628,9 @@ namespace v2rayN.Handler
|
||||
//msg = string.Format(ResUI.SuccessfulConfiguration"), node.getSummary());
|
||||
return Utils.ToJson(v2rayConfig);
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.FailedGenDefaultConfiguration;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace v2rayN.Handler
|
||||
private static string v2rayConfigRes = Global.v2rayConfigFileName;
|
||||
private CoreInfo coreInfo;
|
||||
public event ProcessDelegate ProcessEvent;
|
||||
//private int processId = 0;
|
||||
private int processId = 0;
|
||||
private Process _process;
|
||||
|
||||
public V2rayHandler()
|
||||
@@ -51,15 +51,31 @@ namespace v2rayN.Handler
|
||||
return;
|
||||
}
|
||||
string fileName = Utils.GetPath(v2rayConfigRes);
|
||||
if (V2rayConfigHandler.GenerateClientConfig(item, fileName, false, out string msg) != 0)
|
||||
if (V2rayConfigHandler.GenerateClientConfig(item, fileName, out string msg, out string content) != 0)
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMsg(true, msg);
|
||||
ShowMsg(false, msg);
|
||||
ShowMsg(true, $"[{config.GetGroupRemarks(item.groupId)}] {item.GetSummary()}");
|
||||
V2rayRestart();
|
||||
}
|
||||
|
||||
//start a socks service
|
||||
if (item.configType == EConfigType.Custom && item.preSocksPort > 0)
|
||||
{
|
||||
var itemSocks = new VmessItem()
|
||||
{
|
||||
configType = EConfigType.Socks,
|
||||
address = Global.Loopback,
|
||||
port = item.preSocksPort
|
||||
};
|
||||
if (V2rayConfigHandler.GenerateClientConfig(itemSocks, null, out string msg2, out string configStr) == 0)
|
||||
{
|
||||
processId = V2rayStartNew(configStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,27 +143,12 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
//bool blExist = true;
|
||||
//if (processId > 0)
|
||||
//{
|
||||
// Process p1 = Process.GetProcessById(processId);
|
||||
// if (p1 != null)
|
||||
// {
|
||||
// p1.Kill();
|
||||
// blExist = false;
|
||||
// }
|
||||
//}
|
||||
//if (blExist)
|
||||
//{
|
||||
// foreach (string vName in lstV2ray)
|
||||
// {
|
||||
// Process[] killPro = Process.GetProcessesByName(vName);
|
||||
// foreach (Process p in killPro)
|
||||
// {
|
||||
// p.Kill();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
if (processId > 0)
|
||||
{
|
||||
V2rayStopPid(processId);
|
||||
processId = 0;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -214,7 +215,8 @@ namespace v2rayN.Handler
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
StandardOutputEncoding = Encoding.UTF8
|
||||
StandardOutputEncoding = Encoding.UTF8,
|
||||
StandardErrorEncoding = Encoding.UTF8
|
||||
}
|
||||
};
|
||||
p.OutputDataReceived += (sender, e) =>
|
||||
@@ -228,7 +230,6 @@ namespace v2rayN.Handler
|
||||
p.Start();
|
||||
p.PriorityClass = ProcessPriorityClass.High;
|
||||
p.BeginOutputReadLine();
|
||||
//processId = p.Id;
|
||||
_process = p;
|
||||
|
||||
if (p.WaitForExit(1000))
|
||||
@@ -269,7 +270,8 @@ namespace v2rayN.Handler
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
StandardOutputEncoding = Encoding.UTF8
|
||||
StandardOutputEncoding = Encoding.UTF8,
|
||||
StandardErrorEncoding = Encoding.UTF8
|
||||
}
|
||||
};
|
||||
p.OutputDataReceived += (sender, e) =>
|
||||
|
||||
@@ -84,6 +84,14 @@ namespace v2rayN.Mode
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Outbound Freedom domainStrategy
|
||||
/// </summary>
|
||||
public string domainStrategy4Freedom
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否允许不安全连接
|
||||
/// </summary>
|
||||
@@ -282,7 +290,7 @@ namespace v2rayN.Mode
|
||||
public VmessItem()
|
||||
{
|
||||
indexId = string.Empty;
|
||||
configType = EConfigType.Vmess;
|
||||
configType = EConfigType.VMess;
|
||||
configVersion = 2;
|
||||
sort = 0;
|
||||
address = string.Empty;
|
||||
@@ -323,7 +331,7 @@ namespace v2rayN.Mode
|
||||
}
|
||||
switch (configType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.VMess:
|
||||
case EConfigType.Shadowsocks:
|
||||
case EConfigType.Socks:
|
||||
case EConfigType.VLESS:
|
||||
@@ -553,10 +561,16 @@ namespace v2rayN.Mode
|
||||
{
|
||||
get; set;
|
||||
} = string.Empty;
|
||||
|
||||
public ECoreType? coreType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public int preSocksPort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
|
||||
@@ -21,5 +21,7 @@ namespace v2rayN.Mode
|
||||
public string coreDownloadUrl64 { get; set; }
|
||||
|
||||
public string match { get; set; }
|
||||
public string versionArg { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace v2rayN.Mode
|
||||
{
|
||||
public enum EConfigType
|
||||
{
|
||||
Vmess = 1,
|
||||
VMess = 1,
|
||||
Custom = 2,
|
||||
Shadowsocks = 3,
|
||||
Socks = 4,
|
||||
|
||||
@@ -5,10 +5,12 @@ namespace v2rayN.Mode
|
||||
{
|
||||
v2fly = 1,
|
||||
Xray = 2,
|
||||
SagerNet = 3,
|
||||
clash = 11,
|
||||
clash_meta = 12,
|
||||
hysteria = 21,
|
||||
naiveproxy = 22,
|
||||
tuic = 23,
|
||||
v2rayN = 99
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,6 +224,16 @@ namespace v2rayN.Mode
|
||||
///
|
||||
/// </summary>
|
||||
public Response response { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string domainStrategy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int? userLevel { get; set; }
|
||||
}
|
||||
|
||||
public class VnextItem
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Forms;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Tool;
|
||||
|
||||
namespace v2rayN
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||
private static extern bool SetProcessDPIAware();
|
||||
|
||||
/// <summary>
|
||||
/// 应用程序的主入口点。
|
||||
/// </summary>
|
||||
@@ -21,7 +16,7 @@ namespace v2rayN
|
||||
{
|
||||
if (Environment.OSVersion.Version.Major >= 6)
|
||||
{
|
||||
SetProcessDPIAware();
|
||||
Utils.SetProcessDPIAware();
|
||||
}
|
||||
|
||||
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
@@ -47,6 +42,22 @@ namespace v2rayN
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
//read handle from reg and show the window
|
||||
long.TryParse(Utils.RegReadValue(Global.MyRegPath, Utils.WindowHwndKey, ""), out long llong);
|
||||
if (llong > 0)
|
||||
{
|
||||
var hwnd = (IntPtr)llong;
|
||||
if (Utils.IsWindow(hwnd))
|
||||
{
|
||||
Utils.ShowWindow(hwnd, 4);
|
||||
Utils.SwitchToThisWindow(hwnd, true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
UI.ShowWarning($"v2rayN is already running(v2rayN已经运行)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
|
||||
// 方法是按如下所示使用“*”:
|
||||
//[assembly: AssemblyVersion("1.0.*")]
|
||||
//[assembly: AssemblyVersion("1.0.0")]
|
||||
[assembly: AssemblyFileVersion("5.27")]
|
||||
[assembly: AssemblyFileVersion("5.31")]
|
||||
|
||||
273
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
273
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -289,10 +289,10 @@
|
||||
<value> This feature relies on the Http global proxy, please set it correctly first.</value>
|
||||
</data>
|
||||
<data name="NonvmessOrssProtocol" xml:space="preserve">
|
||||
<value>Non-vmess or ss protocol</value>
|
||||
<value>Non-VMess or ss protocol</value>
|
||||
</data>
|
||||
<data name="NonVmessService" xml:space="preserve">
|
||||
<value> non-Vmess service, this feature is invalid</value>
|
||||
<value> non-standard service, this feature is invalid</value>
|
||||
</data>
|
||||
<data name="NotFoundCore" xml:space="preserve">
|
||||
<value>Core not found, please download: {0}</value>
|
||||
@@ -472,4 +472,7 @@
|
||||
<data name="MsgServerTitle" xml:space="preserve">
|
||||
<value>Servers (Filter : {0})</value>
|
||||
</data>
|
||||
<data name="NetFrameworkRequirementsTip" xml:space="preserve">
|
||||
<value>Normal use of this version requires .NET Framework 4.8</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -289,10 +289,10 @@
|
||||
<value>此功能依赖Http全局代理,请先设置正确。</value>
|
||||
</data>
|
||||
<data name="NonvmessOrssProtocol" xml:space="preserve">
|
||||
<value>非vmess或ss协议</value>
|
||||
<value>非VMess或ss协议</value>
|
||||
</data>
|
||||
<data name="NonVmessService" xml:space="preserve">
|
||||
<value>非Vmess服务,此功能无效</value>
|
||||
<value>非标准服务,此功能无效</value>
|
||||
</data>
|
||||
<data name="NotFoundCore" xml:space="preserve">
|
||||
<value>找不到Core,下载地址: {0}</value>
|
||||
@@ -472,4 +472,7 @@
|
||||
<data name="MsgServerTitle" xml:space="preserve">
|
||||
<value>服务器 (过滤器 : {0})</value>
|
||||
</data>
|
||||
<data name="NetFrameworkRequirementsTip" xml:space="preserve">
|
||||
<value>正常使用此版本需要.NET Framework 4.8,请更新后重启</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -94,6 +94,10 @@ namespace v2rayN.Tool
|
||||
}
|
||||
}
|
||||
}
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
File.Delete(fileName);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@ using System.Web;
|
||||
using log4net;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace v2rayN
|
||||
{
|
||||
@@ -693,7 +694,7 @@ namespace v2rayN
|
||||
/// </summary>
|
||||
/// <param name="release">需要的版本4.6.2=394802;4.8=528040</param>
|
||||
/// <returns></returns>
|
||||
public static bool GetDotNetRelease(int release)
|
||||
public static bool CheckForDotNetVersion(int release = 528040)
|
||||
{
|
||||
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
|
||||
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
|
||||
@@ -1111,5 +1112,30 @@ namespace v2rayN
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Windows API
|
||||
|
||||
public static string WindowHwndKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return $"WindowHwnd_{GetMD5(StartupPath())}";
|
||||
}
|
||||
}
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool SetProcessDPIAware();
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int SwitchToThisWindow(IntPtr hwnd, bool fUnknown);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool IsWindow(IntPtr hwnd);
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user