Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73c79ca7bf | ||
|
|
978975ee2d | ||
|
|
d7dc0dff50 | ||
|
|
a3aa6c045f | ||
|
|
785ebc49fc | ||
|
|
fde1c98ddd | ||
|
|
024040163a | ||
|
|
e95b5e04c0 | ||
|
|
815826c856 | ||
|
|
1c5cc190c5 | ||
|
|
50b109ca71 | ||
|
|
3aa48a9a3e | ||
|
|
09702b9bde | ||
|
|
35f6cd3d9c | ||
|
|
b62f1786a9 | ||
|
|
b21ad28d5b | ||
|
|
8d66c0d180 | ||
|
|
ec8aa0df18 | ||
|
|
e824d8e91d | ||
|
|
b919422ec4 | ||
|
|
a8bc9ce605 | ||
|
|
e2f399eeb1 | ||
|
|
82924278b5 | ||
|
|
bb828a4e06 | ||
|
|
74933ac146 | ||
|
|
0d315f0dc3 | ||
|
|
372ee346dc | ||
|
|
cb462ab944 | ||
|
|
606da79372 | ||
|
|
0801c3db64 | ||
|
|
35deb0c915 | ||
|
|
fd4d712688 | ||
|
|
354fc618b0 | ||
|
|
82b6ee5ad2 | ||
|
|
645e6c4ec0 |
@@ -1,3 +1,12 @@
|
|||||||
|
---
|
||||||
|
name: Bug 报告
|
||||||
|
about: 在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||||
|
title: "[BUG]"
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||||
|
|
||||||
### 预期行为
|
### 预期行为
|
||||||
@@ -22,4 +31,3 @@
|
|||||||
### 环境信息(客户端请升级至最新正式版)
|
### 环境信息(客户端请升级至最新正式版)
|
||||||
|
|
||||||
### 额外信息(可选)
|
### 额外信息(可选)
|
||||||
|
|
||||||
20
.github/ISSUE_TEMPLATE/feature---.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature---.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature 请求
|
||||||
|
about: 为这个项目提出一个建议
|
||||||
|
title: "[Feature request]"
|
||||||
|
labels: enhancement
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**你的功能请求是否与一个问题有关?请描述。**
|
||||||
|
清楚而简洁地描述问题是什么。例如。我总是感到沮丧,当 [...]
|
||||||
|
|
||||||
|
**描述你希望的解决方案**
|
||||||
|
对你希望发生的事情进行清晰、简明的描述。
|
||||||
|
|
||||||
|
**描述你所考虑的替代方案**
|
||||||
|
对你考虑过的任何替代解决方案或功能进行清晰、简洁的描述。
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
@@ -1,12 +1,18 @@
|
|||||||
# v2rayN
|
# v2rayN
|
||||||
A V2Ray client for Windows, support [Xray core](https://github.com/XTLS/Xray-core) and [v2fly core](https://github.com/v2fly/v2ray-core)
|
A V2Ray client for Windows, support [Xray core](https://github.com/XTLS/Xray-core) and [v2fly core](https://github.com/v2fly/v2ray-core)
|
||||||
|
|
||||||
|
|
||||||
|
[](https://github.com/2dust/v2rayN/commits/master)
|
||||||
|
[](https://www.codefactor.io/repository/github/2dust/v2rayn)
|
||||||
|
[](https://github.com/2dust/v2rayN/releases)
|
||||||
|
[](https://t.me/v2rayn)
|
||||||
|
|
||||||
### How to use
|
### How to use
|
||||||
- If you are newbie please download v2rayN-Core.zip from releases
|
- 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)
|
- Otherwise please download v2rayN.zip (Also need to download v2ray core in the same folder)
|
||||||
- Run v2rayN.exe
|
- Run v2rayN.exe
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
- Microsoft [.NET Framework 4.8](https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers)
|
- Microsoft [.NET Framework 4.8](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-web-installer)
|
||||||
- v2fly core [https://github.com/v2fly/v2ray-core/releases](https://github.com/v2fly/v2ray-core/releases)
|
- 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)
|
- Xray core [https://github.com/XTLS/Xray-core/releases](https://github.com/XTLS/Xray-core/releases)
|
||||||
|
|||||||
235
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
235
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace v2rayN.Base
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
public class HttpClientHelper
|
||||||
|
{
|
||||||
|
private static HttpClientHelper httpClientHelper = null;
|
||||||
|
private HttpClient httpClient;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
private HttpClientHelper() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static HttpClientHelper GetInstance()
|
||||||
|
{
|
||||||
|
if (httpClientHelper != null)
|
||||||
|
{
|
||||||
|
return httpClientHelper;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HttpClientHelper httpClientHelper = new HttpClientHelper();
|
||||||
|
|
||||||
|
HttpClientHandler handler = new HttpClientHandler() { UseCookies = false };
|
||||||
|
httpClientHelper.httpClient = new HttpClient(handler);
|
||||||
|
return httpClientHelper;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public async Task<string> GetAsync(string url)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
HttpResponseMessage response = await httpClient.GetAsync(url);
|
||||||
|
|
||||||
|
return await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public async Task<string> GetAsync(HttpClient client, string url)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var cts = new CancellationTokenSource();
|
||||||
|
cts.CancelAfter(5000);
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync(url, cts.Token);
|
||||||
|
return await response.Content.ReadAsStringAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Utils.SaveLog("GetAsync", ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task PutAsync(string url, Dictionary<string, string> headers)
|
||||||
|
{
|
||||||
|
var myContent = Utils.ToJson(headers);
|
||||||
|
var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
|
||||||
|
var byteContent = new ByteArrayContent(buffer);
|
||||||
|
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
|
||||||
|
|
||||||
|
var result = await httpClient.PutAsync(url, byteContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task DownloadFileAsync(HttpClient client, string url, string fileName, IProgress<double> progress, CancellationToken token)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("url");
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(fileName))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("fileName");
|
||||||
|
}
|
||||||
|
if (File.Exists(fileName))
|
||||||
|
{
|
||||||
|
File.Delete(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token);
|
||||||
|
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;
|
||||||
|
var canReportProgress = total != -1 && progress != null;
|
||||||
|
|
||||||
|
using (var stream = await response.Content.ReadAsStreamAsync())
|
||||||
|
{
|
||||||
|
using (var file = File.Create(fileName))
|
||||||
|
{
|
||||||
|
var totalRead = 0L;
|
||||||
|
var buffer = new byte[1024 * 1024];
|
||||||
|
var isMoreToRead = true;
|
||||||
|
var progressPercentage = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
var read = await stream.ReadAsync(buffer, 0, buffer.Length, token);
|
||||||
|
|
||||||
|
if (read == 0)
|
||||||
|
{
|
||||||
|
isMoreToRead = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var data = new byte[read];
|
||||||
|
buffer.ToList().CopyTo(0, data, 0, read);
|
||||||
|
|
||||||
|
// TODO: put here the code to write the file to disk
|
||||||
|
file.Write(data, 0, read);
|
||||||
|
|
||||||
|
totalRead += read;
|
||||||
|
|
||||||
|
if (canReportProgress)
|
||||||
|
{
|
||||||
|
var percent = Convert.ToInt32((totalRead * 1d) / (total * 1d) * 100);
|
||||||
|
if (progressPercentage != percent && percent % 10 == 0)
|
||||||
|
{
|
||||||
|
progressPercentage = percent;
|
||||||
|
progress.Report(percent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (isMoreToRead);
|
||||||
|
file.Close();
|
||||||
|
if (canReportProgress)
|
||||||
|
{
|
||||||
|
progress.Report(101);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task DownloadDataAsync4Speed(HttpClient client, string url, IProgress<double> progress, CancellationToken token)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("url");
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token);
|
||||||
|
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;
|
||||||
|
var canReportProgress = total != -1 && progress != null;
|
||||||
|
|
||||||
|
using (var stream = await response.Content.ReadAsStreamAsync())
|
||||||
|
{
|
||||||
|
var totalRead = 0L;
|
||||||
|
var buffer = new byte[1024 * 64];
|
||||||
|
var isMoreToRead = true;
|
||||||
|
var progressPercentage = 0;
|
||||||
|
DateTime totalDatetime = DateTime.Now;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (token.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
if (totalRead > 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
token.ThrowIfCancellationRequested();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var read = await stream.ReadAsync(buffer, 0, buffer.Length, token);
|
||||||
|
|
||||||
|
if (read == 0)
|
||||||
|
{
|
||||||
|
isMoreToRead = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var data = new byte[read];
|
||||||
|
buffer.ToList().CopyTo(0, data, 0, read);
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
totalRead += read;
|
||||||
|
|
||||||
|
if (canReportProgress)
|
||||||
|
{
|
||||||
|
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||||
|
var speed = totalRead * 1d / ts.TotalMilliseconds / 1000;
|
||||||
|
var percent = Convert.ToInt32((totalRead * 1d) / (total * 1d) * 100);
|
||||||
|
if (progressPercentage != percent)
|
||||||
|
{
|
||||||
|
progressPercentage = percent;
|
||||||
|
progress.Report(speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (isMoreToRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
|
|
||||||
namespace v2rayN.Base
|
|
||||||
{
|
|
||||||
class WebClientEx : WebClient
|
|
||||||
{
|
|
||||||
public int Timeout
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
public WebClientEx(int timeout = 3000)
|
|
||||||
{
|
|
||||||
Timeout = timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override WebRequest GetWebRequest(Uri address)
|
|
||||||
{
|
|
||||||
HttpWebRequest request;
|
|
||||||
request = (HttpWebRequest)base.GetWebRequest(address);
|
|
||||||
request.Timeout = Timeout;
|
|
||||||
request.ReadWriteTimeout = Timeout;
|
|
||||||
//request.AllowAutoRedirect = false;
|
|
||||||
//request.AllowWriteStreamBuffering = true;
|
|
||||||
|
|
||||||
request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) =>
|
|
||||||
{
|
|
||||||
if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
|
|
||||||
return new IPEndPoint(IPAddress.IPv6Any, 0);
|
|
||||||
else
|
|
||||||
return new IPEndPoint(IPAddress.Any, 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ using System.IO;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -67,12 +68,12 @@ namespace v2rayN.Forms
|
|||||||
string remarks = txtRemarks.Text;
|
string remarks = txtRemarks.Text;
|
||||||
if (Utils.IsNullOrEmpty(remarks))
|
if (Utils.IsNullOrEmpty(remarks))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseFillRemarks"));
|
UI.Show(ResUI.PleaseFillRemarks);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(txtAddress.Text))
|
if (Utils.IsNullOrEmpty(txtAddress.Text))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillServerAddressCustom"));
|
UI.Show(ResUI.FillServerAddressCustom);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vmessItem.remarks = remarks;
|
vmessItem.remarks = remarks;
|
||||||
@@ -91,7 +92,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +110,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void btnBrowse_Click(object sender, EventArgs e)
|
private void btnBrowse_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("CustomServerTips"));
|
UI.Show(ResUI.CustomServerTips);
|
||||||
|
|
||||||
OpenFileDialog fileDialog = new OpenFileDialog
|
OpenFileDialog fileDialog = new OpenFileDialog
|
||||||
{
|
{
|
||||||
@@ -132,11 +133,11 @@ namespace v2rayN.Forms
|
|||||||
if (ConfigHandler.AddCustomServer(ref config, vmessItem, false) == 0)
|
if (ConfigHandler.AddCustomServer(ref config, vmessItem, false) == 0)
|
||||||
{
|
{
|
||||||
BindingServer();
|
BindingServer();
|
||||||
UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
|
UI.Show(ResUI.SuccessfullyImportedCustomServer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("FailedImportedCustomServer"));
|
UI.ShowWarning(ResUI.FailedImportedCustomServer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +146,7 @@ namespace v2rayN.Forms
|
|||||||
var address = txtAddress.Text;
|
var address = txtAddress.Text;
|
||||||
if (Utils.IsNullOrEmpty(address))
|
if (Utils.IsNullOrEmpty(address))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillServerAddressCustom"));
|
UI.Show(ResUI.FillServerAddressCustom);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -194,24 +195,24 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
if (Utils.IsNullOrEmpty(address))
|
if (Utils.IsNullOrEmpty(address))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillServerAddress"));
|
UI.Show(ResUI.FillServerAddress);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
|
if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillCorrectServerPort"));
|
UI.Show(ResUI.FillCorrectServerPort);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (eConfigType == EConfigType.Shadowsocks)
|
if (eConfigType == EConfigType.Shadowsocks)
|
||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(id))
|
if (Utils.IsNullOrEmpty(id))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillPassword"));
|
UI.Show(ResUI.FillPassword);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(security))
|
if (Utils.IsNullOrEmpty(security))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectEncryption"));
|
UI.Show(ResUI.PleaseSelectEncryption);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,7 +220,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(id))
|
if (Utils.IsNullOrEmpty(id))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillUUID"));
|
UI.Show(ResUI.FillUUID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -270,7 +271,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using System.Windows.Forms;
|
|||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -104,7 +105,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
21
v2rayN/v2rayN/Forms/GroupSettingControl.Designer.cs
generated
21
v2rayN/v2rayN/Forms/GroupSettingControl.Designer.cs
generated
@@ -33,15 +33,20 @@
|
|||||||
this.btnRemove = new System.Windows.Forms.Button();
|
this.btnRemove = new System.Windows.Forms.Button();
|
||||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.numSort = new System.Windows.Forms.NumericUpDown();
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
this.grbMain.SuspendLayout();
|
this.grbMain.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.numSort)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// grbMain
|
// grbMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.grbMain, "grbMain");
|
this.grbMain.Controls.Add(this.label1);
|
||||||
|
this.grbMain.Controls.Add(this.numSort);
|
||||||
this.grbMain.Controls.Add(this.btnRemove);
|
this.grbMain.Controls.Add(this.btnRemove);
|
||||||
this.grbMain.Controls.Add(this.txtRemarks);
|
this.grbMain.Controls.Add(this.txtRemarks);
|
||||||
this.grbMain.Controls.Add(this.label2);
|
this.grbMain.Controls.Add(this.label2);
|
||||||
|
resources.ApplyResources(this.grbMain, "grbMain");
|
||||||
this.grbMain.Name = "grbMain";
|
this.grbMain.Name = "grbMain";
|
||||||
this.grbMain.TabStop = false;
|
this.grbMain.TabStop = false;
|
||||||
//
|
//
|
||||||
@@ -63,6 +68,17 @@
|
|||||||
resources.ApplyResources(this.label2, "label2");
|
resources.ApplyResources(this.label2, "label2");
|
||||||
this.label2.Name = "label2";
|
this.label2.Name = "label2";
|
||||||
//
|
//
|
||||||
|
// numSort
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.numSort, "numSort");
|
||||||
|
this.numSort.Name = "numSort";
|
||||||
|
this.numSort.Leave += new System.EventHandler(this.txtRemarks_Leave);
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label1, "label1");
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
//
|
||||||
// GroupSettingControl
|
// GroupSettingControl
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
@@ -72,6 +88,7 @@
|
|||||||
this.Load += new System.EventHandler(this.GroupSettingControl_Load);
|
this.Load += new System.EventHandler(this.GroupSettingControl_Load);
|
||||||
this.grbMain.ResumeLayout(false);
|
this.grbMain.ResumeLayout(false);
|
||||||
this.grbMain.PerformLayout();
|
this.grbMain.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.numSort)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -82,5 +99,7 @@
|
|||||||
private System.Windows.Forms.TextBox txtRemarks;
|
private System.Windows.Forms.TextBox txtRemarks;
|
||||||
private System.Windows.Forms.Label label2;
|
private System.Windows.Forms.Label label2;
|
||||||
private System.Windows.Forms.Button btnRemove;
|
private System.Windows.Forms.Button btnRemove;
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
private System.Windows.Forms.NumericUpDown numSort;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ namespace v2rayN.Forms
|
|||||||
if (groupItem != null)
|
if (groupItem != null)
|
||||||
{
|
{
|
||||||
txtRemarks.Text = groupItem.remarks.ToString();
|
txtRemarks.Text = groupItem.remarks.ToString();
|
||||||
|
numSort.Value = groupItem.sort;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void EndBindingSub()
|
private void EndBindingSub()
|
||||||
@@ -39,6 +40,7 @@ namespace v2rayN.Forms
|
|||||||
if (groupItem != null)
|
if (groupItem != null)
|
||||||
{
|
{
|
||||||
groupItem.remarks = txtRemarks.Text.TrimEx();
|
groupItem.remarks = txtRemarks.Text.TrimEx();
|
||||||
|
groupItem.sort = Convert.ToInt32(numSort.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void txtRemarks_Leave(object sender, EventArgs e)
|
private void txtRemarks_Leave(object sender, EventArgs e)
|
||||||
|
|||||||
@@ -118,126 +118,177 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="grbMain.TabIndex" type="System.Int32, mscorlib">
|
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>10</value>
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>12, 61</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>71, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>26</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.Text" xml:space="preserve">
|
||||||
|
<value>Sort number</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.Name" xml:space="preserve">
|
||||||
|
<value>label1</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=">>label1.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="numSort.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>292, 21</value>
|
<value>127, 57</value>
|
||||||
|
</data>
|
||||||
|
<data name="numSort.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>120, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="numSort.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>25</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>numSort.Name" xml:space="preserve">
|
||||||
|
<value>numSort</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>numSort.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>numSort.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>numSort.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>525, 21</value>
|
<value>525, 21</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>127, 21</value>
|
<value>75, 23</value>
|
||||||
</data>
|
|
||||||
<data name=">>btnRemove.Parent" xml:space="preserve">
|
|
||||||
<value>grbMain</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>12, 25</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>24</value>
|
<value>24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<data name="btnRemove.Text" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>Remove</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>btnRemove.Name" xml:space="preserve">
|
||||||
<value>GroupSettingControl</value>
|
<value>btnRemove</value>
|
||||||
</data>
|
|
||||||
<data name=">>label2.Parent" xml:space="preserve">
|
|
||||||
<value>grbMain</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnRemove.Type" xml:space="preserve">
|
<data name=">>btnRemove.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>grbMain.Name" xml:space="preserve">
|
<data name=">>btnRemove.Parent" xml:space="preserve">
|
||||||
<value>grbMain</value>
|
<value>grbMain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label2.Type" xml:space="preserve">
|
<data name=">>btnRemove.ZOrder" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>127, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>292, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>1</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>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>12, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>47, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>10</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.Text" xml:space="preserve">
|
||||||
|
<value>Remarks</value>
|
||||||
|
</data>
|
||||||
<data name=">>label2.Name" xml:space="preserve">
|
<data name=">>label2.Name" xml:space="preserve">
|
||||||
<value>label2</value>
|
<value>label2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>label2.Type" xml:space="preserve">
|
||||||
<value>75, 23</value>
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>619, 61</value>
|
<value>619, 91</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Text" xml:space="preserve">
|
<data name="grbMain.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>Remarks</value>
|
<value>10</value>
|
||||||
</data>
|
|
||||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
|
||||||
<value>grbMain</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="grbMain.Text" xml:space="preserve">
|
<data name="grbMain.Text" xml:space="preserve">
|
||||||
<value>Group details</value>
|
<value>Group details</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<data name=">>grbMain.Name" xml:space="preserve">
|
||||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<value>grbMain</value>
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>1</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="label2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>47, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
|
||||||
<value>txtRemarks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnRemove.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnRemove.Name" xml:space="preserve">
|
|
||||||
<value>btnRemove</value>
|
|
||||||
</data>
|
|
||||||
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Fill</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>10</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name=">>grbMain.Type" xml:space="preserve">
|
<data name=">>grbMain.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>grbMain.Parent" xml:space="preserve">
|
<data name=">>grbMain.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
||||||
<value>619, 61</value>
|
<value>0</value>
|
||||||
</data>
|
|
||||||
<data name="btnRemove.Text" xml:space="preserve">
|
|
||||||
<value>Remove</value>
|
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
|
<value>6, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>619, 91</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>GroupSettingControl</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -130,4 +130,7 @@
|
|||||||
<data name="grbMain.Text" xml:space="preserve">
|
<data name="grbMain.Text" xml:space="preserve">
|
||||||
<value>分组详情</value>
|
<value>分组详情</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="label1.Text" xml:space="preserve">
|
||||||
|
<value>排序编号</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -73,7 +74,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
34
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
34
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
@@ -94,7 +94,6 @@
|
|||||||
this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuRoutings = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuRoutings = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuServers2 = new System.Windows.Forms.ToolStripComboBox();
|
|
||||||
this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -126,8 +125,7 @@
|
|||||||
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbCheckUpdateGeoSite = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateGeo = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbCheckUpdateGeoIP = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
|
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
|
||||||
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -586,7 +584,6 @@
|
|||||||
this.menuSysAgentMode,
|
this.menuSysAgentMode,
|
||||||
this.menuRoutings,
|
this.menuRoutings,
|
||||||
this.menuServers,
|
this.menuServers,
|
||||||
this.menuServers2,
|
|
||||||
this.toolStripSeparator13,
|
this.toolStripSeparator13,
|
||||||
this.menuAddServers2,
|
this.menuAddServers2,
|
||||||
this.menuScanScreen2,
|
this.menuScanScreen2,
|
||||||
@@ -636,14 +633,6 @@
|
|||||||
this.menuServers.Name = "menuServers";
|
this.menuServers.Name = "menuServers";
|
||||||
resources.ApplyResources(this.menuServers, "menuServers");
|
resources.ApplyResources(this.menuServers, "menuServers");
|
||||||
//
|
//
|
||||||
// menuServers2
|
|
||||||
//
|
|
||||||
this.menuServers2.BackColor = System.Drawing.SystemColors.Window;
|
|
||||||
this.menuServers2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.menuServers2.DropDownWidth = 500;
|
|
||||||
resources.ApplyResources(this.menuServers2, "menuServers2");
|
|
||||||
this.menuServers2.Name = "menuServers2";
|
|
||||||
//
|
|
||||||
// toolStripSeparator13
|
// toolStripSeparator13
|
||||||
//
|
//
|
||||||
this.toolStripSeparator13.Name = "toolStripSeparator13";
|
this.toolStripSeparator13.Name = "toolStripSeparator13";
|
||||||
@@ -831,8 +820,7 @@
|
|||||||
this.tsbCheckUpdateCore,
|
this.tsbCheckUpdateCore,
|
||||||
this.tsbCheckUpdateXrayCore,
|
this.tsbCheckUpdateXrayCore,
|
||||||
this.toolStripSeparator15,
|
this.toolStripSeparator15,
|
||||||
this.tsbCheckUpdateGeoSite,
|
this.tsbCheckUpdateGeo});
|
||||||
this.tsbCheckUpdateGeoIP});
|
|
||||||
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
|
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
|
||||||
resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
|
resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
|
||||||
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
|
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
|
||||||
@@ -860,17 +848,11 @@
|
|||||||
this.toolStripSeparator15.Name = "toolStripSeparator15";
|
this.toolStripSeparator15.Name = "toolStripSeparator15";
|
||||||
resources.ApplyResources(this.toolStripSeparator15, "toolStripSeparator15");
|
resources.ApplyResources(this.toolStripSeparator15, "toolStripSeparator15");
|
||||||
//
|
//
|
||||||
// tsbCheckUpdateGeoSite
|
// tsbCheckUpdateGeo
|
||||||
//
|
//
|
||||||
this.tsbCheckUpdateGeoSite.Name = "tsbCheckUpdateGeoSite";
|
this.tsbCheckUpdateGeo.Name = "tsbCheckUpdateGeo";
|
||||||
resources.ApplyResources(this.tsbCheckUpdateGeoSite, "tsbCheckUpdateGeoSite");
|
resources.ApplyResources(this.tsbCheckUpdateGeo, "tsbCheckUpdateGeo");
|
||||||
this.tsbCheckUpdateGeoSite.Click += new System.EventHandler(this.tsbCheckUpdateGeoSite_Click);
|
this.tsbCheckUpdateGeo.Click += new System.EventHandler(this.tsbCheckUpdateGeo_Click);
|
||||||
//
|
|
||||||
// tsbCheckUpdateGeoIP
|
|
||||||
//
|
|
||||||
this.tsbCheckUpdateGeoIP.Name = "tsbCheckUpdateGeoIP";
|
|
||||||
resources.ApplyResources(this.tsbCheckUpdateGeoIP, "tsbCheckUpdateGeoIP");
|
|
||||||
this.tsbCheckUpdateGeoIP.Click += new System.EventHandler(this.tsbCheckUpdateGeoIP_Click);
|
|
||||||
//
|
//
|
||||||
// toolStripSeparator10
|
// toolStripSeparator10
|
||||||
//
|
//
|
||||||
@@ -1071,14 +1053,12 @@
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator14;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator14;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbBackupGuiNConfig;
|
private System.Windows.Forms.ToolStripMenuItem tsbBackupGuiNConfig;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeoSite;
|
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeo;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeoIP;
|
|
||||||
private System.Windows.Forms.SplitContainer splitContainer1;
|
private System.Windows.Forms.SplitContainer splitContainer1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxFilter;
|
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxFilter;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslInboundInfo;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslInboundInfo;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslRoutingRule;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslRoutingRule;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
||||||
private System.Windows.Forms.ToolStripComboBox menuServers2;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdateViaProxy;
|
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdateViaProxy;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubViaProxy;
|
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubViaProxy;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxClear;
|
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxClear;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using v2rayN.Handler;
|
|||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
using v2rayN.Tool;
|
using v2rayN.Tool;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -82,12 +83,12 @@ namespace v2rayN.Forms
|
|||||||
RefreshRoutingsMenu();
|
RefreshRoutingsMenu();
|
||||||
RestoreUI();
|
RestoreUI();
|
||||||
|
|
||||||
_ = LoadV2ray();
|
|
||||||
|
|
||||||
HideForm();
|
HideForm();
|
||||||
|
|
||||||
MainFormHandler.Instance.UpdateTask(config, UpdateTaskHandler);
|
MainFormHandler.Instance.UpdateTask(config, UpdateTaskHandler);
|
||||||
MainFormHandler.Instance.RegisterGlobalHotkey(config, OnHotkeyHandler, UpdateTaskHandler);
|
MainFormHandler.Instance.RegisterGlobalHotkey(config, OnHotkeyHandler, UpdateTaskHandler);
|
||||||
|
|
||||||
|
_ = LoadV2ray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
@@ -149,12 +150,17 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
scMain.Panel2Collapsed = true;
|
scMain.Panel2Collapsed = true;
|
||||||
|
|
||||||
|
if (!config.uiItem.mainLocation.IsEmpty)
|
||||||
|
{
|
||||||
|
this.Location = config.uiItem.mainLocation;
|
||||||
|
}
|
||||||
if (!config.uiItem.mainSize.IsEmpty)
|
if (!config.uiItem.mainSize.IsEmpty)
|
||||||
{
|
{
|
||||||
this.Width = config.uiItem.mainSize.Width;
|
this.Width = config.uiItem.mainSize.Width;
|
||||||
this.Height = config.uiItem.mainSize.Height;
|
this.Height = config.uiItem.mainSize.Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (int k = 0; k < lvServers.Columns.Count; k++)
|
for (int k = 0; k < lvServers.Columns.Count; k++)
|
||||||
{
|
{
|
||||||
var width = ConfigHandler.GetformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width);
|
var width = ConfigHandler.GetformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width);
|
||||||
@@ -164,6 +170,8 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void StorageUI()
|
private void StorageUI()
|
||||||
{
|
{
|
||||||
|
config.uiItem.mainLocation = this.Location;
|
||||||
|
|
||||||
config.uiItem.mainSize = new Size(this.Width, this.Height);
|
config.uiItem.mainSize = new Size(this.Width, this.Height);
|
||||||
|
|
||||||
for (int k = 0; k < lvServers.Columns.Count; k++)
|
for (int k = 0; k < lvServers.Columns.Count; k++)
|
||||||
@@ -228,22 +236,22 @@ namespace v2rayN.Forms
|
|||||||
lvServers.RegisterDragEvent(UpdateDragEventHandler);
|
lvServers.RegisterDragEvent(UpdateDragEventHandler);
|
||||||
|
|
||||||
lvServers.Columns.Add("", 30);
|
lvServers.Columns.Add("", 30);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvServiceType"), 80);
|
lvServers.Columns.Add(ResUI.LvServiceType, 80);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvAlias"), 100);
|
lvServers.Columns.Add(ResUI.LvAlias, 100);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvAddress"), 120);
|
lvServers.Columns.Add(ResUI.LvAddress, 120);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvPort"), 100);
|
lvServers.Columns.Add(ResUI.LvPort, 100);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 120);
|
lvServers.Columns.Add(ResUI.LvEncryptionMethod, 120);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 120);
|
lvServers.Columns.Add(ResUI.LvTransportProtocol, 120);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTLS"), 100);
|
lvServers.Columns.Add(ResUI.LvTLS, 100);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 100);
|
lvServers.Columns.Add(ResUI.LvSubscription, 100);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 120, HorizontalAlignment.Right);
|
lvServers.Columns.Add(ResUI.LvTestResults, 120, HorizontalAlignment.Right);
|
||||||
|
|
||||||
if (statistics != null && statistics.Enable)
|
if (statistics != null && statistics.Enable)
|
||||||
{
|
{
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTodayDownloadDataAmount"), 70);
|
lvServers.Columns.Add(ResUI.LvTodayDownloadDataAmount, 70);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTodayUploadDataAmount"), 70);
|
lvServers.Columns.Add(ResUI.LvTodayUploadDataAmount, 70);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTotalDownloadDataAmount"), 70);
|
lvServers.Columns.Add(ResUI.LvTotalDownloadDataAmount, 70);
|
||||||
lvServers.Columns.Add(UIRes.I18N("LvTotalUploadDataAmount"), 70);
|
lvServers.Columns.Add(ResUI.LvTotalUploadDataAmount, 70);
|
||||||
}
|
}
|
||||||
lvServers.EndUpdate();
|
lvServers.EndUpdate();
|
||||||
}
|
}
|
||||||
@@ -265,7 +273,7 @@ namespace v2rayN.Forms
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void RefreshServersView()
|
private void RefreshServersView()
|
||||||
{
|
{
|
||||||
int index = lvServers.SelectedIndices.Count > 0 ? lvServers.SelectedIndices[0] : -1;
|
int index = GetLvSelectedIndex(false);
|
||||||
|
|
||||||
lvServers.BeginUpdate();
|
lvServers.BeginUpdate();
|
||||||
lvServers.Items.Clear();
|
lvServers.Items.Clear();
|
||||||
@@ -273,29 +281,12 @@ namespace v2rayN.Forms
|
|||||||
for (int k = 0; k < lstVmess.Count; k++)
|
for (int k = 0; k < lstVmess.Count; k++)
|
||||||
{
|
{
|
||||||
string def = string.Empty;
|
string def = string.Empty;
|
||||||
string totalUp = string.Empty,
|
|
||||||
totalDown = string.Empty,
|
|
||||||
todayUp = string.Empty,
|
|
||||||
todayDown = string.Empty;
|
|
||||||
|
|
||||||
VmessItem item = lstVmess[k];
|
VmessItem item = lstVmess[k];
|
||||||
if (config.IsActiveNode(item))
|
if (config.IsActiveNode(item))
|
||||||
{
|
{
|
||||||
def = "√";
|
def = "√";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool stats = statistics != null && statistics.Enable;
|
|
||||||
if (stats)
|
|
||||||
{
|
|
||||||
ServerStatItem sItem = statistics.Statistic.Find(item_ => item_.itemId == item.indexId);
|
|
||||||
if (sItem != null)
|
|
||||||
{
|
|
||||||
totalUp = Utils.HumanFy(sItem.totalUp);
|
|
||||||
totalDown = Utils.HumanFy(sItem.totalDown);
|
|
||||||
todayUp = Utils.HumanFy(sItem.todayUp);
|
|
||||||
todayDown = Utils.HumanFy(sItem.todayDown);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ListViewItem lvItem = new ListViewItem(def);
|
ListViewItem lvItem = new ListViewItem(def);
|
||||||
Utils.AddSubItem(lvItem, EServerColName.configType.ToString(), (item.configType).ToString());
|
Utils.AddSubItem(lvItem, EServerColName.configType.ToString(), (item.configType).ToString());
|
||||||
Utils.AddSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks);
|
Utils.AddSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks);
|
||||||
@@ -306,8 +297,22 @@ namespace v2rayN.Forms
|
|||||||
Utils.AddSubItem(lvItem, EServerColName.streamSecurity.ToString(), item.streamSecurity);
|
Utils.AddSubItem(lvItem, EServerColName.streamSecurity.ToString(), item.streamSecurity);
|
||||||
Utils.AddSubItem(lvItem, EServerColName.subRemarks.ToString(), item.GetSubRemarks(config));
|
Utils.AddSubItem(lvItem, EServerColName.subRemarks.ToString(), item.GetSubRemarks(config));
|
||||||
Utils.AddSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
|
Utils.AddSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
|
||||||
if (stats)
|
|
||||||
|
if (statistics != null && statistics.Enable)
|
||||||
{
|
{
|
||||||
|
string totalUp = string.Empty,
|
||||||
|
totalDown = string.Empty,
|
||||||
|
todayUp = string.Empty,
|
||||||
|
todayDown = string.Empty;
|
||||||
|
ServerStatItem sItem = statistics.Statistic.Find(item_ => item_.itemId == item.indexId);
|
||||||
|
if (sItem != null)
|
||||||
|
{
|
||||||
|
totalUp = Utils.HumanFy(sItem.totalUp);
|
||||||
|
totalDown = Utils.HumanFy(sItem.totalDown);
|
||||||
|
todayUp = Utils.HumanFy(sItem.todayUp);
|
||||||
|
todayDown = Utils.HumanFy(sItem.todayDown);
|
||||||
|
}
|
||||||
|
|
||||||
Utils.AddSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown);
|
Utils.AddSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown);
|
||||||
Utils.AddSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp);
|
Utils.AddSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp);
|
||||||
Utils.AddSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown);
|
Utils.AddSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown);
|
||||||
@@ -342,56 +347,32 @@ namespace v2rayN.Forms
|
|||||||
private void RefreshServersMenu()
|
private void RefreshServersMenu()
|
||||||
{
|
{
|
||||||
menuServers.DropDownItems.Clear();
|
menuServers.DropDownItems.Clear();
|
||||||
menuServers2.SelectedIndexChanged -= MenuServers2_SelectedIndexChanged;
|
|
||||||
menuServers2.Items.Clear();
|
|
||||||
menuServers.Visible = false;
|
|
||||||
menuServers2.Visible = false;
|
|
||||||
|
|
||||||
if (lstVmess.Count > 20)
|
if (lstVmess.Count > 30)
|
||||||
{
|
{
|
||||||
for (int k = 0; k < lstVmess.Count; k++)
|
menuServers.DropDownItems.Add(new ToolStripMenuItem(ResUI.TooManyServersTip));
|
||||||
{
|
return;
|
||||||
VmessItem item = lstVmess[k];
|
|
||||||
string name = item.GetSummary();
|
|
||||||
|
|
||||||
if (config.IsActiveNode(item))
|
|
||||||
{
|
|
||||||
name = $"√ {name}";
|
|
||||||
}
|
|
||||||
menuServers2.Items.Add(name);
|
|
||||||
|
|
||||||
}
|
|
||||||
menuServers2.SelectedIndex = lstVmess.FindIndex(it => it.indexId == config.indexId);
|
|
||||||
menuServers2.SelectedIndexChanged += MenuServers2_SelectedIndexChanged;
|
|
||||||
menuServers2.Visible = true;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
List<ToolStripMenuItem> lst = new List<ToolStripMenuItem>();
|
||||||
|
for (int k = 0; k < lstVmess.Count; k++)
|
||||||
{
|
{
|
||||||
List<ToolStripMenuItem> lst = new List<ToolStripMenuItem>();
|
VmessItem item = lstVmess[k];
|
||||||
for (int k = 0; k < lstVmess.Count; k++)
|
string name = item.GetSummary();
|
||||||
|
|
||||||
|
ToolStripMenuItem ts = new ToolStripMenuItem(name)
|
||||||
{
|
{
|
||||||
VmessItem item = lstVmess[k];
|
Tag = k
|
||||||
string name = item.GetSummary();
|
};
|
||||||
|
if (config.IsActiveNode(item))
|
||||||
ToolStripMenuItem ts = new ToolStripMenuItem(name)
|
{
|
||||||
{
|
ts.Checked = true;
|
||||||
Tag = k
|
|
||||||
};
|
|
||||||
if (config.IsActiveNode(item))
|
|
||||||
{
|
|
||||||
ts.Checked = true;
|
|
||||||
}
|
|
||||||
ts.Click += new EventHandler(ts_Click);
|
|
||||||
lst.Add(ts);
|
|
||||||
}
|
}
|
||||||
menuServers.DropDownItems.AddRange(lst.ToArray());
|
ts.Click += new EventHandler(ts_Click);
|
||||||
menuServers.Visible = true;
|
lst.Add(ts);
|
||||||
}
|
}
|
||||||
}
|
menuServers.DropDownItems.AddRange(lst.ToArray());
|
||||||
|
menuServers.Visible = true;
|
||||||
private void MenuServers2_SelectedIndexChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SetDefaultServer(((ToolStripComboBox)sender).SelectedIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ts_Click(object sender, EventArgs e)
|
private void ts_Click(object sender, EventArgs e)
|
||||||
@@ -409,31 +390,8 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void lvServers_SelectedIndexChanged(object sender, EventArgs e)
|
private void lvServers_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
int index = -1;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (lvServers.SelectedIndices.Count > 0)
|
|
||||||
{
|
|
||||||
index = lvServers.SelectedIndices[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if (index < 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//qrCodeControl.showQRCode(index, config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DisplayToolStatus()
|
|
||||||
{
|
|
||||||
toolSslInboundInfo.Text = $"{Global.InboundSocks} {Global.Loopback}:{config.inbound[0].localPort} | "
|
|
||||||
+ $"{ Global.InboundHttp} { Global.Loopback}:{Global.httpPort}";
|
|
||||||
|
|
||||||
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
|
|
||||||
}
|
|
||||||
private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
|
if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
|
||||||
@@ -485,12 +443,12 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
tabGroup.TabPages.Clear();
|
tabGroup.TabPages.Clear();
|
||||||
|
|
||||||
string title = $" {UIRes.I18N("AllGroupServers")} ";
|
string title = $" {ResUI.AllGroupServers} ";
|
||||||
var tabPage = new TabPage(title);
|
var tabPage = new TabPage(title);
|
||||||
tabPage.Name = "";
|
tabPage.Name = "";
|
||||||
tabGroup.TabPages.Add(tabPage);
|
tabGroup.TabPages.Add(tabPage);
|
||||||
|
|
||||||
foreach (var item in config.groupItem)
|
foreach (var item in config.groupItem.OrderBy(t => t.sort))
|
||||||
{
|
{
|
||||||
var tabPage2 = new TabPage($" {item.remarks} ");
|
var tabPage2 = new TabPage($" {item.remarks} ");
|
||||||
tabPage2.Name = item.id;
|
tabPage2.Name = item.id;
|
||||||
@@ -557,13 +515,15 @@ namespace v2rayN.Forms
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region v2ray 操作
|
#region v2ray 操作
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 载入V2ray
|
/// 载入V2ray
|
||||||
/// </summary>
|
/// </summary>
|
||||||
async Task LoadV2ray()
|
async Task LoadV2ray()
|
||||||
{
|
{
|
||||||
tsbReload.Enabled = false;
|
this.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
tsbReload.Enabled = false;
|
||||||
|
}));
|
||||||
|
|
||||||
if (Global.reloadV2ray)
|
if (Global.reloadV2ray)
|
||||||
{
|
{
|
||||||
@@ -580,7 +540,10 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
ChangePACButtonStatus(config.sysProxyType);
|
ChangePACButtonStatus(config.sysProxyType);
|
||||||
|
|
||||||
tsbReload.Enabled = true;
|
this.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
tsbReload.Enabled = true;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -602,17 +565,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void lvServers_Click(object sender, EventArgs e)
|
private void lvServers_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
int index = -1;
|
int index = GetLvSelectedIndex(false);
|
||||||
try
|
|
||||||
{
|
|
||||||
if (lvServers.SelectedIndices.Count > 0)
|
|
||||||
{
|
|
||||||
index = lvServers.SelectedIndices[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -727,7 +680,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (UI.ShowYesNo(UIRes.I18N("RemoveServer")) == DialogResult.No)
|
if (UI.ShowYesNo(ResUI.RemoveServer) == DialogResult.No)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -744,7 +697,7 @@ namespace v2rayN.Forms
|
|||||||
int newCount = ConfigHandler.DedupServerList(ref config, ref lstVmess);
|
int newCount = ConfigHandler.DedupServerList(ref config, ref lstVmess);
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
_ = LoadV2ray();
|
_ = LoadV2ray();
|
||||||
UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount));
|
UI.Show(string.Format(ResUI.RemoveDuplicateServerResult, oldCount, newCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void menuCopyServer_Click(object sender, EventArgs e)
|
private void menuCopyServer_Click(object sender, EventArgs e)
|
||||||
@@ -784,11 +737,11 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
//if (!config.sysAgentEnabled)
|
//if (!config.sysAgentEnabled)
|
||||||
//{
|
//{
|
||||||
// UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
|
// UI.Show(ResUI.NeedHttpGlobalProxy"));
|
||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//UI.Show(UIRes.I18N("SpeedServerTips"));
|
//UI.Show(ResUI.SpeedServerTips"));
|
||||||
|
|
||||||
Speedtest(ESpeedActionType.Realping);
|
Speedtest(ESpeedActionType.Realping);
|
||||||
}
|
}
|
||||||
@@ -797,11 +750,11 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
//if (!config.sysAgentEnabled)
|
//if (!config.sysAgentEnabled)
|
||||||
//{
|
//{
|
||||||
// UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
|
// UI.Show(ResUI.NeedHttpGlobalProxy"));
|
||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//UI.Show(UIRes.I18N("SpeedServerTips"));
|
//UI.Show(ResUI.SpeedServerTips"));
|
||||||
|
|
||||||
Speedtest(ESpeedActionType.Speedtest);
|
Speedtest(ESpeedActionType.Speedtest);
|
||||||
}
|
}
|
||||||
@@ -809,14 +762,13 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (GetLvSelectedIndex() < 0) return;
|
if (GetLvSelectedIndex() < 0) return;
|
||||||
ClearTestResult();
|
ClearTestResult();
|
||||||
SpeedtestHandler statistics = new SpeedtestHandler(ref config, v2rayHandler, lstSelecteds, actionType, UpdateSpeedtestHandler);
|
SpeedtestHandler statistics = new SpeedtestHandler(config, v2rayHandler, lstSelecteds, actionType, UpdateSpeedtestHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tsbTestMe_Click(object sender, EventArgs e)
|
private void tsbTestMe_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SpeedtestHandler statistics = new SpeedtestHandler(ref config);
|
string result = (new DownloadHandle()).RunAvailabilityCheck(null) + "ms";
|
||||||
string result = statistics.RunAvailabilityCheck() + "ms";
|
AppendText(false, string.Format(ResUI.TestMeOutput, result));
|
||||||
AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void menuClearStatistic_Click(object sender, EventArgs e)
|
private void menuClearStatistic_Click(object sender, EventArgs e)
|
||||||
@@ -857,8 +809,8 @@ namespace v2rayN.Forms
|
|||||||
if (sb.Length > 0)
|
if (sb.Length > 0)
|
||||||
{
|
{
|
||||||
Utils.SetClipboardData(sb.ToString());
|
Utils.SetClipboardData(sb.ToString());
|
||||||
AppendText(false, UIRes.I18N("BatchExportURLSuccessfully"));
|
AppendText(false, ResUI.BatchExportURLSuccessfully);
|
||||||
//UI.Show(UIRes.I18N("BatchExportURLSuccessfully"));
|
//UI.Show(ResUI.BatchExportURLSuccessfully"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -880,7 +832,7 @@ namespace v2rayN.Forms
|
|||||||
if (sb.Length > 0)
|
if (sb.Length > 0)
|
||||||
{
|
{
|
||||||
Utils.SetClipboardData(Utils.Base64Encode(sb.ToString()));
|
Utils.SetClipboardData(Utils.Base64Encode(sb.ToString()));
|
||||||
UI.Show(UIRes.I18N("BatchExportSubscriptionSuccessfully"));
|
UI.Show(ResUI.BatchExportSubscriptionSuccessfully);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,9 +862,9 @@ namespace v2rayN.Forms
|
|||||||
var fm = new GlobalHotkeySettingForm();
|
var fm = new GlobalHotkeySettingForm();
|
||||||
if (fm.ShowDialog() == DialogResult.OK)
|
if (fm.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
RefreshRoutingsMenu();
|
//RefreshRoutingsMenu();
|
||||||
RefreshServers();
|
//RefreshServers();
|
||||||
_ = LoadV2ray();
|
//_ = LoadV2ray();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -950,7 +902,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectServer"));
|
UI.Show(ResUI.PleaseSelectServer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (ConfigHandler.SetDefaultServer(ref config, lstVmess[index]) == 0)
|
if (ConfigHandler.SetDefaultServer(ref config, lstVmess[index]) == 0)
|
||||||
@@ -965,7 +917,7 @@ namespace v2rayN.Forms
|
|||||||
/// 取得ListView选中的行
|
/// 取得ListView选中的行
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private int GetLvSelectedIndex()
|
private int GetLvSelectedIndex(bool show = true)
|
||||||
{
|
{
|
||||||
int index = -1;
|
int index = -1;
|
||||||
lstSelecteds.Clear();
|
lstSelecteds.Clear();
|
||||||
@@ -973,7 +925,10 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (lvServers.SelectedIndices.Count <= 0)
|
if (lvServers.SelectedIndices.Count <= 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectServer"));
|
if (show)
|
||||||
|
{
|
||||||
|
UI.Show(ResUI.PleaseSelectServer);
|
||||||
|
}
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1020,7 +975,7 @@ namespace v2rayN.Forms
|
|||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), ret));
|
UI.Show(string.Format(ResUI.SuccessfullyImportedServerViaClipboard, ret));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1042,7 +997,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("NoValidQRcodeFound"));
|
UI.ShowWarning(ResUI.NoValidQRcodeFound);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1050,7 +1005,7 @@ namespace v2rayN.Forms
|
|||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
{
|
{
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan"));
|
UI.Show(ResUI.SuccessfullyImportedServerViaScan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1189,11 +1144,13 @@ namespace v2rayN.Forms
|
|||||||
this.ShowInTaskbar = true;
|
this.ShowInTaskbar = true;
|
||||||
//this.notifyIcon1.Visible = false;
|
//this.notifyIcon1.Visible = false;
|
||||||
this.txtMsgBox.ScrollToCaret();
|
this.txtMsgBox.ScrollToCaret();
|
||||||
//if (config.index >= 0 && config.index < lvServers.Items.Count)
|
|
||||||
//{
|
int index = GetLvSelectedIndex(false);
|
||||||
// lvServers.Items[config.index].Selected = true;
|
if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0)
|
||||||
// lvServers.EnsureVisible(config.index); // workaround
|
{
|
||||||
//}
|
lvServers.Items[index].Selected = true;
|
||||||
|
lvServers.EnsureVisible(index); // workaround
|
||||||
|
}
|
||||||
|
|
||||||
SetVisibleCore(true);
|
SetVisibleCore(true);
|
||||||
}
|
}
|
||||||
@@ -1220,6 +1177,10 @@ namespace v2rayN.Forms
|
|||||||
lstVmess[k].testResult = txt;
|
lstVmess[k].testResult = txt;
|
||||||
lvServers.Items[k].SubItems["testResult"].Text = txt;
|
lvServers.Items[k].SubItems["testResult"].Text = txt;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppendText(false, txt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private void SetTestResult(int k, string txt)
|
private void SetTestResult(int k, string txt)
|
||||||
{
|
{
|
||||||
@@ -1252,25 +1213,26 @@ namespace v2rayN.Forms
|
|||||||
down /= (ulong)(config.statisticsFreshRate / 1000f);
|
down /= (ulong)(config.statisticsFreshRate / 1000f);
|
||||||
toolSslServerSpeed.Text = string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down));
|
toolSslServerSpeed.Text = string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down));
|
||||||
|
|
||||||
List<string[]> datas = new List<string[]>();
|
foreach (var it in statistics)
|
||||||
for (int i = 0; i < lstVmess.Count; i++)
|
|
||||||
{
|
{
|
||||||
int index = statistics.FindIndex(item_ => item_.itemId == lstVmess[i].indexId);
|
int index = lstVmess.FindIndex(item => item.indexId == it.itemId);
|
||||||
if (index != -1)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
lvServers.Invoke((MethodInvoker)delegate
|
continue;
|
||||||
{
|
|
||||||
lvServers.BeginUpdate();
|
|
||||||
|
|
||||||
lvServers.Items[i].SubItems["todayDown"].Text = Utils.HumanFy(statistics[index].todayDown);
|
|
||||||
lvServers.Items[i].SubItems["todayUp"].Text = Utils.HumanFy(statistics[index].todayUp);
|
|
||||||
lvServers.Items[i].SubItems["totalDown"].Text = Utils.HumanFy(statistics[index].totalDown);
|
|
||||||
lvServers.Items[i].SubItems["totalUp"].Text = Utils.HumanFy(statistics[index].totalUp);
|
|
||||||
|
|
||||||
lvServers.EndUpdate();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
lvServers.Invoke((MethodInvoker)delegate
|
||||||
|
{
|
||||||
|
lvServers.BeginUpdate();
|
||||||
|
|
||||||
|
lvServers.Items[index].SubItems["todayDown"].Text = Utils.HumanFy(it.todayDown);
|
||||||
|
lvServers.Items[index].SubItems["todayUp"].Text = Utils.HumanFy(it.todayUp);
|
||||||
|
lvServers.Items[index].SubItems["totalDown"].Text = Utils.HumanFy(it.totalDown);
|
||||||
|
lvServers.Items[index].SubItems["totalUp"].Text = Utils.HumanFy(it.totalUp);
|
||||||
|
|
||||||
|
lvServers.EndUpdate();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -1278,13 +1240,13 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTaskHandler(bool success, string msg)
|
private async void UpdateTaskHandler(bool success, string msg)
|
||||||
{
|
{
|
||||||
AppendText(false, msg);
|
AppendText(false, msg);
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
Global.reloadV2ray = true;
|
Global.reloadV2ray = true;
|
||||||
_ = LoadV2ray();
|
await LoadV2ray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -1316,7 +1278,7 @@ namespace v2rayN.Forms
|
|||||||
int index = GetLvSelectedIndex();
|
int index = GetLvSelectedIndex();
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectServer"));
|
UI.Show(ResUI.PleaseSelectServer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ConfigHandler.MoveServer(ref config, ref lstVmess, index, eMove) == 0)
|
if (ConfigHandler.MoveServer(ref config, ref lstVmess, index, eMove) == 0)
|
||||||
@@ -1372,6 +1334,23 @@ namespace v2rayN.Forms
|
|||||||
DisplayToolStatus();
|
DisplayToolStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DisplayToolStatus()
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.Append($"{Global.InboundSocks} {Global.Loopback}:{config.GetLocalPort(Global.InboundSocks)}");
|
||||||
|
sb.Append(" | ");
|
||||||
|
sb.Append($"{Global.InboundHttp} {Global.Loopback}:{config.GetLocalPort(Global.InboundHttp)}");
|
||||||
|
|
||||||
|
if (config.sysProxyType == ESysProxyType.ForcedChange)
|
||||||
|
{
|
||||||
|
sb.Append(" | ");
|
||||||
|
sb.Append($"{ResUI.SystemProxy} {Global.Loopback}:{config.GetLocalPort(Global.InboundHttp2)}");
|
||||||
|
}
|
||||||
|
|
||||||
|
toolSslInboundInfo.Text = sb.ToString();
|
||||||
|
|
||||||
|
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -1412,42 +1391,27 @@ namespace v2rayN.Forms
|
|||||||
string fileName = Utils.GetPath(Utils.GetDownloadFileName(msg));
|
string fileName = Utils.GetPath(Utils.GetDownloadFileName(msg));
|
||||||
FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : "");
|
FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : "");
|
||||||
|
|
||||||
AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
|
AppendText(false, ResUI.MsgUpdateV2rayCoreSuccessfullyMore);
|
||||||
|
|
||||||
Global.reloadV2ray = true;
|
Global.reloadV2ray = true;
|
||||||
_ = LoadV2ray();
|
_ = LoadV2ray();
|
||||||
|
|
||||||
AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully"));
|
AppendText(false, ResUI.MsgUpdateV2rayCoreSuccessfully);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
(new UpdateHandle()).CheckUpdateCore(type, config, _updateUI);
|
(new UpdateHandle()).CheckUpdateCore(type, config, _updateUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tsbCheckUpdateGeoSite_Click(object sender, EventArgs e)
|
private void tsbCheckUpdateGeo_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
(new UpdateHandle()).UpdateGeoFile("geosite", config, (bool success, string msg) =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
AppendText(false, msg);
|
var updateHandle = new UpdateHandle();
|
||||||
if (success)
|
updateHandle.UpdateGeoFile("geosite", config, UpdateTaskHandler);
|
||||||
{
|
updateHandle.UpdateGeoFile("geoip", config, UpdateTaskHandler);
|
||||||
Global.reloadV2ray = true;
|
|
||||||
_ = LoadV2ray();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tsbCheckUpdateGeoIP_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
(new UpdateHandle()).UpdateGeoFile("geoip", config, (bool success, string msg) =>
|
|
||||||
{
|
|
||||||
AppendText(false, msg);
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
Global.reloadV2ray = true;
|
|
||||||
_ = LoadV2ray();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Help
|
#region Help
|
||||||
@@ -1659,7 +1623,7 @@ namespace v2rayN.Forms
|
|||||||
if (fm.ShowDialog() == DialogResult.OK)
|
if (fm.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
MsgFilter = fm.MsgFilter;
|
MsgFilter = fm.MsgFilter;
|
||||||
gbMsgTitle.Text = string.Format(UIRes.I18N("MsgInformationTitle"), MsgFilter);
|
gbMsgTitle.Text = string.Format(ResUI.MsgInformationTitle, MsgFilter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -321,7 +321,7 @@
|
|||||||
<value>ImageAboveText</value>
|
<value>ImageAboveText</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>356, 666</value>
|
<value>356, 644</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cmsLv.Name" xml:space="preserve">
|
<data name=">>cmsLv.Name" xml:space="preserve">
|
||||||
<value>cmsLv</value>
|
<value>cmsLv</value>
|
||||||
@@ -750,73 +750,61 @@
|
|||||||
<value>Do not change system proxy</value>
|
<value>Do not change system proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
||||||
<value>System proxy</value>
|
<value>System proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuRoutings.Text" xml:space="preserve">
|
<data name="menuRoutings.Text" xml:space="preserve">
|
||||||
<value>Routing</value>
|
<value>Routing</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuServers.Text" xml:space="preserve">
|
<data name="menuServers.Text" xml:space="preserve">
|
||||||
<value>Server</value>
|
<value>Server</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuServers2.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
|
||||||
<value>Standard</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuServers2.MaxDropDownItems" type="System.Int32, mscorlib">
|
|
||||||
<value>50</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuServers2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>200, 25</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuServers2.ToolTipText" xml:space="preserve">
|
|
||||||
<value>Server</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>261, 6</value>
|
<value>274, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuAddServers2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuAddServers2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuAddServers2.Text" xml:space="preserve">
|
<data name="menuAddServers2.Text" xml:space="preserve">
|
||||||
<value>Import bulk URL from clipboard</value>
|
<value>Import bulk URL from clipboard</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuScanScreen2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuScanScreen2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuScanScreen2.Text" xml:space="preserve">
|
<data name="menuScanScreen2.Text" xml:space="preserve">
|
||||||
<value>Scan QR code on the screen</value>
|
<value>Scan QR code on the screen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
||||||
<value>Update subscriptions</value>
|
<value>Update subscription without proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubViaProxy.Text" xml:space="preserve">
|
<data name="menuUpdateSubViaProxy.Text" xml:space="preserve">
|
||||||
<value>Update subscriptions via proxy</value>
|
<value>Update subscriptions via proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>261, 6</value>
|
<value>274, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuExit.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuExit.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>264, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuExit.Text" xml:space="preserve">
|
<data name="menuExit.Text" xml:space="preserve">
|
||||||
<value>Exit</value>
|
<value>Exit</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>265, 221</value>
|
<value>278, 192</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cmsMain.Name" xml:space="preserve">
|
<data name=">>cmsMain.Name" xml:space="preserve">
|
||||||
<value>cmsMain</value>
|
<value>cmsMain</value>
|
||||||
@@ -861,22 +849,22 @@
|
|||||||
<value>6, 56</value>
|
<value>6, 56</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>182, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubSetting.Text" xml:space="preserve">
|
<data name="tsbSubSetting.Text" xml:space="preserve">
|
||||||
<value>Settings</value>
|
<value>Settings</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>182, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||||
<value>Updates</value>
|
<value>Update subscription without proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>182, 22</value>
|
<value>277, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdateViaProxy.Text" xml:space="preserve">
|
<data name="tsbSubUpdateViaProxy.Text" xml:space="preserve">
|
||||||
<value>Updates via proxy</value>
|
<value>Update subscription with proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSub.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
|
<data name="tsbSub.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
|
||||||
<value>Magenta</value>
|
<value>Magenta</value>
|
||||||
@@ -995,17 +983,11 @@
|
|||||||
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>200, 6</value>
|
<value>200, 6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdateGeoSite.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbCheckUpdateGeo.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>203, 22</value>
|
<value>203, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdateGeoSite.Text" xml:space="preserve">
|
<data name="tsbCheckUpdateGeo.Text" xml:space="preserve">
|
||||||
<value>Update GeoSite</value>
|
<value>Update Geo files</value>
|
||||||
</data>
|
|
||||||
<data name="tsbCheckUpdateGeoIP.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>203, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbCheckUpdateGeoIP.Text" xml:space="preserve">
|
|
||||||
<value>Update GeoIP</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
|
<data name="tsbCheckUpdate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
|
||||||
<value>Magenta</value>
|
<value>Magenta</value>
|
||||||
@@ -1439,12 +1421,6 @@
|
|||||||
<data name=">>menuServers.Type" xml:space="preserve">
|
<data name=">>menuServers.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>menuServers2.Name" xml:space="preserve">
|
|
||||||
<value>menuServers2</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>menuServers2.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripSeparator13.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator13.Name" xml:space="preserve">
|
||||||
<value>toolStripSeparator13</value>
|
<value>toolStripSeparator13</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1619,16 +1595,10 @@
|
|||||||
<data name=">>toolStripSeparator15.Type" xml:space="preserve">
|
<data name=">>toolStripSeparator15.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tsbCheckUpdateGeoSite.Name" xml:space="preserve">
|
<data name=">>tsbCheckUpdateGeo.Name" xml:space="preserve">
|
||||||
<value>tsbCheckUpdateGeoSite</value>
|
<value>tsbCheckUpdateGeo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>tsbCheckUpdateGeoSite.Type" xml:space="preserve">
|
<data name=">>tsbCheckUpdateGeo.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=">>tsbCheckUpdateGeoIP.Name" xml:space="preserve">
|
|
||||||
<value>tsbCheckUpdateGeoIP</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tsbCheckUpdateGeoIP.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripSeparator10.Name" xml:space="preserve">
|
<data name=">>toolStripSeparator10.Name" xml:space="preserve">
|
||||||
|
|||||||
@@ -421,7 +421,7 @@
|
|||||||
<value>260, 22</value>
|
<value>260, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
||||||
<value>更新订阅</value>
|
<value>更新订阅(不通过代理)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>260, 22</value>
|
<value>260, 22</value>
|
||||||
@@ -451,7 +451,7 @@
|
|||||||
<value>180, 22</value>
|
<value>180, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||||
<value>更新订阅</value>
|
<value>更新订阅(不通过代理)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>180, 22</value>
|
<value>180, 22</value>
|
||||||
|
|||||||
26
v2rayN/v2rayN/Forms/MsgFilterSetForm.Designer.cs
generated
26
v2rayN/v2rayN/Forms/MsgFilterSetForm.Designer.cs
generated
@@ -34,14 +34,18 @@
|
|||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
this.btnClose = new System.Windows.Forms.Button();
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
this.btnOK = new System.Windows.Forms.Button();
|
this.btnOK = new System.Windows.Forms.Button();
|
||||||
|
this.btnFilterDirect = new System.Windows.Forms.Button();
|
||||||
|
this.btnFilderProxy = new System.Windows.Forms.Button();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
this.panel2.SuspendLayout();
|
this.panel2.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
this.groupBox1.Controls.Add(this.btnFilderProxy);
|
||||||
|
this.groupBox1.Controls.Add(this.btnFilterDirect);
|
||||||
this.groupBox1.Controls.Add(this.txtMsgFilter);
|
this.groupBox1.Controls.Add(this.txtMsgFilter);
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
@@ -52,15 +56,15 @@
|
|||||||
//
|
//
|
||||||
// panel2
|
// panel2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.panel2, "panel2");
|
|
||||||
this.panel2.Controls.Add(this.btnClose);
|
this.panel2.Controls.Add(this.btnClose);
|
||||||
this.panel2.Controls.Add(this.btnOK);
|
this.panel2.Controls.Add(this.btnOK);
|
||||||
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.btnClose, "btnClose");
|
|
||||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
resources.ApplyResources(this.btnClose, "btnClose");
|
||||||
this.btnClose.Name = "btnClose";
|
this.btnClose.Name = "btnClose";
|
||||||
this.btnClose.UseVisualStyleBackColor = true;
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
@@ -72,6 +76,20 @@
|
|||||||
this.btnOK.UseVisualStyleBackColor = true;
|
this.btnOK.UseVisualStyleBackColor = true;
|
||||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||||
//
|
//
|
||||||
|
// btnFilterDirect
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.btnFilterDirect, "btnFilterDirect");
|
||||||
|
this.btnFilterDirect.Name = "btnFilterDirect";
|
||||||
|
this.btnFilterDirect.UseVisualStyleBackColor = true;
|
||||||
|
this.btnFilterDirect.Click += new System.EventHandler(this.btnFilterDirect_Click);
|
||||||
|
//
|
||||||
|
// btnFilderProxy
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.btnFilderProxy, "btnFilderProxy");
|
||||||
|
this.btnFilderProxy.Name = "btnFilderProxy";
|
||||||
|
this.btnFilderProxy.UseVisualStyleBackColor = true;
|
||||||
|
this.btnFilderProxy.Click += new System.EventHandler(this.btnFilderProxy_Click);
|
||||||
|
//
|
||||||
// MsgFilterSetForm
|
// MsgFilterSetForm
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
@@ -94,5 +112,7 @@
|
|||||||
private System.Windows.Forms.Panel panel2;
|
private System.Windows.Forms.Panel panel2;
|
||||||
private System.Windows.Forms.Button btnClose;
|
private System.Windows.Forms.Button btnClose;
|
||||||
private System.Windows.Forms.Button btnOK;
|
private System.Windows.Forms.Button btnOK;
|
||||||
|
private System.Windows.Forms.Button btnFilderProxy;
|
||||||
|
private System.Windows.Forms.Button btnFilterDirect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,5 +34,15 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
this.DialogResult = DialogResult.Cancel;
|
this.DialogResult = DialogResult.Cancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void btnFilderProxy_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
txtMsgFilter.Text = "^(?!.*proxy).*$";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnFilterDirect_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
txtMsgFilter.Text = "^(?!.*direct).*$";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,151 +117,226 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Fill</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtMsgFilter.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtMsgFilter.Name" xml:space="preserve">
|
|
||||||
<value>txtMsgFilter</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnOK.Text" xml:space="preserve">
|
|
||||||
<value>&OK</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnClose.Text" xml:space="preserve">
|
|
||||||
<value>&Cancel</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtMsgFilter.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="txtMsgFilter.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="btnFilderProxy.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>41, 29</value>
|
<value>157, 47</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="btnFilderProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>490, 60</value>
|
<value>95, 23</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="txtMsgFilter.TabIndex" type="System.Int32, mscorlib">
|
<data name="btnFilderProxy.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>11</value>
|
<value>13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<data name="btnFilderProxy.Text" xml:space="preserve">
|
||||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>Filter Proxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel2.Name" xml:space="preserve">
|
<data name=">>btnFilderProxy.Name" xml:space="preserve">
|
||||||
<value>panel2</value>
|
<value>btnFilderProxy</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
<data name=">>btnFilderProxy.Type" xml:space="preserve">
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>396, 17</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>75, 23</value>
|
|
||||||
</data>
|
|
||||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>9</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>5</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>8</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>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel2.Type" xml:space="preserve">
|
<data name=">>btnFilderProxy.Parent" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name=">>btnFilderProxy.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="btnFilterDirect.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
<data name="btnFilterDirect.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>panel2</value>
|
<value>41, 47</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
<data name="btnFilterDirect.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>4</value>
|
<value>95, 23</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name="btnFilterDirect.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>MsgFilterSetForm</value>
|
<value>12</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnFilterDirect.Text" xml:space="preserve">
|
||||||
|
<value>Filter Direct</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnFilterDirect.Name" xml:space="preserve">
|
||||||
|
<value>btnFilterDirect</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnFilterDirect.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnFilterDirect.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnFilterDirect.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtMsgFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>41, 20</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtMsgFilter.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="txtMsgFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>409, 21</value>
|
<value>409, 21</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
<data name="txtMsgFilter.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>11</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>txtMsgFilter.Name" xml:space="preserve">
|
||||||
<value>0, 0</value>
|
<value>txtMsgFilter</value>
|
||||||
</data>
|
|
||||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 76</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtMsgFilter.Type" xml:space="preserve">
|
<data name=">>txtMsgFilter.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name=">>txtMsgFilter.Parent" xml:space="preserve">
|
||||||
<value>Bottom</value>
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtMsgFilter.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>490, 76</value>
|
<value>490, 76</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnClose.Type" xml:space="preserve">
|
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>8</value>
|
||||||
</data>
|
|
||||||
<data name=">>btnClose.Name" xml:space="preserve">
|
|
||||||
<value>btnClose</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
|
||||||
<value>panel2</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox1.Text" xml:space="preserve">
|
<data name="groupBox1.Text" xml:space="preserve">
|
||||||
<value>Filter</value>
|
<value>Filter</value>
|
||||||
</data>
|
</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=">>btnClose.Name" xml:space="preserve">
|
||||||
|
<value>btnClose</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=">>btnClose.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
<data name=">>btnOK.Name" xml:space="preserve">
|
<data name=">>btnOK.Name" xml:space="preserve">
|
||||||
<value>btnOK</value>
|
<value>btnOK</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name=">>btnOK.Type" xml:space="preserve">
|
||||||
<value>490, 136</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||||
<value>75, 23</value>
|
<value>panel2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
<value>303, 17</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>6, 12</value>
|
<value>Bottom</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 76</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>490, 60</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>9</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Name" xml:space="preserve">
|
||||||
|
<value>panel2</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>
|
||||||
<data name=">>panel2.Parent" xml:space="preserve">
|
<data name=">>panel2.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Text" xml:space="preserve">
|
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||||
<value>MsgFilterSetForm</value>
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>396, 17</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Text" xml:space="preserve">
|
||||||
|
<value>&Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Name" xml:space="preserve">
|
||||||
|
<value>btnClose</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=">>btnClose.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>303, 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>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</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>490, 136</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>MsgFilterSetForm</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>MsgFilterSetForm</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
|
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -129,4 +129,10 @@
|
|||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="$this.Text" xml:space="preserve">
|
||||||
<value>设置过滤器</value>
|
<value>设置过滤器</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="btnFilderProxy.Text" xml:space="preserve">
|
||||||
|
<value>过滤Proxy</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnFilterDirect.Text" xml:space="preserve">
|
||||||
|
<value>过滤Direct</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
141
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
141
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
@@ -33,15 +33,14 @@
|
|||||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.label16 = new System.Windows.Forms.Label();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.txtpass = new System.Windows.Forms.TextBox();
|
||||||
|
this.txtuser = new System.Windows.Forms.TextBox();
|
||||||
this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
|
this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
|
||||||
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
|
this.chkAllowLANConn = new System.Windows.Forms.CheckBox();
|
||||||
this.chksniffingEnabled = new System.Windows.Forms.CheckBox();
|
this.chksniffingEnabled = new System.Windows.Forms.CheckBox();
|
||||||
this.chkmuxEnabled = new System.Windows.Forms.CheckBox();
|
this.chkmuxEnabled = new System.Windows.Forms.CheckBox();
|
||||||
this.chkAllowIn2 = new System.Windows.Forms.CheckBox();
|
|
||||||
this.chkudpEnabled2 = new System.Windows.Forms.CheckBox();
|
|
||||||
this.cmbprotocol2 = new System.Windows.Forms.ComboBox();
|
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
|
||||||
this.txtlocalPort2 = new System.Windows.Forms.TextBox();
|
|
||||||
this.cmbprotocol = new System.Windows.Forms.ComboBox();
|
this.cmbprotocol = new System.Windows.Forms.ComboBox();
|
||||||
this.label1 = new System.Windows.Forms.Label();
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
this.chkudpEnabled = new System.Windows.Forms.CheckBox();
|
this.chkudpEnabled = new System.Windows.Forms.CheckBox();
|
||||||
@@ -79,7 +78,6 @@
|
|||||||
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
||||||
this.lbFreshrate = new System.Windows.Forms.Label();
|
this.lbFreshrate = new System.Windows.Forms.Label();
|
||||||
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
||||||
this.chkAllowLANConn = new System.Windows.Forms.CheckBox();
|
|
||||||
this.chkAutoRun = new System.Windows.Forms.CheckBox();
|
this.chkAutoRun = new System.Windows.Forms.CheckBox();
|
||||||
this.tabPageCoreType = new System.Windows.Forms.TabPage();
|
this.tabPageCoreType = new System.Windows.Forms.TabPage();
|
||||||
this.cmbCoreType6 = new System.Windows.Forms.ComboBox();
|
this.cmbCoreType6 = new System.Windows.Forms.ComboBox();
|
||||||
@@ -116,42 +114,42 @@
|
|||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
|
||||||
resources.ApplyResources(this.btnClose, "btnClose");
|
resources.ApplyResources(this.btnClose, "btnClose");
|
||||||
|
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
this.btnClose.Name = "btnClose";
|
this.btnClose.Name = "btnClose";
|
||||||
this.btnClose.UseVisualStyleBackColor = true;
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
//
|
//
|
||||||
// tabControl1
|
// tabControl1
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.tabControl1, "tabControl1");
|
||||||
this.tabControl1.Controls.Add(this.tabPage1);
|
this.tabControl1.Controls.Add(this.tabPage1);
|
||||||
this.tabControl1.Controls.Add(this.tabPage2);
|
this.tabControl1.Controls.Add(this.tabPage2);
|
||||||
this.tabControl1.Controls.Add(this.tabPage6);
|
this.tabControl1.Controls.Add(this.tabPage6);
|
||||||
this.tabControl1.Controls.Add(this.tabPage7);
|
this.tabControl1.Controls.Add(this.tabPage7);
|
||||||
this.tabControl1.Controls.Add(this.tabPageCoreType);
|
this.tabControl1.Controls.Add(this.tabPageCoreType);
|
||||||
this.tabControl1.Controls.Add(this.tabPage3);
|
this.tabControl1.Controls.Add(this.tabPage3);
|
||||||
resources.ApplyResources(this.tabControl1, "tabControl1");
|
|
||||||
this.tabControl1.Name = "tabControl1";
|
this.tabControl1.Name = "tabControl1";
|
||||||
this.tabControl1.SelectedIndex = 0;
|
this.tabControl1.SelectedIndex = 0;
|
||||||
//
|
//
|
||||||
// tabPage1
|
// tabPage1
|
||||||
//
|
//
|
||||||
this.tabPage1.Controls.Add(this.groupBox1);
|
|
||||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||||
|
this.tabPage1.Controls.Add(this.groupBox1);
|
||||||
this.tabPage1.Name = "tabPage1";
|
this.tabPage1.Name = "tabPage1";
|
||||||
this.tabPage1.UseVisualStyleBackColor = true;
|
this.tabPage1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
|
this.groupBox1.Controls.Add(this.label16);
|
||||||
|
this.groupBox1.Controls.Add(this.label4);
|
||||||
|
this.groupBox1.Controls.Add(this.txtpass);
|
||||||
|
this.groupBox1.Controls.Add(this.txtuser);
|
||||||
this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
|
this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
|
||||||
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
|
this.groupBox1.Controls.Add(this.chkAllowLANConn);
|
||||||
this.groupBox1.Controls.Add(this.chksniffingEnabled);
|
this.groupBox1.Controls.Add(this.chksniffingEnabled);
|
||||||
this.groupBox1.Controls.Add(this.chkmuxEnabled);
|
this.groupBox1.Controls.Add(this.chkmuxEnabled);
|
||||||
this.groupBox1.Controls.Add(this.chkAllowIn2);
|
|
||||||
this.groupBox1.Controls.Add(this.chkudpEnabled2);
|
|
||||||
this.groupBox1.Controls.Add(this.cmbprotocol2);
|
|
||||||
this.groupBox1.Controls.Add(this.label3);
|
|
||||||
this.groupBox1.Controls.Add(this.txtlocalPort2);
|
|
||||||
this.groupBox1.Controls.Add(this.cmbprotocol);
|
this.groupBox1.Controls.Add(this.cmbprotocol);
|
||||||
this.groupBox1.Controls.Add(this.label1);
|
this.groupBox1.Controls.Add(this.label1);
|
||||||
this.groupBox1.Controls.Add(this.chkudpEnabled);
|
this.groupBox1.Controls.Add(this.chkudpEnabled);
|
||||||
@@ -160,21 +158,40 @@
|
|||||||
this.groupBox1.Controls.Add(this.label5);
|
this.groupBox1.Controls.Add(this.label5);
|
||||||
this.groupBox1.Controls.Add(this.txtlocalPort);
|
this.groupBox1.Controls.Add(this.txtlocalPort);
|
||||||
this.groupBox1.Controls.Add(this.label2);
|
this.groupBox1.Controls.Add(this.label2);
|
||||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
|
// label16
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label16, "label16");
|
||||||
|
this.label16.Name = "label16";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label4, "label4");
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
//
|
||||||
|
// txtpass
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtpass, "txtpass");
|
||||||
|
this.txtpass.Name = "txtpass";
|
||||||
|
//
|
||||||
|
// txtuser
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtuser, "txtuser");
|
||||||
|
this.txtuser.Name = "txtuser";
|
||||||
|
//
|
||||||
// chkdefAllowInsecure
|
// chkdefAllowInsecure
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chkdefAllowInsecure, "chkdefAllowInsecure");
|
resources.ApplyResources(this.chkdefAllowInsecure, "chkdefAllowInsecure");
|
||||||
this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
|
this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
|
||||||
this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
|
this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// chksniffingEnabled2
|
// chkAllowLANConn
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2");
|
resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn");
|
||||||
this.chksniffingEnabled2.Name = "chksniffingEnabled2";
|
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
||||||
this.chksniffingEnabled2.UseVisualStyleBackColor = true;
|
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// chksniffingEnabled
|
// chksniffingEnabled
|
||||||
//
|
//
|
||||||
@@ -188,43 +205,10 @@
|
|||||||
this.chkmuxEnabled.Name = "chkmuxEnabled";
|
this.chkmuxEnabled.Name = "chkmuxEnabled";
|
||||||
this.chkmuxEnabled.UseVisualStyleBackColor = true;
|
this.chkmuxEnabled.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// chkAllowIn2
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.chkAllowIn2, "chkAllowIn2");
|
|
||||||
this.chkAllowIn2.Name = "chkAllowIn2";
|
|
||||||
this.chkAllowIn2.UseVisualStyleBackColor = true;
|
|
||||||
this.chkAllowIn2.CheckedChanged += new System.EventHandler(this.chkAllowIn2_CheckedChanged);
|
|
||||||
//
|
|
||||||
// chkudpEnabled2
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.chkudpEnabled2, "chkudpEnabled2");
|
|
||||||
this.chkudpEnabled2.Name = "chkudpEnabled2";
|
|
||||||
this.chkudpEnabled2.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// cmbprotocol2
|
|
||||||
//
|
|
||||||
this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.cmbprotocol2.FormattingEnabled = true;
|
|
||||||
this.cmbprotocol2.Items.AddRange(new object[] {
|
|
||||||
resources.GetString("cmbprotocol2.Items"),
|
|
||||||
resources.GetString("cmbprotocol2.Items1")});
|
|
||||||
resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
|
|
||||||
this.cmbprotocol2.Name = "cmbprotocol2";
|
|
||||||
//
|
|
||||||
// label3
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.label3, "label3");
|
|
||||||
this.label3.Name = "label3";
|
|
||||||
//
|
|
||||||
// txtlocalPort2
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txtlocalPort2, "txtlocalPort2");
|
|
||||||
this.txtlocalPort2.Name = "txtlocalPort2";
|
|
||||||
//
|
|
||||||
// cmbprotocol
|
// cmbprotocol
|
||||||
//
|
//
|
||||||
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
|
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
|
||||||
|
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbprotocol.FormattingEnabled = true;
|
this.cmbprotocol.FormattingEnabled = true;
|
||||||
this.cmbprotocol.Items.AddRange(new object[] {
|
this.cmbprotocol.Items.AddRange(new object[] {
|
||||||
resources.GetString("cmbprotocol.Items"),
|
resources.GetString("cmbprotocol.Items"),
|
||||||
@@ -250,6 +234,7 @@
|
|||||||
//
|
//
|
||||||
// cmbloglevel
|
// cmbloglevel
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
||||||
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbloglevel.FormattingEnabled = true;
|
this.cmbloglevel.FormattingEnabled = true;
|
||||||
this.cmbloglevel.Items.AddRange(new object[] {
|
this.cmbloglevel.Items.AddRange(new object[] {
|
||||||
@@ -258,7 +243,6 @@
|
|||||||
resources.GetString("cmbloglevel.Items2"),
|
resources.GetString("cmbloglevel.Items2"),
|
||||||
resources.GetString("cmbloglevel.Items3"),
|
resources.GetString("cmbloglevel.Items3"),
|
||||||
resources.GetString("cmbloglevel.Items4")});
|
resources.GetString("cmbloglevel.Items4")});
|
||||||
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
|
||||||
this.cmbloglevel.Name = "cmbloglevel";
|
this.cmbloglevel.Name = "cmbloglevel";
|
||||||
//
|
//
|
||||||
// label5
|
// label5
|
||||||
@@ -278,10 +262,10 @@
|
|||||||
//
|
//
|
||||||
// tabPage2
|
// tabPage2
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||||
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
|
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
|
||||||
this.tabPage2.Controls.Add(this.txtremoteDNS);
|
this.tabPage2.Controls.Add(this.txtremoteDNS);
|
||||||
this.tabPage2.Controls.Add(this.label14);
|
this.tabPage2.Controls.Add(this.label14);
|
||||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
|
||||||
this.tabPage2.Name = "tabPage2";
|
this.tabPage2.Name = "tabPage2";
|
||||||
this.tabPage2.UseVisualStyleBackColor = true;
|
this.tabPage2.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
@@ -304,6 +288,7 @@
|
|||||||
//
|
//
|
||||||
// tabPage6
|
// tabPage6
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.tabPage6, "tabPage6");
|
||||||
this.tabPage6.Controls.Add(this.chkKcpcongestion);
|
this.tabPage6.Controls.Add(this.chkKcpcongestion);
|
||||||
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
|
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
|
||||||
this.tabPage6.Controls.Add(this.label10);
|
this.tabPage6.Controls.Add(this.label10);
|
||||||
@@ -317,7 +302,6 @@
|
|||||||
this.tabPage6.Controls.Add(this.label7);
|
this.tabPage6.Controls.Add(this.label7);
|
||||||
this.tabPage6.Controls.Add(this.txtKcpmtu);
|
this.tabPage6.Controls.Add(this.txtKcpmtu);
|
||||||
this.tabPage6.Controls.Add(this.label6);
|
this.tabPage6.Controls.Add(this.label6);
|
||||||
resources.ApplyResources(this.tabPage6, "tabPage6");
|
|
||||||
this.tabPage6.Name = "tabPage6";
|
this.tabPage6.Name = "tabPage6";
|
||||||
this.tabPage6.UseVisualStyleBackColor = true;
|
this.tabPage6.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
@@ -389,6 +373,7 @@
|
|||||||
//
|
//
|
||||||
// tabPage7
|
// tabPage7
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.tabPage7, "tabPage7");
|
||||||
this.tabPage7.Controls.Add(this.chkEnableSecurityProtocolTls13);
|
this.tabPage7.Controls.Add(this.chkEnableSecurityProtocolTls13);
|
||||||
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
|
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
|
||||||
this.tabPage7.Controls.Add(this.btnSetLoopback);
|
this.tabPage7.Controls.Add(this.btnSetLoopback);
|
||||||
@@ -399,9 +384,7 @@
|
|||||||
this.tabPage7.Controls.Add(this.cbFreshrate);
|
this.tabPage7.Controls.Add(this.cbFreshrate);
|
||||||
this.tabPage7.Controls.Add(this.lbFreshrate);
|
this.tabPage7.Controls.Add(this.lbFreshrate);
|
||||||
this.tabPage7.Controls.Add(this.chkEnableStatistics);
|
this.tabPage7.Controls.Add(this.chkEnableStatistics);
|
||||||
this.tabPage7.Controls.Add(this.chkAllowLANConn);
|
|
||||||
this.tabPage7.Controls.Add(this.chkAutoRun);
|
this.tabPage7.Controls.Add(this.chkAutoRun);
|
||||||
resources.ApplyResources(this.tabPage7, "tabPage7");
|
|
||||||
this.tabPage7.Name = "tabPage7";
|
this.tabPage7.Name = "tabPage7";
|
||||||
this.tabPage7.UseVisualStyleBackColor = true;
|
this.tabPage7.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
@@ -448,9 +431,9 @@
|
|||||||
//
|
//
|
||||||
// cbFreshrate
|
// cbFreshrate
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
||||||
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cbFreshrate.FormattingEnabled = true;
|
this.cbFreshrate.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
|
||||||
this.cbFreshrate.Name = "cbFreshrate";
|
this.cbFreshrate.Name = "cbFreshrate";
|
||||||
//
|
//
|
||||||
// lbFreshrate
|
// lbFreshrate
|
||||||
@@ -464,12 +447,6 @@
|
|||||||
this.chkEnableStatistics.Name = "chkEnableStatistics";
|
this.chkEnableStatistics.Name = "chkEnableStatistics";
|
||||||
this.chkEnableStatistics.UseVisualStyleBackColor = true;
|
this.chkEnableStatistics.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// chkAllowLANConn
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn");
|
|
||||||
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
|
||||||
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// chkAutoRun
|
// chkAutoRun
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
||||||
@@ -478,6 +455,7 @@
|
|||||||
//
|
//
|
||||||
// tabPageCoreType
|
// tabPageCoreType
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
|
||||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType6);
|
this.tabPageCoreType.Controls.Add(this.cmbCoreType6);
|
||||||
this.tabPageCoreType.Controls.Add(this.labCoreType6);
|
this.tabPageCoreType.Controls.Add(this.labCoreType6);
|
||||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType5);
|
this.tabPageCoreType.Controls.Add(this.cmbCoreType5);
|
||||||
@@ -490,15 +468,14 @@
|
|||||||
this.tabPageCoreType.Controls.Add(this.labCoreType2);
|
this.tabPageCoreType.Controls.Add(this.labCoreType2);
|
||||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType1);
|
this.tabPageCoreType.Controls.Add(this.cmbCoreType1);
|
||||||
this.tabPageCoreType.Controls.Add(this.labCoreType1);
|
this.tabPageCoreType.Controls.Add(this.labCoreType1);
|
||||||
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
|
|
||||||
this.tabPageCoreType.Name = "tabPageCoreType";
|
this.tabPageCoreType.Name = "tabPageCoreType";
|
||||||
this.tabPageCoreType.UseVisualStyleBackColor = true;
|
this.tabPageCoreType.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// cmbCoreType6
|
// cmbCoreType6
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
|
||||||
this.cmbCoreType6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType6.FormattingEnabled = true;
|
this.cmbCoreType6.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
|
|
||||||
this.cmbCoreType6.Name = "cmbCoreType6";
|
this.cmbCoreType6.Name = "cmbCoreType6";
|
||||||
//
|
//
|
||||||
// labCoreType6
|
// labCoreType6
|
||||||
@@ -508,9 +485,9 @@
|
|||||||
//
|
//
|
||||||
// cmbCoreType5
|
// cmbCoreType5
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType5, "cmbCoreType5");
|
||||||
this.cmbCoreType5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType5.FormattingEnabled = true;
|
this.cmbCoreType5.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType5, "cmbCoreType5");
|
|
||||||
this.cmbCoreType5.Name = "cmbCoreType5";
|
this.cmbCoreType5.Name = "cmbCoreType5";
|
||||||
//
|
//
|
||||||
// labCoreType5
|
// labCoreType5
|
||||||
@@ -520,9 +497,9 @@
|
|||||||
//
|
//
|
||||||
// cmbCoreType4
|
// cmbCoreType4
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType4, "cmbCoreType4");
|
||||||
this.cmbCoreType4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType4.FormattingEnabled = true;
|
this.cmbCoreType4.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType4, "cmbCoreType4");
|
|
||||||
this.cmbCoreType4.Name = "cmbCoreType4";
|
this.cmbCoreType4.Name = "cmbCoreType4";
|
||||||
//
|
//
|
||||||
// labCoreType4
|
// labCoreType4
|
||||||
@@ -532,9 +509,9 @@
|
|||||||
//
|
//
|
||||||
// cmbCoreType3
|
// cmbCoreType3
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType3, "cmbCoreType3");
|
||||||
this.cmbCoreType3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType3.FormattingEnabled = true;
|
this.cmbCoreType3.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType3, "cmbCoreType3");
|
|
||||||
this.cmbCoreType3.Name = "cmbCoreType3";
|
this.cmbCoreType3.Name = "cmbCoreType3";
|
||||||
//
|
//
|
||||||
// labCoreType3
|
// labCoreType3
|
||||||
@@ -544,9 +521,9 @@
|
|||||||
//
|
//
|
||||||
// cmbCoreType2
|
// cmbCoreType2
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType2, "cmbCoreType2");
|
||||||
this.cmbCoreType2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType2.FormattingEnabled = true;
|
this.cmbCoreType2.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType2, "cmbCoreType2");
|
|
||||||
this.cmbCoreType2.Name = "cmbCoreType2";
|
this.cmbCoreType2.Name = "cmbCoreType2";
|
||||||
//
|
//
|
||||||
// labCoreType2
|
// labCoreType2
|
||||||
@@ -556,9 +533,9 @@
|
|||||||
//
|
//
|
||||||
// cmbCoreType1
|
// cmbCoreType1
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.cmbCoreType1, "cmbCoreType1");
|
||||||
this.cmbCoreType1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbCoreType1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbCoreType1.FormattingEnabled = true;
|
this.cmbCoreType1.FormattingEnabled = true;
|
||||||
resources.ApplyResources(this.cmbCoreType1, "cmbCoreType1");
|
|
||||||
this.cmbCoreType1.Name = "cmbCoreType1";
|
this.cmbCoreType1.Name = "cmbCoreType1";
|
||||||
//
|
//
|
||||||
// labCoreType1
|
// labCoreType1
|
||||||
@@ -568,17 +545,17 @@
|
|||||||
//
|
//
|
||||||
// tabPage3
|
// tabPage3
|
||||||
//
|
//
|
||||||
this.tabPage3.Controls.Add(this.groupBox2);
|
|
||||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
resources.ApplyResources(this.tabPage3, "tabPage3");
|
||||||
|
this.tabPage3.Controls.Add(this.groupBox2);
|
||||||
this.tabPage3.Name = "tabPage3";
|
this.tabPage3.Name = "tabPage3";
|
||||||
this.tabPage3.UseVisualStyleBackColor = true;
|
this.tabPage3.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// groupBox2
|
// groupBox2
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||||
this.groupBox2.Controls.Add(this.label13);
|
this.groupBox2.Controls.Add(this.label13);
|
||||||
this.groupBox2.Controls.Add(this.label12);
|
this.groupBox2.Controls.Add(this.label12);
|
||||||
this.groupBox2.Controls.Add(this.txtsystemProxyExceptions);
|
this.groupBox2.Controls.Add(this.txtsystemProxyExceptions);
|
||||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.groupBox2.Name = "groupBox2";
|
||||||
this.groupBox2.TabStop = false;
|
this.groupBox2.TabStop = false;
|
||||||
//
|
//
|
||||||
@@ -599,9 +576,9 @@
|
|||||||
//
|
//
|
||||||
// panel2
|
// panel2
|
||||||
//
|
//
|
||||||
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
this.panel2.Controls.Add(this.btnClose);
|
this.panel2.Controls.Add(this.btnClose);
|
||||||
this.panel2.Controls.Add(this.btnOK);
|
this.panel2.Controls.Add(this.btnOK);
|
||||||
resources.ApplyResources(this.panel2, "panel2");
|
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
//
|
//
|
||||||
// btnOK
|
// btnOK
|
||||||
@@ -664,11 +641,6 @@
|
|||||||
private System.Windows.Forms.Panel panel2;
|
private System.Windows.Forms.Panel panel2;
|
||||||
private System.Windows.Forms.ComboBox cmbprotocol;
|
private System.Windows.Forms.ComboBox cmbprotocol;
|
||||||
private System.Windows.Forms.Label label1;
|
private System.Windows.Forms.Label label1;
|
||||||
private System.Windows.Forms.ComboBox cmbprotocol2;
|
|
||||||
private System.Windows.Forms.Label label3;
|
|
||||||
private System.Windows.Forms.TextBox txtlocalPort2;
|
|
||||||
private System.Windows.Forms.CheckBox chkudpEnabled2;
|
|
||||||
private System.Windows.Forms.CheckBox chkAllowIn2;
|
|
||||||
private System.Windows.Forms.CheckBox chkmuxEnabled;
|
private System.Windows.Forms.CheckBox chkmuxEnabled;
|
||||||
private System.Windows.Forms.TabPage tabPage6;
|
private System.Windows.Forms.TabPage tabPage6;
|
||||||
private System.Windows.Forms.TextBox txtKcpmtu;
|
private System.Windows.Forms.TextBox txtKcpmtu;
|
||||||
@@ -688,7 +660,6 @@
|
|||||||
private System.Windows.Forms.CheckBox chkAutoRun;
|
private System.Windows.Forms.CheckBox chkAutoRun;
|
||||||
private System.Windows.Forms.CheckBox chkAllowLANConn;
|
private System.Windows.Forms.CheckBox chkAllowLANConn;
|
||||||
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
||||||
private System.Windows.Forms.CheckBox chksniffingEnabled2;
|
|
||||||
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
||||||
private System.Windows.Forms.ComboBox cbFreshrate;
|
private System.Windows.Forms.ComboBox cbFreshrate;
|
||||||
private System.Windows.Forms.Label lbFreshrate;
|
private System.Windows.Forms.Label lbFreshrate;
|
||||||
@@ -722,5 +693,9 @@
|
|||||||
private System.Windows.Forms.Label labCoreType3;
|
private System.Windows.Forms.Label labCoreType3;
|
||||||
private System.Windows.Forms.ComboBox cmbCoreType2;
|
private System.Windows.Forms.ComboBox cmbCoreType2;
|
||||||
private System.Windows.Forms.Label labCoreType2;
|
private System.Windows.Forms.Label labCoreType2;
|
||||||
|
private System.Windows.Forms.Label label16;
|
||||||
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.TextBox txtpass;
|
||||||
|
private System.Windows.Forms.TextBox txtuser;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ using System.Windows.Forms;
|
|||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -45,23 +46,10 @@ namespace v2rayN.Forms
|
|||||||
cmbprotocol.Text = config.inbound[0].protocol.ToString();
|
cmbprotocol.Text = config.inbound[0].protocol.ToString();
|
||||||
chkudpEnabled.Checked = config.inbound[0].udpEnabled;
|
chkudpEnabled.Checked = config.inbound[0].udpEnabled;
|
||||||
chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled;
|
chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled;
|
||||||
|
chkAllowLANConn.Checked = config.inbound[0].allowLANConn;
|
||||||
|
txtuser.Text = config.inbound[0].user;
|
||||||
|
txtpass.Text = config.inbound[0].pass;
|
||||||
|
|
||||||
txtlocalPort2.Text = $"{config.inbound[0].localPort + 1}";
|
|
||||||
cmbprotocol2.Text = Global.InboundHttp;
|
|
||||||
|
|
||||||
if (config.inbound.Count > 1)
|
|
||||||
{
|
|
||||||
txtlocalPort2.Text = config.inbound[1].localPort.ToString();
|
|
||||||
cmbprotocol2.Text = config.inbound[1].protocol.ToString();
|
|
||||||
chkudpEnabled2.Checked = config.inbound[1].udpEnabled;
|
|
||||||
chksniffingEnabled2.Checked = config.inbound[1].sniffingEnabled;
|
|
||||||
chkAllowIn2.Checked = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
chkAllowIn2.Checked = false;
|
|
||||||
}
|
|
||||||
chkAllowIn2State();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//remoteDNS
|
//remoteDNS
|
||||||
@@ -95,15 +83,14 @@ namespace v2rayN.Forms
|
|||||||
//开机自动启动
|
//开机自动启动
|
||||||
chkAutoRun.Checked = Utils.IsAutoRun();
|
chkAutoRun.Checked = Utils.IsAutoRun();
|
||||||
|
|
||||||
chkAllowLANConn.Checked = config.allowLANConn;
|
|
||||||
chkEnableStatistics.Checked = config.enableStatistics;
|
chkEnableStatistics.Checked = config.enableStatistics;
|
||||||
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
||||||
|
|
||||||
ComboItem[] cbSource = new ComboItem[]
|
ComboItem[] cbSource = new ComboItem[]
|
||||||
{
|
{
|
||||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")},
|
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = ResUI.QuickFresh},
|
||||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = UIRes.I18N("MediumFresh")},
|
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = ResUI.MediumFresh},
|
||||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = UIRes.I18N("SlowFresh")},
|
new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = ResUI.SlowFresh},
|
||||||
};
|
};
|
||||||
cbFreshrate.DataSource = cbSource;
|
cbFreshrate.DataSource = cbSource;
|
||||||
|
|
||||||
@@ -187,7 +174,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,14 +196,15 @@ namespace v2rayN.Forms
|
|||||||
string protocol = cmbprotocol.Text.TrimEx();
|
string protocol = cmbprotocol.Text.TrimEx();
|
||||||
bool udpEnabled = chkudpEnabled.Checked;
|
bool udpEnabled = chkudpEnabled.Checked;
|
||||||
bool sniffingEnabled = chksniffingEnabled.Checked;
|
bool sniffingEnabled = chksniffingEnabled.Checked;
|
||||||
|
bool allowLANConn = chkAllowLANConn.Checked;
|
||||||
if (Utils.IsNullOrEmpty(localPort) || !Utils.IsNumberic(localPort))
|
if (Utils.IsNullOrEmpty(localPort) || !Utils.IsNumberic(localPort))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillLocalListeningPort"));
|
UI.Show(ResUI.FillLocalListeningPort);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(protocol))
|
if (Utils.IsNullOrEmpty(protocol))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectProtocol"));
|
UI.Show(ResUI.PleaseSelectProtocol);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,7 +217,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (remoteDNS.Contains("{") || remoteDNS.Contains("}"))
|
if (remoteDNS.Contains("{") || remoteDNS.Contains("}"))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillCorrectDNSText"));
|
UI.Show(ResUI.FillCorrectDNSText);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,41 +226,16 @@ namespace v2rayN.Forms
|
|||||||
config.inbound[0].protocol = protocol;
|
config.inbound[0].protocol = protocol;
|
||||||
config.inbound[0].udpEnabled = udpEnabled;
|
config.inbound[0].udpEnabled = udpEnabled;
|
||||||
config.inbound[0].sniffingEnabled = sniffingEnabled;
|
config.inbound[0].sniffingEnabled = sniffingEnabled;
|
||||||
|
config.inbound[0].allowLANConn = allowLANConn;
|
||||||
|
config.inbound[0].user = txtuser.Text;
|
||||||
|
config.inbound[0].pass = txtpass.Text;
|
||||||
|
|
||||||
//本地监听2
|
if (config.inbound.Count > 1)
|
||||||
string localPort2 = txtlocalPort2.Text.TrimEx();
|
|
||||||
string protocol2 = cmbprotocol2.Text.TrimEx();
|
|
||||||
bool udpEnabled2 = chkudpEnabled2.Checked;
|
|
||||||
bool sniffingEnabled2 = chksniffingEnabled2.Checked;
|
|
||||||
if (chkAllowIn2.Checked)
|
|
||||||
{
|
{
|
||||||
if (Utils.IsNullOrEmpty(localPort2) || !Utils.IsNumberic(localPort2))
|
config.inbound.RemoveAt(1);
|
||||||
{
|
|
||||||
UI.Show(UIRes.I18N("FillLocalListeningPort"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (Utils.IsNullOrEmpty(protocol2))
|
|
||||||
{
|
|
||||||
UI.Show(UIRes.I18N("PleaseSelectProtocol"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (config.inbound.Count < 2)
|
|
||||||
{
|
|
||||||
config.inbound.Add(new Mode.InItem());
|
|
||||||
}
|
|
||||||
config.inbound[1].localPort = Utils.ToInt(localPort2);
|
|
||||||
config.inbound[1].protocol = protocol2;
|
|
||||||
config.inbound[1].udpEnabled = udpEnabled2;
|
|
||||||
config.inbound[1].sniffingEnabled = sniffingEnabled2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (config.inbound.Count > 1)
|
|
||||||
{
|
|
||||||
config.inbound.RemoveAt(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//日志
|
//日志
|
||||||
config.logEnabled = logEnabled;
|
config.logEnabled = logEnabled;
|
||||||
config.loglevel = loglevel;
|
config.loglevel = loglevel;
|
||||||
@@ -312,7 +275,7 @@ namespace v2rayN.Forms
|
|||||||
|| Utils.IsNullOrEmpty(readBufferSize) || !Utils.IsNumberic(readBufferSize)
|
|| Utils.IsNullOrEmpty(readBufferSize) || !Utils.IsNumberic(readBufferSize)
|
||||||
|| Utils.IsNullOrEmpty(writeBufferSize) || !Utils.IsNumberic(writeBufferSize))
|
|| Utils.IsNullOrEmpty(writeBufferSize) || !Utils.IsNumberic(writeBufferSize))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("FillKcpParameters"));
|
UI.Show(ResUI.FillKcpParameters);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
config.kcpItem.mtu = Utils.ToInt(mtu);
|
config.kcpItem.mtu = Utils.ToInt(mtu);
|
||||||
@@ -335,8 +298,6 @@ namespace v2rayN.Forms
|
|||||||
//开机自动启动
|
//开机自动启动
|
||||||
Utils.SetAutoRun(chkAutoRun.Checked);
|
Utils.SetAutoRun(chkAutoRun.Checked);
|
||||||
|
|
||||||
config.allowLANConn = chkAllowLANConn.Checked;
|
|
||||||
|
|
||||||
bool lastEnableStatistics = config.enableStatistics;
|
bool lastEnableStatistics = config.enableStatistics;
|
||||||
config.enableStatistics = chkEnableStatistics.Checked;
|
config.enableStatistics = chkEnableStatistics.Checked;
|
||||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||||
@@ -366,17 +327,6 @@ namespace v2rayN.Forms
|
|||||||
this.DialogResult = DialogResult.Cancel;
|
this.DialogResult = DialogResult.Cancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkAllowIn2_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
chkAllowIn2State();
|
|
||||||
}
|
|
||||||
private void chkAllowIn2State()
|
|
||||||
{
|
|
||||||
bool blAllow2 = chkAllowIn2.Checked;
|
|
||||||
txtlocalPort2.Enabled =
|
|
||||||
cmbprotocol2.Enabled =
|
|
||||||
chkudpEnabled2.Enabled = blAllow2;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -387,5 +337,6 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
Process.Start(Utils.GetPath("EnableLoopback.exe"));
|
Process.Start(Utils.GetPath("EnableLoopback.exe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -121,17 +121,47 @@
|
|||||||
<value>取消(&C)</value>
|
<value>取消(&C)</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<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="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>648, 437</value>
|
||||||
|
</data>
|
||||||
|
<data name="label16.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>53, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label16.Text" xml:space="preserve">
|
||||||
|
<value>认证密码</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>219, 65</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>65, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Text" xml:space="preserve">
|
||||||
|
<value>认证用户名</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkdefAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>15, 208</value>
|
||||||
|
</data>
|
||||||
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>324, 16</value>
|
<value>324, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
|
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
|
||||||
<value>传输层安全选tls时,默认跳过证书验证(allowInsecure)</value>
|
<value>传输层安全选tls时,默认跳过证书验证(allowInsecure)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>96, 16</value>
|
<value>144, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chksniffingEnabled2.Text" xml:space="preserve">
|
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
||||||
<value>开启流量探测</value>
|
<value>允许来自局域网的连接</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chksniffingEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chksniffingEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>96, 16</value>
|
<value>96, 16</value>
|
||||||
@@ -139,29 +169,17 @@
|
|||||||
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
||||||
<value>开启流量探测</value>
|
<value>开启流量探测</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="chkmuxEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>15, 145</value>
|
||||||
|
</data>
|
||||||
<data name="chkmuxEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkmuxEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>114, 16</value>
|
<value>114, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkmuxEnabled.Text" xml:space="preserve">
|
<data name="chkmuxEnabled.Text" xml:space="preserve">
|
||||||
<value>开启Mux多路复用</value>
|
<value>开启Mux多路复用</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkAllowIn2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>102, 16</value>
|
<value>219, 29</value>
|
||||||
</data>
|
|
||||||
<data name="chkAllowIn2.Text" xml:space="preserve">
|
|
||||||
<value>本地监听端口2</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkudpEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>66, 16</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkudpEnabled2.Text" xml:space="preserve">
|
|
||||||
<value>开启UDP</value>
|
|
||||||
</data>
|
|
||||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>29, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="label3.Text" xml:space="preserve">
|
|
||||||
<value>协议</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>29, 12</value>
|
<value>29, 12</value>
|
||||||
@@ -175,12 +193,21 @@
|
|||||||
<data name="chkudpEnabled.Text" xml:space="preserve">
|
<data name="chkudpEnabled.Text" xml:space="preserve">
|
||||||
<value>开启UDP</value>
|
<value>开启UDP</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="chklogEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>15, 176</value>
|
||||||
|
</data>
|
||||||
<data name="chklogEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chklogEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>156, 16</value>
|
<value>156, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chklogEnabled.Text" xml:space="preserve">
|
<data name="chklogEnabled.Text" xml:space="preserve">
|
||||||
<value>记录本地日志(默认关闭)</value>
|
<value>记录本地日志(默认关闭)</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="cmbloglevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>257, 174</value>
|
||||||
|
</data>
|
||||||
|
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>193, 178</value>
|
||||||
|
</data>
|
||||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>53, 12</value>
|
<value>53, 12</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -193,14 +220,11 @@
|
|||||||
<data name="label2.Text" xml:space="preserve">
|
<data name="label2.Text" xml:space="preserve">
|
||||||
<value>本地监听端口</value>
|
<value>本地监听端口</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>648, 437</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>654, 443</value>
|
<value>654, 443</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage1.Text" xml:space="preserve">
|
<data name="tabPage2.Text" xml:space="preserve">
|
||||||
<value> Core:基础设置 </value>
|
<value> Core:DNS设置 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>161, 12</value>
|
<value>161, 12</value>
|
||||||
@@ -214,18 +238,18 @@
|
|||||||
<data name="label14.Text" xml:space="preserve">
|
<data name="label14.Text" xml:space="preserve">
|
||||||
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||||
</data>
|
</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">
|
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>654, 443</value>
|
<value>654, 443</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage6.Text" xml:space="preserve">
|
<data name="tabPage6.Text" xml:space="preserve">
|
||||||
<value> Core:KCP设置 </value>
|
<value> Core:KCP设置 </value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>654, 443</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage7.Text" xml:space="preserve">
|
||||||
|
<value> v2rayN设置 </value>
|
||||||
|
</data>
|
||||||
<data name="chkEnableSecurityProtocolTls13.Text" xml:space="preserve">
|
<data name="chkEnableSecurityProtocolTls13.Text" xml:space="preserve">
|
||||||
<value>启用安全协议TLS v1.3 (订阅/检查更新/测速)</value>
|
<value>启用安全协议TLS v1.3 (订阅/检查更新/测速)</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -239,13 +263,13 @@
|
|||||||
<value>解除Windows10 UWP应用回环代理限制</value>
|
<value>解除Windows10 UWP应用回环代理限制</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>255, 156</value>
|
<value>274, 134</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>191, 12</value>
|
<value>227, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label15.Text" xml:space="preserve">
|
<data name="label15.Text" xml:space="preserve">
|
||||||
<value>自动更新Geo文件的间隔(单位小时)</value>
|
<value>自动更新订阅和Geo文件的间隔(单位小时)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>150, 16</value>
|
<value>150, 16</value>
|
||||||
@@ -253,12 +277,6 @@
|
|||||||
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
|
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
|
||||||
<value>更新Core时忽略Geo文件</value>
|
<value>更新Core时忽略Geo文件</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>53, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="label4.Text" xml:space="preserve">
|
|
||||||
<value>Core类型</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>156, 16</value>
|
<value>156, 16</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -277,23 +295,29 @@
|
|||||||
<data name="chkEnableStatistics.Text" xml:space="preserve">
|
<data name="chkEnableStatistics.Text" xml:space="preserve">
|
||||||
<value>启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)</value>
|
<value>启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>144, 16</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
|
||||||
<value>允许来自局域网的连接</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>180, 16</value>
|
<value>180, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkAutoRun.Text" xml:space="preserve">
|
<data name="chkAutoRun.Text" xml:space="preserve">
|
||||||
<value>开机自动启动(可能会不成功)</value>
|
<value>开机自动启动(可能会不成功)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tabPageCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>654, 443</value>
|
<value>654, 443</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage7.Text" xml:space="preserve">
|
<data name="tabPageCoreType.Text" xml:space="preserve">
|
||||||
<value> v2rayN设置 </value>
|
<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>
|
||||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>95, 12</value>
|
<value>95, 12</value>
|
||||||
@@ -307,26 +331,17 @@
|
|||||||
<data name="label12.Text" xml:space="preserve">
|
<data name="label12.Text" xml:space="preserve">
|
||||||
<value>对于下列字符开头的地址不使用代理服务器:</value>
|
<value>对于下列字符开头的地址不使用代理服务器:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>654, 443</value>
|
<value>0, 479</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox2.Text" xml:space="preserve">
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>例外</value>
|
<value>662, 60</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>
|
||||||
<data name="btnOK.Text" xml:space="preserve">
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
<value>确定(&O)</value>
|
<value>确定(&O)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>0, 479</value>
|
<value>662, 10</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>662, 539</value>
|
<value>662, 539</value>
|
||||||
@@ -334,7 +349,4 @@
|
|||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="$this.Text" xml:space="preserve">
|
||||||
<value>参数设置</value>
|
<value>参数设置</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPageCoreType.Text" xml:space="preserve">
|
|
||||||
<value> Core类型设置 </value>
|
|
||||||
</data>
|
|
||||||
</root>
|
</root>
|
||||||
@@ -4,6 +4,7 @@ using System.Windows.Forms;
|
|||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -47,8 +48,8 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
rulesItem.inboundTag = inboundTag;
|
rulesItem.inboundTag = inboundTag;
|
||||||
rulesItem.outboundTag = cmbOutboundTag.Text;
|
rulesItem.outboundTag = cmbOutboundTag.Text;
|
||||||
rulesItem.domain = Utils.String2List(txtDomain.Text);
|
rulesItem.domain = Utils.String2ListSorted(txtDomain.Text);
|
||||||
rulesItem.ip = Utils.String2List(txtIP.Text);
|
rulesItem.ip = Utils.String2ListSorted(txtIP.Text);
|
||||||
|
|
||||||
var protocol = new List<string>();
|
var protocol = new List<string>();
|
||||||
for (int i = 0; i < clbProtocol.Items.Count; i++)
|
for (int i = 0; i < clbProtocol.Items.Count; i++)
|
||||||
@@ -125,7 +126,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
if (!hasRule)
|
if (!hasRule)
|
||||||
{
|
{
|
||||||
UI.ShowWarning(string.Format(UIRes.I18N("RoutingRuleDetailRequiredTips"), "Port/Protocol/Domain/IP"));
|
UI.ShowWarning(string.Format(ResUI.RoutingRuleDetailRequiredTips, "Port/Protocol/Domain/IP"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.DialogResult = DialogResult.OK;
|
this.DialogResult = DialogResult.OK;
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -114,7 +116,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,7 +156,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (lvRoutings.SelectedIndices.Count <= 0)
|
if (lvRoutings.SelectedIndices.Count <= 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectRules"));
|
UI.Show(ResUI.PleaseSelectRules);
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +200,7 @@ namespace v2rayN.Forms
|
|||||||
int index = GetLvSelectedIndex();
|
int index = GetLvSelectedIndex();
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectRules"));
|
UI.Show(ResUI.PleaseSelectRules);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ConfigHandler.MoveRoutingRule(ref routingItem, index, eMove) == 0)
|
if (ConfigHandler.MoveRoutingRule(ref routingItem, index, eMove) == 0)
|
||||||
@@ -232,7 +234,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (UI.ShowYesNo(UIRes.I18N("RemoveRules")) == DialogResult.No)
|
if (UI.ShowYesNo(ResUI.RemoveRules) == DialogResult.No)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -253,7 +255,7 @@ namespace v2rayN.Forms
|
|||||||
if (lst.Count > 0)
|
if (lst.Count > 0)
|
||||||
{
|
{
|
||||||
Utils.SetClipboardData(Utils.ToJson(lst));
|
Utils.SetClipboardData(Utils.ToJson(lst));
|
||||||
//UI.Show(UIRes.I18N("OperationSuccess"));
|
//UI.Show(ResUI.OperationSuccess"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -323,7 +325,7 @@ namespace v2rayN.Forms
|
|||||||
if (AddBatchRoutingRules(ref routingItem, result) == 0)
|
if (AddBatchRoutingRules(ref routingItem, result) == 0)
|
||||||
{
|
{
|
||||||
RefreshRoutingsView();
|
RefreshRoutingsView();
|
||||||
UI.Show(UIRes.I18N("OperationSuccess"));
|
UI.Show(ResUI.OperationSuccess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +335,7 @@ namespace v2rayN.Forms
|
|||||||
if (AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
|
if (AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
|
||||||
{
|
{
|
||||||
RefreshRoutingsView();
|
RefreshRoutingsView();
|
||||||
UI.Show(UIRes.I18N("OperationSuccess"));
|
UI.Show(ResUI.OperationSuccess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
|
private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
|
||||||
@@ -341,29 +343,31 @@ namespace v2rayN.Forms
|
|||||||
var url = txtUrl.Text.Trim();
|
var url = txtUrl.Text.Trim();
|
||||||
if (Utils.IsNullOrEmpty(url))
|
if (Utils.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("MsgNeedUrl"));
|
UI.Show(ResUI.MsgNeedUrl);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DownloadHandle downloadHandle = new DownloadHandle();
|
|
||||||
string clipboardData = downloadHandle.WebDownloadStringSync(url);
|
Task.Run(async () =>
|
||||||
if (AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
|
|
||||||
{
|
{
|
||||||
RefreshRoutingsView();
|
DownloadHandle downloadHandle = new DownloadHandle();
|
||||||
UI.Show(UIRes.I18N("OperationSuccess"));
|
string result = await downloadHandle.DownloadStringAsync(url, false, "");
|
||||||
}
|
if (AddBatchRoutingRules(ref routingItem, result) == 0)
|
||||||
|
{
|
||||||
|
RefreshRoutingsView();
|
||||||
|
UI.Show(ResUI.OperationSuccess);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
private int AddBatchRoutingRules(ref RoutingItem routingItem, string clipboardData)
|
private int AddBatchRoutingRules(ref RoutingItem routingItem, string clipboardData)
|
||||||
{
|
{
|
||||||
bool blReplace = false;
|
bool blReplace = false;
|
||||||
if (UI.ShowYesNo(UIRes.I18N("AddBatchRoutingRulesYesNo")) == DialogResult.No)
|
if (UI.ShowYesNo(ResUI.AddBatchRoutingRulesYesNo) == DialogResult.No)
|
||||||
{
|
{
|
||||||
blReplace = true;
|
blReplace = true;
|
||||||
}
|
}
|
||||||
return ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData, blReplace);
|
return ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData, blReplace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using System.Windows.Forms;
|
|||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -61,7 +62,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,10 +145,10 @@ namespace v2rayN.Forms
|
|||||||
lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
|
lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
|
||||||
|
|
||||||
lvRoutings.Columns.Add("", 30);
|
lvRoutings.Columns.Add("", 30);
|
||||||
lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 200);
|
lvRoutings.Columns.Add(ResUI.LvAlias, 200);
|
||||||
lvRoutings.Columns.Add(UIRes.I18N("LvCount"), 60);
|
lvRoutings.Columns.Add(ResUI.LvCount, 60);
|
||||||
lvRoutings.Columns.Add(UIRes.I18N("LvUrl"), 240);
|
lvRoutings.Columns.Add(ResUI.LvUrl, 240);
|
||||||
lvRoutings.Columns.Add(UIRes.I18N("LvCustomIcon"), 240);
|
lvRoutings.Columns.Add(ResUI.LvCustomIcon, 240);
|
||||||
|
|
||||||
lvRoutings.EndUpdate();
|
lvRoutings.EndUpdate();
|
||||||
}
|
}
|
||||||
@@ -211,7 +212,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (lvRoutings.SelectedIndices.Count <= 0)
|
if (lvRoutings.SelectedIndices.Count <= 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectRules"));
|
UI.Show(ResUI.PleaseSelectRules);
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +260,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (UI.ShowYesNo(UIRes.I18N("RemoveRules")) == DialogResult.No)
|
if (UI.ShowYesNo(ResUI.RemoveRules) == DialogResult.No)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -282,7 +283,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("PleaseSelectServer"));
|
UI.Show(ResUI.PleaseSelectServer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (ConfigHandler.SetDefaultRouting(ref config, index) == 0)
|
if (ConfigHandler.SetDefaultRouting(ref config, index) == 0)
|
||||||
@@ -301,7 +302,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
txtBlockDomain.Text = "geosite:category-ads-all";
|
txtBlockDomain.Text = "geosite:category-ads-all";
|
||||||
|
|
||||||
UI.Show(UIRes.I18N("OperationSuccess"));
|
UI.Show(ResUI.OperationSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void menuImportAdvancedRules_Click(object sender, EventArgs e)
|
private void menuImportAdvancedRules_Click(object sender, EventArgs e)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -156,34 +157,34 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
if (network.Equals(Global.DefaultNetwork))
|
if (network.Equals(Global.DefaultNetwork))
|
||||||
{
|
{
|
||||||
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip1");
|
tipRequestHost.Text = ResUI.TransportRequestHostTip1;
|
||||||
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip1");
|
tipHeaderType.Text = ResUI.TransportHeaderTypeTip1;
|
||||||
}
|
}
|
||||||
else if (network.Equals("kcp"))
|
else if (network.Equals("kcp"))
|
||||||
{
|
{
|
||||||
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip2");
|
tipHeaderType.Text = ResUI.TransportHeaderTypeTip2;
|
||||||
tipPath.Text = UIRes.I18N("TransportPathTip5");
|
tipPath.Text = ResUI.TransportPathTip5;
|
||||||
}
|
}
|
||||||
else if (network.Equals("ws"))
|
else if (network.Equals("ws"))
|
||||||
{
|
{
|
||||||
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip2");
|
tipRequestHost.Text = ResUI.TransportRequestHostTip2;
|
||||||
tipPath.Text = UIRes.I18N("TransportPathTip1");
|
tipPath.Text = ResUI.TransportPathTip1;
|
||||||
}
|
}
|
||||||
else if (network.Equals("h2"))
|
else if (network.Equals("h2"))
|
||||||
{
|
{
|
||||||
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip3");
|
tipRequestHost.Text = ResUI.TransportRequestHostTip3;
|
||||||
tipPath.Text = UIRes.I18N("TransportPathTip2");
|
tipPath.Text = ResUI.TransportPathTip2;
|
||||||
}
|
}
|
||||||
else if (network.Equals("quic"))
|
else if (network.Equals("quic"))
|
||||||
{
|
{
|
||||||
tipRequestHost.Text = UIRes.I18N("TransportRequestHostTip4");
|
tipRequestHost.Text = ResUI.TransportRequestHostTip4;
|
||||||
tipPath.Text = UIRes.I18N("TransportPathTip3");
|
tipPath.Text = ResUI.TransportPathTip3;
|
||||||
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip3");
|
tipHeaderType.Text = ResUI.TransportHeaderTypeTip3;
|
||||||
}
|
}
|
||||||
else if (network.Equals("grpc"))
|
else if (network.Equals("grpc"))
|
||||||
{
|
{
|
||||||
tipPath.Text = UIRes.I18N("TransportPathTip4");
|
tipPath.Text = ResUI.TransportPathTip4;
|
||||||
tipHeaderType.Text = UIRes.I18N("TransportHeaderTypeTip4");
|
tipHeaderType.Text = ResUI.TransportHeaderTypeTip4;
|
||||||
labHeaderType.Visible = false;
|
labHeaderType.Visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -74,7 +75,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ namespace v2rayN
|
|||||||
|
|
||||||
public const string InboundSocks = "socks";
|
public const string InboundSocks = "socks";
|
||||||
public const string InboundHttp = "http";
|
public const string InboundHttp = "http";
|
||||||
|
public const string InboundHttp2 = "http2";
|
||||||
public const string Loopback = "127.0.0.1";
|
public const string Loopback = "127.0.0.1";
|
||||||
public const string InboundAPITagName = "api";
|
public const string InboundAPITagName = "api";
|
||||||
public const string InboundAPIProtocal = "dokodemo-door";
|
public const string InboundAPIProtocal = "dokodemo-door";
|
||||||
@@ -219,31 +220,6 @@ namespace v2rayN
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否开启全局代理(http)
|
|
||||||
/// </summary>
|
|
||||||
public static bool sysAgent
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// socks端口
|
|
||||||
/// </summary>
|
|
||||||
public static int socksPort
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// http端口
|
|
||||||
/// </summary>
|
|
||||||
public static int httpPort
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace v2rayN.Handler
|
|||||||
class ConfigHandler
|
class ConfigHandler
|
||||||
{
|
{
|
||||||
private static string configRes = Global.ConfigFileName;
|
private static string configRes = Global.ConfigFileName;
|
||||||
private static object objLock = new object();
|
private static readonly object objLock = new object();
|
||||||
|
|
||||||
#region ConfigHandler
|
#region ConfigHandler
|
||||||
|
|
||||||
@@ -747,6 +747,10 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
vmessItem.indexId = Utils.GetGUID(false);
|
vmessItem.indexId = Utils.GetGUID(false);
|
||||||
}
|
}
|
||||||
|
else if (vmessItem.indexId == config.indexId)
|
||||||
|
{
|
||||||
|
Global.reloadV2ray = true;
|
||||||
|
}
|
||||||
if (!config.vmess.Exists(it => it.indexId == vmessItem.indexId))
|
if (!config.vmess.Exists(it => it.indexId == vmessItem.indexId))
|
||||||
{
|
{
|
||||||
var maxSort = config.vmess.Any() ? config.vmess.Max(t => t.sort) : 0;
|
var maxSort = config.vmess.Any() ? config.vmess.Max(t => t.sort) : 0;
|
||||||
@@ -755,11 +759,6 @@ namespace v2rayN.Handler
|
|||||||
config.vmess.Add(vmessItem);
|
config.vmess.Add(vmessItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (config.vmess.Count == 1)
|
|
||||||
//{
|
|
||||||
// config.indexId = config.vmess[0].indexId;
|
|
||||||
// Global.reloadV2ray = true;
|
|
||||||
//}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -940,10 +939,10 @@ namespace v2rayN.Handler
|
|||||||
vmessItem.coreType = ECoreType.clash;
|
vmessItem.coreType = ECoreType.clash;
|
||||||
vmessItem.address = fileName;
|
vmessItem.address = fileName;
|
||||||
vmessItem.remarks = "clash_custom";
|
vmessItem.remarks = "clash_custom";
|
||||||
}
|
}
|
||||||
//Is Other configuration
|
//Is Other configuration
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.txt");
|
var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.txt");
|
||||||
File.WriteAllText(fileName, clipboardData);
|
File.WriteAllText(fileName, clipboardData);
|
||||||
|
|
||||||
@@ -1160,6 +1159,8 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
config.uiItem.mainLvColWidth.Add(name, width);
|
config.uiItem.mainLvColWidth.Add(name, width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
public static int GetformMainLvColWidth(ref Config config, string name, int width)
|
public static int GetformMainLvColWidth(ref Config config, string name, int width)
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -28,97 +34,71 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int progressPercentage = -1;
|
public async Task<int> DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
|
||||||
private long totalBytesToReceive = 0;
|
|
||||||
private DateTime totalDatetime = new DateTime();
|
|
||||||
private int DownloadTimeout = -1;
|
|
||||||
|
|
||||||
public WebClientEx DownloadFileAsync(string url, WebProxy webProxy, int downloadTimeout)
|
|
||||||
{
|
{
|
||||||
WebClientEx ws = new WebClientEx();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
|
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, ResUI.Speedtesting));
|
||||||
|
|
||||||
progressPercentage = -1;
|
var client = new HttpClient(new WebRequestHandler()
|
||||||
totalBytesToReceive = 0;
|
|
||||||
|
|
||||||
//WebClientEx ws = new WebClientEx();
|
|
||||||
DownloadTimeout = downloadTimeout;
|
|
||||||
if (webProxy != null)
|
|
||||||
{
|
{
|
||||||
ws.Proxy = webProxy;// new WebProxy(Global.Loopback, Global.httpPort);
|
Proxy = webProxy
|
||||||
}
|
});
|
||||||
|
|
||||||
ws.DownloadFileCompleted += ws_DownloadFileCompleted;
|
var progress = new Progress<double>();
|
||||||
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
|
progress.ProgressChanged += (sender, value) =>
|
||||||
ws.DownloadFileAsync(new Uri(url), Utils.GetPath(Utils.GetDownloadFileName(url)));
|
{
|
||||||
|
if (UpdateCompleted != null)
|
||||||
|
{
|
||||||
|
string msg = string.Format("{0} M/s", value.ToString("#0.0")).PadLeft(9, ' ');
|
||||||
|
UpdateCompleted(this, new ResultEventArgs(false, msg));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var cancellationToken = new CancellationTokenSource();
|
||||||
|
cancellationToken.CancelAfter(downloadTimeout * 1000);
|
||||||
|
await HttpClientHelper.GetInstance().DownloadDataAsync4Speed(client,
|
||||||
|
url,
|
||||||
|
progress,
|
||||||
|
cancellationToken.Token);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
//Utils.SaveLog(ex.Message, ex);
|
||||||
|
|
||||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||||
}
|
}
|
||||||
return ws;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
|
public void DownloadFileAsync(string url, bool blProxy, int downloadTimeout)
|
||||||
{
|
|
||||||
if (UpdateCompleted != null)
|
|
||||||
{
|
|
||||||
if (totalBytesToReceive == 0)
|
|
||||||
{
|
|
||||||
totalDatetime = DateTime.Now;
|
|
||||||
totalBytesToReceive = e.BytesReceived;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
totalBytesToReceive = e.BytesReceived;
|
|
||||||
|
|
||||||
if (DownloadTimeout != -1)
|
|
||||||
{
|
|
||||||
if ((DateTime.Now - totalDatetime).TotalSeconds > DownloadTimeout)
|
|
||||||
{
|
|
||||||
((WebClientEx)sender).CancelAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (progressPercentage != e.ProgressPercentage && e.ProgressPercentage % 10 == 0)
|
|
||||||
{
|
|
||||||
progressPercentage = e.ProgressPercentage;
|
|
||||||
string msg = string.Format("...{0}%", e.ProgressPercentage);
|
|
||||||
UpdateCompleted(this, new ResultEventArgs(false, msg));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void ws_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (UpdateCompleted != null)
|
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||||
{
|
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, ResUI.Downloading));
|
||||||
if (e.Cancelled)
|
|
||||||
{
|
|
||||||
((WebClientEx)sender).Dispose();
|
|
||||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
|
||||||
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
|
|
||||||
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.Error == null
|
var client = new HttpClient(new WebRequestHandler()
|
||||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
{
|
||||||
|
Proxy = GetWebProxy(blProxy)
|
||||||
|
});
|
||||||
|
|
||||||
|
var progress = new Progress<double>();
|
||||||
|
progress.ProgressChanged += (sender, value) =>
|
||||||
|
{
|
||||||
|
if (UpdateCompleted != null)
|
||||||
{
|
{
|
||||||
((WebClientEx)sender).Dispose();
|
string msg = string.Format("...{0}%", value);
|
||||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
UpdateCompleted(this, new ResultEventArgs(value > 100 ? true : false, msg));
|
||||||
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
|
|
||||||
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
|
|
||||||
}
|
}
|
||||||
else
|
};
|
||||||
{
|
|
||||||
throw e.Error;
|
var cancellationToken = new CancellationTokenSource();
|
||||||
}
|
_ = HttpClientHelper.GetInstance().DownloadFileAsync(client,
|
||||||
}
|
url,
|
||||||
|
Utils.GetPath(Utils.GetDownloadFileName(url)),
|
||||||
|
progress,
|
||||||
|
cancellationToken.Token);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -128,115 +108,143 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<string> UrlRedirectAsync(string url, bool blProxy)
|
||||||
|
{
|
||||||
|
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||||
|
WebRequestHandler webRequestHandler = new WebRequestHandler
|
||||||
|
{
|
||||||
|
AllowAutoRedirect = false,
|
||||||
|
Proxy = GetWebProxy(blProxy)
|
||||||
|
};
|
||||||
|
HttpClient client = new HttpClient(webRequestHandler);
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync(url);
|
||||||
|
if (response.StatusCode.ToString() == "Redirect")
|
||||||
|
{
|
||||||
|
return response.Headers.Location.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Utils.SaveLog("StatusCode error: " + url);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DownloadString
|
/// DownloadString
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="url"></param>
|
/// <param name="url"></param>
|
||||||
public void WebDownloadString(string url, WebProxy webProxy, string userAgent)
|
public async Task<string> DownloadStringAsync(string url, bool blProxy, string userAgent)
|
||||||
{
|
{
|
||||||
string source = string.Empty;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||||
|
var client = new HttpClient(new WebRequestHandler()
|
||||||
WebClientEx ws = new WebClientEx();
|
|
||||||
ws.Encoding = Encoding.UTF8;
|
|
||||||
if (webProxy != null)
|
|
||||||
{
|
{
|
||||||
ws.Proxy = webProxy;
|
Proxy = GetWebProxy(blProxy)
|
||||||
}
|
});
|
||||||
|
|
||||||
if (Utils.IsNullOrEmpty(userAgent))
|
if (Utils.IsNullOrEmpty(userAgent))
|
||||||
{
|
{
|
||||||
userAgent = $"{Utils.GetVersion(false)}";
|
userAgent = $"{Utils.GetVersion(false)}";
|
||||||
}
|
}
|
||||||
ws.Headers.Add("user-agent", userAgent);
|
client.DefaultRequestHeaders.UserAgent.TryParseAdd(userAgent);
|
||||||
|
|
||||||
Uri uri = new Uri(url);
|
Uri uri = new Uri(url);
|
||||||
//Authorization Header
|
//Authorization Header
|
||||||
if (!Utils.IsNullOrEmpty(uri.UserInfo))
|
if (!Utils.IsNullOrEmpty(uri.UserInfo))
|
||||||
{
|
{
|
||||||
ws.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Utils.Base64Encode(uri.UserInfo));
|
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Utils.Base64Encode(uri.UserInfo));
|
||||||
}
|
}
|
||||||
|
var result = await HttpClientHelper.GetInstance().GetAsync(client, url);
|
||||||
ws.DownloadStringCompleted += Ws_DownloadStringCompleted;
|
return result;
|
||||||
ws.DownloadStringAsync(uri);
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
Utils.SaveLog(ex.Message, ex);
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Ws_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
|
public int RunAvailabilityCheck(WebProxy webProxy)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (e.Error == null
|
if (webProxy == null)
|
||||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
|
||||||
{
|
{
|
||||||
string source = e.Result;
|
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2);
|
||||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(true, source));
|
webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
Task<int> t = Task.Run(() =>
|
||||||
{
|
{
|
||||||
throw e.Error;
|
try
|
||||||
}
|
{
|
||||||
|
string status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out int responseTime);
|
||||||
|
bool noError = Utils.IsNullOrEmpty(status);
|
||||||
|
return noError ? responseTime : -1;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Utils.SaveLog(ex.Message, ex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return t.Result;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
Utils.SaveLog(ex.Message, ex);
|
||||||
|
return -1;
|
||||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string WebDownloadStringSync(string url)
|
public string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
||||||
{
|
{
|
||||||
string source = string.Empty;
|
string msg = string.Empty;
|
||||||
|
responseTime = -1;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||||
|
myHttpWebRequest.Timeout = 5000;
|
||||||
|
myHttpWebRequest.Proxy = webProxy;
|
||||||
|
|
||||||
WebClientEx ws = new WebClientEx();
|
Stopwatch timer = new Stopwatch();
|
||||||
ws.Encoding = Encoding.UTF8;
|
timer.Start();
|
||||||
return ws.DownloadString(new Uri(url));
|
|
||||||
|
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
|
||||||
|
if (myHttpWebResponse.StatusCode != HttpStatusCode.OK
|
||||||
|
&& myHttpWebResponse.StatusCode != HttpStatusCode.NoContent)
|
||||||
|
{
|
||||||
|
msg = myHttpWebResponse.StatusDescription;
|
||||||
|
}
|
||||||
|
timer.Stop();
|
||||||
|
responseTime = timer.Elapsed.Milliseconds;
|
||||||
|
|
||||||
|
myHttpWebResponse.Close();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
Utils.SaveLog(ex.Message, ex);
|
||||||
return string.Empty;
|
msg = ex.Message;
|
||||||
}
|
}
|
||||||
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WebClientEx DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
|
private WebProxy GetWebProxy(bool blProxy)
|
||||||
{
|
{
|
||||||
WebClientEx ws = new WebClientEx();
|
if (!blProxy)
|
||||||
try
|
|
||||||
{
|
{
|
||||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
return null;
|
||||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
|
|
||||||
|
|
||||||
progressPercentage = -1;
|
|
||||||
totalBytesToReceive = 0;
|
|
||||||
|
|
||||||
DownloadTimeout = downloadTimeout;
|
|
||||||
if (webProxy != null)
|
|
||||||
{
|
|
||||||
ws.Proxy = webProxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
|
|
||||||
ws.DownloadDataCompleted += ws_DownloadFileCompleted;
|
|
||||||
ws.DownloadDataAsync(new Uri(url));
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2);
|
||||||
|
var webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||||
|
if (RunAvailabilityCheck(webProxy) > 0)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
return webProxy;
|
||||||
|
|
||||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
|
||||||
}
|
}
|
||||||
return ws;
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,8 +71,8 @@ namespace v2rayN.Handler
|
|||||||
coreType = ECoreType.v2fly,
|
coreType = ECoreType.v2fly,
|
||||||
coreExes = new List<string> { "wv2ray", "v2ray" },
|
coreExes = new List<string> { "wv2ray", "v2ray" },
|
||||||
arguments = "",
|
arguments = "",
|
||||||
coreUrl = Global.v2flyCoreUrl
|
coreUrl = Global.v2flyCoreUrl,
|
||||||
|
match = "V2Ray"
|
||||||
});
|
});
|
||||||
|
|
||||||
coreInfos.Add(new CoreInfo
|
coreInfos.Add(new CoreInfo
|
||||||
@@ -80,7 +80,8 @@ namespace v2rayN.Handler
|
|||||||
coreType = ECoreType.Xray,
|
coreType = ECoreType.Xray,
|
||||||
coreExes = new List<string> { "xray" },
|
coreExes = new List<string> { "xray" },
|
||||||
arguments = "",
|
arguments = "",
|
||||||
coreUrl = Global.xrayCoreUrl
|
coreUrl = Global.xrayCoreUrl,
|
||||||
|
match = "Xray"
|
||||||
});
|
});
|
||||||
|
|
||||||
coreInfos.Add(new CoreInfo
|
coreInfos.Add(new CoreInfo
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -88,7 +89,7 @@ namespace v2rayN.Handler
|
|||||||
if (item.configType != EConfigType.Vmess
|
if (item.configType != EConfigType.Vmess
|
||||||
&& item.configType != EConfigType.VLESS)
|
&& item.configType != EConfigType.VLESS)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("NonVmessService"));
|
UI.Show(ResUI.NonVmessService);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +116,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(string.Format(UIRes.I18N("SaveClientConfigurationIn"), fileName));
|
UI.ShowWarning(string.Format(ResUI.SaveClientConfigurationIn, fileName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +129,7 @@ namespace v2rayN.Handler
|
|||||||
if (item.configType != EConfigType.Vmess
|
if (item.configType != EConfigType.Vmess
|
||||||
&& item.configType != EConfigType.VLESS)
|
&& item.configType != EConfigType.VLESS)
|
||||||
{
|
{
|
||||||
UI.Show(UIRes.I18N("NonVmessService"));
|
UI.Show(ResUI.NonVmessService);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,7 +156,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(string.Format(UIRes.I18N("SaveServerConfigurationIn"), fileName));
|
UI.ShowWarning(string.Format(ResUI.SaveServerConfigurationIn, fileName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,11 +192,11 @@ namespace v2rayN.Handler
|
|||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
UI.Show(UIRes.I18N("OperationSuccess"));
|
UI.Show(ResUI.OperationSuccess);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
UI.ShowWarning(ResUI.OperationFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,6 +218,15 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
Utils.SaveLog("UpdateTaskRun");
|
Utils.SaveLog("UpdateTaskRun");
|
||||||
|
|
||||||
|
updateHandle.UpdateSubscriptionProcess(config, true, (bool success, string msg) =>
|
||||||
|
{
|
||||||
|
update(success, msg);
|
||||||
|
if (success)
|
||||||
|
Utils.SaveLog("subscription" + msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
Thread.Sleep(60000);
|
||||||
|
|
||||||
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
|
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
|
||||||
{
|
{
|
||||||
update(false, msg);
|
update(false, msg);
|
||||||
@@ -224,8 +234,6 @@ namespace v2rayN.Handler
|
|||||||
Utils.SaveLog("geosite" + msg);
|
Utils.SaveLog("geosite" + msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
Thread.Sleep(60000);
|
|
||||||
|
|
||||||
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
|
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
|
||||||
{
|
{
|
||||||
update(false, msg);
|
update(false, msg);
|
||||||
@@ -268,12 +276,12 @@ namespace v2rayN.Handler
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
HotkeyManager.Current.AddOrReplace(((int)item.eGlobalHotkey).ToString(), keys, handler);
|
HotkeyManager.Current.AddOrReplace(((int)item.eGlobalHotkey).ToString(), keys, handler);
|
||||||
var msg = string.Format(UIRes.I18N("RegisterGlobalHotkeySuccessfully"), $"{item.eGlobalHotkey.ToString()} = {keys}");
|
var msg = string.Format(ResUI.RegisterGlobalHotkeySuccessfully, $"{item.eGlobalHotkey.ToString()} = {keys}");
|
||||||
update(false, msg);
|
update(false, msg);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
var msg = string.Format(UIRes.I18N("RegisterGlobalHotkeyFailed"), $"{item.eGlobalHotkey.ToString()} = {keys}", ex.Message);
|
var msg = string.Format(ResUI.RegisterGlobalHotkeyFailed, $"{item.eGlobalHotkey.ToString()} = {keys}", ex.Message);
|
||||||
update(false, msg);
|
update(false, msg);
|
||||||
Utils.SaveLog(msg);
|
Utils.SaveLog(msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Web;
|
using System.Web;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -318,7 +319,7 @@ namespace v2rayN.Handler
|
|||||||
string result = clipboardData.TrimEx();// Utils.GetClipboardData();
|
string result = clipboardData.TrimEx();// Utils.GetClipboardData();
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedReadConfiguration");
|
msg = ResUI.FailedReadConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,7 +339,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else if (result.StartsWith(Global.ssProtocol))
|
else if (result.StartsWith(Global.ssProtocol))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
msg = ResUI.ConfigurationFormatIncorrect;
|
||||||
|
|
||||||
vmessItem = ResolveSSLegacy(result);
|
vmessItem = ResolveSSLegacy(result);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
@@ -358,7 +359,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else if (result.StartsWith(Global.socksProtocol))
|
else if (result.StartsWith(Global.socksProtocol))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
msg = ResUI.ConfigurationFormatIncorrect;
|
||||||
|
|
||||||
vmessItem = ResolveSocksNew(result);
|
vmessItem = ResolveSocksNew(result);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
@@ -378,7 +379,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else if (result.StartsWith(Global.trojanProtocol))
|
else if (result.StartsWith(Global.trojanProtocol))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
msg = ResUI.ConfigurationFormatIncorrect;
|
||||||
|
|
||||||
vmessItem = ResolveTrojan(result);
|
vmessItem = ResolveTrojan(result);
|
||||||
}
|
}
|
||||||
@@ -390,13 +391,13 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("NonvmessOrssProtocol");
|
msg = ResUI.NonvmessOrssProtocol;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("Incorrectconfiguration");
|
msg = ResUI.Incorrectconfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,7 +417,7 @@ namespace v2rayN.Handler
|
|||||||
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
|
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
|
||||||
if (vmessQRCode == null)
|
if (vmessQRCode == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedConversionConfiguration");
|
msg = ResUI.FailedConversionConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,7 +508,7 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
i.address = u.IdnHost;
|
i.address = u.IdnHost;
|
||||||
i.port = u.Port;
|
i.port = u.Port;
|
||||||
i.remarks = Utils.UrlDecode(u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
|
i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||||
var q = HttpUtility.ParseQueryString(u.Query);
|
var q = HttpUtility.ParseQueryString(u.Query);
|
||||||
|
|
||||||
var m = StdVmessUserInfo.Match(u.UserInfo);
|
var m = StdVmessUserInfo.Match(u.UserInfo);
|
||||||
@@ -589,13 +590,13 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
VmessItem server = new VmessItem
|
VmessItem server = new VmessItem
|
||||||
{
|
{
|
||||||
remarks = Utils.UrlDecode(parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped)),
|
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||||
address = parsedUrl.IdnHost,
|
address = parsedUrl.IdnHost,
|
||||||
port = parsedUrl.Port,
|
port = parsedUrl.Port,
|
||||||
};
|
};
|
||||||
|
|
||||||
// parse base64 UserInfo
|
// parse base64 UserInfo
|
||||||
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
|
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.UriEscaped);
|
||||||
string userInfo = Utils.Base64Decode(rawUserInfo);
|
string userInfo = Utils.Base64Decode(rawUserInfo);
|
||||||
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
||||||
if (userInfoParts.Length != 2)
|
if (userInfoParts.Length != 2)
|
||||||
@@ -711,7 +712,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
VmessItem server = new VmessItem
|
VmessItem server = new VmessItem
|
||||||
{
|
{
|
||||||
remarks = Utils.UrlDecode(parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped)),
|
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||||
address = parsedUrl.IdnHost,
|
address = parsedUrl.IdnHost,
|
||||||
port = parsedUrl.Port,
|
port = parsedUrl.Port,
|
||||||
};
|
};
|
||||||
@@ -740,7 +741,7 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
item.address = url.IdnHost;
|
item.address = url.IdnHost;
|
||||||
item.port = url.Port;
|
item.port = url.Port;
|
||||||
item.remarks = Utils.UrlDecode(url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
|
item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||||
item.id = url.UserInfo;
|
item.id = url.UserInfo;
|
||||||
|
|
||||||
var query = HttpUtility.ParseQueryString(url.Query);
|
var query = HttpUtility.ParseQueryString(url.Query);
|
||||||
@@ -760,7 +761,7 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
item.address = url.IdnHost;
|
item.address = url.IdnHost;
|
||||||
item.port = url.Port;
|
item.port = url.Port;
|
||||||
item.remarks = Utils.UrlDecode(url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped));
|
item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||||
item.id = url.UserInfo;
|
item.id = url.UserInfo;
|
||||||
|
|
||||||
var query = HttpUtility.ParseQueryString(url.Query);
|
var query = HttpUtility.ParseQueryString(url.Query);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Net.Sockets;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -16,12 +17,12 @@ namespace v2rayN.Handler
|
|||||||
private List<ServerTestItem> _selecteds;
|
private List<ServerTestItem> _selecteds;
|
||||||
Action<string, string> _updateFunc;
|
Action<string, string> _updateFunc;
|
||||||
|
|
||||||
public SpeedtestHandler(ref Config config)
|
public SpeedtestHandler(Config config)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpeedtestHandler(ref Config config, V2rayHandler v2rayHandler, List<VmessItem> selecteds, ESpeedActionType actionType, Action<string, string> update)
|
public SpeedtestHandler(Config config, V2rayHandler v2rayHandler, List<VmessItem> selecteds, ESpeedActionType actionType, Action<string, string> update)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_v2rayHandler = v2rayHandler;
|
_v2rayHandler = v2rayHandler;
|
||||||
@@ -54,7 +55,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else if (actionType == ESpeedActionType.Speedtest)
|
else if (actionType == ESpeedActionType.Speedtest)
|
||||||
{
|
{
|
||||||
Task.Run(() => RunSpeedTest());
|
Task.Run(() => RunSpeedTestAsync());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
updateFun(it);
|
Task.Run(() => updateFun(it));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -117,10 +118,11 @@ namespace v2rayN.Handler
|
|||||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
{
|
{
|
||||||
_updateFunc(_selecteds[0].indexId, UIRes.I18N("OperationFailed"));
|
_updateFunc(_selecteds[0].indexId, ResUI.OperationFailed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DownloadHandle downloadHandle = new DownloadHandle();
|
||||||
//Thread.Sleep(5000);
|
//Thread.Sleep(5000);
|
||||||
List<Task> tasks = new List<Task>();
|
List<Task> tasks = new List<Task>();
|
||||||
foreach (var it in _selecteds)
|
foreach (var it in _selecteds)
|
||||||
@@ -139,7 +141,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||||
int responseTime = -1;
|
int responseTime = -1;
|
||||||
string status = GetRealPingTime(_config.constItem.speedPingTestUrl, webProxy, out responseTime);
|
string status = downloadHandle.GetRealPingTime(_config.constItem.speedPingTestUrl, webProxy, out responseTime);
|
||||||
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
|
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
|
||||||
|
|
||||||
_config.GetVmessItem(it.indexId)?.SetTestResult(output);
|
_config.GetVmessItem(it.indexId)?.SetTestResult(output);
|
||||||
@@ -164,38 +166,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int RunAvailabilityCheck() // alias: isLive
|
private async Task RunSpeedTestAsync()
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int httpPort = _config.GetLocalPort(Global.InboundHttp);
|
|
||||||
|
|
||||||
Task<int> t = Task.Run(() =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
|
|
||||||
int responseTime = -1;
|
|
||||||
string status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out responseTime);
|
|
||||||
bool noError = Utils.IsNullOrEmpty(status);
|
|
||||||
return noError ? responseTime : -1;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return t.Result;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RunSpeedTest()
|
|
||||||
{
|
{
|
||||||
string testIndexId = string.Empty;
|
string testIndexId = string.Empty;
|
||||||
int pid = -1;
|
int pid = -1;
|
||||||
@@ -203,7 +174,7 @@ namespace v2rayN.Handler
|
|||||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
{
|
{
|
||||||
_updateFunc(_selecteds[0].indexId, UIRes.I18N("OperationFailed"));
|
_updateFunc(_selecteds[0].indexId, ResUI.OperationFailed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +190,7 @@ namespace v2rayN.Handler
|
|||||||
_updateFunc(testIndexId, args.GetException().Message);
|
_updateFunc(testIndexId, args.GetException().Message);
|
||||||
};
|
};
|
||||||
|
|
||||||
var timeout = 10;
|
var timeout = 8;
|
||||||
foreach (var it in _selecteds)
|
foreach (var it in _selecteds)
|
||||||
{
|
{
|
||||||
if (!it.allowTest)
|
if (!it.allowTest)
|
||||||
@@ -234,15 +205,9 @@ namespace v2rayN.Handler
|
|||||||
if (_config.FindIndexId(it.indexId) < 0) continue;
|
if (_config.FindIndexId(it.indexId) < 0) continue;
|
||||||
|
|
||||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||||
var ws = downloadHandle2.DownloadDataAsync(url, webProxy, timeout - 2);
|
await downloadHandle2.DownloadDataAsync(url, webProxy, timeout);
|
||||||
|
|
||||||
Thread.Sleep(1000 * timeout);
|
|
||||||
|
|
||||||
ws.CancelAsync();
|
|
||||||
ws.Dispose();
|
|
||||||
|
|
||||||
Thread.Sleep(1000 * 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,37 +246,6 @@ namespace v2rayN.Handler
|
|||||||
return responseTime;
|
return responseTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
|
||||||
{
|
|
||||||
string msg = string.Empty;
|
|
||||||
responseTime = -1;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
|
||||||
myHttpWebRequest.Timeout = 5000;
|
|
||||||
myHttpWebRequest.Proxy = webProxy;//new WebProxy(Global.Loopback, Global.httpPort);
|
|
||||||
|
|
||||||
Stopwatch timer = new Stopwatch();
|
|
||||||
timer.Start();
|
|
||||||
|
|
||||||
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
|
|
||||||
if (myHttpWebResponse.StatusCode != HttpStatusCode.OK
|
|
||||||
&& myHttpWebResponse.StatusCode != HttpStatusCode.NoContent)
|
|
||||||
{
|
|
||||||
msg = myHttpWebResponse.StatusDescription;
|
|
||||||
}
|
|
||||||
timer.Stop();
|
|
||||||
responseTime = timer.Elapsed.Milliseconds;
|
|
||||||
|
|
||||||
myHttpWebResponse.Close();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
msg = ex.Message;
|
|
||||||
}
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
private string FormatOut(object time, string unit)
|
private string FormatOut(object time, string unit)
|
||||||
{
|
{
|
||||||
if (time.ToString().Equals("-1"))
|
if (time.ToString().Equals("-1"))
|
||||||
|
|||||||
@@ -59,8 +59,7 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Global.httpPort = config.GetLocalPort(Global.InboundHttp);
|
int port = config.GetLocalPort(Global.InboundHttp2);
|
||||||
int port = Global.httpPort;
|
|
||||||
if (port <= 0)
|
if (port <= 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -53,7 +53,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (args.Success)
|
if (args.Success)
|
||||||
{
|
{
|
||||||
_updateFunc(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
|
_updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -93,7 +93,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (args.Success)
|
if (args.Success)
|
||||||
{
|
{
|
||||||
_updateFunc(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayN"));
|
_updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "v2rayN"));
|
||||||
|
|
||||||
url = args.Msg;
|
url = args.Msg;
|
||||||
askToDownload(downloadHandle, url, true);
|
askToDownload(downloadHandle, url, true);
|
||||||
@@ -103,7 +103,7 @@ namespace v2rayN.Handler
|
|||||||
_updateFunc(false, args.Msg);
|
_updateFunc(false, args.Msg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
_updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN"));
|
_updateFunc(false, string.Format(ResUI.MsgStartUpdating, "v2rayN"));
|
||||||
CheckUpdateAsync(ECoreType.v2rayN);
|
CheckUpdateAsync(ECoreType.v2rayN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,8 +122,8 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (args.Success)
|
if (args.Success)
|
||||||
{
|
{
|
||||||
_updateFunc(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully"));
|
_updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully);
|
||||||
_updateFunc(false, UIRes.I18N("MsgUnpacking"));
|
_updateFunc(false, ResUI.MsgUnpacking);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -149,7 +149,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (args.Success)
|
if (args.Success)
|
||||||
{
|
{
|
||||||
_updateFunc(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "Core"));
|
_updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "Core"));
|
||||||
url = args.Msg;
|
url = args.Msg;
|
||||||
askToDownload(downloadHandle, url, true);
|
askToDownload(downloadHandle, url, true);
|
||||||
}
|
}
|
||||||
@@ -158,7 +158,7 @@ namespace v2rayN.Handler
|
|||||||
_updateFunc(false, args.Msg);
|
_updateFunc(false, args.Msg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
_updateFunc(false, string.Format(UIRes.I18N("MsgStartUpdating"), "Core"));
|
_updateFunc(false, string.Format(ResUI.MsgStartUpdating, "Core"));
|
||||||
CheckUpdateAsync(type);
|
CheckUpdateAsync(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,75 +168,57 @@ namespace v2rayN.Handler
|
|||||||
_config = config;
|
_config = config;
|
||||||
_updateFunc = update;
|
_updateFunc = update;
|
||||||
|
|
||||||
_updateFunc(false, UIRes.I18N("MsgUpdateSubscriptionStart"));
|
_updateFunc(false, ResUI.MsgUpdateSubscriptionStart);
|
||||||
|
|
||||||
if (config.subItem == null || config.subItem.Count <= 0)
|
if (config.subItem == null || config.subItem.Count <= 0)
|
||||||
{
|
{
|
||||||
_updateFunc(false, UIRes.I18N("MsgNoValidSubscription"));
|
_updateFunc(false, ResUI.MsgNoValidSubscription);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int k = 1; k <= config.subItem.Count; k++)
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
string id = config.subItem[k - 1].id.TrimEx();
|
foreach (var item in config.subItem)
|
||||||
string url = config.subItem[k - 1].url.TrimEx();
|
|
||||||
string userAgent = config.subItem[k - 1].userAgent.TrimEx();
|
|
||||||
string groupId = config.subItem[k - 1].groupId.TrimEx();
|
|
||||||
string hashCode = $"{k}){config.subItem[k - 1].remarks}->";
|
|
||||||
if (config.subItem[k - 1].enabled == false)
|
|
||||||
{
|
{
|
||||||
continue;
|
if (item.enabled == false)
|
||||||
}
|
|
||||||
if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
|
|
||||||
{
|
|
||||||
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
DownloadHandle downloadHandle3 = new DownloadHandle();
|
|
||||||
downloadHandle3.UpdateCompleted += (sender2, args) =>
|
|
||||||
{
|
|
||||||
if (args.Success)
|
|
||||||
{
|
{
|
||||||
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}");
|
continue;
|
||||||
//string result = Utils.Base64Decode(args.Msg);
|
}
|
||||||
string result = args.Msg;
|
string id = item.id.TrimEx();
|
||||||
if (Utils.IsNullOrEmpty(result))
|
string url = item.url.TrimEx();
|
||||||
{
|
string userAgent = item.userAgent.TrimEx();
|
||||||
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}");
|
string groupId = item.groupId.TrimEx();
|
||||||
return;
|
string hashCode = $"{item.remarks}->";
|
||||||
}
|
if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
//_updateFunc(false, $"{hashCode}{ResUI.MsgNoValidSubscription}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
//ConfigHandler.RemoveServerViaSubid(ref config, id);
|
_updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}");
|
||||||
//_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}");
|
var result = await (new DownloadHandle()).DownloadStringAsync(url, blProxy, userAgent);
|
||||||
// RefreshServers();
|
|
||||||
int ret = ConfigHandler.AddBatchServers(ref config, result, id, groupId);
|
_updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}");
|
||||||
if (ret > 0)
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
// RefreshServers();
|
_updateFunc(false, $"{hashCode}{ResUI.MsgSubscriptionDecodingFailed}");
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}");
|
|
||||||
}
|
|
||||||
_updateFunc(true, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_updateFunc(false, args.Msg);
|
int ret = ConfigHandler.AddBatchServers(ref config, result, id, groupId);
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
_updateFunc(false, $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_updateFunc(false, $"{hashCode}{ResUI.MsgFailedImportSubscription}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
_updateFunc(false, $"-------------------------------------------------------");
|
||||||
downloadHandle3.Error += (sender2, args) =>
|
}
|
||||||
{
|
_updateFunc(true, $"{ResUI.MsgUpdateSubscriptionEnd}");
|
||||||
_updateFunc(false, args.GetException().Message);
|
});
|
||||||
};
|
|
||||||
|
|
||||||
WebProxy webProxy = blProxy ? new WebProxy(Global.Loopback, _config.GetLocalPort(Global.InboundHttp)) : null;
|
|
||||||
downloadHandle3.WebDownloadString(url, webProxy, userAgent);
|
|
||||||
|
|
||||||
_updateFunc(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -255,7 +237,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (args.Success)
|
if (args.Success)
|
||||||
{
|
{
|
||||||
_updateFunc(false, string.Format(UIRes.I18N("MsgDownloadGeoFileSuccessfully"), geoName));
|
_updateFunc(false, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, geoName));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -268,8 +250,8 @@ namespace v2rayN.Handler
|
|||||||
File.Delete(targetPath);
|
File.Delete(targetPath);
|
||||||
}
|
}
|
||||||
File.Move(fileName, targetPath);
|
File.Move(fileName, targetPath);
|
||||||
_updateFunc(true, "");
|
//_updateFunc(true, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -286,8 +268,8 @@ namespace v2rayN.Handler
|
|||||||
_updateFunc(false, args.GetException().Message);
|
_updateFunc(false, args.GetException().Message);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
askToDownload(downloadHandle, url, false);
|
askToDownload(downloadHandle, url, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region private
|
#region private
|
||||||
@@ -296,19 +278,6 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
|
||||||
WebRequestHandler webRequestHandler = new WebRequestHandler
|
|
||||||
{
|
|
||||||
AllowAutoRedirect = false
|
|
||||||
};
|
|
||||||
if (httpProxyTest() > 0)
|
|
||||||
{
|
|
||||||
int httpPort = _config.GetLocalPort(Global.InboundHttp);
|
|
||||||
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
|
|
||||||
webRequestHandler.Proxy = webProxy;
|
|
||||||
}
|
|
||||||
HttpClient httpClient = new HttpClient(webRequestHandler);
|
|
||||||
|
|
||||||
string url;
|
string url;
|
||||||
if (type == ECoreType.v2fly)
|
if (type == ECoreType.v2fly)
|
||||||
{
|
{
|
||||||
@@ -326,10 +295,11 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
throw new ArgumentException("Type");
|
throw new ArgumentException("Type");
|
||||||
}
|
}
|
||||||
HttpResponseMessage response = await httpClient.GetAsync(url);
|
|
||||||
if (response.StatusCode.ToString() == "Redirect")
|
var result = await (new DownloadHandle()).UrlRedirectAsync(url, true);
|
||||||
|
if (!Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
responseHandler(type, response.Headers.Location.ToString());
|
responseHandler(type, result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -351,22 +321,23 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var core = string.Empty;
|
|
||||||
var match = string.Empty;
|
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
|
||||||
if (type == ECoreType.v2fly)
|
string filePath = string.Empty;
|
||||||
|
foreach (string name in coreInfo.coreExes)
|
||||||
{
|
{
|
||||||
core = "v2ray.exe";
|
string vName = string.Format("{0}.exe", name);
|
||||||
match = "V2Ray";
|
vName = Utils.GetPath(vName);
|
||||||
|
if (File.Exists(vName))
|
||||||
|
{
|
||||||
|
filePath = vName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == ECoreType.Xray)
|
|
||||||
{
|
|
||||||
core = "xray.exe";
|
|
||||||
match = "Xray";
|
|
||||||
}
|
|
||||||
string filePath = Utils.GetPath(core);
|
|
||||||
if (!File.Exists(filePath))
|
if (!File.Exists(filePath))
|
||||||
{
|
{
|
||||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"");
|
string msg = string.Format(ResUI.NotFoundCore, @"");
|
||||||
//ShowMsg(true, msg);
|
//ShowMsg(true, msg);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@@ -382,7 +353,7 @@ namespace v2rayN.Handler
|
|||||||
p.Start();
|
p.Start();
|
||||||
p.WaitForExit(5000);
|
p.WaitForExit(5000);
|
||||||
string echo = p.StandardOutput.ReadToEnd();
|
string echo = p.StandardOutput.ReadToEnd();
|
||||||
string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value;
|
string version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value;
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -404,21 +375,21 @@ namespace v2rayN.Handler
|
|||||||
if (type == ECoreType.v2fly)
|
if (type == ECoreType.v2fly)
|
||||||
{
|
{
|
||||||
curVersion = "v" + getCoreVersion(type);
|
curVersion = "v" + getCoreVersion(type);
|
||||||
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||||
url = string.Format(v2flyCoreUrl, version, osBit);
|
url = string.Format(v2flyCoreUrl, version, osBit);
|
||||||
}
|
}
|
||||||
else if (type == ECoreType.Xray)
|
else if (type == ECoreType.Xray)
|
||||||
{
|
{
|
||||||
curVersion = "v" + getCoreVersion(type);
|
curVersion = "v" + getCoreVersion(type);
|
||||||
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||||
url = string.Format(xrayCoreUrl, version, osBit);
|
url = string.Format(xrayCoreUrl, version, osBit);
|
||||||
}
|
}
|
||||||
else if (type == ECoreType.v2rayN)
|
else if (type == ECoreType.v2rayN)
|
||||||
{
|
{
|
||||||
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
|
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
|
||||||
message = string.Format(UIRes.I18N("IsLatestN"), curVersion);
|
message = string.Format(ResUI.IsLatestN, curVersion);
|
||||||
url = string.Format(nUrl, version);
|
url = string.Format(nUrl, version);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -446,7 +417,7 @@ namespace v2rayN.Handler
|
|||||||
bool blDownload = false;
|
bool blDownload = false;
|
||||||
if (blAsk)
|
if (blAsk)
|
||||||
{
|
{
|
||||||
if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes)
|
if (UI.ShowYesNo(string.Format(ResUI.DownloadYesNo, url)) == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
blDownload = true;
|
blDownload = true;
|
||||||
}
|
}
|
||||||
@@ -457,24 +428,9 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
if (blDownload)
|
if (blDownload)
|
||||||
{
|
{
|
||||||
if (httpProxyTest() > 0)
|
downloadHandle.DownloadFileAsync(url, true, 600);
|
||||||
{
|
|
||||||
int httpPort = _config.GetLocalPort(Global.InboundHttp);
|
|
||||||
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort);
|
|
||||||
downloadHandle.DownloadFileAsync(url, webProxy, 600);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
downloadHandle.DownloadFileAsync(url, null, 600);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int httpProxyTest()
|
|
||||||
{
|
|
||||||
SpeedtestHandler statistics = new SpeedtestHandler(ref _config);
|
|
||||||
return statistics.RunAvailabilityCheck();
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Net;
|
|||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -32,11 +33,11 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("CheckServerSettings");
|
msg = ResUI.CheckServerSettings;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = UIRes.I18N("InitialConfiguration");
|
msg = ResUI.InitialConfiguration;
|
||||||
if (node.configType == EConfigType.Custom)
|
if (node.configType == EConfigType.Custom)
|
||||||
{
|
{
|
||||||
return GenerateClientCustomConfig(node, fileName, out msg);
|
return GenerateClientCustomConfig(node, fileName, out msg);
|
||||||
@@ -46,7 +47,7 @@ namespace v2rayN.Handler
|
|||||||
string result = Utils.GetEmbedText(SampleClient);
|
string result = Utils.GetEmbedText(SampleClient);
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGetDefaultConfiguration");
|
msg = ResUI.FailedGetDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +55,7 @@ namespace v2rayN.Handler
|
|||||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
if (v2rayConfig == null)
|
if (v2rayConfig == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,11 +81,11 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||||
|
|
||||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), $"[{config.GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
msg = string.Format(ResUI.SuccessfulConfiguration, $"[{config.GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -149,7 +150,7 @@ namespace v2rayN.Handler
|
|||||||
inbound.tag = Global.InboundSocks;
|
inbound.tag = Global.InboundSocks;
|
||||||
inbound.port = config.inbound[0].localPort;
|
inbound.port = config.inbound[0].localPort;
|
||||||
inbound.protocol = config.inbound[0].protocol;
|
inbound.protocol = config.inbound[0].protocol;
|
||||||
if (config.allowLANConn)
|
if (config.inbound[0].allowLANConn)
|
||||||
{
|
{
|
||||||
inbound.listen = "0.0.0.0";
|
inbound.listen = "0.0.0.0";
|
||||||
}
|
}
|
||||||
@@ -169,6 +170,24 @@ namespace v2rayN.Handler
|
|||||||
inbound2.listen = inbound.listen;
|
inbound2.listen = inbound.listen;
|
||||||
inbound2.settings.allowTransparent = false;
|
inbound2.settings.allowTransparent = false;
|
||||||
inbound2.sniffing.enabled = inbound.sniffing.enabled;
|
inbound2.sniffing.enabled = inbound.sniffing.enabled;
|
||||||
|
|
||||||
|
//auth
|
||||||
|
if (!Utils.IsNullOrEmpty(config.inbound[0].user) && !Utils.IsNullOrEmpty(config.inbound[0].pass))
|
||||||
|
{
|
||||||
|
inbound.settings.auth = "password";
|
||||||
|
inbound.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
|
||||||
|
inbound2.settings.auth = "password";
|
||||||
|
inbound2.settings.accounts = new List<AccountsItem> { new AccountsItem() { user = config.inbound[0].user, pass = config.inbound[0].pass } };
|
||||||
|
}
|
||||||
|
|
||||||
|
//http Loopback
|
||||||
|
Inbounds inbound3 = v2rayConfig.inbounds[2];
|
||||||
|
inbound3.tag = Global.InboundHttp2;
|
||||||
|
inbound3.port = config.GetLocalPort(Global.InboundHttp2);
|
||||||
|
inbound3.protocol = Global.InboundHttp;
|
||||||
|
inbound3.listen = Global.Loopback;
|
||||||
|
inbound3.settings.allowTransparent = false;
|
||||||
|
inbound3.sniffing.enabled = inbound.sniffing.enabled;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@@ -901,7 +920,7 @@ namespace v2rayN.Handler
|
|||||||
//检查GUI设置
|
//检查GUI设置
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("CheckServerSettings");
|
msg = ResUI.CheckServerSettings;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -917,7 +936,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
if (!File.Exists(addressFileName))
|
if (!File.Exists(addressFileName))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
File.Copy(addressFileName, fileName);
|
File.Copy(addressFileName, fileName);
|
||||||
@@ -925,7 +944,7 @@ namespace v2rayN.Handler
|
|||||||
//check again
|
//check again
|
||||||
if (!File.Exists(fileName))
|
if (!File.Exists(fileName))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -938,18 +957,18 @@ namespace v2rayN.Handler
|
|||||||
case ECoreType.Xray:
|
case ECoreType.Xray:
|
||||||
break;
|
break;
|
||||||
case ECoreType.clash:
|
case ECoreType.clash:
|
||||||
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp)}");
|
fileContent.Add($"port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp2)}");
|
||||||
fileContent.Add($"socks-port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundSocks)}");
|
fileContent.Add($"socks-port: {LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundSocks)}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
File.WriteAllLines(fileName, fileContent);
|
File.WriteAllLines(fileName, fileContent);
|
||||||
|
|
||||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), $"[{LazyConfig.Instance.GetConfig().GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
msg = string.Format(ResUI.SuccessfulConfiguration, $"[{LazyConfig.Instance.GetConfig().GetGroupRemarks(node.groupId)}] {node.GetSummary()}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog("GenerateClientCustomConfig", ex);
|
Utils.SaveLog("GenerateClientCustomConfig", ex);
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -973,17 +992,17 @@ namespace v2rayN.Handler
|
|||||||
//检查GUI设置
|
//检查GUI设置
|
||||||
if (node == null)
|
if (node == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("CheckServerSettings");
|
msg = ResUI.CheckServerSettings;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = UIRes.I18N("InitialConfiguration");
|
msg = ResUI.InitialConfiguration;
|
||||||
|
|
||||||
//取得默认配置
|
//取得默认配置
|
||||||
string result = Utils.GetEmbedText(SampleServer);
|
string result = Utils.GetEmbedText(SampleServer);
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGetDefaultConfiguration");
|
msg = ResUI.FailedGetDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -991,7 +1010,7 @@ namespace v2rayN.Handler
|
|||||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
if (v2rayConfig == null)
|
if (v2rayConfig == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1008,11 +1027,11 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||||
|
|
||||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), node.GetSummary());
|
msg = string.Format(ResUI.SuccessfulConfiguration, node.GetSummary());
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1110,7 +1129,7 @@ namespace v2rayN.Handler
|
|||||||
string result = Utils.LoadResource(fileName);
|
string result = Utils.LoadResource(fileName);
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedReadConfiguration");
|
msg = ResUI.FailedReadConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1118,14 +1137,14 @@ namespace v2rayN.Handler
|
|||||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
if (v2rayConfig == null)
|
if (v2rayConfig == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedConversionConfiguration");
|
msg = ResUI.FailedConversionConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v2rayConfig.outbounds == null
|
if (v2rayConfig.outbounds == null
|
||||||
|| v2rayConfig.outbounds.Count <= 0)
|
|| v2rayConfig.outbounds.Count <= 0)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectClientConfiguration");
|
msg = ResUI.IncorrectClientConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1139,7 +1158,7 @@ namespace v2rayN.Handler
|
|||||||
|| outbound.settings.vnext[0].users == null
|
|| outbound.settings.vnext[0].users == null
|
||||||
|| outbound.settings.vnext[0].users.Count <= 0)
|
|| outbound.settings.vnext[0].users.Count <= 0)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectClientConfiguration");
|
msg = ResUI.IncorrectClientConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1232,7 +1251,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectClientConfiguration");
|
msg = ResUI.IncorrectClientConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1256,7 +1275,7 @@ namespace v2rayN.Handler
|
|||||||
string result = Utils.LoadResource(fileName);
|
string result = Utils.LoadResource(fileName);
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedReadConfiguration");
|
msg = ResUI.FailedReadConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1264,14 +1283,14 @@ namespace v2rayN.Handler
|
|||||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
if (v2rayConfig == null)
|
if (v2rayConfig == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedConversionConfiguration");
|
msg = ResUI.FailedConversionConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v2rayConfig.inbounds == null
|
if (v2rayConfig.inbounds == null
|
||||||
|| v2rayConfig.inbounds.Count <= 0)
|
|| v2rayConfig.inbounds.Count <= 0)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectServerConfiguration");
|
msg = ResUI.IncorrectServerConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1283,7 +1302,7 @@ namespace v2rayN.Handler
|
|||||||
|| inbound.settings.clients == null
|
|| inbound.settings.clients == null
|
||||||
|| inbound.settings.clients.Count <= 0)
|
|| inbound.settings.clients.Count <= 0)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectServerConfiguration");
|
msg = ResUI.IncorrectServerConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1377,7 +1396,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("IncorrectClientConfiguration");
|
msg = ResUI.IncorrectClientConfiguration;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return vmessItem;
|
return vmessItem;
|
||||||
@@ -1418,25 +1437,25 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
if (config == null)
|
if (config == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("CheckServerSettings");
|
msg = ResUI.CheckServerSettings;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
msg = UIRes.I18N("InitialConfiguration");
|
msg = ResUI.InitialConfiguration;
|
||||||
|
|
||||||
Config configCopy = Utils.DeepCopy(config);
|
Config configCopy = Utils.DeepCopy(config);
|
||||||
|
|
||||||
string result = Utils.GetEmbedText(SampleClient);
|
string result = Utils.GetEmbedText(SampleClient);
|
||||||
if (Utils.IsNullOrEmpty(result))
|
if (Utils.IsNullOrEmpty(result))
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGetDefaultConfiguration");
|
msg = ResUI.FailedGetDefaultConfiguration;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||||
if (v2rayConfig == null)
|
if (v2rayConfig == null)
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
List<IPEndPoint> lstIpEndPoints = null;
|
List<IPEndPoint> lstIpEndPoints = null;
|
||||||
@@ -1517,12 +1536,12 @@ namespace v2rayN.Handler
|
|||||||
v2rayConfig.routing.rules.Add(rule);
|
v2rayConfig.routing.rules.Add(rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
//msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), node.getSummary());
|
//msg = string.Format(ResUI.SuccessfulConfiguration"), node.getSummary());
|
||||||
return Utils.ToJson(v2rayConfig);
|
return Utils.ToJson(v2rayConfig);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
msg = ResUI.FailedGenDefaultConfiguration;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
using v2rayN.Resx;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
{
|
{
|
||||||
@@ -40,13 +41,13 @@ namespace v2rayN.Handler
|
|||||||
var item = ConfigHandler.GetDefaultServer(ref config);
|
var item = ConfigHandler.GetDefaultServer(ref config);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
ShowMsg(false, UIRes.I18N("CheckServerSettings"));
|
ShowMsg(false, ResUI.CheckServerSettings);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SetCore(config, item) != 0)
|
if (SetCore(config, item) != 0)
|
||||||
{
|
{
|
||||||
ShowMsg(false, UIRes.I18N("CheckServerSettings"));
|
ShowMsg(false, ResUI.CheckServerSettings);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string fileName = Utils.GetPath(v2rayConfigRes);
|
string fileName = Utils.GetPath(v2rayConfigRes);
|
||||||
@@ -108,6 +109,10 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (coreInfo == null || coreInfo.coreExes == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
foreach (string vName in coreInfo.coreExes)
|
foreach (string vName in coreInfo.coreExes)
|
||||||
{
|
{
|
||||||
Process[] existing = Process.GetProcessesByName(vName);
|
Process[] existing = Process.GetProcessesByName(vName);
|
||||||
@@ -180,7 +185,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(fileName))
|
if (Utils.IsNullOrEmpty(fileName))
|
||||||
{
|
{
|
||||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), coreInfo.coreUrl);
|
string msg = string.Format(ResUI.NotFoundCore, coreInfo.coreUrl);
|
||||||
ShowMsg(false, msg);
|
ShowMsg(false, msg);
|
||||||
}
|
}
|
||||||
return fileName;
|
return fileName;
|
||||||
@@ -191,7 +196,7 @@ namespace v2rayN.Handler
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void V2rayStart()
|
private void V2rayStart()
|
||||||
{
|
{
|
||||||
ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString()));
|
ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString()));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -245,7 +250,7 @@ namespace v2rayN.Handler
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private int V2rayStartNew(string configStr)
|
private int V2rayStartNew(string configStr)
|
||||||
{
|
{
|
||||||
ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString()));
|
ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString()));
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
namespace v2rayN.Mode
|
namespace v2rayN.Mode
|
||||||
{
|
{
|
||||||
@@ -52,14 +52,6 @@ namespace v2rayN.Mode
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 允许来自局域网的连接
|
|
||||||
/// </summary>
|
|
||||||
public bool allowLANConn
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 启用实时网速和流量统计
|
/// 启用实时网速和流量统计
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -220,7 +212,10 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
return GetLocalPort(Global.InboundSocks) + 1;
|
return GetLocalPort(Global.InboundSocks) + 1;
|
||||||
}
|
}
|
||||||
|
else if (protocol == Global.InboundHttp2)
|
||||||
|
{
|
||||||
|
return GetLocalPort(Global.InboundSocks) + 2;
|
||||||
|
}
|
||||||
else if (protocol == "speedtest")
|
else if (protocol == "speedtest")
|
||||||
{
|
{
|
||||||
return GetLocalPort(Global.InboundSocks) + 103;
|
return GetLocalPort(Global.InboundSocks) + 103;
|
||||||
@@ -346,19 +341,31 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
return subRemarks;
|
return subRemarks;
|
||||||
}
|
}
|
||||||
foreach (SubItem sub in config.subItem)
|
|
||||||
{
|
|
||||||
if (sub.id.EndsWith(subid))
|
|
||||||
{
|
|
||||||
return sub.remarks;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (subid.Length <= 4)
|
if (subid.Length <= 4)
|
||||||
{
|
{
|
||||||
return subid;
|
return subid;
|
||||||
}
|
}
|
||||||
|
var sub = config.subItem.FirstOrDefault(t => t.id == subid);
|
||||||
|
if (sub != null)
|
||||||
|
{
|
||||||
|
return sub.remarks;
|
||||||
|
}
|
||||||
return subid.Substring(0, 4);
|
return subid.Substring(0, 4);
|
||||||
}
|
}
|
||||||
|
public string GetGroupRemarks(Config config)
|
||||||
|
{
|
||||||
|
string subRemarks = string.Empty;
|
||||||
|
if (Utils.IsNullOrEmpty(groupId))
|
||||||
|
{
|
||||||
|
return subRemarks;
|
||||||
|
}
|
||||||
|
var group = config.groupItem.FirstOrDefault(t => t.id == groupId);
|
||||||
|
if (group != null)
|
||||||
|
{
|
||||||
|
return group.remarks;
|
||||||
|
}
|
||||||
|
return groupId.Substring(0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
public List<string> GetAlpn()
|
public List<string> GetAlpn()
|
||||||
{
|
{
|
||||||
@@ -581,6 +588,13 @@ namespace v2rayN.Mode
|
|||||||
/// 开启流量探测
|
/// 开启流量探测
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool sniffingEnabled { get; set; } = true;
|
public bool sniffingEnabled { get; set; } = true;
|
||||||
|
|
||||||
|
public bool allowLANConn { get; set; }
|
||||||
|
|
||||||
|
public string user { get; set; }
|
||||||
|
|
||||||
|
public string pass { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
@@ -692,7 +706,9 @@ namespace v2rayN.Mode
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public System.Drawing.Size mainSize
|
public Point mainLocation { get; set; }
|
||||||
|
|
||||||
|
public Size mainSize
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
@@ -759,6 +775,10 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
public int sort
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,5 +13,7 @@ namespace v2rayN.Mode
|
|||||||
public string arguments { get; set; }
|
public string arguments { get; set; }
|
||||||
|
|
||||||
public string coreUrl { get; set; }
|
public string coreUrl { get; set; }
|
||||||
|
|
||||||
|
public string match { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ namespace v2rayN.Mode
|
|||||||
|
|
||||||
public bool allowTransparent { get; set; }
|
public bool allowTransparent { get; set; }
|
||||||
|
|
||||||
|
public List<AccountsItem> accounts { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UsersItem
|
public class UsersItem
|
||||||
@@ -540,4 +541,15 @@ namespace v2rayN.Mode
|
|||||||
public bool multiMode { get; set; }
|
public bool multiMode { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class AccountsItem
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string user { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string pass { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ namespace v2rayN
|
|||||||
{
|
{
|
||||||
Logging.Setup();
|
Logging.Setup();
|
||||||
Utils.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}");
|
Utils.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}");
|
||||||
|
Logging.ClearLogs();
|
||||||
|
|
||||||
//设置语言环境
|
//设置语言环境
|
||||||
string lang = Utils.RegReadValue(Global.MyRegPath, Global.MyRegKeyLanguage, "zh-Hans");
|
string lang = Utils.RegReadValue(Global.MyRegPath, Global.MyRegKeyLanguage, "zh-Hans");
|
||||||
@@ -42,7 +43,7 @@ namespace v2rayN
|
|||||||
|
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
Application.Run(new MainForm());
|
Application.Run(new MainForm());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("v2rayN")]
|
[assembly: AssemblyProduct("v2rayN")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019-2020 (GPLv3)")]
|
[assembly: AssemblyCopyright("Copyright © 2019-2022 (GPLv3)")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
|
|||||||
// 方法是按如下所示使用“*”:
|
// 方法是按如下所示使用“*”:
|
||||||
//[assembly: AssemblyVersion("1.0.*")]
|
//[assembly: AssemblyVersion("1.0.*")]
|
||||||
//[assembly: AssemblyVersion("1.0.0")]
|
//[assembly: AssemblyVersion("1.0.0")]
|
||||||
[assembly: AssemblyFileVersion("5.8")]
|
[assembly: AssemblyFileVersion("5.14")]
|
||||||
|
|||||||
29
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
29
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
@@ -619,7 +619,7 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 Failed to get subscription content 的本地化字符串。
|
/// 查找类似 Invalid subscription content 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string MsgSubscriptionDecodingFailed {
|
internal static string MsgSubscriptionDecodingFailed {
|
||||||
get {
|
get {
|
||||||
@@ -879,6 +879,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Speed Test... 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string Speedtesting {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Speedtesting", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 PAC failed to start. Run it with Admin right. 的本地化字符串。
|
/// 查找类似 PAC failed to start. Run it with Admin right. 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -934,6 +943,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 System proxy 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string SystemProxy {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("SystemProxy", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 The ping of current service: {0} 的本地化字符串。
|
/// 查找类似 The ping of current service: {0} 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -943,6 +961,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Too many servers, please open the main interface 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string TooManyServersTip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("TooManyServersTip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 *tcp camouflage type 的本地化字符串。
|
/// 查找类似 *tcp camouflage type 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -268,7 +268,7 @@
|
|||||||
<value>Start updating PAC...</value>
|
<value>Start updating PAC...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
||||||
<value>Failed to get subscription content</value>
|
<value>Invalid subscription content</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgUnpacking" xml:space="preserve">
|
<data name="MsgUnpacking" xml:space="preserve">
|
||||||
<value>is unpacking...</value>
|
<value>is unpacking...</value>
|
||||||
@@ -454,4 +454,13 @@
|
|||||||
<data name="FillServerAddressCustom" xml:space="preserve">
|
<data name="FillServerAddressCustom" xml:space="preserve">
|
||||||
<value>Please browse to import server configuration</value>
|
<value>Please browse to import server configuration</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SystemProxy" xml:space="preserve">
|
||||||
|
<value>System proxy</value>
|
||||||
|
</data>
|
||||||
|
<data name="Speedtesting" xml:space="preserve">
|
||||||
|
<value>Speed Test...</value>
|
||||||
|
</data>
|
||||||
|
<data name="TooManyServersTip" xml:space="preserve">
|
||||||
|
<value>Too many servers, please open the main interface</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
<value>开始更新 PAC...</value>
|
<value>开始更新 PAC...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
<data name="MsgSubscriptionDecodingFailed" xml:space="preserve">
|
||||||
<value>订阅内容获取失败</value>
|
<value>无效的订阅内容</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MsgUnpacking" xml:space="preserve">
|
<data name="MsgUnpacking" xml:space="preserve">
|
||||||
<value>正在解压......</value>
|
<value>正在解压......</value>
|
||||||
@@ -454,4 +454,13 @@
|
|||||||
<data name="FillServerAddressCustom" xml:space="preserve">
|
<data name="FillServerAddressCustom" xml:space="preserve">
|
||||||
<value>请浏览导入服务器配置</value>
|
<value>请浏览导入服务器配置</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SystemProxy" xml:space="preserve">
|
||||||
|
<value>系统代理</value>
|
||||||
|
</data>
|
||||||
|
<data name="Speedtesting" xml:space="preserve">
|
||||||
|
<value>测速中...</value>
|
||||||
|
</data>
|
||||||
|
<data name="TooManyServersTip" xml:space="preserve">
|
||||||
|
<value>服务器太多,请打开主界面操作</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -24,7 +24,23 @@
|
|||||||
{
|
{
|
||||||
"tag": "tag2",
|
"tag": "tag2",
|
||||||
"port": 10809,
|
"port": 10809,
|
||||||
"protocol": "socks",
|
"protocol": "http",
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"settings": {
|
||||||
|
"allowTransparent": false
|
||||||
|
},
|
||||||
|
"sniffing": {
|
||||||
|
"enabled": true,
|
||||||
|
"destOverride": [
|
||||||
|
"http",
|
||||||
|
"tls"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "tag3",
|
||||||
|
"port": 10809,
|
||||||
|
"protocol": "http",
|
||||||
"listen": "127.0.0.1",
|
"listen": "127.0.0.1",
|
||||||
"settings": {
|
"settings": {
|
||||||
"allowTransparent": false
|
"allowTransparent": false
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ using log4net.Appender;
|
|||||||
using log4net.Core;
|
using log4net.Core;
|
||||||
using log4net.Layout;
|
using log4net.Layout;
|
||||||
using log4net.Repository.Hierarchy;
|
using log4net.Repository.Hierarchy;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace v2rayN.Tool
|
namespace v2rayN.Tool
|
||||||
{
|
{
|
||||||
@@ -15,7 +18,7 @@ namespace v2rayN.Tool
|
|||||||
PatternLayout patternLayout = new PatternLayout();
|
PatternLayout patternLayout = new PatternLayout();
|
||||||
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
|
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
|
||||||
patternLayout.ActivateOptions();
|
patternLayout.ActivateOptions();
|
||||||
|
|
||||||
RollingFileAppender roller = new RollingFileAppender();
|
RollingFileAppender roller = new RollingFileAppender();
|
||||||
roller.AppendToFile = true;
|
roller.AppendToFile = true;
|
||||||
roller.RollingStyle = RollingFileAppender.RollingMode.Date;
|
roller.RollingStyle = RollingFileAppender.RollingMode.Date;
|
||||||
@@ -30,8 +33,34 @@ namespace v2rayN.Tool
|
|||||||
memory.ActivateOptions();
|
memory.ActivateOptions();
|
||||||
hierarchy.Root.AddAppender(memory);
|
hierarchy.Root.AddAppender(memory);
|
||||||
|
|
||||||
hierarchy.Root.Level = Level.Info;
|
hierarchy.Root.Level = Level.Debug;
|
||||||
hierarchy.Configured = true;
|
hierarchy.Configured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ClearLogs()
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var now = DateTime.Now.AddMonths(-1);
|
||||||
|
var dir = Utils.GetPath(@"guiLogs\");
|
||||||
|
var files = Directory.GetFiles(dir, "*.txt");
|
||||||
|
foreach (var filePath in files)
|
||||||
|
{
|
||||||
|
var file = new FileInfo(filePath);
|
||||||
|
if (file.CreationTime < now)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
file.Delete();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Resources;
|
|
||||||
|
|
||||||
namespace v2rayN
|
|
||||||
{
|
|
||||||
public class UIRes
|
|
||||||
{
|
|
||||||
static ResourceManager res = new ResourceManager("v2rayN.Resx.ResUI", Assembly.GetExecutingAssembly());
|
|
||||||
|
|
||||||
static string LoadString(ResourceManager resMgr, string key)
|
|
||||||
{
|
|
||||||
string value = resMgr.GetString(key);
|
|
||||||
if (value == null)
|
|
||||||
{
|
|
||||||
throw new KeyNotFoundException($"key: {key}");
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string I18N(string key)
|
|
||||||
{
|
|
||||||
return LoadString(res, key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -219,6 +219,26 @@ namespace v2rayN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 逗号分隔的字符串,先排序后转List<string>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static List<string> String2ListSorted(string str)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
str = str.Replace(Environment.NewLine, "");
|
||||||
|
List<string> list = new List<string>(str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
|
||||||
|
return list.OrderBy(x => x).ToList();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
SaveLog(ex.Message, ex);
|
||||||
|
return new List<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base64编码
|
/// Base64编码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -370,7 +390,8 @@ namespace v2rayN
|
|||||||
|
|
||||||
public static string UrlEncode(string url)
|
public static string UrlEncode(string url)
|
||||||
{
|
{
|
||||||
return HttpUtility.UrlEncode(url);
|
return Uri.EscapeDataString(url);
|
||||||
|
//return HttpUtility.UrlEncode(url);
|
||||||
}
|
}
|
||||||
public static string UrlDecode(string url)
|
public static string UrlDecode(string url)
|
||||||
{
|
{
|
||||||
@@ -732,16 +753,11 @@ namespace v2rayN
|
|||||||
{
|
{
|
||||||
if (enableSecurityProtocolTls13)
|
if (enableSecurityProtocolTls13)
|
||||||
{
|
{
|
||||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
|
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
|
||||||
| SecurityProtocolType.Tls11
|
|
||||||
| SecurityProtocolType.Tls12
|
|
||||||
| SecurityProtocolType.Tls13;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
|
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
|
||||||
| SecurityProtocolType.Tls11
|
|
||||||
| SecurityProtocolType.Tls12;
|
|
||||||
}
|
}
|
||||||
ServicePointManager.DefaultConnectionLimit = 256;
|
ServicePointManager.DefaultConnectionLimit = 256;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Base\HttpClientHelper.cs" />
|
||||||
<Compile Include="Base\ListViewFlickerFree.cs">
|
<Compile Include="Base\ListViewFlickerFree.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -195,9 +196,6 @@
|
|||||||
<Compile Include="Handler\StatisticsHandler.cs" />
|
<Compile Include="Handler\StatisticsHandler.cs" />
|
||||||
<Compile Include="Handler\DownloadHandle.cs" />
|
<Compile Include="Handler\DownloadHandle.cs" />
|
||||||
<Compile Include="Handler\ProxySetting.cs" />
|
<Compile Include="Handler\ProxySetting.cs" />
|
||||||
<Compile Include="Base\WebClientEx.cs">
|
|
||||||
<SubType>Component</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Handler\SysProxyHandle.cs" />
|
<Compile Include="Handler\SysProxyHandle.cs" />
|
||||||
<Compile Include="Mode\ESpeedActionType.cs" />
|
<Compile Include="Mode\ESpeedActionType.cs" />
|
||||||
<Compile Include="Mode\EGlobalHotkey.cs" />
|
<Compile Include="Mode\EGlobalHotkey.cs" />
|
||||||
@@ -262,7 +260,6 @@
|
|||||||
<Compile Include="Tool\Job.cs" />
|
<Compile Include="Tool\Job.cs" />
|
||||||
<Compile Include="Tool\Logging.cs" />
|
<Compile Include="Tool\Logging.cs" />
|
||||||
<Compile Include="Tool\QueryableExtension.cs" />
|
<Compile Include="Tool\QueryableExtension.cs" />
|
||||||
<Compile Include="Tool\UIRes.cs" />
|
|
||||||
<Compile Include="Tool\UI.cs" />
|
<Compile Include="Tool\UI.cs" />
|
||||||
<Compile Include="Tool\Utils.cs" />
|
<Compile Include="Tool\Utils.cs" />
|
||||||
<Compile Include="Handler\V2rayConfigHandler.cs" />
|
<Compile Include="Handler\V2rayConfigHandler.cs" />
|
||||||
@@ -475,13 +472,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Google.Protobuf">
|
<PackageReference Include="Google.Protobuf">
|
||||||
<Version>3.19.4</Version>
|
<Version>3.20.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Grpc.Core">
|
<PackageReference Include="Grpc.Core">
|
||||||
<Version>2.44.0</Version>
|
<Version>2.45.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Grpc.Tools">
|
<PackageReference Include="Grpc.Tools">
|
||||||
<Version>2.44.0</Version>
|
<Version>2.45.0</Version>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
Reference in New Issue
Block a user