Compare commits
372 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c2388749d | ||
|
|
89da3823a4 | ||
|
|
3a9a49b163 | ||
|
|
277b21dc86 | ||
|
|
bc0e8c17ba | ||
|
|
51d3df69bb | ||
|
|
4913f6f37d | ||
|
|
ff622e2ef6 | ||
|
|
50ad643abe | ||
|
|
944849a381 | ||
|
|
6f485141f0 | ||
|
|
3575291119 | ||
|
|
e256ec5401 | ||
|
|
3defba6290 | ||
|
|
c201d986c5 | ||
|
|
36aad4424e | ||
|
|
b29fb1e2a3 | ||
|
|
d5aa307efb | ||
|
|
48928613bf | ||
|
|
52b8f480f6 | ||
|
|
bcda8bd602 | ||
|
|
2a11fe11e8 | ||
|
|
7ec0607fec | ||
|
|
aa41a8675e | ||
|
|
19f9bff6fe | ||
|
|
4e65732a4e | ||
|
|
47c843bf09 | ||
|
|
a7741a0b7d | ||
|
|
6f3fbdfe17 | ||
|
|
3be93df63f | ||
|
|
6259539c87 | ||
|
|
9654009650 | ||
|
|
62e796cf5a | ||
|
|
af820bb0f2 | ||
|
|
8f5bb3591b | ||
|
|
7eafae98d4 | ||
|
|
1d4e5baafb | ||
|
|
9894aa053f | ||
|
|
4ada8fea27 | ||
|
|
4d013a206b | ||
|
|
2d8a707bed | ||
|
|
0e55a859ea | ||
|
|
0b1ec520f4 | ||
|
|
fcc5f29882 | ||
|
|
d431c63245 | ||
|
|
15f8db64e7 | ||
|
|
c2ea14151e | ||
|
|
977f0428e2 | ||
|
|
f110446738 | ||
|
|
90289120d3 | ||
|
|
688f206555 | ||
|
|
38c739c45d | ||
|
|
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 | ||
|
|
cdc83bc9d7 | ||
|
|
70feacd276 | ||
|
|
ece4572058 | ||
|
|
4d16a5e801 | ||
|
|
1493a8b03f | ||
|
|
d20791bf73 | ||
|
|
7bb91f57ac | ||
|
|
b7a6004830 | ||
|
|
dee5613f2f | ||
|
|
e58e0d6ac7 | ||
|
|
a2679e009d | ||
|
|
78d6bcd57a | ||
|
|
026936c92f | ||
|
|
5e5893362c | ||
|
|
5b8ce1836b | ||
|
|
d71f3fafcf | ||
|
|
828f93bc5c | ||
|
|
f947c541c9 | ||
|
|
539b6aafd9 | ||
|
|
c3971bda05 | ||
|
|
8f17331db2 | ||
|
|
583e824337 | ||
|
|
ac79466041 | ||
|
|
291fd491ff | ||
|
|
6408d51c85 | ||
|
|
b693873619 | ||
|
|
c2af982272 | ||
|
|
1f0a77bde2 | ||
|
|
0463c1a6e7 | ||
|
|
6517f66876 | ||
|
|
82682d4474 | ||
|
|
e030fae1c4 | ||
|
|
4d7cf140cd | ||
|
|
f6ccee1976 | ||
|
|
d42346d500 | ||
|
|
887dd8da3b | ||
|
|
731db2541d | ||
|
|
bfdc0a2e77 | ||
|
|
03ea24f29b | ||
|
|
61bd48fd1e | ||
|
|
f05b5d7fff | ||
|
|
0b8d66a87e | ||
|
|
c0b7a8c33e | ||
|
|
32a07bceb2 | ||
|
|
ba8f24d398 | ||
|
|
31b7857238 | ||
|
|
fada5f99bb | ||
|
|
734df5def5 | ||
|
|
03ad07733f | ||
|
|
b2d538d02a | ||
|
|
b9435a4b01 | ||
|
|
d27566686c | ||
|
|
ca883c164d | ||
|
|
0f6cd76f28 | ||
|
|
7778af65aa | ||
|
|
828246130b | ||
|
|
4eb1801f50 | ||
|
|
80b68dcf84 | ||
|
|
685baa576b | ||
|
|
7cdead8cb1 | ||
|
|
f220825b80 | ||
|
|
2b00490dd6 | ||
|
|
d361afa3f3 | ||
|
|
8d5bd5a80c | ||
|
|
002283899f | ||
|
|
206b440966 | ||
|
|
b5b5eb25a1 | ||
|
|
f84e538b6a | ||
|
|
5b9cdec156 | ||
|
|
cf0bd7f1e6 | ||
|
|
f3a86a2173 | ||
|
|
0a1d4d5193 | ||
|
|
88e2288298 | ||
|
|
fec47d4b72 | ||
|
|
f7f23e7980 | ||
|
|
32100db3fc | ||
|
|
dd2bed49f1 | ||
|
|
6a427a2158 | ||
|
|
716029def8 | ||
|
|
610a610ee0 | ||
|
|
4fc0738dad | ||
|
|
fe29771870 | ||
|
|
19be43d2d9 | ||
|
|
cb01809093 | ||
|
|
1138d660b2 | ||
|
|
c29ccf76d5 | ||
|
|
5907bf388c | ||
|
|
54adaffb92 | ||
|
|
3bc7812e1a | ||
|
|
16cd9706f9 | ||
|
|
839d07870c | ||
|
|
933d3c2678 | ||
|
|
a29b744526 | ||
|
|
c4070b26ff | ||
|
|
6d0b4e8c75 | ||
|
|
058e1aafd1 | ||
|
|
eac7361a0b | ||
|
|
64e6d6d038 | ||
|
|
d613fe79af | ||
|
|
565a7b1680 | ||
|
|
5076f45674 | ||
|
|
dc72c949c3 | ||
|
|
c85e418afa | ||
|
|
2fc3e846df | ||
|
|
a665dc9db7 | ||
|
|
672eb4b365 | ||
|
|
c9a150565d | ||
|
|
5b271108c0 | ||
|
|
8b63a19161 | ||
|
|
0d17a112a6 | ||
|
|
d997633810 | ||
|
|
446e981d0e | ||
|
|
dabca02b18 | ||
|
|
790bd1217c | ||
|
|
43d8515e23 | ||
|
|
bcd051e5a3 | ||
|
|
1a1e08753f | ||
|
|
d46838eb55 | ||
|
|
a70b5eeef5 | ||
|
|
7513ff860b | ||
|
|
4d872e9143 | ||
|
|
4408d67c49 | ||
|
|
545e1c5402 | ||
|
|
03dec5b604 | ||
|
|
777427787a | ||
|
|
f0c59e38cc | ||
|
|
35cbc54f99 | ||
|
|
bb78af8489 | ||
|
|
af000a27a6 | ||
|
|
b30191feb2 | ||
|
|
83804bd914 | ||
|
|
23b0f154f3 | ||
|
|
6084173257 | ||
|
|
7885893e9b | ||
|
|
53f9fee834 | ||
|
|
ae79d8c608 | ||
|
|
9c96feb4b5 | ||
|
|
597531b92b | ||
|
|
108ab7069b | ||
|
|
63411c5978 | ||
|
|
e6fc9e4783 | ||
|
|
57d5e02d6a | ||
|
|
e578c75545 | ||
|
|
77c5f6c583 | ||
|
|
d8ee3c3bba | ||
|
|
656451f604 | ||
|
|
9dc8cba3f0 | ||
|
|
03c4954c27 | ||
|
|
3c550e2803 | ||
|
|
52f1bdf834 | ||
|
|
c2c9c6a6db | ||
|
|
b390776219 | ||
|
|
47dce69aa4 | ||
|
|
3aeaadade6 | ||
|
|
162b3ab29c | ||
|
|
b8848823cd | ||
|
|
378f350c52 | ||
|
|
e7231d33b3 | ||
|
|
7c633374f6 | ||
|
|
1663c7d819 | ||
|
|
00982fd40b | ||
|
|
3697de973c | ||
|
|
3e575cc485 | ||
|
|
1675c67ddd | ||
|
|
b20c90acf0 | ||
|
|
a370f7bfbb | ||
|
|
e2de9b4703 | ||
|
|
b487dcf448 | ||
|
|
6c0a364d03 | ||
|
|
f892f0c533 | ||
|
|
0713c0c667 | ||
|
|
ab4d34b6ac | ||
|
|
3823e5ca91 | ||
|
|
c0430536a6 | ||
|
|
6f85b5318b | ||
|
|
76e67693fa | ||
|
|
478521d6d9 | ||
|
|
57299cf182 | ||
|
|
45738a7160 | ||
|
|
583bd22244 | ||
|
|
ba68f5008b | ||
|
|
2f3f52c5e0 | ||
|
|
1dcb72e9dc | ||
|
|
153c8a0a74 | ||
|
|
4e8ea374d8 | ||
|
|
e313e004eb | ||
|
|
93b8dec63e | ||
|
|
5c9c35c199 | ||
|
|
4a6b8968d5 | ||
|
|
088d2e6834 | ||
|
|
4f39f7a932 | ||
|
|
2615b72cee | ||
|
|
a799420d0f | ||
|
|
70069a05e6 | ||
|
|
d385b44a48 | ||
|
|
56c1557f4a | ||
|
|
737d563ebb | ||
|
|
81b70195cf | ||
|
|
e60851153b | ||
|
|
009a15f0d9 | ||
|
|
f234775bd5 | ||
|
|
9b8bd0fa8a | ||
|
|
f74191946c | ||
|
|
ffa8b6296d | ||
|
|
0b2a392de2 | ||
|
|
f6b044c10c | ||
|
|
88c87aec0e | ||
|
|
b632dee0ce | ||
|
|
0db772aaeb | ||
|
|
fedfed4028 | ||
|
|
3b27e7be36 | ||
|
|
78402118ef | ||
|
|
aa3094f796 | ||
|
|
20498ce453 | ||
|
|
56559e6509 | ||
|
|
9549d17b03 | ||
|
|
a822fa9766 | ||
|
|
dee4b19775 | ||
|
|
f4b885dce5 | ||
|
|
2c02285def | ||
|
|
be7d76947b | ||
|
|
a81254dfff | ||
|
|
cb24a909ae | ||
|
|
8a87318b68 | ||
|
|
219f544a43 | ||
|
|
46c887537e | ||
|
|
8cf66da07c | ||
|
|
57bcf8a1a7 | ||
|
|
05efff10da | ||
|
|
414ac3225a | ||
|
|
0a8e822f35 | ||
|
|
301d1dd998 | ||
|
|
621565f4a4 | ||
|
|
6f51d447c7 | ||
|
|
f9c7556c54 | ||
|
|
32b98524ff | ||
|
|
efaec3ee17 | ||
|
|
28826cad1b | ||
|
|
ca9840abf4 | ||
|
|
8813d66274 | ||
|
|
da2b0f7dd4 | ||
|
|
b1773dab90 | ||
|
|
9538a67be1 | ||
|
|
fbfbc811d4 | ||
|
|
1c04b752cd | ||
|
|
3b1a2287d5 | ||
|
|
f3e6bd2736 | ||
|
|
4e449811e7 | ||
|
|
910be7f471 | ||
|
|
1e088f851b | ||
|
|
a0b0ad53d2 | ||
|
|
5b3f09aaf7 | ||
|
|
f48468029e | ||
|
|
c837ba5482 | ||
|
|
2708ff7c1a | ||
|
|
1722e50402 | ||
|
|
244da05e70 | ||
|
|
0c26662602 | ||
|
|
2f65575fdf | ||
|
|
b1814c246a | ||
|
|
fd4af7c90c | ||
|
|
d337d4bc7b | ||
|
|
da96e75ad5 | ||
|
|
04e50d521a | ||
|
|
93aad41181 | ||
|
|
ab025b39f4 | ||
|
|
7b2bd8876d | ||
|
|
033f83465f | ||
|
|
e5547307b3 | ||
|
|
82f77b41ba | ||
|
|
8e37712175 | ||
|
|
3b06b553eb | ||
|
|
5de50009d2 | ||
|
|
56a8521893 | ||
|
|
33d541f067 | ||
|
|
957ffa203d | ||
|
|
3af13d64f3 | ||
|
|
f1e51ae1a3 | ||
|
|
6d2a1e0e9c | ||
|
|
ac2d71d7b0 | ||
|
|
002a8c505c | ||
|
|
49355da702 | ||
|
|
3b38dc51ba | ||
|
|
3a27b56cc1 | ||
|
|
fbb9c3cd64 |
@@ -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.
|
||||
16
README.md
16
README.md
@@ -1,10 +1,18 @@
|
||||
# v2rayN
|
||||
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
|
||||
- Download exe from release download
|
||||
- Also need to download v2ray core in the same folder
|
||||
- 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)
|
||||
- Run v2rayN.exe
|
||||
|
||||
### Requirements
|
||||
- Microsoft [.NET Framework 4.6](https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers) or higher
|
||||
- Project V core [https://github.com/v2ray/v2ray-core/releases](https://github.com/v2ray/v2ray-core/releases)
|
||||
- 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)
|
||||
- Xray core [https://github.com/XTLS/Xray-core/releases](https://github.com/XTLS/Xray-core/releases)
|
||||
|
||||
231
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
231
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
@@ -0,0 +1,231 @@
|
||||
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, CancellationToken token)
|
||||
{
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
try
|
||||
{
|
||||
HttpResponseMessage response = await client.GetAsync(url, 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<string> 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;
|
||||
string progressSpeed = string.Empty;
|
||||
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;
|
||||
|
||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||
var speed = (totalRead * 1d / ts.TotalMilliseconds / 1000).ToString("#0.0");
|
||||
if (progress != null)
|
||||
{
|
||||
if (progressSpeed != speed)
|
||||
{
|
||||
progressSpeed = speed;
|
||||
progress.Report(speed);
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (isMoreToRead);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace v2rayN.Base
|
||||
{
|
||||
public class HttpWebServer
|
||||
{
|
||||
private HttpListener _listener;
|
||||
private Func<string, string> _responderMethod;
|
||||
|
||||
public HttpWebServer(string[] prefixes, Func<string, string> method)
|
||||
{
|
||||
try
|
||||
{
|
||||
_listener = new HttpListener();
|
||||
|
||||
if (!HttpListener.IsSupported)
|
||||
throw new NotSupportedException(
|
||||
"Needs Windows XP SP2, Server 2003 or later.");
|
||||
|
||||
// URI prefixes are required, for example
|
||||
// "http://localhost:8080/index/".
|
||||
if (prefixes == null || prefixes.Length == 0)
|
||||
throw new ArgumentException("prefixes");
|
||||
|
||||
// A responder method is required
|
||||
if (method == null)
|
||||
throw new ArgumentException("method");
|
||||
|
||||
foreach (string s in prefixes)
|
||||
_listener.Prefixes.Add(s);
|
||||
|
||||
_responderMethod = method;
|
||||
_listener.Start();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public HttpWebServer(Func<string, string> method, params string[] prefixes)
|
||||
: this(prefixes, method) { }
|
||||
|
||||
public void Run()
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem((o) =>
|
||||
{
|
||||
Utils.SaveLog("Webserver running...");
|
||||
try
|
||||
{
|
||||
while (_listener.IsListening)
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem((c) =>
|
||||
{
|
||||
HttpListenerContext ctx = c as HttpListenerContext;
|
||||
try
|
||||
{
|
||||
string address = ctx.Request.LocalEndPoint.Address.ToString();
|
||||
Utils.SaveLog("Webserver Request " + address);
|
||||
string rstr = _responderMethod(address);
|
||||
byte[] buf = Encoding.UTF8.GetBytes(rstr);
|
||||
ctx.Response.StatusCode = 200;
|
||||
ctx.Response.ContentType = "application/x-ns-proxy-autoconfig";
|
||||
ctx.Response.ContentLength64 = buf.Length;
|
||||
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
|
||||
}
|
||||
catch
|
||||
{
|
||||
} // suppress any exceptions
|
||||
finally
|
||||
{
|
||||
// always close the stream
|
||||
ctx.Response.OutputStream.Close();
|
||||
}
|
||||
}, _listener.GetContext());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
} // suppress any exceptions
|
||||
});
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (_listener != null)
|
||||
{
|
||||
_listener.Stop();
|
||||
_listener.Close();
|
||||
_listener = null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,141 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
|
||||
namespace v2rayN.Base
|
||||
{
|
||||
public class HttpWebServerB
|
||||
{
|
||||
private TcpListener listener;
|
||||
private int port;
|
||||
private Func<string, string> _responderMethod;
|
||||
|
||||
public HttpWebServerB(int port, Func<string, string> method)
|
||||
{
|
||||
this.port = port;
|
||||
this._responderMethod = method;
|
||||
|
||||
Thread thread = new Thread(StartListen)
|
||||
{
|
||||
IsBackground = true
|
||||
};
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (listener != null)
|
||||
{
|
||||
listener.Stop();
|
||||
listener = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void StartListen()
|
||||
{
|
||||
try
|
||||
{
|
||||
listener = new TcpListener(IPAddress.Any, port);
|
||||
listener.Start();
|
||||
Utils.SaveLog("WebserverB running...");
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (!listener.Pending())
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
continue;
|
||||
}
|
||||
|
||||
TcpClient socket = listener.AcceptTcpClient();
|
||||
Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread))
|
||||
{
|
||||
IsBackground = true
|
||||
};
|
||||
thread.Start(socket);
|
||||
Thread.Sleep(1);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Utils.SaveLog("WebserverB start fail.");
|
||||
}
|
||||
}
|
||||
private void ProcessThread(object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
TcpClient socket = obj as TcpClient;
|
||||
|
||||
BufferedStream inputStream = new BufferedStream(socket.GetStream());
|
||||
StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream()));
|
||||
if (inputStream.CanRead)
|
||||
{
|
||||
string data = ReadStream(inputStream);
|
||||
|
||||
if (data.Contains("/pac/"))
|
||||
{
|
||||
if (_responderMethod != null)
|
||||
{
|
||||
string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString();
|
||||
Utils.SaveLog("WebserverB Request " + address);
|
||||
string pac = _responderMethod(address);
|
||||
|
||||
if (inputStream.CanWrite)
|
||||
{
|
||||
WriteStream(outputStream, pac);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
outputStream.BaseStream.Flush();
|
||||
inputStream = null;
|
||||
outputStream = null;
|
||||
socket.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
private string ReadStream(Stream inputStream)
|
||||
{
|
||||
int nextchar;
|
||||
string data = "";
|
||||
while (true)
|
||||
{
|
||||
nextchar = inputStream.ReadByte();
|
||||
if (nextchar == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (nextchar == '\r')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (nextchar == -1)
|
||||
{
|
||||
Thread.Sleep(1);
|
||||
continue;
|
||||
};
|
||||
data += Convert.ToChar(nextchar);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
private void WriteStream(StreamWriter outputStream, string pac)
|
||||
{
|
||||
string content_type = "application/x-ns-proxy-autoconfig";
|
||||
outputStream.WriteLine("HTTP/1.1 200 OK");
|
||||
outputStream.WriteLine(String.Format("Content-Type:{0}", content_type));
|
||||
outputStream.WriteLine("Connection: close");
|
||||
outputStream.WriteLine("");
|
||||
outputStream.WriteLine(pac);
|
||||
outputStream.Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,13 @@
|
||||
using System.Drawing;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace v2rayN.Base
|
||||
{
|
||||
class ListViewFlickerFree : ListView
|
||||
{
|
||||
Action<int, int> _updateFunc;
|
||||
|
||||
public ListViewFlickerFree()
|
||||
{
|
||||
SetStyle(ControlStyles.OptimizedDoubleBuffer
|
||||
@@ -13,44 +16,82 @@ namespace v2rayN.Base
|
||||
UpdateStyles();
|
||||
}
|
||||
|
||||
|
||||
public void AutoResizeColumns()
|
||||
public void RegisterDragEvent(Action<int, int> _update)
|
||||
{
|
||||
try
|
||||
_updateFunc = _update;
|
||||
this.AllowDrop = true;
|
||||
|
||||
this.ItemDrag += new ItemDragEventHandler(this.lv_ItemDrag);
|
||||
this.DragDrop += new DragEventHandler(this.lv_DragDrop);
|
||||
this.DragEnter += new DragEventHandler(this.lv_DragEnter);
|
||||
this.DragOver += new DragEventHandler(this.lv_DragOver);
|
||||
this.DragLeave += new EventHandler(this.lv_DragLeave);
|
||||
}
|
||||
|
||||
private void lv_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
int targetIndex = this.InsertionMark.Index;
|
||||
if (targetIndex == -1)
|
||||
{
|
||||
int count = this.Columns.Count;
|
||||
int MaxWidth = 0;
|
||||
Graphics graphics = this.CreateGraphics();
|
||||
Font font = this.Font;
|
||||
ListViewItemCollection items = this.Items;
|
||||
return;
|
||||
}
|
||||
if (this.InsertionMark.AppearsAfterItem)
|
||||
{
|
||||
targetIndex++;
|
||||
}
|
||||
|
||||
string str;
|
||||
int width;
|
||||
|
||||
this.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
if (this.SelectedIndices.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
_updateFunc(this.SelectedIndices[0], targetIndex);
|
||||
|
||||
//ListViewItem draggedItem = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
|
||||
//this.BeginUpdate();
|
||||
//this.Items.Insert(targetIndex, (ListViewItem)draggedItem.Clone());
|
||||
//this.Items.Remove(draggedItem);
|
||||
//this.EndUpdate();
|
||||
}
|
||||
|
||||
|
||||
private void lv_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
e.Effect = e.AllowedEffect;
|
||||
}
|
||||
|
||||
private void lv_DragLeave(object sender, EventArgs e)
|
||||
{
|
||||
this.InsertionMark.Index = -1;
|
||||
}
|
||||
|
||||
private void lv_DragOver(object sender, DragEventArgs e)
|
||||
{
|
||||
Point targetPoint = this.PointToClient(new Point(e.X, e.Y));
|
||||
int targetIndex = this.InsertionMark.NearestIndex(targetPoint);
|
||||
|
||||
if (targetIndex > -1)
|
||||
{
|
||||
Rectangle itemBounds = this.GetItemRect(targetIndex);
|
||||
this.EnsureVisible(targetIndex);
|
||||
|
||||
if (targetPoint.Y > itemBounds.Top + (itemBounds.Height / 2))
|
||||
{
|
||||
str = this.Columns[i].Text;
|
||||
MaxWidth = this.Columns[i].Width;
|
||||
|
||||
foreach (ListViewItem item in items)
|
||||
{
|
||||
str = item.SubItems[i].Text;
|
||||
width = (int)graphics.MeasureString(str, font).Width;
|
||||
if (width > MaxWidth)
|
||||
{
|
||||
MaxWidth = width;
|
||||
}
|
||||
}
|
||||
if (i == 0)
|
||||
{
|
||||
this.Columns[i].Width = MaxWidth;
|
||||
}
|
||||
this.Columns[i].Width = MaxWidth;
|
||||
this.InsertionMark.AppearsAfterItem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.InsertionMark.AppearsAfterItem = false;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
this.InsertionMark.Index = targetIndex;
|
||||
}
|
||||
|
||||
private void lv_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
this.DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
this.InsertionMark.Index = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
44
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
44
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
@@ -31,6 +31,10 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer2Form));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.btnEdit = new System.Windows.Forms.Button();
|
||||
this.cmbCoreType = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType = new System.Windows.Forms.Label();
|
||||
this.btnBrowse = new System.Windows.Forms.Button();
|
||||
this.txtAddress = new System.Windows.Forms.TextBox();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
@@ -45,23 +49,53 @@
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.btnEdit);
|
||||
this.groupBox1.Controls.Add(this.cmbCoreType);
|
||||
this.groupBox1.Controls.Add(this.labCoreType);
|
||||
this.groupBox1.Controls.Add(this.btnBrowse);
|
||||
this.groupBox1.Controls.Add(this.txtAddress);
|
||||
this.groupBox1.Controls.Add(this.label13);
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// btnEdit
|
||||
//
|
||||
resources.ApplyResources(this.btnEdit, "btnEdit");
|
||||
this.btnEdit.Name = "btnEdit";
|
||||
this.btnEdit.UseVisualStyleBackColor = true;
|
||||
this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
|
||||
//
|
||||
// cmbCoreType
|
||||
//
|
||||
this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||
this.cmbCoreType.Name = "cmbCoreType";
|
||||
//
|
||||
// labCoreType
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType, "labCoreType");
|
||||
this.labCoreType.Name = "labCoreType";
|
||||
//
|
||||
// btnBrowse
|
||||
//
|
||||
resources.ApplyResources(this.btnBrowse, "btnBrowse");
|
||||
this.btnBrowse.Name = "btnBrowse";
|
||||
this.btnBrowse.UseVisualStyleBackColor = true;
|
||||
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
|
||||
//
|
||||
// txtAddress
|
||||
//
|
||||
resources.ApplyResources(this.txtAddress, "txtAddress");
|
||||
@@ -89,9 +123,9 @@
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnOK
|
||||
@@ -136,5 +170,9 @@
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.TextBox txtAddress;
|
||||
private System.Windows.Forms.Button btnBrowse;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType;
|
||||
private System.Windows.Forms.Label labCoreType;
|
||||
private System.Windows.Forms.Button btnEdit;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,15 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class AddServer2Form : BaseForm
|
||||
public partial class AddServer2Form : BaseServerForm
|
||||
{
|
||||
public int EditIndex { get; set; }
|
||||
VmessItem vmessItem;
|
||||
|
||||
public AddServer2Form()
|
||||
{
|
||||
@@ -17,12 +18,22 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddServer2Form_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
cmbCoreType.Items.AddRange(Global.coreTypes.ToArray());
|
||||
cmbCoreType.Items.Add("clash");
|
||||
cmbCoreType.Items.Add("clash_meta");
|
||||
cmbCoreType.Items.Add("hysteria");
|
||||
cmbCoreType.Items.Add("naiveproxy");
|
||||
cmbCoreType.Items.Add(string.Empty);
|
||||
|
||||
txtAddress.ReadOnly = true;
|
||||
if (vmessItem != null)
|
||||
{
|
||||
BindingServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = new VmessItem();
|
||||
vmessItem.groupId = groupId;
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
@@ -32,10 +43,17 @@ namespace v2rayN.Forms
|
||||
/// </summary>
|
||||
private void BindingServer()
|
||||
{
|
||||
vmessItem = config.vmess[EditIndex];
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtAddress.ReadOnly = true;
|
||||
|
||||
if (vmessItem.coreType == null)
|
||||
{
|
||||
cmbCoreType.Text = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmbCoreType.Text = vmessItem.coreType.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,24 +70,90 @@ namespace v2rayN.Forms
|
||||
string remarks = txtRemarks.Text;
|
||||
if (Utils.IsNullOrEmpty(remarks))
|
||||
{
|
||||
UI.Show(UIRes.I18N("PleaseFillRemarks"));
|
||||
UI.Show(ResUI.PleaseFillRemarks);
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(txtAddress.Text))
|
||||
{
|
||||
UI.Show(ResUI.FillServerAddressCustom);
|
||||
return;
|
||||
}
|
||||
vmessItem.remarks = remarks;
|
||||
if (Utils.IsNullOrEmpty(cmbCoreType.Text))
|
||||
{
|
||||
vmessItem.coreType = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), cmbCoreType.Text);
|
||||
}
|
||||
|
||||
if (ConfigHandler.EditCustomServer(ref config, vmessItem, EditIndex) == 0)
|
||||
if (ConfigHandler.EditCustomServer(ref config, vmessItem) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
if (Utils.IsNullOrEmpty(vmessItem.indexId))
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnBrowse_Click(object sender, EventArgs e)
|
||||
{
|
||||
UI.Show(ResUI.CustomServerTips);
|
||||
|
||||
OpenFileDialog fileDialog = new OpenFileDialog
|
||||
{
|
||||
Multiselect = false,
|
||||
Filter = "Config|*.json|YAML|*.yaml|All|*.*"
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string fileName = fileDialog.FileName;
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
vmessItem.address = fileName;
|
||||
vmessItem.remarks = txtRemarks.Text;
|
||||
|
||||
if (ConfigHandler.AddCustomServer(ref config, vmessItem, false) == 0)
|
||||
{
|
||||
BindingServer();
|
||||
UI.Show(ResUI.SuccessfullyImportedCustomServer);
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.FailedImportedCustomServer);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnEdit_Click(object sender, EventArgs e)
|
||||
{
|
||||
var address = txtAddress.Text;
|
||||
if (Utils.IsNullOrEmpty(address))
|
||||
{
|
||||
UI.Show(ResUI.FillServerAddressCustom);
|
||||
return;
|
||||
}
|
||||
|
||||
address = Utils.GetConfigPath(address);
|
||||
Process.Start(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,74 +117,161 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<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">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 271</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Edit custom configuration server</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>396, 17</value>
|
||||
<value>450, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>303, 17</value>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
<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="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</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, 10</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 201</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnEdit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnEdit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>208, 110</value>
|
||||
</data>
|
||||
<data name="btnEdit.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnEdit.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>43</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>&Edit</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Name" xml:space="preserve">
|
||||
<value>btnEdit</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 157</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 20</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Name" xml:space="preserve">
|
||||
<value>cmbCoreType</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labCoreType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labCoreType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 161</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name="labCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>42</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core Type</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Name" xml:space="preserve">
|
||||
<value>labCoreType</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnBrowse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 110</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>&Browse</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Name" xml:space="preserve">
|
||||
<value>btnBrowse</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
</data>
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 37</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||
<value>txtAddress</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -201,6 +288,39 @@
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name=">>label13.Name" xml:space="preserve">
|
||||
<value>label13</value>
|
||||
</data>
|
||||
<data name=">>label13.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label13.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
@@ -208,7 +328,7 @@
|
||||
<value>12, 27</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
@@ -216,6 +336,132 @@
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<data name=">>label6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</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>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>8</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, 10</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 189</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 199</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>357, 17</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
@@ -228,37 +474,34 @@
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 211</value>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
</data>
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 104</value>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 259</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Custom configuration server</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>AddServer2Form</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -118,17 +118,26 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑自定义配置服务器</value>
|
||||
<value>自定义配置</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>浏览(&B)</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>编辑(&E)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core类型</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
</data>
|
||||
|
||||
231
v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
generated
231
v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
generated
@@ -1,231 +0,0 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class AddServer3Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer3Form));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.cmbSecurity = new System.Windows.Forms.ComboBox();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.txtId = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtAddress = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.menuServer.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.label13);
|
||||
this.groupBox1.Controls.Add(this.cmbSecurity);
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label5);
|
||||
this.groupBox1.Controls.Add(this.txtId);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.txtPort);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.txtAddress);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// label13
|
||||
//
|
||||
resources.ApplyResources(this.label13, "label13");
|
||||
this.label13.Name = "label13";
|
||||
//
|
||||
// cmbSecurity
|
||||
//
|
||||
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbSecurity.FormattingEnabled = true;
|
||||
this.cmbSecurity.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbSecurity.Items"),
|
||||
resources.GetString("cmbSecurity.Items1"),
|
||||
resources.GetString("cmbSecurity.Items2"),
|
||||
resources.GetString("cmbSecurity.Items3"),
|
||||
resources.GetString("cmbSecurity.Items4"),
|
||||
resources.GetString("cmbSecurity.Items5"),
|
||||
resources.GetString("cmbSecurity.Items6"),
|
||||
resources.GetString("cmbSecurity.Items7")});
|
||||
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
|
||||
this.cmbSecurity.Name = "cmbSecurity";
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// txtId
|
||||
//
|
||||
resources.ApplyResources(this.txtId, "txtId");
|
||||
this.txtId.Name = "txtId";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPort, "txtPort");
|
||||
this.txtPort.Name = "txtPort";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtAddress
|
||||
//
|
||||
resources.ApplyResources(this.txtAddress, "txtAddress");
|
||||
this.txtAddress.Name = "txtAddress";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// menuServer
|
||||
//
|
||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItem1});
|
||||
resources.ApplyResources(this.menuServer, "menuServer");
|
||||
this.menuServer.Name = "menuServer";
|
||||
//
|
||||
// MenuItem1
|
||||
//
|
||||
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuItemImportClipboard});
|
||||
this.MenuItem1.Name = "MenuItem1";
|
||||
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
||||
//
|
||||
// menuItemImportClipboard
|
||||
//
|
||||
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
|
||||
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
|
||||
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
|
||||
//
|
||||
// AddServer3Form
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.menuServer);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.MinimizeBox = true;
|
||||
this.Name = "AddServer3Form";
|
||||
this.Load += new System.EventHandler(this.AddServer3Form_Load);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.menuServer.ResumeLayout(false);
|
||||
this.menuServer.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.TextBox txtRemarks;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.TextBox txtId;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtAddress;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.ComboBox cmbSecurity;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.MenuStrip menuServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard;
|
||||
}
|
||||
}
|
||||
@@ -1,142 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class AddServer3Form : BaseForm
|
||||
{
|
||||
public int EditIndex { get; set; }
|
||||
VmessItem vmessItem = null;
|
||||
|
||||
public AddServer3Form()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void AddServer3Form_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
{
|
||||
vmessItem = config.vmess[EditIndex];
|
||||
BindingServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = new VmessItem();
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 绑定数据
|
||||
/// </summary>
|
||||
private void BindingServer()
|
||||
{
|
||||
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtId.Text = vmessItem.id;
|
||||
cmbSecurity.Text = vmessItem.security;
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 清除设置
|
||||
/// </summary>
|
||||
private void ClearServer()
|
||||
{
|
||||
txtAddress.Text = "";
|
||||
txtPort.Text = "";
|
||||
txtId.Text = "";
|
||||
cmbSecurity.Text = Global.DefaultSecurity;
|
||||
txtRemarks.Text = "";
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
string address = txtAddress.Text;
|
||||
string port = txtPort.Text;
|
||||
string id = txtId.Text;
|
||||
string security = cmbSecurity.Text;
|
||||
string remarks = txtRemarks.Text;
|
||||
|
||||
if (Utils.IsNullOrEmpty(address))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillServerAddress"));
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillCorrectServerPort"));
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(id))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillPassword"));
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(security))
|
||||
{
|
||||
UI.Show(UIRes.I18N("PleaseSelectEncryption"));
|
||||
return;
|
||||
}
|
||||
|
||||
vmessItem.address = address;
|
||||
vmessItem.port = Utils.ToInt(port);
|
||||
vmessItem.id = id;
|
||||
vmessItem.security = security;
|
||||
vmessItem.remarks = remarks;
|
||||
|
||||
if (ConfigHandler.AddShadowsocksServer(ref config, vmessItem, EditIndex) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
}
|
||||
}
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
|
||||
#region 导入配置
|
||||
|
||||
/// <summary>
|
||||
/// 从剪贴板导入URL
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void menuItemImportClipboard_Click(object sender, EventArgs e)
|
||||
{
|
||||
ImportConfig();
|
||||
}
|
||||
|
||||
private void ImportConfig()
|
||||
{
|
||||
ClearServer();
|
||||
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.ShowWarning(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
cmbSecurity.Text = vmessItem.security;
|
||||
txtId.Text = vmessItem.id;
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,131 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class AddServer4Form : BaseForm
|
||||
{
|
||||
public int EditIndex { get; set; }
|
||||
VmessItem vmessItem = null;
|
||||
|
||||
public AddServer4Form()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void AddServer4Form_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
{
|
||||
vmessItem = config.vmess[EditIndex];
|
||||
BindingServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = new VmessItem();
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 绑定数据
|
||||
/// </summary>
|
||||
private void BindingServer()
|
||||
{
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtId.Text = vmessItem.id;
|
||||
txtSecurity.Text = vmessItem.security;
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 清除设置
|
||||
/// </summary>
|
||||
private void ClearServer()
|
||||
{
|
||||
txtAddress.Text = "";
|
||||
txtPort.Text = "";
|
||||
txtId.Text = "";
|
||||
txtSecurity.Text = "";
|
||||
txtRemarks.Text = "";
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
string address = txtAddress.Text;
|
||||
string port = txtPort.Text;
|
||||
string id = txtId.Text;
|
||||
string security = txtSecurity.Text;
|
||||
string remarks = txtRemarks.Text;
|
||||
|
||||
if (Utils.IsNullOrEmpty(address))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillServerAddress"));
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillCorrectServerPort"));
|
||||
return;
|
||||
}
|
||||
|
||||
vmessItem.address = address;
|
||||
vmessItem.port = Utils.ToInt(port);
|
||||
vmessItem.id = id;
|
||||
vmessItem.security = security;
|
||||
vmessItem.remarks = remarks;
|
||||
|
||||
if (ConfigHandler.AddSocksServer(ref config, vmessItem, EditIndex) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
}
|
||||
}
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
|
||||
#region 导入配置
|
||||
|
||||
/// <summary>
|
||||
/// 从剪贴板导入URL
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void menuItemImportClipboard_Click(object sender, EventArgs e)
|
||||
{
|
||||
ImportConfig();
|
||||
}
|
||||
|
||||
private void ImportConfig()
|
||||
{
|
||||
ClearServer();
|
||||
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.ShowWarning(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtSecurity.Text = vmessItem.security;
|
||||
txtId.Text = vmessItem.id;
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
702
v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
generated
702
v2rayN/v2rayN/Forms/AddServerForm.Designer.cs
generated
@@ -31,59 +31,62 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServerForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.btnGUID = new System.Windows.Forms.Button();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.label24 = new System.Windows.Forms.Label();
|
||||
this.label23 = new System.Windows.Forms.Label();
|
||||
this.panTlsMore = new System.Windows.Forms.Panel();
|
||||
this.label22 = new System.Windows.Forms.Label();
|
||||
this.label21 = new System.Windows.Forms.Label();
|
||||
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
|
||||
this.label20 = new System.Windows.Forms.Label();
|
||||
this.txtPath = new System.Windows.Forms.TextBox();
|
||||
this.label19 = new System.Windows.Forms.Label();
|
||||
this.label18 = new System.Windows.Forms.Label();
|
||||
this.panSocks = new System.Windows.Forms.Panel();
|
||||
this.label17 = new System.Windows.Forms.Label();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.txtSecurity4 = new System.Windows.Forms.TextBox();
|
||||
this.label18 = new System.Windows.Forms.Label();
|
||||
this.txtId4 = new System.Windows.Forms.TextBox();
|
||||
this.panSs = new System.Windows.Forms.Panel();
|
||||
this.txtId3 = new System.Windows.Forms.TextBox();
|
||||
this.label15 = new System.Windows.Forms.Label();
|
||||
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
|
||||
this.cmbSecurity3 = new System.Windows.Forms.ComboBox();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.panTrojan = new System.Windows.Forms.Panel();
|
||||
this.label12 = new System.Windows.Forms.Label();
|
||||
this.txtRequestHost = new System.Windows.Forms.TextBox();
|
||||
this.label11 = new System.Windows.Forms.Label();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.cmbNetwork = new System.Windows.Forms.ComboBox();
|
||||
this.cmbFlow6 = new System.Windows.Forms.ComboBox();
|
||||
this.txtId6 = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.panVless = new System.Windows.Forms.Panel();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.cmbSecurity = new System.Windows.Forms.ComboBox();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.txtAlterId = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.txtId = new System.Windows.Forms.TextBox();
|
||||
this.cmbFlow5 = new System.Windows.Forms.ComboBox();
|
||||
this.txtId5 = new System.Windows.Forms.TextBox();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.btnGUID5 = new System.Windows.Forms.Button();
|
||||
this.cmbSecurity5 = new System.Windows.Forms.ComboBox();
|
||||
this.label11 = new System.Windows.Forms.Label();
|
||||
this.panVmess = new System.Windows.Forms.Panel();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtAddress = new System.Windows.Forms.TextBox();
|
||||
this.txtId = new System.Windows.Forms.TextBox();
|
||||
this.btnGUID = new System.Windows.Forms.Button();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.txtAlterId = new System.Windows.Forms.TextBox();
|
||||
this.cmbSecurity = new System.Windows.Forms.ComboBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.panAddr = new System.Windows.Forms.Panel();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.txtAddress = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.panBottom = new System.Windows.Forms.Panel();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.panTop = new System.Windows.Forms.Panel();
|
||||
this.panTran = new System.Windows.Forms.Panel();
|
||||
this.transportControl = new v2rayN.Forms.ServerTransportControl();
|
||||
this.cmbCoreType = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType = new System.Windows.Forms.Label();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.panTlsMore.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.menuServer.SuspendLayout();
|
||||
this.panSocks.SuspendLayout();
|
||||
this.panSs.SuspendLayout();
|
||||
this.panTrojan.SuspendLayout();
|
||||
this.panVless.SuspendLayout();
|
||||
this.panVmess.SuspendLayout();
|
||||
this.panAddr.SuspendLayout();
|
||||
this.panBottom.SuspendLayout();
|
||||
this.panTran.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
@@ -96,29 +99,189 @@
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.btnGUID);
|
||||
this.groupBox1.Controls.Add(this.label13);
|
||||
this.groupBox1.Controls.Add(this.groupBox2);
|
||||
this.groupBox1.Controls.Add(this.label9);
|
||||
this.groupBox1.Controls.Add(this.label8);
|
||||
this.groupBox1.Controls.Add(this.cmbNetwork);
|
||||
this.groupBox1.Controls.Add(this.label7);
|
||||
this.groupBox1.Controls.Add(this.cmbSecurity);
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label5);
|
||||
this.groupBox1.Controls.Add(this.txtAlterId);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.txtId);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.txtPort);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.txtAddress);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.panSocks);
|
||||
this.groupBox1.Controls.Add(this.panSs);
|
||||
this.groupBox1.Controls.Add(this.panTrojan);
|
||||
this.groupBox1.Controls.Add(this.panVless);
|
||||
this.groupBox1.Controls.Add(this.panVmess);
|
||||
this.groupBox1.Controls.Add(this.panAddr);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// panSocks
|
||||
//
|
||||
this.panSocks.Controls.Add(this.label17);
|
||||
this.panSocks.Controls.Add(this.txtSecurity4);
|
||||
this.panSocks.Controls.Add(this.label18);
|
||||
this.panSocks.Controls.Add(this.txtId4);
|
||||
resources.ApplyResources(this.panSocks, "panSocks");
|
||||
this.panSocks.Name = "panSocks";
|
||||
//
|
||||
// label17
|
||||
//
|
||||
resources.ApplyResources(this.label17, "label17");
|
||||
this.label17.Name = "label17";
|
||||
//
|
||||
// txtSecurity4
|
||||
//
|
||||
resources.ApplyResources(this.txtSecurity4, "txtSecurity4");
|
||||
this.txtSecurity4.Name = "txtSecurity4";
|
||||
//
|
||||
// label18
|
||||
//
|
||||
resources.ApplyResources(this.label18, "label18");
|
||||
this.label18.Name = "label18";
|
||||
//
|
||||
// txtId4
|
||||
//
|
||||
resources.ApplyResources(this.txtId4, "txtId4");
|
||||
this.txtId4.Name = "txtId4";
|
||||
//
|
||||
// panSs
|
||||
//
|
||||
this.panSs.Controls.Add(this.txtId3);
|
||||
this.panSs.Controls.Add(this.label15);
|
||||
this.panSs.Controls.Add(this.cmbSecurity3);
|
||||
this.panSs.Controls.Add(this.label16);
|
||||
resources.ApplyResources(this.panSs, "panSs");
|
||||
this.panSs.Name = "panSs";
|
||||
//
|
||||
// txtId3
|
||||
//
|
||||
resources.ApplyResources(this.txtId3, "txtId3");
|
||||
this.txtId3.Name = "txtId3";
|
||||
//
|
||||
// label15
|
||||
//
|
||||
resources.ApplyResources(this.label15, "label15");
|
||||
this.label15.Name = "label15";
|
||||
//
|
||||
// cmbSecurity3
|
||||
//
|
||||
this.cmbSecurity3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbSecurity3.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbSecurity3, "cmbSecurity3");
|
||||
this.cmbSecurity3.Name = "cmbSecurity3";
|
||||
//
|
||||
// label16
|
||||
//
|
||||
resources.ApplyResources(this.label16, "label16");
|
||||
this.label16.Name = "label16";
|
||||
//
|
||||
// panTrojan
|
||||
//
|
||||
this.panTrojan.Controls.Add(this.label12);
|
||||
this.panTrojan.Controls.Add(this.cmbFlow6);
|
||||
this.panTrojan.Controls.Add(this.txtId6);
|
||||
this.panTrojan.Controls.Add(this.label14);
|
||||
resources.ApplyResources(this.panTrojan, "panTrojan");
|
||||
this.panTrojan.Name = "panTrojan";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
resources.ApplyResources(this.label12, "label12");
|
||||
this.label12.Name = "label12";
|
||||
//
|
||||
// cmbFlow6
|
||||
//
|
||||
this.cmbFlow6.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbFlow6, "cmbFlow6");
|
||||
this.cmbFlow6.Name = "cmbFlow6";
|
||||
//
|
||||
// txtId6
|
||||
//
|
||||
resources.ApplyResources(this.txtId6, "txtId6");
|
||||
this.txtId6.Name = "txtId6";
|
||||
//
|
||||
// label14
|
||||
//
|
||||
resources.ApplyResources(this.label14, "label14");
|
||||
this.label14.Name = "label14";
|
||||
//
|
||||
// panVless
|
||||
//
|
||||
this.panVless.Controls.Add(this.label7);
|
||||
this.panVless.Controls.Add(this.cmbFlow5);
|
||||
this.panVless.Controls.Add(this.txtId5);
|
||||
this.panVless.Controls.Add(this.label9);
|
||||
this.panVless.Controls.Add(this.label10);
|
||||
this.panVless.Controls.Add(this.btnGUID5);
|
||||
this.panVless.Controls.Add(this.cmbSecurity5);
|
||||
this.panVless.Controls.Add(this.label11);
|
||||
resources.ApplyResources(this.panVless, "panVless");
|
||||
this.panVless.Name = "panVless";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
resources.ApplyResources(this.label7, "label7");
|
||||
this.label7.Name = "label7";
|
||||
//
|
||||
// cmbFlow5
|
||||
//
|
||||
this.cmbFlow5.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbFlow5, "cmbFlow5");
|
||||
this.cmbFlow5.Name = "cmbFlow5";
|
||||
//
|
||||
// txtId5
|
||||
//
|
||||
resources.ApplyResources(this.txtId5, "txtId5");
|
||||
this.txtId5.Name = "txtId5";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
resources.ApplyResources(this.label9, "label9");
|
||||
this.label9.Name = "label9";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
resources.ApplyResources(this.label10, "label10");
|
||||
this.label10.Name = "label10";
|
||||
//
|
||||
// btnGUID5
|
||||
//
|
||||
resources.ApplyResources(this.btnGUID5, "btnGUID5");
|
||||
this.btnGUID5.Name = "btnGUID5";
|
||||
this.btnGUID5.UseVisualStyleBackColor = true;
|
||||
this.btnGUID5.Click += new System.EventHandler(this.btnGUID_Click);
|
||||
//
|
||||
// cmbSecurity5
|
||||
//
|
||||
this.cmbSecurity5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;
|
||||
this.cmbSecurity5.FormattingEnabled = true;
|
||||
this.cmbSecurity5.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbSecurity5.Items")});
|
||||
resources.ApplyResources(this.cmbSecurity5, "cmbSecurity5");
|
||||
this.cmbSecurity5.Name = "cmbSecurity5";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
resources.ApplyResources(this.label11, "label11");
|
||||
this.label11.Name = "label11";
|
||||
//
|
||||
// panVmess
|
||||
//
|
||||
this.panVmess.Controls.Add(this.label3);
|
||||
this.panVmess.Controls.Add(this.txtId);
|
||||
this.panVmess.Controls.Add(this.btnGUID);
|
||||
this.panVmess.Controls.Add(this.label4);
|
||||
this.panVmess.Controls.Add(this.label8);
|
||||
this.panVmess.Controls.Add(this.txtAlterId);
|
||||
this.panVmess.Controls.Add(this.cmbSecurity);
|
||||
this.panVmess.Controls.Add(this.label5);
|
||||
resources.ApplyResources(this.panVmess, "panVmess");
|
||||
this.panVmess.Name = "panVmess";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtId
|
||||
//
|
||||
resources.ApplyResources(this.txtId, "txtId");
|
||||
this.txtId.Name = "txtId";
|
||||
//
|
||||
// btnGUID
|
||||
//
|
||||
resources.ApplyResources(this.btnGUID, "btnGUID");
|
||||
@@ -126,261 +289,82 @@
|
||||
this.btnGUID.UseVisualStyleBackColor = true;
|
||||
this.btnGUID.Click += new System.EventHandler(this.btnGUID_Click);
|
||||
//
|
||||
// label13
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label13, "label13");
|
||||
this.label13.Name = "label13";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.label24);
|
||||
this.groupBox2.Controls.Add(this.label23);
|
||||
this.groupBox2.Controls.Add(this.panTlsMore);
|
||||
this.groupBox2.Controls.Add(this.label20);
|
||||
this.groupBox2.Controls.Add(this.txtPath);
|
||||
this.groupBox2.Controls.Add(this.label19);
|
||||
this.groupBox2.Controls.Add(this.label18);
|
||||
this.groupBox2.Controls.Add(this.label17);
|
||||
this.groupBox2.Controls.Add(this.label16);
|
||||
this.groupBox2.Controls.Add(this.label14);
|
||||
this.groupBox2.Controls.Add(this.label15);
|
||||
this.groupBox2.Controls.Add(this.cmbStreamSecurity);
|
||||
this.groupBox2.Controls.Add(this.label12);
|
||||
this.groupBox2.Controls.Add(this.txtRequestHost);
|
||||
this.groupBox2.Controls.Add(this.label11);
|
||||
this.groupBox2.Controls.Add(this.label10);
|
||||
this.groupBox2.Controls.Add(this.cmbHeaderType);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// label24
|
||||
//
|
||||
resources.ApplyResources(this.label24, "label24");
|
||||
this.label24.Name = "label24";
|
||||
//
|
||||
// label23
|
||||
//
|
||||
resources.ApplyResources(this.label23, "label23");
|
||||
this.label23.Name = "label23";
|
||||
//
|
||||
// panTlsMore
|
||||
//
|
||||
this.panTlsMore.Controls.Add(this.label22);
|
||||
this.panTlsMore.Controls.Add(this.label21);
|
||||
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
|
||||
resources.ApplyResources(this.panTlsMore, "panTlsMore");
|
||||
this.panTlsMore.Name = "panTlsMore";
|
||||
//
|
||||
// label22
|
||||
//
|
||||
resources.ApplyResources(this.label22, "label22");
|
||||
this.label22.Name = "label22";
|
||||
//
|
||||
// label21
|
||||
//
|
||||
resources.ApplyResources(this.label21, "label21");
|
||||
this.label21.Name = "label21";
|
||||
//
|
||||
// cmbAllowInsecure
|
||||
//
|
||||
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbAllowInsecure.FormattingEnabled = true;
|
||||
this.cmbAllowInsecure.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbAllowInsecure.Items"),
|
||||
resources.GetString("cmbAllowInsecure.Items1"),
|
||||
resources.GetString("cmbAllowInsecure.Items2")});
|
||||
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
|
||||
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
|
||||
//
|
||||
// label20
|
||||
//
|
||||
resources.ApplyResources(this.label20, "label20");
|
||||
this.label20.Name = "label20";
|
||||
//
|
||||
// txtPath
|
||||
//
|
||||
resources.ApplyResources(this.txtPath, "txtPath");
|
||||
this.txtPath.Name = "txtPath";
|
||||
//
|
||||
// label19
|
||||
//
|
||||
resources.ApplyResources(this.label19, "label19");
|
||||
this.label19.Name = "label19";
|
||||
//
|
||||
// label18
|
||||
//
|
||||
resources.ApplyResources(this.label18, "label18");
|
||||
this.label18.Name = "label18";
|
||||
//
|
||||
// label17
|
||||
//
|
||||
resources.ApplyResources(this.label17, "label17");
|
||||
this.label17.Name = "label17";
|
||||
//
|
||||
// label16
|
||||
//
|
||||
resources.ApplyResources(this.label16, "label16");
|
||||
this.label16.Name = "label16";
|
||||
//
|
||||
// label14
|
||||
//
|
||||
resources.ApplyResources(this.label14, "label14");
|
||||
this.label14.Name = "label14";
|
||||
//
|
||||
// label15
|
||||
//
|
||||
resources.ApplyResources(this.label15, "label15");
|
||||
this.label15.Name = "label15";
|
||||
//
|
||||
// cmbStreamSecurity
|
||||
//
|
||||
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbStreamSecurity.FormattingEnabled = true;
|
||||
this.cmbStreamSecurity.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbStreamSecurity.Items"),
|
||||
resources.GetString("cmbStreamSecurity.Items1")});
|
||||
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
|
||||
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
|
||||
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
|
||||
//
|
||||
// label12
|
||||
//
|
||||
resources.ApplyResources(this.label12, "label12");
|
||||
this.label12.Name = "label12";
|
||||
//
|
||||
// txtRequestHost
|
||||
//
|
||||
resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
|
||||
this.txtRequestHost.Name = "txtRequestHost";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
resources.ApplyResources(this.label11, "label11");
|
||||
this.label11.Name = "label11";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
resources.ApplyResources(this.label10, "label10");
|
||||
this.label10.Name = "label10";
|
||||
//
|
||||
// cmbHeaderType
|
||||
//
|
||||
this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbHeaderType.FormattingEnabled = true;
|
||||
this.cmbHeaderType.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbHeaderType.Items"),
|
||||
resources.GetString("cmbHeaderType.Items1"),
|
||||
resources.GetString("cmbHeaderType.Items2"),
|
||||
resources.GetString("cmbHeaderType.Items3"),
|
||||
resources.GetString("cmbHeaderType.Items4"),
|
||||
resources.GetString("cmbHeaderType.Items5"),
|
||||
resources.GetString("cmbHeaderType.Items6")});
|
||||
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
|
||||
this.cmbHeaderType.Name = "cmbHeaderType";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
resources.ApplyResources(this.label9, "label9");
|
||||
this.label9.Name = "label9";
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
resources.ApplyResources(this.label8, "label8");
|
||||
this.label8.Name = "label8";
|
||||
//
|
||||
// cmbNetwork
|
||||
// txtAlterId
|
||||
//
|
||||
this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbNetwork.FormattingEnabled = true;
|
||||
this.cmbNetwork.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbNetwork.Items"),
|
||||
resources.GetString("cmbNetwork.Items1"),
|
||||
resources.GetString("cmbNetwork.Items2"),
|
||||
resources.GetString("cmbNetwork.Items3"),
|
||||
resources.GetString("cmbNetwork.Items4")});
|
||||
resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
|
||||
this.cmbNetwork.Name = "cmbNetwork";
|
||||
this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
|
||||
//
|
||||
// label7
|
||||
//
|
||||
resources.ApplyResources(this.label7, "label7");
|
||||
this.label7.Name = "label7";
|
||||
resources.ApplyResources(this.txtAlterId, "txtAlterId");
|
||||
this.txtAlterId.Name = "txtAlterId";
|
||||
//
|
||||
// cmbSecurity
|
||||
//
|
||||
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbSecurity.FormattingEnabled = true;
|
||||
this.cmbSecurity.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbSecurity.Items"),
|
||||
resources.GetString("cmbSecurity.Items1"),
|
||||
resources.GetString("cmbSecurity.Items2"),
|
||||
resources.GetString("cmbSecurity.Items3")});
|
||||
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
|
||||
this.cmbSecurity.Name = "cmbSecurity";
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// txtAlterId
|
||||
// panAddr
|
||||
//
|
||||
resources.ApplyResources(this.txtAlterId, "txtAlterId");
|
||||
this.txtAlterId.Name = "txtAlterId";
|
||||
this.panAddr.Controls.Add(this.cmbCoreType);
|
||||
this.panAddr.Controls.Add(this.labCoreType);
|
||||
this.panAddr.Controls.Add(this.label6);
|
||||
this.panAddr.Controls.Add(this.label1);
|
||||
this.panAddr.Controls.Add(this.txtAddress);
|
||||
this.panAddr.Controls.Add(this.label2);
|
||||
this.panAddr.Controls.Add(this.txtPort);
|
||||
this.panAddr.Controls.Add(this.txtRemarks);
|
||||
resources.ApplyResources(this.panAddr, "panAddr");
|
||||
this.panAddr.Name = "panAddr";
|
||||
//
|
||||
// label4
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// txtId
|
||||
//
|
||||
resources.ApplyResources(this.txtId, "txtId");
|
||||
this.txtId.Name = "txtId";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPort, "txtPort");
|
||||
this.txtPort.Name = "txtPort";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtAddress
|
||||
//
|
||||
resources.ApplyResources(this.txtAddress, "txtAddress");
|
||||
this.txtAddress.Name = "txtAddress";
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// panel2
|
||||
// txtAddress
|
||||
//
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
resources.ApplyResources(this.txtAddress, "txtAddress");
|
||||
this.txtAddress.Name = "txtAddress";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPort, "txtPort");
|
||||
this.txtPort.Name = "txtPort";
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
//
|
||||
// panBottom
|
||||
//
|
||||
this.panBottom.Controls.Add(this.btnClose);
|
||||
this.panBottom.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panBottom, "panBottom");
|
||||
this.panBottom.Name = "panBottom";
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
@@ -389,50 +373,34 @@
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// panel1
|
||||
// panTop
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
resources.ApplyResources(this.panTop, "panTop");
|
||||
this.panTop.Name = "panTop";
|
||||
//
|
||||
// menuServer
|
||||
// panTran
|
||||
//
|
||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItem1});
|
||||
resources.ApplyResources(this.menuServer, "menuServer");
|
||||
this.menuServer.Name = "menuServer";
|
||||
this.panTran.Controls.Add(this.transportControl);
|
||||
resources.ApplyResources(this.panTran, "panTran");
|
||||
this.panTran.Name = "panTran";
|
||||
//
|
||||
// MenuItem1
|
||||
// transportControl
|
||||
//
|
||||
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItemImportClient,
|
||||
this.MenuItemImportServer,
|
||||
this.toolStripSeparator1,
|
||||
this.MenuItemImportClipboard});
|
||||
this.MenuItem1.Name = "MenuItem1";
|
||||
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
||||
this.transportControl.AllowXtls = false;
|
||||
resources.ApplyResources(this.transportControl, "transportControl");
|
||||
this.transportControl.Name = "transportControl";
|
||||
//
|
||||
// MenuItemImportClient
|
||||
// cmbCoreType
|
||||
//
|
||||
this.MenuItemImportClient.Name = "MenuItemImportClient";
|
||||
resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient");
|
||||
this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click);
|
||||
this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||
this.cmbCoreType.Name = "cmbCoreType";
|
||||
//
|
||||
// MenuItemImportServer
|
||||
// labCoreType
|
||||
//
|
||||
this.MenuItemImportServer.Name = "MenuItemImportServer";
|
||||
resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer");
|
||||
this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// MenuItemImportClipboard
|
||||
//
|
||||
this.MenuItemImportClipboard.Name = "MenuItemImportClipboard";
|
||||
resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard");
|
||||
this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click);
|
||||
resources.ApplyResources(this.labCoreType, "labCoreType");
|
||||
this.labCoreType.Name = "labCoreType";
|
||||
//
|
||||
// AddServerForm
|
||||
//
|
||||
@@ -440,23 +408,28 @@
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.menuServer);
|
||||
this.Controls.Add(this.panTran);
|
||||
this.Controls.Add(this.panBottom);
|
||||
this.Controls.Add(this.panTop);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Name = "AddServerForm";
|
||||
this.Load += new System.EventHandler(this.AddServerForm_Load);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.panTlsMore.ResumeLayout(false);
|
||||
this.panTlsMore.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.menuServer.ResumeLayout(false);
|
||||
this.menuServer.PerformLayout();
|
||||
this.panSocks.ResumeLayout(false);
|
||||
this.panSocks.PerformLayout();
|
||||
this.panSs.ResumeLayout(false);
|
||||
this.panSs.PerformLayout();
|
||||
this.panTrojan.ResumeLayout(false);
|
||||
this.panTrojan.PerformLayout();
|
||||
this.panVless.ResumeLayout(false);
|
||||
this.panVless.PerformLayout();
|
||||
this.panVmess.ResumeLayout(false);
|
||||
this.panVmess.PerformLayout();
|
||||
this.panAddr.ResumeLayout(false);
|
||||
this.panAddr.PerformLayout();
|
||||
this.panBottom.ResumeLayout(false);
|
||||
this.panTran.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
@@ -477,40 +450,39 @@
|
||||
private System.Windows.Forms.TextBox txtAddress;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.ComboBox cmbSecurity;
|
||||
private System.Windows.Forms.ComboBox cmbNetwork;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.TextBox txtRequestHost;
|
||||
private System.Windows.Forms.Label label10;
|
||||
private System.Windows.Forms.Label label11;
|
||||
private System.Windows.Forms.ComboBox cmbHeaderType;
|
||||
private System.Windows.Forms.Label label12;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.MenuStrip menuServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer;
|
||||
private System.Windows.Forms.Label label15;
|
||||
private System.Windows.Forms.ComboBox cmbStreamSecurity;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard;
|
||||
private System.Windows.Forms.Panel panTop;
|
||||
private System.Windows.Forms.Panel panBottom;
|
||||
private System.Windows.Forms.Button btnGUID;
|
||||
private System.Windows.Forms.Label label16;
|
||||
private System.Windows.Forms.Panel panTran;
|
||||
private ServerTransportControl transportControl;
|
||||
private System.Windows.Forms.Panel panAddr;
|
||||
private System.Windows.Forms.Panel panVmess;
|
||||
private System.Windows.Forms.Panel panVless;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.ComboBox cmbFlow5;
|
||||
private System.Windows.Forms.TextBox txtId5;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Label label10;
|
||||
private System.Windows.Forms.Button btnGUID5;
|
||||
private System.Windows.Forms.ComboBox cmbSecurity5;
|
||||
private System.Windows.Forms.Label label11;
|
||||
private System.Windows.Forms.Panel panTrojan;
|
||||
private System.Windows.Forms.Label label12;
|
||||
private System.Windows.Forms.ComboBox cmbFlow6;
|
||||
private System.Windows.Forms.TextBox txtId6;
|
||||
private System.Windows.Forms.Label label14;
|
||||
private System.Windows.Forms.Panel panSs;
|
||||
private System.Windows.Forms.TextBox txtId3;
|
||||
private System.Windows.Forms.Label label15;
|
||||
private System.Windows.Forms.ComboBox cmbSecurity3;
|
||||
private System.Windows.Forms.Label label16;
|
||||
private System.Windows.Forms.Panel panSocks;
|
||||
private System.Windows.Forms.Label label17;
|
||||
private System.Windows.Forms.TextBox txtSecurity4;
|
||||
private System.Windows.Forms.Label label18;
|
||||
private System.Windows.Forms.Label label19;
|
||||
private System.Windows.Forms.TextBox txtPath;
|
||||
private System.Windows.Forms.Label label20;
|
||||
private System.Windows.Forms.Label label21;
|
||||
private System.Windows.Forms.ComboBox cmbAllowInsecure;
|
||||
private System.Windows.Forms.Label label22;
|
||||
private System.Windows.Forms.Panel panTlsMore;
|
||||
private System.Windows.Forms.Label label24;
|
||||
private System.Windows.Forms.Label label23;
|
||||
private System.Windows.Forms.TextBox txtId4;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType;
|
||||
private System.Windows.Forms.Label labCoreType;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class AddServerForm : BaseForm
|
||||
public partial class AddServerForm : BaseServerForm
|
||||
{
|
||||
public int EditIndex { get; set; }
|
||||
VmessItem vmessItem = null;
|
||||
|
||||
public AddServerForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -17,14 +16,57 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddServerForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
this.Text = (eConfigType).ToString();
|
||||
|
||||
cmbCoreType.Items.AddRange(Global.coreTypes.ToArray());
|
||||
cmbCoreType.Items.Add(string.Empty);
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
panVmess.Dock = DockStyle.Fill;
|
||||
panVmess.Visible = true;
|
||||
|
||||
cmbSecurity.Items.AddRange(Global.vmessSecuritys.ToArray());
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
panSs.Dock = DockStyle.Fill;
|
||||
panSs.Visible = true;
|
||||
panTran.Visible = false;
|
||||
this.Height = this.Height - panTran.Height;
|
||||
|
||||
cmbSecurity3.Items.AddRange(LazyConfig.Instance.GetShadowsocksSecuritys().ToArray());
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
panSocks.Dock = DockStyle.Fill;
|
||||
panSocks.Visible = true;
|
||||
panTran.Visible = false;
|
||||
this.Height = this.Height - panTran.Height;
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
panVless.Dock = DockStyle.Fill;
|
||||
panVless.Visible = true;
|
||||
transportControl.AllowXtls = true;
|
||||
|
||||
cmbFlow5.Items.AddRange(Global.xtlsFlows.ToArray());
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
panTrojan.Dock = DockStyle.Fill;
|
||||
panTrojan.Visible = true;
|
||||
transportControl.AllowXtls = true;
|
||||
|
||||
cmbFlow6.Items.AddRange(Global.xtlsFlows.ToArray());
|
||||
break;
|
||||
}
|
||||
|
||||
if (vmessItem != null)
|
||||
{
|
||||
vmessItem = config.vmess[EditIndex];
|
||||
BindingServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = new VmessItem();
|
||||
vmessItem.groupId = groupId;
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
@@ -34,261 +76,215 @@ namespace v2rayN.Forms
|
||||
/// </summary>
|
||||
private void BindingServer()
|
||||
{
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtId.Text = vmessItem.id;
|
||||
txtAlterId.Text = vmessItem.alterId.ToString();
|
||||
cmbSecurity.Text = vmessItem.security;
|
||||
cmbNetwork.Text = vmessItem.network;
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
|
||||
cmbHeaderType.Text = vmessItem.headerType;
|
||||
txtRequestHost.Text = vmessItem.requestHost;
|
||||
txtPath.Text = vmessItem.path;
|
||||
cmbStreamSecurity.Text = vmessItem.streamSecurity;
|
||||
cmbAllowInsecure.Text = vmessItem.allowInsecure;
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
txtId.Text = vmessItem.id;
|
||||
txtAlterId.Text = vmessItem.alterId.ToString();
|
||||
cmbSecurity.Text = vmessItem.security;
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
txtId3.Text = vmessItem.id;
|
||||
cmbSecurity3.Text = vmessItem.security;
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
txtId4.Text = vmessItem.id;
|
||||
txtSecurity4.Text = vmessItem.security;
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
txtId5.Text = vmessItem.id;
|
||||
cmbFlow5.Text = vmessItem.flow;
|
||||
cmbSecurity5.Text = vmessItem.security;
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
txtId6.Text = vmessItem.id;
|
||||
cmbFlow6.Text = vmessItem.flow;
|
||||
break;
|
||||
}
|
||||
|
||||
if (vmessItem.coreType == null)
|
||||
{
|
||||
cmbCoreType.Text = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmbCoreType.Text = vmessItem.coreType.ToString();
|
||||
}
|
||||
|
||||
transportControl.BindingServer(vmessItem);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 清除设置
|
||||
/// </summary>
|
||||
private void ClearServer()
|
||||
{
|
||||
txtRemarks.Text = "";
|
||||
txtAddress.Text = "";
|
||||
txtPort.Text = "";
|
||||
txtId.Text = "";
|
||||
txtAlterId.Text = "0";
|
||||
cmbSecurity.Text = Global.DefaultSecurity;
|
||||
cmbNetwork.Text = Global.DefaultNetwork;
|
||||
txtRemarks.Text = "";
|
||||
|
||||
cmbHeaderType.Text = Global.None;
|
||||
txtRequestHost.Text = "";
|
||||
cmbStreamSecurity.Text = "";
|
||||
cmbAllowInsecure.Text = "";
|
||||
txtPath.Text = "";
|
||||
}
|
||||
|
||||
|
||||
private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetHeaderType();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置伪装选项
|
||||
/// </summary>
|
||||
private void SetHeaderType()
|
||||
{
|
||||
cmbHeaderType.Items.Clear();
|
||||
|
||||
string network = cmbNetwork.Text;
|
||||
if (Utils.IsNullOrEmpty(network))
|
||||
switch (eConfigType)
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
return;
|
||||
case EConfigType.Vmess:
|
||||
txtId.Text = "";
|
||||
txtAlterId.Text = "0";
|
||||
cmbSecurity.Text = Global.DefaultSecurity;
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
txtId3.Text = "";
|
||||
cmbSecurity3.Text = Global.DefaultSecurity;
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
txtId4.Text = "";
|
||||
txtSecurity4.Text = "";
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
txtId5.Text = "";
|
||||
cmbFlow5.Text = "";
|
||||
cmbSecurity5.Text = Global.None;
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
txtId6.Text = "";
|
||||
cmbFlow6.Text = "";
|
||||
break;
|
||||
}
|
||||
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
if (network.Equals(Global.DefaultNetwork))
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
|
||||
}
|
||||
else if (network.Equals("kcp") || network.Equals("quic"))
|
||||
{
|
||||
cmbHeaderType.Items.Add("srtp");
|
||||
cmbHeaderType.Items.Add("utp");
|
||||
cmbHeaderType.Items.Add("wechat-video");
|
||||
cmbHeaderType.Items.Add("dtls");
|
||||
cmbHeaderType.Items.Add("wireguard");
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
cmbHeaderType.Text = Global.None;
|
||||
transportControl.ClearServer(vmessItem);
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
string remarks = txtRemarks.Text;
|
||||
string address = txtAddress.Text;
|
||||
string port = txtPort.Text;
|
||||
string id = txtId.Text;
|
||||
string alterId = txtAlterId.Text;
|
||||
string security = cmbSecurity.Text;
|
||||
string network = cmbNetwork.Text;
|
||||
string remarks = txtRemarks.Text;
|
||||
|
||||
string headerType = cmbHeaderType.Text;
|
||||
string requestHost = txtRequestHost.Text;
|
||||
string path = txtPath.Text;
|
||||
string streamSecurity = cmbStreamSecurity.Text;
|
||||
string allowInsecure = cmbAllowInsecure.Text;
|
||||
string id = string.Empty;
|
||||
string alterId = string.Empty;
|
||||
string security = string.Empty;
|
||||
string flow = string.Empty;
|
||||
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
id = txtId.Text;
|
||||
alterId = txtAlterId.Text;
|
||||
security = cmbSecurity.Text;
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
id = txtId3.Text;
|
||||
security = cmbSecurity3.Text;
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
id = txtId4.Text;
|
||||
security = txtSecurity4.Text;
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
id = txtId5.Text;
|
||||
flow = cmbFlow5.Text;
|
||||
security = cmbSecurity5.Text;
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
id = txtId6.Text;
|
||||
flow = cmbFlow6.Text;
|
||||
break;
|
||||
}
|
||||
|
||||
if (Utils.IsNullOrEmpty(address))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillServerAddress"));
|
||||
UI.Show(ResUI.FillServerAddress);
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillCorrectServerPort"));
|
||||
UI.Show(ResUI.FillCorrectServerPort);
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(id))
|
||||
if (eConfigType == EConfigType.Shadowsocks)
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillUUID"));
|
||||
return;
|
||||
if (Utils.IsNullOrEmpty(id))
|
||||
{
|
||||
UI.Show(ResUI.FillPassword);
|
||||
return;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(security))
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectEncryption);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(alterId) || !Utils.IsNumberic(alterId))
|
||||
if (eConfigType != EConfigType.Socks)
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillCorrectAlterId"));
|
||||
return;
|
||||
if (Utils.IsNullOrEmpty(id))
|
||||
{
|
||||
UI.Show(ResUI.FillUUID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
transportControl.EndBindingServer();
|
||||
|
||||
vmessItem.remarks = remarks;
|
||||
vmessItem.address = address;
|
||||
vmessItem.port = Utils.ToInt(port);
|
||||
vmessItem.id = id;
|
||||
vmessItem.alterId = Utils.ToInt(alterId);
|
||||
vmessItem.security = security;
|
||||
vmessItem.network = network;
|
||||
vmessItem.remarks = remarks;
|
||||
|
||||
vmessItem.headerType = headerType;
|
||||
vmessItem.requestHost = requestHost.Replace(" ", "");
|
||||
vmessItem.path = path.Replace(" ", "");
|
||||
vmessItem.streamSecurity = streamSecurity;
|
||||
vmessItem.allowInsecure = allowInsecure;
|
||||
if (Utils.IsNullOrEmpty(cmbCoreType.Text))
|
||||
{
|
||||
vmessItem.coreType = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), cmbCoreType.Text);
|
||||
}
|
||||
|
||||
if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0)
|
||||
int ret = -1;
|
||||
switch (eConfigType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
ret = ConfigHandler.AddServer(ref config, vmessItem);
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
ret = ConfigHandler.AddShadowsocksServer(ref config, vmessItem);
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
ret = ConfigHandler.AddSocksServer(ref config, vmessItem);
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
vmessItem.flow = flow;
|
||||
ret = ConfigHandler.AddVlessServer(ref config, vmessItem);
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
vmessItem.flow = flow;
|
||||
ret = ConfigHandler.AddTrojanServer(ref config, vmessItem);
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void btnGUID_Click(object sender, EventArgs e)
|
||||
{
|
||||
txtId.Text = Utils.GetGUID();
|
||||
txtId.Text =
|
||||
txtId5.Text = Utils.GetGUID();
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
|
||||
#region 导入客户端/服务端配置
|
||||
|
||||
/// <summary>
|
||||
/// 导入客户端
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void MenuItemImportClient_Click(object sender, EventArgs e)
|
||||
{
|
||||
MenuItemImport(1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导入服务端
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void MenuItemImportServer_Click(object sender, EventArgs e)
|
||||
{
|
||||
MenuItemImport(2);
|
||||
}
|
||||
|
||||
private void MenuItemImport(int type)
|
||||
{
|
||||
ClearServer();
|
||||
|
||||
OpenFileDialog fileDialog = new OpenFileDialog
|
||||
{
|
||||
Multiselect = false,
|
||||
Filter = "Config|*.json|All|*.*"
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string fileName = fileDialog.FileName;
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
string msg;
|
||||
VmessItem vmessItem;
|
||||
if (type.Equals(1))
|
||||
{
|
||||
vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg);
|
||||
}
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.ShowWarning(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtId.Text = vmessItem.id;
|
||||
txtAlterId.Text = vmessItem.alterId.ToString();
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
cmbNetwork.Text = vmessItem.network;
|
||||
cmbHeaderType.Text = vmessItem.headerType;
|
||||
txtRequestHost.Text = vmessItem.requestHost;
|
||||
txtPath.Text = vmessItem.path;
|
||||
cmbStreamSecurity.Text = vmessItem.streamSecurity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从剪贴板导入URL
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void MenuItemImportClipboard_Click(object sender, EventArgs e)
|
||||
{
|
||||
ClearServer();
|
||||
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.ShowWarning(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtPort.Text = vmessItem.port.ToString();
|
||||
txtId.Text = vmessItem.id;
|
||||
txtAlterId.Text = vmessItem.alterId.ToString();
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
cmbNetwork.Text = vmessItem.network;
|
||||
cmbHeaderType.Text = vmessItem.headerType;
|
||||
txtRequestHost.Text = vmessItem.requestHost;
|
||||
txtPath.Text = vmessItem.path;
|
||||
cmbStreamSecurity.Text = vmessItem.streamSecurity;
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
string security = cmbStreamSecurity.Text;
|
||||
if (Utils.IsNullOrEmpty(security))
|
||||
{
|
||||
panTlsMore.Hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
panTlsMore.Show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -117,111 +117,97 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[VMess]服务器</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnGUID.Text" xml:space="preserve">
|
||||
<value>生成(&G)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 171</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>211, 20</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 143</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>211, 20</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>不清楚则保持默认值</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>270, 156</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>115, 61</value>
|
||||
</data>
|
||||
<data name="label10.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label10.Text" xml:space="preserve">
|
||||
<value>伪装域名(host)</value>
|
||||
</data>
|
||||
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label11.Text" xml:space="preserve">
|
||||
<value>伪装类型(type)</value>
|
||||
</data>
|
||||
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>197, 12</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>*tcp或kcp或QUIC伪装类型,默认none</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>1)http host中间逗号(,)隔开</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<data name="label17.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label17.Text" xml:space="preserve">
|
||||
<value>用户名(可选)</value>
|
||||
</data>
|
||||
<data name="label18.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>密码(可选)</value>
|
||||
</data>
|
||||
<data name="panel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>142, 147</value>
|
||||
</data>
|
||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>137, 78</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>底层传输安全</value>
|
||||
<value>密码(password)</value>
|
||||
</data>
|
||||
<data name="label19.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<data name="label16.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>125, 12</value>
|
||||
</data>
|
||||
<data name="label16.Text" xml:space="preserve">
|
||||
<value>加密方式(encryption)</value>
|
||||
</data>
|
||||
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>密码(password)</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label19.Text" xml:space="preserve">
|
||||
<value>路径(path)</value>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>流控(flow)</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<data name="panVless.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>110, 52</value>
|
||||
</data>
|
||||
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>端口(port)</value>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>用户ID(id)</value>
|
||||
</data>
|
||||
<data name="label20.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>149, 12</value>
|
||||
<data name="label9.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label20.Text" xml:space="preserve">
|
||||
<value>3)h2 host中间逗号(,)隔开</value>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>流控(flow)</value>
|
||||
</data>
|
||||
<data name="label22.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
<data name="label10.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name="label22.Text" xml:space="preserve">
|
||||
<value>默认true</value>
|
||||
<data name="label10.Text" xml:space="preserve">
|
||||
<value>加密(encryption)</value>
|
||||
</data>
|
||||
<data name="label23.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
<data name="button1.Text" xml:space="preserve">
|
||||
<value>生成</value>
|
||||
</data>
|
||||
<data name="label23.Text" xml:space="preserve">
|
||||
<value>4)QUIC 加密方式</value>
|
||||
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name="label24.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label24.Text" xml:space="preserve">
|
||||
<value>3)QUIC 加密密钥</value>
|
||||
<data name="label11.Text" xml:space="preserve">
|
||||
<value>*非空(none)</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
@@ -229,12 +215,27 @@
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>用户ID(id)</value>
|
||||
</data>
|
||||
<data name="btnGUID.Text" xml:space="preserve">
|
||||
<value>生成(&G)</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>额外ID(alterId)</value>
|
||||
</data>
|
||||
<data name="label8.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label8.Text" xml:space="preserve">
|
||||
<value>*随便选,建议(auto)</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>126, 65</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>211, 20</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
@@ -247,55 +248,28 @@
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>107, 12</value>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>传输协议(network)</value>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
</data>
|
||||
<data name="label8.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label8.Text" xml:space="preserve">
|
||||
<value>*随便选,建议(auto)</value>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>端口(port)</value>
|
||||
</data>
|
||||
<data name="label9.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 12</value>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>*默认tcp,选错会无法连接</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[VMess]服务器</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>92, 21</value>
|
||||
<data name="btnGUID5.Text" xml:space="preserve">
|
||||
<value>生成</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>导入配置文件</value>
|
||||
</data>
|
||||
<data name="MenuItemImportClient.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>171, 22</value>
|
||||
</data>
|
||||
<data name="MenuItemImportClient.Text" xml:space="preserve">
|
||||
<value>导入客户端配置</value>
|
||||
</data>
|
||||
<data name="MenuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>171, 22</value>
|
||||
</data>
|
||||
<data name="MenuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入URL</value>
|
||||
</data>
|
||||
<data name="MenuItemImportServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>171, 22</value>
|
||||
</data>
|
||||
<data name="MenuItemImportServer.Text" xml:space="preserve">
|
||||
<value>导入服务端配置</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 6</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>124, 58</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>334, 51</value>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core类型</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -7,7 +7,6 @@ namespace v2rayN.Forms
|
||||
public partial class BaseForm : Form
|
||||
{
|
||||
protected static Config config;
|
||||
protected static System.Drawing.Icon icon;
|
||||
|
||||
public BaseForm()
|
||||
{
|
||||
@@ -19,16 +18,14 @@ namespace v2rayN.Forms
|
||||
{
|
||||
try
|
||||
{
|
||||
if (icon == null)
|
||||
string file = Utils.GetPath(Global.CustomIconName);
|
||||
if (System.IO.File.Exists(file))
|
||||
{
|
||||
string file = Utils.GetPath(Global.CustomIconName);
|
||||
if (!System.IO.File.Exists(file))
|
||||
{
|
||||
return;
|
||||
}
|
||||
icon = new System.Drawing.Icon(file);
|
||||
this.Icon = new System.Drawing.Icon(file);
|
||||
return;
|
||||
}
|
||||
this.Icon = icon;
|
||||
|
||||
this.Icon = Properties.Resources.NotifyIcon1;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
50
v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs
generated
Normal file
50
v2rayN/v2rayN/Forms/BaseServerForm.Designer.cs
generated
Normal file
@@ -0,0 +1,50 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class BaseServerForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseServerForm));
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// BaseServerForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(292, 273);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "BaseServerForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "BaseServerForm";
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
19
v2rayN/v2rayN/Forms/BaseServerForm.cs
Normal file
19
v2rayN/v2rayN/Forms/BaseServerForm.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class BaseServerForm : BaseForm
|
||||
{
|
||||
public VmessItem vmessItem = null;
|
||||
public string groupId;
|
||||
public EConfigType eConfigType;
|
||||
|
||||
public BaseServerForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -117,4 +117,5 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
</root>
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class AddServer4Form
|
||||
partial class GlobalHotkeySettingForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
@@ -28,118 +28,49 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer4Form));
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GlobalHotkeySettingForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.txtSecurity = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.txtId = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtAddress = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnReset = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.txtGlobalHotkey3 = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.txtGlobalHotkey2 = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.txtGlobalHotkey1 = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.txtGlobalHotkey0 = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.panel2.SuspendLayout();
|
||||
this.menuServer.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.txtSecurity);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.txtId);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label13);
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.txtPort);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.txtAddress);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// txtSecurity
|
||||
//
|
||||
resources.ApplyResources(this.txtSecurity, "txtSecurity");
|
||||
this.txtSecurity.Name = "txtSecurity";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// txtId
|
||||
//
|
||||
resources.ApplyResources(this.txtId, "txtId");
|
||||
this.txtId.Name = "txtId";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// label13
|
||||
//
|
||||
resources.ApplyResources(this.label13, "label13");
|
||||
this.label13.Name = "label13";
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPort, "txtPort");
|
||||
this.txtPort.Name = "txtPort";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtAddress
|
||||
//
|
||||
resources.ApplyResources(this.txtAddress, "txtAddress");
|
||||
this.txtAddress.Name = "txtAddress";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Controls.Add(this.btnReset);
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnReset
|
||||
//
|
||||
resources.ApplyResources(this.btnReset, "btnReset");
|
||||
this.btnReset.Name = "btnReset";
|
||||
this.btnReset.UseVisualStyleBackColor = true;
|
||||
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
@@ -150,71 +81,106 @@
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Controls.Add(this.label6);
|
||||
this.panel1.Controls.Add(this.label5);
|
||||
this.panel1.Controls.Add(this.txtGlobalHotkey3);
|
||||
this.panel1.Controls.Add(this.label4);
|
||||
this.panel1.Controls.Add(this.txtGlobalHotkey2);
|
||||
this.panel1.Controls.Add(this.label3);
|
||||
this.panel1.Controls.Add(this.txtGlobalHotkey1);
|
||||
this.panel1.Controls.Add(this.label1);
|
||||
this.panel1.Controls.Add(this.txtGlobalHotkey0);
|
||||
this.panel1.Controls.Add(this.label2);
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// menuServer
|
||||
// label6
|
||||
//
|
||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItem1});
|
||||
resources.ApplyResources(this.menuServer, "menuServer");
|
||||
this.menuServer.Name = "menuServer";
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.ForeColor = System.Drawing.Color.Red;
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// MenuItem1
|
||||
// label5
|
||||
//
|
||||
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuItemImportClipboard});
|
||||
this.MenuItem1.Name = "MenuItem1";
|
||||
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.ForeColor = System.Drawing.Color.Red;
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// menuItemImportClipboard
|
||||
// txtGlobalHotkey3
|
||||
//
|
||||
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
|
||||
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
|
||||
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
|
||||
resources.ApplyResources(this.txtGlobalHotkey3, "txtGlobalHotkey3");
|
||||
this.txtGlobalHotkey3.Name = "txtGlobalHotkey3";
|
||||
this.txtGlobalHotkey3.ReadOnly = true;
|
||||
//
|
||||
// AddServer4Form
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// txtGlobalHotkey2
|
||||
//
|
||||
resources.ApplyResources(this.txtGlobalHotkey2, "txtGlobalHotkey2");
|
||||
this.txtGlobalHotkey2.Name = "txtGlobalHotkey2";
|
||||
this.txtGlobalHotkey2.ReadOnly = true;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtGlobalHotkey1
|
||||
//
|
||||
resources.ApplyResources(this.txtGlobalHotkey1, "txtGlobalHotkey1");
|
||||
this.txtGlobalHotkey1.Name = "txtGlobalHotkey1";
|
||||
this.txtGlobalHotkey1.ReadOnly = true;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// txtGlobalHotkey0
|
||||
//
|
||||
resources.ApplyResources(this.txtGlobalHotkey0, "txtGlobalHotkey0");
|
||||
this.txtGlobalHotkey0.Name = "txtGlobalHotkey0";
|
||||
this.txtGlobalHotkey0.ReadOnly = true;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// GlobalHotkeySettingForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.menuServer);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.MinimizeBox = true;
|
||||
this.Name = "AddServer4Form";
|
||||
this.Load += new System.EventHandler(this.AddServer4Form_Load);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.Name = "GlobalHotkeySettingForm";
|
||||
this.Load += new System.EventHandler(this.GlobalHotkeySettingForm_Load);
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.menuServer.ResumeLayout(false);
|
||||
this.menuServer.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.TextBox txtRemarks;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtAddress;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.MenuStrip menuServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard;
|
||||
private System.Windows.Forms.TextBox txtId;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox txtSecurity;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.TextBox txtGlobalHotkey0;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtGlobalHotkey3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox txtGlobalHotkey2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox txtGlobalHotkey1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Button btnReset;
|
||||
private System.Windows.Forms.Label label6;
|
||||
}
|
||||
}
|
||||
139
v2rayN/v2rayN/Forms/GlobalHotkeySettingForm.cs
Normal file
139
v2rayN/v2rayN/Forms/GlobalHotkeySettingForm.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class GlobalHotkeySettingForm : BaseForm
|
||||
{
|
||||
List<KeyEventItem> lstKey;
|
||||
public GlobalHotkeySettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void GlobalHotkeySettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (config.globalHotkeys == null)
|
||||
{
|
||||
config.globalHotkeys = new List<KeyEventItem>();
|
||||
}
|
||||
|
||||
foreach (EGlobalHotkey it in Enum.GetValues(typeof(EGlobalHotkey)))
|
||||
{
|
||||
if (config.globalHotkeys.FindIndex(t => t.eGlobalHotkey == it) >= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
config.globalHotkeys.Add(new KeyEventItem()
|
||||
{
|
||||
eGlobalHotkey = it,
|
||||
Alt = false,
|
||||
Control = false,
|
||||
Shift = false,
|
||||
KeyCode = null
|
||||
});
|
||||
}
|
||||
|
||||
lstKey = Utils.DeepCopy(config.globalHotkeys);
|
||||
|
||||
txtGlobalHotkey0.KeyDown += TxtGlobalHotkey_KeyDown;
|
||||
txtGlobalHotkey1.KeyDown += TxtGlobalHotkey_KeyDown;
|
||||
txtGlobalHotkey2.KeyDown += TxtGlobalHotkey_KeyDown;
|
||||
txtGlobalHotkey3.KeyDown += TxtGlobalHotkey_KeyDown;
|
||||
|
||||
BindingData(-1);
|
||||
}
|
||||
|
||||
private void TxtGlobalHotkey_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
var txt = ((TextBox)sender);
|
||||
var index = Utils.ToInt(txt.Name.Substring(txt.Name.Length - 1, 1));
|
||||
|
||||
lstKey[index].KeyCode = e.KeyCode;
|
||||
lstKey[index].Alt = e.Alt;
|
||||
lstKey[index].Control = e.Control;
|
||||
lstKey[index].Shift = e.Shift;
|
||||
|
||||
BindingData(index);
|
||||
}
|
||||
|
||||
private void BindingData(int index)
|
||||
{
|
||||
for (int k = 0; k < lstKey.Count; k++)
|
||||
{
|
||||
if (index >= 0 && index != k)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var item = lstKey[k];
|
||||
var keys = string.Empty;
|
||||
|
||||
if (item.Control)
|
||||
{
|
||||
keys += $"{Keys.Control.ToString()} + ";
|
||||
}
|
||||
if (item.Alt)
|
||||
{
|
||||
keys += $"{Keys.Alt.ToString()} + ";
|
||||
}
|
||||
if (item.Shift)
|
||||
{
|
||||
keys += $"{Keys.Shift.ToString()} + ";
|
||||
}
|
||||
if (item.KeyCode != null)
|
||||
{
|
||||
keys += $"{item.KeyCode.ToString()}";
|
||||
}
|
||||
|
||||
panel1.Controls[$"txtGlobalHotkey{k}"].Text = keys;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
config.globalHotkeys = lstKey;
|
||||
|
||||
if (ConfigHandler.SaveConfig(ref config, false) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void btnReset_Click(object sender, EventArgs e)
|
||||
{
|
||||
lstKey.Clear();
|
||||
foreach (EGlobalHotkey it in Enum.GetValues(typeof(EGlobalHotkey)))
|
||||
{
|
||||
if (lstKey.FindIndex(t => t.eGlobalHotkey == it) >= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
lstKey.Add(new KeyEventItem()
|
||||
{
|
||||
eGlobalHotkey = it,
|
||||
Alt = false,
|
||||
Control = false,
|
||||
Shift = false,
|
||||
KeyCode = null
|
||||
});
|
||||
}
|
||||
BindingData(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
537
v2rayN/v2rayN/Forms/GlobalHotkeySettingForm.resx
Normal file
537
v2rayN/v2rayN/Forms/GlobalHotkeySettingForm.resx
Normal file
@@ -0,0 +1,537 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Clear system proxy</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnReset.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="btnReset.Text" xml:space="preserve">
|
||||
<value>&Reset</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>btnReset.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>btnReset.Parent" 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 name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>GlobalHotkeySettingForm</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 138</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>34</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>37</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 215</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey0.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="label6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Take effect after restart</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey0.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey0.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 18</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 103</value>
|
||||
</data>
|
||||
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 190</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey3.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</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=">>label5.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=">>label4.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="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>527, 60</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey0.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>32</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey2.Name" xml:space="preserve">
|
||||
<value>txtGlobalHotkey2</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label5.Name" xml:space="preserve">
|
||||
<value>label5</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>527, 242</value>
|
||||
</data>
|
||||
<data name="btnReset.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>211, 17</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name=">>label5.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey1.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>label5.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey0.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 22</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey1.Name" xml:space="preserve">
|
||||
<value>txtGlobalHotkey1</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>33</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Do not change system proxy</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Set system proxy</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey3.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="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey0.Name" xml:space="preserve">
|
||||
<value>txtGlobalHotkey0</value>
|
||||
</data>
|
||||
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>39</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>303, 17</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 242</value>
|
||||
</data>
|
||||
<data name=">>btnReset.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=">>label4.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>btnReset.Name" xml:space="preserve">
|
||||
<value>btnReset</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="btnReset.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 58</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey2.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="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>31</value>
|
||||
</data>
|
||||
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 99</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>Set directly by pressing the keyboard</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey1.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=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 62</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Display GUI</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name="btnReset.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 142</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey3.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey0.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="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 12</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>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey2.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>155, 12</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>GlobalHotkey Setting</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>527, 302</value>
|
||||
</data>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>38</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey3.Name" xml:space="preserve">
|
||||
<value>txtGlobalHotkey3</value>
|
||||
</data>
|
||||
<data name="txtGlobalHotkey3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
</data>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>396, 17</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=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtGlobalHotkey2.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>25</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -117,74 +117,50 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[Socks]服务器</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnReset.Text" xml:space="preserve">
|
||||
<value>重置(&R)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>服务器地址</value>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>重启后生效</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>直接按键盘进行设置</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>不改变系统代理</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>自动配置系统代理</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>清除系统代理</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>服务器端口</value>
|
||||
<value>显示主界面</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 119</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>密码(可选)</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 89</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>用户名(可选)</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>92, 21</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>导入配置文件</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>171, 22</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入URL</value>
|
||||
</data>
|
||||
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 115</value>
|
||||
</data>
|
||||
<data name="txtSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 85</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>全局热键设置</value>
|
||||
</data>
|
||||
</root>
|
||||
105
v2rayN/v2rayN/Forms/GroupSettingControl.Designer.cs
generated
Normal file
105
v2rayN/v2rayN/Forms/GroupSettingControl.Designer.cs
generated
Normal file
@@ -0,0 +1,105 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class GroupSettingControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupSettingControl));
|
||||
this.grbMain = new System.Windows.Forms.GroupBox();
|
||||
this.btnRemove = new System.Windows.Forms.Button();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.numSort = new System.Windows.Forms.NumericUpDown();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.grbMain.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numSort)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// grbMain
|
||||
//
|
||||
this.grbMain.Controls.Add(this.label1);
|
||||
this.grbMain.Controls.Add(this.numSort);
|
||||
this.grbMain.Controls.Add(this.btnRemove);
|
||||
this.grbMain.Controls.Add(this.txtRemarks);
|
||||
this.grbMain.Controls.Add(this.label2);
|
||||
resources.ApplyResources(this.grbMain, "grbMain");
|
||||
this.grbMain.Name = "grbMain";
|
||||
this.grbMain.TabStop = false;
|
||||
//
|
||||
// btnRemove
|
||||
//
|
||||
resources.ApplyResources(this.btnRemove, "btnRemove");
|
||||
this.btnRemove.Name = "btnRemove";
|
||||
this.btnRemove.UseVisualStyleBackColor = true;
|
||||
this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click);
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
this.txtRemarks.Leave += new System.EventHandler(this.txtRemarks_Leave);
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "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
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.grbMain);
|
||||
this.Name = "GroupSettingControl";
|
||||
this.Load += new System.EventHandler(this.GroupSettingControl_Load);
|
||||
this.grbMain.ResumeLayout(false);
|
||||
this.grbMain.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numSort)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox grbMain;
|
||||
private System.Windows.Forms.TextBox txtRemarks;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Button btnRemove;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.NumericUpDown numSort;
|
||||
}
|
||||
}
|
||||
61
v2rayN/v2rayN/Forms/GroupSettingControl.cs
Normal file
61
v2rayN/v2rayN/Forms/GroupSettingControl.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class GroupSettingControl : UserControl
|
||||
{
|
||||
public event ChangeEventHandler OnButtonClicked;
|
||||
|
||||
|
||||
public GroupItem groupItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public GroupSettingControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void GroupSettingControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.Height = grbMain.Height;
|
||||
BindingSub();
|
||||
}
|
||||
|
||||
private void BindingSub()
|
||||
{
|
||||
if (groupItem != null)
|
||||
{
|
||||
txtRemarks.Text = groupItem.remarks.ToString();
|
||||
numSort.Value = groupItem.sort;
|
||||
}
|
||||
}
|
||||
private void EndBindingSub()
|
||||
{
|
||||
if (groupItem != null)
|
||||
{
|
||||
groupItem.remarks = txtRemarks.Text.TrimEx();
|
||||
groupItem.sort = Convert.ToInt32(numSort.Value);
|
||||
}
|
||||
}
|
||||
private void txtRemarks_Leave(object sender, EventArgs e)
|
||||
{
|
||||
EndBindingSub();
|
||||
}
|
||||
|
||||
private void btnRemove_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (groupItem != null)
|
||||
{
|
||||
groupItem.remarks = string.Empty;
|
||||
}
|
||||
|
||||
OnButtonClicked?.Invoke(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
294
v2rayN/v2rayN/Forms/GroupSettingControl.resx
Normal file
294
v2rayN/v2rayN/Forms/GroupSettingControl.resx
Normal file
@@ -0,0 +1,294 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<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>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 61</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="numSort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<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 name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>525, 21</value>
|
||||
</data>
|
||||
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>Remove</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.Name" xml:space="preserve">
|
||||
<value>btnRemove</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>btnRemove.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</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">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>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 name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>619, 91</value>
|
||||
</data>
|
||||
<data name="grbMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="grbMain.Text" xml:space="preserve">
|
||||
<value>Group details</value>
|
||||
</data>
|
||||
<data name=">>grbMain.Name" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>grbMain.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.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>
|
||||
136
v2rayN/v2rayN/Forms/GroupSettingControl.zh-Hans.resx
Normal file
136
v2rayN/v2rayN/Forms/GroupSettingControl.zh-Hans.resx
Normal file
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>移除</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>备注</value>
|
||||
</data>
|
||||
<data name="grbMain.Text" xml:space="preserve">
|
||||
<value>分组详情</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>排序编号</value>
|
||||
</data>
|
||||
</root>
|
||||
97
v2rayN/v2rayN/Forms/GroupSettingForm.Designer.cs
generated
Normal file
97
v2rayN/v2rayN/Forms/GroupSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,97 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class GroupSettingForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupSettingForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.panCon = new System.Windows.Forms.Panel();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnAdd = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// panCon
|
||||
//
|
||||
resources.ApplyResources(this.panCon, "panCon");
|
||||
this.panCon.Name = "panCon";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.btnAdd);
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnAdd
|
||||
//
|
||||
resources.ApplyResources(this.btnAdd, "btnAdd");
|
||||
this.btnAdd.Name = "btnAdd";
|
||||
this.btnAdd.UseVisualStyleBackColor = true;
|
||||
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// GroupSettingForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.panCon);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Name = "GroupSettingForm";
|
||||
this.Load += new System.EventHandler(this.GroupSettingForm_Load);
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Button btnAdd;
|
||||
private System.Windows.Forms.Panel panCon;
|
||||
}
|
||||
}
|
||||
104
v2rayN/v2rayN/Forms/GroupSettingForm.cs
Normal file
104
v2rayN/v2rayN/Forms/GroupSettingForm.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class GroupSettingForm : BaseForm
|
||||
{
|
||||
List<GroupSettingControl> lstControls = new List<GroupSettingControl>();
|
||||
|
||||
public GroupSettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void GroupSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (config.groupItem == null)
|
||||
{
|
||||
config.groupItem = new List<GroupItem>();
|
||||
}
|
||||
|
||||
RefreshGroupsView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新列表
|
||||
/// </summary>
|
||||
private void RefreshGroupsView()
|
||||
{
|
||||
panCon.Controls.Clear();
|
||||
lstControls.Clear();
|
||||
|
||||
for (int k = config.groupItem.Count - 1; k >= 0; k--)
|
||||
{
|
||||
GroupItem item = config.groupItem[k];
|
||||
if (Utils.IsNullOrEmpty(item.remarks))
|
||||
{
|
||||
if (!Utils.IsNullOrEmpty(item.id))
|
||||
{
|
||||
ConfigHandler.RemoveGroupItem(ref config, item.id);
|
||||
}
|
||||
config.groupItem.RemoveAt(k);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (GroupItem item in config.groupItem)
|
||||
{
|
||||
GroupSettingControl control = new GroupSettingControl();
|
||||
control.OnButtonClicked += Control_OnButtonClicked;
|
||||
control.groupItem = item;
|
||||
control.Dock = DockStyle.Top;
|
||||
|
||||
panCon.Controls.Add(control);
|
||||
panCon.Controls.SetChildIndex(control, 0);
|
||||
|
||||
lstControls.Add(control);
|
||||
}
|
||||
}
|
||||
|
||||
private void Control_OnButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
RefreshGroupsView();
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (ConfigHandler.SaveGroupItem(ref config) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void btnAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
AddGroup();
|
||||
|
||||
RefreshGroupsView();
|
||||
}
|
||||
|
||||
|
||||
private void AddGroup()
|
||||
{
|
||||
GroupItem groupItem = new GroupItem
|
||||
{
|
||||
id = string.Empty,
|
||||
remarks = "Group"
|
||||
};
|
||||
config.groupItem.Add(groupItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,35 +117,95 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<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>547, 291</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Edit or add a [Socks] server</value>
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>396, 17</value>
|
||||
<value>448, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<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>1</value>
|
||||
</data>
|
||||
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panCon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panCon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="panCon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>614, 351</value>
|
||||
</data>
|
||||
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>panCon.Name" xml:space="preserve">
|
||||
<value>panCon</value>
|
||||
</data>
|
||||
<data name=">>panCon.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panCon.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panCon.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnAdd.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>47, 17</value>
|
||||
</data>
|
||||
<data name="btnAdd.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnAdd.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="btnAdd.Text" xml:space="preserve">
|
||||
<value>&Add</value>
|
||||
</data>
|
||||
<data name=">>btnAdd.Name" xml:space="preserve">
|
||||
<value>btnAdd</value>
|
||||
</data>
|
||||
<data name=">>btnAdd.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=">>btnAdd.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnAdd.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>
|
||||
<value>355, 17</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
@@ -156,211 +216,58 @@
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 35</value>
|
||||
<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="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 196</value>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 31</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Server address</value>
|
||||
</data>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>337, 158</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 60</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Server port</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 121</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Password(Optional)</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 88</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>User(Optional)</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 158</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>162, 21</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>Import configuration file</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>235, 22</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>Import URL from clipboard</value>
|
||||
</data>
|
||||
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 25</value>
|
||||
</data>
|
||||
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>17, 17</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 25</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 10</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 231</value>
|
||||
<value>0, 351</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 60</value>
|
||||
<value>614, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 27</value>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>359, 21</value>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 117</value>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
|
||||
<value>*</value>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>614, 411</value>
|
||||
</data>
|
||||
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Group settings</value>
|
||||
</data>
|
||||
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>GroupSettingForm</value>
|
||||
</data>
|
||||
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 56</value>
|
||||
</data>
|
||||
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>194, 21</value>
|
||||
</data>
|
||||
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 154</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>194, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="txtSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 84</value>
|
||||
</data>
|
||||
<data name="txtSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
</data>
|
||||
<data name="txtSecurity.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>26</value>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
132
v2rayN/v2rayN/Forms/GroupSettingForm.zh-Hans.resx
Normal file
132
v2rayN/v2rayN/Forms/GroupSettingForm.zh-Hans.resx
Normal file
@@ -0,0 +1,132 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnAdd.Text" xml:space="preserve">
|
||||
<value>添加(&A)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>服务器分组设置</value>
|
||||
</data>
|
||||
</root>
|
||||
687
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
687
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -124,6 +124,12 @@
|
||||
<data name="menuAddVmessServer.Text" xml:space="preserve">
|
||||
<value>添加[VMess]服务器</value>
|
||||
</data>
|
||||
<data name="menuAddVlessServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuAddVlessServer.Text" xml:space="preserve">
|
||||
<value>添加[VLESS]服务器</value>
|
||||
</data>
|
||||
<data name="menuAddShadowsocksServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
@@ -136,6 +142,12 @@
|
||||
<data name="menuAddSocksServer.Text" xml:space="preserve">
|
||||
<value>添加[Socks]服务器</value>
|
||||
</data>
|
||||
<data name="menuAddTrojanServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuAddTrojanServer.Text" xml:space="preserve">
|
||||
<value>添加[Trojan]服务器</value>
|
||||
</data>
|
||||
<data name="menuAddCustomServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
@@ -241,6 +253,18 @@
|
||||
<data name="menuSpeedServer.Text" xml:space="preserve">
|
||||
<value>测试服务器速度(多选) (Ctrl+T)</value>
|
||||
</data>
|
||||
<data name="tsbTestMe.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="tsbTestMe.Text" xml:space="preserve">
|
||||
<value>测试当前服务状态</value>
|
||||
</data>
|
||||
<data name="menuClearServerStatistics.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuClearServerStatistics.Text" xml:space="preserve">
|
||||
<value>清除所有服务统计数据</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>297, 6</value>
|
||||
</data>
|
||||
@@ -275,7 +299,7 @@
|
||||
<value> 服务器 </value>
|
||||
</data>
|
||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>301, 534</value>
|
||||
<value>301, 622</value>
|
||||
</data>
|
||||
<data name="lvServers.Items" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
@@ -294,116 +318,125 @@
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="menuNotEnabledHttp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuNotEnabledHttp.Text" xml:space="preserve">
|
||||
<value>关闭Http代理</value>
|
||||
<data name="menuMsgBoxCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopyAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxAddRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 136</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||
<value>网速显示未启用</value>
|
||||
</data>
|
||||
<data name="menuKeepClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
<data name="menuKeepClear.Text" xml:space="preserve">
|
||||
<value>清除系统代理</value>
|
||||
</data>
|
||||
<data name="menuGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
<data name="menuGlobal.Text" xml:space="preserve">
|
||||
<value>开启Http代理,并自动配置系统代理(全局模式)</value>
|
||||
</data>
|
||||
<data name="menuGlobalPAC.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
</data>
|
||||
<data name="menuGlobalPAC.Text" xml:space="preserve">
|
||||
<value>开启PAC,并自动配置系统代理(PAC模式)</value>
|
||||
</data>
|
||||
<data name="menuKeep.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
</data>
|
||||
<data name="menuKeep.Text" xml:space="preserve">
|
||||
<value>仅开启Http代理,并清除系统代理</value>
|
||||
</data>
|
||||
<data name="menuKeepPAC.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
</data>
|
||||
<data name="menuKeepPAC.Text" xml:space="preserve">
|
||||
<value>仅开启PAC,并清除系统代理</value>
|
||||
<value>自动配置系统代理</value>
|
||||
</data>
|
||||
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
<data name="menuKeepNothing.Text" xml:space="preserve">
|
||||
<value>仅开启Http代理,不改变系统代理</value>
|
||||
</data>
|
||||
<data name="menuKeepPACNothing.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>316, 22</value>
|
||||
</data>
|
||||
<data name="menuKeepPACNothing.Text" xml:space="preserve">
|
||||
<value>仅开启PAC,不改变系统代理</value>
|
||||
<value>不改变系统代理</value>
|
||||
</data>
|
||||
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
||||
<value>Http代理</value>
|
||||
<value>系统代理</value>
|
||||
</data>
|
||||
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuRoutings.Text" xml:space="preserve">
|
||||
<value>路由</value>
|
||||
</data>
|
||||
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuServers.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="menuServers2.ToolTipText" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>257, 6</value>
|
||||
</data>
|
||||
<data name="menuAddServers2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuAddServers2.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入批量URL</value>
|
||||
</data>
|
||||
<data name="menuScanScreen2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuScanScreen2.Text" xml:space="preserve">
|
||||
<value>扫描屏幕上的二维码</value>
|
||||
</data>
|
||||
<data name="menuCopyPACUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
</data>
|
||||
<data name="menuCopyPACUrl.Text" xml:space="preserve">
|
||||
<value>复制本地PAC网址</value>
|
||||
</data>
|
||||
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
||||
<value>更新订阅</value>
|
||||
<value>更新订阅(不通过代理)</value>
|
||||
</data>
|
||||
<data name="menuUpdateSubViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuUpdateSubViaProxy.Text" xml:space="preserve">
|
||||
<value>更新订阅(通过代理)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>192, 6</value>
|
||||
<value>257, 6</value>
|
||||
</data>
|
||||
<data name="menuExit.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuExit.Text" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 164</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器列表</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||
<value>网速显示未启用</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>信息</value>
|
||||
<value>261, 221</value>
|
||||
</data>
|
||||
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>124, 22</value>
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="tsbSubSetting.Text" xml:space="preserve">
|
||||
<value>订阅设置</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>124, 22</value>
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||
<value>更新订阅</value>
|
||||
<value>更新订阅(不通过代理)</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdateViaProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdateViaProxy.Text" xml:space="preserve">
|
||||
<value>更新订阅(通过代理)</value>
|
||||
</data>
|
||||
<data name="tsbSub.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 53</value>
|
||||
@@ -411,67 +444,83 @@
|
||||
<data name="tsbSub.Text" xml:space="preserve">
|
||||
<value> 订阅 </value>
|
||||
</data>
|
||||
<data name="tsbQRCodeSwitch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>52, 53</value>
|
||||
</data>
|
||||
<data name="tsbQRCodeSwitch.Text" xml:space="preserve">
|
||||
<value> 分享 </value>
|
||||
</data>
|
||||
<data name="tsbOptionSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 53</value>
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="tsbOptionSetting.Text" xml:space="preserve">
|
||||
<value> 参数设置 </value>
|
||||
<value>参数设置</value>
|
||||
</data>
|
||||
<data name="tsbRoutingSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="tsbRoutingSetting.Text" xml:space="preserve">
|
||||
<value>路由设置</value>
|
||||
</data>
|
||||
<data name="tsbGlobalHotkeySetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="tsbGlobalHotkeySetting.Text" xml:space="preserve">
|
||||
<value>全局热键设置</value>
|
||||
</data>
|
||||
<data name="tsbGroupSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="tsbGroupSetting.Text" xml:space="preserve">
|
||||
<value>服务器分组设置</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>186, 6</value>
|
||||
</data>
|
||||
<data name="tsbBackupGuiNConfig.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="tsbBackupGuiNConfig.Text" xml:space="preserve">
|
||||
<value>备份v2rayN配置文件</value>
|
||||
</data>
|
||||
<data name="tsbSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 53</value>
|
||||
</data>
|
||||
<data name="tsbSetting.Text" xml:space="preserve">
|
||||
<value> 设置 </value>
|
||||
</data>
|
||||
<data name="tsbReload.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
<value>76, 53</value>
|
||||
</data>
|
||||
<data name="tsbReload.Text" xml:space="preserve">
|
||||
<value>重启服务</value>
|
||||
</data>
|
||||
<data name="tsbTestMe.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
</data>
|
||||
<data name="tsbTestMe.Text" xml:space="preserve">
|
||||
<value>测试服务状态</value>
|
||||
</data>
|
||||
<data name="tsbService.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
|
||||
QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
|
||||
jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
|
||||
6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
|
||||
NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
|
||||
B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbService.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 53</value>
|
||||
</data>
|
||||
<data name="tsbService.Text" xml:space="preserve">
|
||||
<value> 当前服务 </value>
|
||||
<value> 重启服务 </value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>223, 22</value>
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
|
||||
<value>v2rayN</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>223, 22</value>
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
|
||||
<value>v2rayCore</value>
|
||||
<value>v2fly-Core</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdatePACList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>223, 22</value>
|
||||
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdatePACList.Text" xml:space="preserve">
|
||||
<value>PAC</value>
|
||||
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
|
||||
<value>Xray-Core</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>220, 6</value>
|
||||
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 6</value>
|
||||
</data>
|
||||
<data name="tsbCheckClearPACList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>223, 22</value>
|
||||
<data name="tsbCheckUpdateGeoSite.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckClearPACList.Text" xml:space="preserve">
|
||||
<value>简化PAC (请设置Core路由)</value>
|
||||
<data name="tsbCheckUpdateGeoIP.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 53</value>
|
||||
@@ -497,17 +546,19 @@
|
||||
<data name="tsbPromotion.Text" xml:space="preserve">
|
||||
<value> 推广 </value>
|
||||
</data>
|
||||
<data name="tsbClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
|
||||
GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 53</value>
|
||||
</data>
|
||||
<data name="tsbClose.Text" xml:space="preserve">
|
||||
<value> 关闭窗口 </value>
|
||||
</data>
|
||||
<data name="menuMoveToGroup.Text" xml:space="preserve">
|
||||
<value>移至分组</value>
|
||||
</data>
|
||||
<data name="menuMoveEvent.Text" xml:space="preserve">
|
||||
<value>上下移至</value>
|
||||
</data>
|
||||
<data name="menuServerFilter.Text" xml:space="preserve">
|
||||
<value>设置服务器过滤器 (Ctrl+F)</value>
|
||||
</data>
|
||||
</root>
|
||||
204
v2rayN/v2rayN/Forms/MainMsgControl.Designer.cs
generated
Normal file
204
v2rayN/v2rayN/Forms/MainMsgControl.Designer.cs
generated
Normal file
@@ -0,0 +1,204 @@
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class MainMsgControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainMsgControl));
|
||||
this.txtMsgBox = new System.Windows.Forms.TextBox();
|
||||
this.cmsMsgBox = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menuMsgBoxSelectAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMsgBoxCopy = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMsgBoxCopyAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMsgBoxClear = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMsgBoxAddRoutingRule = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMsgBoxFilter = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.gbMsgTitle = new System.Windows.Forms.GroupBox();
|
||||
this.ssMain = new System.Windows.Forms.StatusStrip();
|
||||
this.toolSslInboundInfo = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank1 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslRoutingRule = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank2 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.cmsMsgBox.SuspendLayout();
|
||||
this.gbMsgTitle.SuspendLayout();
|
||||
this.ssMain.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// txtMsgBox
|
||||
//
|
||||
resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
|
||||
this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52)))));
|
||||
this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtMsgBox.ContextMenuStrip = this.cmsMsgBox;
|
||||
this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
|
||||
this.txtMsgBox.Name = "txtMsgBox";
|
||||
this.txtMsgBox.ReadOnly = true;
|
||||
this.txtMsgBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtMsgBox_KeyDown);
|
||||
//
|
||||
// cmsMsgBox
|
||||
//
|
||||
resources.ApplyResources(this.cmsMsgBox, "cmsMsgBox");
|
||||
this.cmsMsgBox.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuMsgBoxSelectAll,
|
||||
this.menuMsgBoxCopy,
|
||||
this.menuMsgBoxCopyAll,
|
||||
this.menuMsgBoxClear,
|
||||
this.menuMsgBoxAddRoutingRule,
|
||||
this.menuMsgBoxFilter});
|
||||
this.cmsMsgBox.Name = "cmsMsgBox";
|
||||
//
|
||||
// menuMsgBoxSelectAll
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxSelectAll, "menuMsgBoxSelectAll");
|
||||
this.menuMsgBoxSelectAll.Name = "menuMsgBoxSelectAll";
|
||||
this.menuMsgBoxSelectAll.Click += new System.EventHandler(this.menuMsgBoxSelectAll_Click);
|
||||
//
|
||||
// menuMsgBoxCopy
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxCopy, "menuMsgBoxCopy");
|
||||
this.menuMsgBoxCopy.Name = "menuMsgBoxCopy";
|
||||
this.menuMsgBoxCopy.Click += new System.EventHandler(this.menuMsgBoxCopy_Click);
|
||||
//
|
||||
// menuMsgBoxCopyAll
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxCopyAll, "menuMsgBoxCopyAll");
|
||||
this.menuMsgBoxCopyAll.Name = "menuMsgBoxCopyAll";
|
||||
this.menuMsgBoxCopyAll.Click += new System.EventHandler(this.menuMsgBoxCopyAll_Click);
|
||||
//
|
||||
// menuMsgBoxClear
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxClear, "menuMsgBoxClear");
|
||||
this.menuMsgBoxClear.Name = "menuMsgBoxClear";
|
||||
this.menuMsgBoxClear.Click += new System.EventHandler(this.menuMsgBoxClear_Click);
|
||||
//
|
||||
// menuMsgBoxAddRoutingRule
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxAddRoutingRule, "menuMsgBoxAddRoutingRule");
|
||||
this.menuMsgBoxAddRoutingRule.Name = "menuMsgBoxAddRoutingRule";
|
||||
this.menuMsgBoxAddRoutingRule.Click += new System.EventHandler(this.menuMsgBoxAddRoutingRule_Click);
|
||||
//
|
||||
// menuMsgBoxFilter
|
||||
//
|
||||
resources.ApplyResources(this.menuMsgBoxFilter, "menuMsgBoxFilter");
|
||||
this.menuMsgBoxFilter.Name = "menuMsgBoxFilter";
|
||||
this.menuMsgBoxFilter.Click += new System.EventHandler(this.menuMsgBoxFilter_Click);
|
||||
//
|
||||
// gbMsgTitle
|
||||
//
|
||||
resources.ApplyResources(this.gbMsgTitle, "gbMsgTitle");
|
||||
this.gbMsgTitle.Controls.Add(this.txtMsgBox);
|
||||
this.gbMsgTitle.Controls.Add(this.ssMain);
|
||||
this.gbMsgTitle.Name = "gbMsgTitle";
|
||||
this.gbMsgTitle.TabStop = false;
|
||||
//
|
||||
// ssMain
|
||||
//
|
||||
resources.ApplyResources(this.ssMain, "ssMain");
|
||||
this.ssMain.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolSslInboundInfo,
|
||||
this.toolSslBlank1,
|
||||
this.toolSslRoutingRule,
|
||||
this.toolSslBlank2,
|
||||
this.toolSslServerSpeed,
|
||||
this.toolSslBlank4});
|
||||
this.ssMain.Name = "ssMain";
|
||||
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
|
||||
//
|
||||
// toolSslInboundInfo
|
||||
//
|
||||
resources.ApplyResources(this.toolSslInboundInfo, "toolSslInboundInfo");
|
||||
this.toolSslInboundInfo.Name = "toolSslInboundInfo";
|
||||
//
|
||||
// toolSslBlank1
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank1, "toolSslBlank1");
|
||||
this.toolSslBlank1.Name = "toolSslBlank1";
|
||||
this.toolSslBlank1.Spring = true;
|
||||
//
|
||||
// toolSslRoutingRule
|
||||
//
|
||||
resources.ApplyResources(this.toolSslRoutingRule, "toolSslRoutingRule");
|
||||
this.toolSslRoutingRule.Name = "toolSslRoutingRule";
|
||||
//
|
||||
// toolSslBlank2
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank2, "toolSslBlank2");
|
||||
this.toolSslBlank2.Name = "toolSslBlank2";
|
||||
this.toolSslBlank2.Spring = true;
|
||||
//
|
||||
// toolSslServerSpeed
|
||||
//
|
||||
resources.ApplyResources(this.toolSslServerSpeed, "toolSslServerSpeed");
|
||||
this.toolSslServerSpeed.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.toolSslServerSpeed.Name = "toolSslServerSpeed";
|
||||
//
|
||||
// toolSslBlank4
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
|
||||
this.toolSslBlank4.Name = "toolSslBlank4";
|
||||
//
|
||||
// MainMsgControl
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.gbMsgTitle);
|
||||
this.Name = "MainMsgControl";
|
||||
this.Load += new System.EventHandler(this.MainMsgControl_Load);
|
||||
this.cmsMsgBox.ResumeLayout(false);
|
||||
this.gbMsgTitle.ResumeLayout(false);
|
||||
this.gbMsgTitle.PerformLayout();
|
||||
this.ssMain.ResumeLayout(false);
|
||||
this.ssMain.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox txtMsgBox;
|
||||
private System.Windows.Forms.ContextMenuStrip cmsMsgBox;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxSelectAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxCopy;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxCopyAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxClear;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxAddRoutingRule;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMsgBoxFilter;
|
||||
private System.Windows.Forms.GroupBox gbMsgTitle;
|
||||
private System.Windows.Forms.StatusStrip ssMain;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslInboundInfo;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslRoutingRule;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4;
|
||||
}
|
||||
}
|
||||
205
v2rayN/v2rayN/Forms/MainMsgControl.cs
Normal file
205
v2rayN/v2rayN/Forms/MainMsgControl.cs
Normal file
@@ -0,0 +1,205 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class MainMsgControl : UserControl
|
||||
{
|
||||
private string MsgFilter = string.Empty;
|
||||
delegate void AppendTextDelegate(string text);
|
||||
|
||||
public MainMsgControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void MainMsgControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#region 提示信息
|
||||
|
||||
public void AppendText(string text)
|
||||
{
|
||||
if (this.txtMsgBox.InvokeRequired)
|
||||
{
|
||||
Invoke(new AppendTextDelegate(AppendText), new object[] { text });
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Utils.IsNullOrEmpty(MsgFilter))
|
||||
{
|
||||
if (!Regex.IsMatch(text, MsgFilter))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
//this.txtMsgBox.AppendText(text);
|
||||
ShowMsg(text);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 提示信息
|
||||
/// </summary>
|
||||
/// <param name="msg"></param>
|
||||
private void ShowMsg(string msg)
|
||||
{
|
||||
if (txtMsgBox.Lines.Length > 999)
|
||||
{
|
||||
ClearMsg();
|
||||
}
|
||||
this.txtMsgBox.AppendText(msg);
|
||||
if (!msg.EndsWith(Environment.NewLine))
|
||||
{
|
||||
this.txtMsgBox.AppendText(Environment.NewLine);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除信息
|
||||
/// </summary>
|
||||
public void ClearMsg()
|
||||
{
|
||||
txtMsgBox.Invoke((Action)delegate
|
||||
{
|
||||
txtMsgBox.Clear();
|
||||
});
|
||||
}
|
||||
|
||||
public void DisplayToolStatus(Config config)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append($"{ResUI.LabLocal}:");
|
||||
sb.Append($"[{Global.InboundSocks}:{config.GetLocalPort(Global.InboundSocks)}]");
|
||||
sb.Append(" | ");
|
||||
if (config.sysProxyType == ESysProxyType.ForcedChange)
|
||||
{
|
||||
sb.Append($"[{Global.InboundHttp}({ResUI.SystemProxy}):{config.GetLocalPort(Global.InboundHttp)}]");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append($"[{Global.InboundHttp}:{config.GetLocalPort(Global.InboundHttp)}]");
|
||||
}
|
||||
|
||||
if (config.inbound[0].allowLANConn)
|
||||
{
|
||||
sb.Append($" {ResUI.LabLAN}:");
|
||||
sb.Append($"[{Global.InboundSocks}:{config.GetLocalPort(Global.InboundSocks2)}]");
|
||||
sb.Append(" | ");
|
||||
sb.Append($"[{Global.InboundHttp}:{config.GetLocalPort(Global.InboundHttp2)}]");
|
||||
}
|
||||
|
||||
SetToolSslInfo("inbound", sb.ToString());
|
||||
}
|
||||
|
||||
public void SetToolSslInfo(string type, string value)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case "speed":
|
||||
toolSslServerSpeed.Text = value;
|
||||
break;
|
||||
case "inbound":
|
||||
toolSslInboundInfo.Text = value;
|
||||
break;
|
||||
case "routing":
|
||||
toolSslRoutingRule.Text = value;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ScrollToCaret()
|
||||
{
|
||||
this.txtMsgBox.ScrollToCaret();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region MsgBoxMenu
|
||||
private void menuMsgBoxSelectAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.txtMsgBox.Focus();
|
||||
this.txtMsgBox.SelectAll();
|
||||
}
|
||||
|
||||
private void menuMsgBoxCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
var data = this.txtMsgBox.SelectedText.TrimEx();
|
||||
Utils.SetClipboardData(data);
|
||||
}
|
||||
|
||||
private void menuMsgBoxCopyAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
var data = this.txtMsgBox.Text;
|
||||
Utils.SetClipboardData(data);
|
||||
}
|
||||
private void menuMsgBoxClear_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.txtMsgBox.Clear();
|
||||
}
|
||||
private void menuMsgBoxAddRoutingRule_Click(object sender, EventArgs e)
|
||||
{
|
||||
menuMsgBoxCopy_Click(null, null);
|
||||
var fm = new RoutingSettingForm();
|
||||
fm.ShowDialog();
|
||||
|
||||
}
|
||||
|
||||
private void txtMsgBox_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.Control)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.A:
|
||||
menuMsgBoxSelectAll_Click(null, null);
|
||||
break;
|
||||
case Keys.C:
|
||||
menuMsgBoxCopy_Click(null, null);
|
||||
break;
|
||||
case Keys.V:
|
||||
menuMsgBoxAddRoutingRule_Click(null, null);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private void menuMsgBoxFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
var fm = new MsgFilterSetForm();
|
||||
fm.MsgFilter = MsgFilter;
|
||||
fm.ShowDefFilter = true;
|
||||
if (fm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
MsgFilter = fm.MsgFilter;
|
||||
gbMsgTitle.Text = string.Format(ResUI.MsgInformationTitle, MsgFilter);
|
||||
}
|
||||
}
|
||||
|
||||
private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||||
{
|
||||
if (!Utils.IsNullOrEmpty(e.ClickedItem.Text))
|
||||
{
|
||||
Utils.SetClipboardData(e.ClickedItem.Text);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
384
v2rayN/v2rayN/Forms/MainMsgControl.resx
Normal file
384
v2rayN/v2rayN/Forms/MainMsgControl.resx
Normal file
@@ -0,0 +1,384 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>toolSslRoutingRule.Name" xml:space="preserve">
|
||||
<value>toolSslRoutingRule</value>
|
||||
</data>
|
||||
<data name=">>gbMsgTitle.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="menuMsgBoxSelectAll.Text" xml:space="preserve">
|
||||
<value>Select All (Ctrl+A)</value>
|
||||
</data>
|
||||
<data name=">>ssMain.Name" xml:space="preserve">
|
||||
<value>ssMain</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxSelectAll.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxSelectAll</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="toolSslServerSpeed.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxClear.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=">>toolSslServerSpeed.Name" xml:space="preserve">
|
||||
<value>toolSslServerSpeed</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxCopyAll.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxCopyAll</value>
|
||||
</data>
|
||||
<data name="txtMsgBox.MaxLength" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>gbMsgTitle.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ssMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 221</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxAddRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolSslInboundInfo.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="toolSslRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>0, 17</value>
|
||||
</data>
|
||||
<data name="toolSslInboundInfo.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>80, 17</value>
|
||||
</data>
|
||||
<data name=">>toolSslInboundInfo.Name" xml:space="preserve">
|
||||
<value>toolSslInboundInfo</value>
|
||||
</data>
|
||||
<data name=">>txtMsgBox.Name" xml:space="preserve">
|
||||
<value>txtMsgBox</value>
|
||||
</data>
|
||||
<data name="toolSslBlank4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>0, 17</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxFilter.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="toolSslBlank1.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 8pt</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name=">>ssMain.Parent" xml:space="preserve">
|
||||
<value>gbMsgTitle</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopyAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name=">>toolSslRoutingRule.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
|
||||
<value>Add Routing Rule (Ctrl+V)</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleRight</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 8pt</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>696, 246</value>
|
||||
</data>
|
||||
<data name="toolSslInboundInfo.Text" xml:space="preserve">
|
||||
<value>InboundInfo</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxAddRoutingRule.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxClear.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxClear</value>
|
||||
</data>
|
||||
<data name="txtMsgBox.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxCopy.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="txtMsgBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 17</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank4.Name" xml:space="preserve">
|
||||
<value>toolSslBlank4</value>
|
||||
</data>
|
||||
<data name=">>txtMsgBox.Parent" xml:space="preserve">
|
||||
<value>gbMsgTitle</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.Text" xml:space="preserve">
|
||||
<value>Informations</value>
|
||||
</data>
|
||||
<data name="ssMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="toolSslBlank2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 17</value>
|
||||
</data>
|
||||
<data name="txtMsgBox.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxClear.Text" xml:space="preserve">
|
||||
<value>Clear All</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtMsgBox.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name=">>gbMsgTitle.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ssMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>690, 22</value>
|
||||
</data>
|
||||
<data name=">>cmsMsgBox.Name" xml:space="preserve">
|
||||
<value>cmsMsgBox</value>
|
||||
</data>
|
||||
<data name="txtMsgBox.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>cmsMsgBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ssMain.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="txtMsgBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>690, 204</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 22</value>
|
||||
</data>
|
||||
<data name="toolSslBlank1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 17</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>MainMsgControl</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>696, 246</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank1.Name" xml:space="preserve">
|
||||
<value>toolSslBlank1</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.RightToLeft" type="System.Windows.Forms.RightToLeft, System.Windows.Forms">
|
||||
<value>No</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
|
||||
<value>Copy All</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>250, 17</value>
|
||||
</data>
|
||||
<data name="ssMain.Text" xml:space="preserve">
|
||||
<value>statusStrip1</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxAddRoutingRule.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxAddRoutingRule</value>
|
||||
</data>
|
||||
<data name=">>toolSslBlank2.Name" xml:space="preserve">
|
||||
<value>toolSslBlank2</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
|
||||
<value>Set message filters</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||
<value>SPEED Disabled</value>
|
||||
</data>
|
||||
<data name=">>txtMsgBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>gbMsgTitle.Name" xml:space="preserve">
|
||||
<value>gbMsgTitle</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxFilter.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxFilter</value>
|
||||
</data>
|
||||
<data name=">>ssMain.ZOrder" xml:space="preserve">
|
||||
<value>1</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>
|
||||
<data name=">>menuMsgBoxSelectAll.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxCopy.Name" xml:space="preserve">
|
||||
<value>menuMsgBoxCopy</value>
|
||||
</data>
|
||||
<data name=">>txtMsgBox.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolSslServerSpeed.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
|
||||
<value>Copy (Ctrl+C)</value>
|
||||
</data>
|
||||
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>228, 136</value>
|
||||
</data>
|
||||
<data name=">>menuMsgBoxCopyAll.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<metadata name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>131, 18</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="cmsMsgBox.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
172
v2rayN/v2rayN/Forms/MainMsgControl.zh-Hans.resx
Normal file
172
v2rayN/v2rayN/Forms/MainMsgControl.zh-Hans.resx
Normal file
@@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxSelectAll.Text" xml:space="preserve">
|
||||
<value>全选 (Ctrl+A)</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopy.Text" xml:space="preserve">
|
||||
<value>复制 (Ctrl+C)</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopyAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxCopyAll.Text" xml:space="preserve">
|
||||
<value>复制所有</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxClear.Text" xml:space="preserve">
|
||||
<value>清除所有</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxAddRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxAddRoutingRule.Text" xml:space="preserve">
|
||||
<value>快速添加路由规则 (Ctrl+V)</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuMsgBoxFilter.Text" xml:space="preserve">
|
||||
<value>设置信息过滤器</value>
|
||||
</data>
|
||||
<data name="cmsMsgBox.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>222, 136</value>
|
||||
</data>
|
||||
<data name="toolSslBlank1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>157, 17</value>
|
||||
</data>
|
||||
<data name="toolSslBlank2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>157, 17</value>
|
||||
</data>
|
||||
<data name="gbMsgTitle.Text" xml:space="preserve">
|
||||
<value>信息</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||
<value>网速显示未启用</value>
|
||||
</data>
|
||||
</root>
|
||||
129
v2rayN/v2rayN/Forms/MsgFilterSetForm.Designer.cs
generated
Normal file
129
v2rayN/v2rayN/Forms/MsgFilterSetForm.Designer.cs
generated
Normal file
@@ -0,0 +1,129 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class MsgFilterSetForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MsgFilterSetForm));
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.btnFilderProxy = new System.Windows.Forms.Button();
|
||||
this.btnFilterDirect = new System.Windows.Forms.Button();
|
||||
this.txtMsgFilter = new System.Windows.Forms.TextBox();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.btnClear = new System.Windows.Forms.Button();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.btnFilderProxy);
|
||||
this.groupBox1.Controls.Add(this.btnFilterDirect);
|
||||
this.groupBox1.Controls.Add(this.txtMsgFilter);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// btnFilderProxy
|
||||
//
|
||||
resources.ApplyResources(this.btnFilderProxy, "btnFilderProxy");
|
||||
this.btnFilderProxy.Name = "btnFilderProxy";
|
||||
this.btnFilderProxy.UseVisualStyleBackColor = true;
|
||||
this.btnFilderProxy.Click += new System.EventHandler(this.btnFilderProxy_Click);
|
||||
//
|
||||
// btnFilterDirect
|
||||
//
|
||||
resources.ApplyResources(this.btnFilterDirect, "btnFilterDirect");
|
||||
this.btnFilterDirect.Name = "btnFilterDirect";
|
||||
this.btnFilterDirect.UseVisualStyleBackColor = true;
|
||||
this.btnFilterDirect.Click += new System.EventHandler(this.btnFilterDirect_Click);
|
||||
//
|
||||
// txtMsgFilter
|
||||
//
|
||||
resources.ApplyResources(this.txtMsgFilter, "txtMsgFilter");
|
||||
this.txtMsgFilter.Name = "txtMsgFilter";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.btnClear);
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// btnClear
|
||||
//
|
||||
resources.ApplyResources(this.btnClear, "btnClear");
|
||||
this.btnClear.Name = "btnClear";
|
||||
this.btnClear.UseVisualStyleBackColor = true;
|
||||
this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
|
||||
//
|
||||
// MsgFilterSetForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Name = "MsgFilterSetForm";
|
||||
this.Load += new System.EventHandler(this.MsgFilterSetForm_Load);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox txtMsgFilter;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Button btnFilderProxy;
|
||||
private System.Windows.Forms.Button btnFilterDirect;
|
||||
private System.Windows.Forms.Button btnClear;
|
||||
}
|
||||
}
|
||||
57
v2rayN/v2rayN/Forms/MsgFilterSetForm.cs
Normal file
57
v2rayN/v2rayN/Forms/MsgFilterSetForm.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class MsgFilterSetForm : BaseForm
|
||||
{
|
||||
public string MsgFilter { get; set; }
|
||||
public bool ShowDefFilter { get; set; }
|
||||
|
||||
public MsgFilterSetForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void MsgFilterSetForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
txtMsgFilter.Text = MsgFilter;
|
||||
btnFilderProxy.Visible =
|
||||
btnFilterDirect.Visible = ShowDefFilter;
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
MsgFilter = txtMsgFilter.Text;
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
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).*$";
|
||||
}
|
||||
|
||||
private void btnClear_Click(object sender, EventArgs e)
|
||||
{
|
||||
MsgFilter = string.Empty;
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,20 +117,173 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name=">>btnFilderProxy.Name" xml:space="preserve">
|
||||
<value>btnFilderProxy</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.ZOrder" xml:space="preserve">
|
||||
<value>0</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.Name" xml:space="preserve">
|
||||
<value>txtMsgFilter</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>txtMsgFilter.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtMsgFilter.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 291</value>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 76</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Edit or add a [Shadowsocks] server</value>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
</data>
|
||||
<data name=">>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="btnFilderProxy.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>157, 47</value>
|
||||
</data>
|
||||
<data name="btnFilderProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 23</value>
|
||||
</data>
|
||||
<data name="btnFilderProxy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="btnFilderProxy.Text" xml:space="preserve">
|
||||
<value>Filter Proxy</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.Name" xml:space="preserve">
|
||||
<value>btnFilderProxy</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnFilderProxy.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="btnFilterDirect.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnFilterDirect.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 47</value>
|
||||
</data>
|
||||
<data name="btnFilterDirect.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 23</value>
|
||||
</data>
|
||||
<data name="btnFilterDirect.TabIndex" type="System.Int32, mscorlib">
|
||||
<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 name="txtMsgFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>409, 21</value>
|
||||
</data>
|
||||
<data name="txtMsgFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name=">>txtMsgFilter.Name" xml:space="preserve">
|
||||
<value>txtMsgFilter</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name=">>txtMsgFilter.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtMsgFilter.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnClear.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnClear.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>211, 17</value>
|
||||
</data>
|
||||
<data name="btnClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnClear.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="btnClear.Text" xml:space="preserve">
|
||||
<value>Clear</value>
|
||||
</data>
|
||||
<data name=">>btnClear.Name" xml:space="preserve">
|
||||
<value>btnClear</value>
|
||||
</data>
|
||||
<data name=">>btnClear.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnClear.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnClear.ZOrder" xml:space="preserve">
|
||||
<value>0</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>
|
||||
@@ -144,6 +297,21 @@
|
||||
<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>1</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>
|
||||
@@ -156,229 +324,58 @@
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items" xml:space="preserve">
|
||||
<value>aes-256-cfb</value>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items1" xml:space="preserve">
|
||||
<value>aes-128-cfb</value>
|
||||
<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="cmbSecurity.Items2" xml:space="preserve">
|
||||
<value>chacha20</value>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items3" xml:space="preserve">
|
||||
<value>chacha20-ietf</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items4" xml:space="preserve">
|
||||
<value>aes-256-gcm</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items5" xml:space="preserve">
|
||||
<value>aes-128-gcm</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items6" xml:space="preserve">
|
||||
<value>chacha20-poly1305</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Items7" xml:space="preserve">
|
||||
<value>chacha20-ietf-poly1305</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 120</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>194, 20</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</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, 35</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 196</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 31</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Server address</value>
|
||||
</data>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>337, 158</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 60</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Server port</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 89</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Password</value>
|
||||
</data>
|
||||
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 124</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>Encryption</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 158</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>162, 21</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>Import configuration file</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>235, 22</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>Import URL from clipboard</value>
|
||||
</data>
|
||||
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 25</value>
|
||||
</data>
|
||||
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>17, 17</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 25</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 10</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 231</value>
|
||||
<value>0, 76</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 60</value>
|
||||
<value>490, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 27</value>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>359, 21</value>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 85</value>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
|
||||
<value>*</value>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 136</value>
|
||||
</data>
|
||||
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>MsgFilterSetForm</value>
|
||||
</data>
|
||||
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>MsgFilterSetForm</value>
|
||||
</data>
|
||||
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 56</value>
|
||||
</data>
|
||||
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>194, 21</value>
|
||||
</data>
|
||||
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 154</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>194, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,8 +117,8 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[Shadowsocks]服务器</value>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>过滤器</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
@@ -126,31 +126,16 @@
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>设置过滤器</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>服务器地址</value>
|
||||
<data name="btnFilderProxy.Text" xml:space="preserve">
|
||||
<value>过滤Proxy</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
<data name="btnFilterDirect.Text" xml:space="preserve">
|
||||
<value>过滤Direct</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>服务器端口</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>密码</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>加密方式</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>导入配置文件</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入URL</value>
|
||||
<data name="btnClear.Text" xml:space="preserve">
|
||||
<value>清空</value>
|
||||
</data>
|
||||
</root>
|
||||
621
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
621
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
@@ -34,17 +34,13 @@
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.cmblistenerType = new System.Windows.Forms.ComboBox();
|
||||
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
|
||||
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.chkAllowLANConn = new System.Windows.Forms.CheckBox();
|
||||
this.chksniffingEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.txtremoteDNS = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
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.label1 = new System.Windows.Forms.Label();
|
||||
this.chkudpEnabled = new System.Windows.Forms.CheckBox();
|
||||
@@ -54,21 +50,9 @@
|
||||
this.txtlocalPort = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.tabControl2 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage3 = new System.Windows.Forms.TabPage();
|
||||
this.txtUseragent = new System.Windows.Forms.TextBox();
|
||||
this.tabPage4 = new System.Windows.Forms.TabPage();
|
||||
this.txtUserdirect = new System.Windows.Forms.TextBox();
|
||||
this.tabPage5 = new System.Windows.Forms.TabPage();
|
||||
this.txtUserblock = new System.Windows.Forms.TextBox();
|
||||
this.tabPage8 = new System.Windows.Forms.TabPage();
|
||||
this.cmbroutingMode = new System.Windows.Forms.ComboBox();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.btnSetDefRountingRule = new System.Windows.Forms.Button();
|
||||
this.labRoutingTips = new System.Windows.Forms.Label();
|
||||
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
|
||||
this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.txtremoteDNS = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.tabPage6 = new System.Windows.Forms.TabPage();
|
||||
this.chkKcpcongestion = new System.Windows.Forms.CheckBox();
|
||||
this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox();
|
||||
@@ -84,18 +68,41 @@
|
||||
this.txtKcpmtu = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.tabPage7 = new System.Windows.Forms.TabPage();
|
||||
this.txttrayMenuServersLimit = new System.Windows.Forms.TextBox();
|
||||
this.label17 = new System.Windows.Forms.Label();
|
||||
this.txtautoUpdateSubInterval = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.chkEnableSecurityProtocolTls13 = new System.Windows.Forms.CheckBox();
|
||||
this.chkEnableAutoAdjustMainLvColWidth = new System.Windows.Forms.CheckBox();
|
||||
this.btnSetLoopback = new System.Windows.Forms.Button();
|
||||
this.txtautoUpdateInterval = new System.Windows.Forms.TextBox();
|
||||
this.label15 = new System.Windows.Forms.Label();
|
||||
this.chkIgnoreGeoUpdateCore = new System.Windows.Forms.CheckBox();
|
||||
this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox();
|
||||
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
||||
this.lbFreshrate = new System.Windows.Forms.Label();
|
||||
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
||||
this.chkAllowLANConn = new System.Windows.Forms.CheckBox();
|
||||
this.txturlGFWList = new System.Windows.Forms.TextBox();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.chkAutoRun = new System.Windows.Forms.CheckBox();
|
||||
this.tabPage9 = new System.Windows.Forms.TabPage();
|
||||
this.txtuserPacRule = new System.Windows.Forms.TextBox();
|
||||
this.panel4 = new System.Windows.Forms.Panel();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.tabPageCoreType = new System.Windows.Forms.TabPage();
|
||||
this.cmbCoreType6 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType6 = new System.Windows.Forms.Label();
|
||||
this.cmbCoreType5 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType5 = new System.Windows.Forms.Label();
|
||||
this.cmbCoreType4 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType4 = new System.Windows.Forms.Label();
|
||||
this.cmbCoreType3 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType3 = new System.Windows.Forms.Label();
|
||||
this.cmbCoreType2 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType2 = new System.Windows.Forms.Label();
|
||||
this.cmbCoreType1 = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType1 = new System.Windows.Forms.Label();
|
||||
this.tabPage3 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.label18 = new System.Windows.Forms.Label();
|
||||
this.cmbSystemProxyAdvancedProtocol = new System.Windows.Forms.ComboBox();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.label12 = new System.Windows.Forms.Label();
|
||||
this.txtsystemProxyExceptions = new System.Windows.Forms.TextBox();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
@@ -103,17 +110,11 @@
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.tabPage2.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.tabControl2.SuspendLayout();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.tabPage4.SuspendLayout();
|
||||
this.tabPage5.SuspendLayout();
|
||||
this.tabPage8.SuspendLayout();
|
||||
this.panel3.SuspendLayout();
|
||||
this.tabPage6.SuspendLayout();
|
||||
this.tabPage7.SuspendLayout();
|
||||
this.tabPage9.SuspendLayout();
|
||||
this.panel4.SuspendLayout();
|
||||
this.tabPageCoreType.SuspendLayout();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -131,7 +132,8 @@
|
||||
this.tabControl1.Controls.Add(this.tabPage2);
|
||||
this.tabControl1.Controls.Add(this.tabPage6);
|
||||
this.tabControl1.Controls.Add(this.tabPage7);
|
||||
this.tabControl1.Controls.Add(this.tabPage9);
|
||||
this.tabControl1.Controls.Add(this.tabPageCoreType);
|
||||
this.tabControl1.Controls.Add(this.tabPage3);
|
||||
resources.ApplyResources(this.tabControl1, "tabControl1");
|
||||
this.tabControl1.Name = "tabControl1";
|
||||
this.tabControl1.SelectedIndex = 0;
|
||||
@@ -146,17 +148,13 @@
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.label16);
|
||||
this.groupBox1.Controls.Add(this.cmblistenerType);
|
||||
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
|
||||
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.chkAllowLANConn);
|
||||
this.groupBox1.Controls.Add(this.chksniffingEnabled);
|
||||
this.groupBox1.Controls.Add(this.txtremoteDNS);
|
||||
this.groupBox1.Controls.Add(this.label14);
|
||||
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.label1);
|
||||
this.groupBox1.Controls.Add(this.chkudpEnabled);
|
||||
@@ -174,26 +172,32 @@
|
||||
resources.ApplyResources(this.label16, "label16");
|
||||
this.label16.Name = "label16";
|
||||
//
|
||||
// cmblistenerType
|
||||
// label4
|
||||
//
|
||||
this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmblistenerType.FormattingEnabled = true;
|
||||
this.cmblistenerType.Items.AddRange(new object[] {
|
||||
resources.GetString("cmblistenerType.Items"),
|
||||
resources.GetString("cmblistenerType.Items1"),
|
||||
resources.GetString("cmblistenerType.Items2"),
|
||||
resources.GetString("cmblistenerType.Items3"),
|
||||
resources.GetString("cmblistenerType.Items4"),
|
||||
resources.GetString("cmblistenerType.Items5"),
|
||||
resources.GetString("cmblistenerType.Items6")});
|
||||
resources.ApplyResources(this.cmblistenerType, "cmblistenerType");
|
||||
this.cmblistenerType.Name = "cmblistenerType";
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// chksniffingEnabled2
|
||||
// txtpass
|
||||
//
|
||||
resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2");
|
||||
this.chksniffingEnabled2.Name = "chksniffingEnabled2";
|
||||
this.chksniffingEnabled2.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.txtpass, "txtpass");
|
||||
this.txtpass.Name = "txtpass";
|
||||
//
|
||||
// txtuser
|
||||
//
|
||||
resources.ApplyResources(this.txtuser, "txtuser");
|
||||
this.txtuser.Name = "txtuser";
|
||||
//
|
||||
// chkdefAllowInsecure
|
||||
//
|
||||
resources.ApplyResources(this.chkdefAllowInsecure, "chkdefAllowInsecure");
|
||||
this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
|
||||
this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkAllowLANConn
|
||||
//
|
||||
resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn");
|
||||
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
||||
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chksniffingEnabled
|
||||
//
|
||||
@@ -201,55 +205,12 @@
|
||||
this.chksniffingEnabled.Name = "chksniffingEnabled";
|
||||
this.chksniffingEnabled.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtremoteDNS
|
||||
//
|
||||
resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS");
|
||||
this.txtremoteDNS.Name = "txtremoteDNS";
|
||||
//
|
||||
// label14
|
||||
//
|
||||
resources.ApplyResources(this.label14, "label14");
|
||||
this.label14.Name = "label14";
|
||||
//
|
||||
// chkmuxEnabled
|
||||
//
|
||||
resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled");
|
||||
this.chkmuxEnabled.Name = "chkmuxEnabled";
|
||||
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
|
||||
//
|
||||
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
@@ -307,123 +268,29 @@
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
this.tabPage2.Controls.Add(this.groupBox2);
|
||||
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
|
||||
this.tabPage2.Controls.Add(this.txtremoteDNS);
|
||||
this.tabPage2.Controls.Add(this.label14);
|
||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox2
|
||||
// linkDnsObjectDoc
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.tabControl2);
|
||||
this.groupBox2.Controls.Add(this.panel3);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc");
|
||||
this.linkDnsObjectDoc.Name = "linkDnsObjectDoc";
|
||||
this.linkDnsObjectDoc.TabStop = true;
|
||||
this.linkDnsObjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDnsObjectDoc_LinkClicked);
|
||||
//
|
||||
// tabControl2
|
||||
// txtremoteDNS
|
||||
//
|
||||
this.tabControl2.Controls.Add(this.tabPage3);
|
||||
this.tabControl2.Controls.Add(this.tabPage4);
|
||||
this.tabControl2.Controls.Add(this.tabPage5);
|
||||
this.tabControl2.Controls.Add(this.tabPage8);
|
||||
resources.ApplyResources(this.tabControl2, "tabControl2");
|
||||
this.tabControl2.Name = "tabControl2";
|
||||
this.tabControl2.SelectedIndex = 0;
|
||||
resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS");
|
||||
this.txtremoteDNS.Name = "txtremoteDNS";
|
||||
//
|
||||
// tabPage3
|
||||
// label14
|
||||
//
|
||||
this.tabPage3.Controls.Add(this.txtUseragent);
|
||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
||||
this.tabPage3.Name = "tabPage3";
|
||||
this.tabPage3.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtUseragent
|
||||
//
|
||||
resources.ApplyResources(this.txtUseragent, "txtUseragent");
|
||||
this.txtUseragent.Name = "txtUseragent";
|
||||
//
|
||||
// tabPage4
|
||||
//
|
||||
this.tabPage4.Controls.Add(this.txtUserdirect);
|
||||
resources.ApplyResources(this.tabPage4, "tabPage4");
|
||||
this.tabPage4.Name = "tabPage4";
|
||||
this.tabPage4.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtUserdirect
|
||||
//
|
||||
resources.ApplyResources(this.txtUserdirect, "txtUserdirect");
|
||||
this.txtUserdirect.Name = "txtUserdirect";
|
||||
//
|
||||
// tabPage5
|
||||
//
|
||||
this.tabPage5.Controls.Add(this.txtUserblock);
|
||||
resources.ApplyResources(this.tabPage5, "tabPage5");
|
||||
this.tabPage5.Name = "tabPage5";
|
||||
this.tabPage5.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtUserblock
|
||||
//
|
||||
resources.ApplyResources(this.txtUserblock, "txtUserblock");
|
||||
this.txtUserblock.Name = "txtUserblock";
|
||||
//
|
||||
// tabPage8
|
||||
//
|
||||
this.tabPage8.Controls.Add(this.cmbroutingMode);
|
||||
resources.ApplyResources(this.tabPage8, "tabPage8");
|
||||
this.tabPage8.Name = "tabPage8";
|
||||
this.tabPage8.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// cmbroutingMode
|
||||
//
|
||||
this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbroutingMode.FormattingEnabled = true;
|
||||
this.cmbroutingMode.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbroutingMode.Items"),
|
||||
resources.GetString("cmbroutingMode.Items1"),
|
||||
resources.GetString("cmbroutingMode.Items2"),
|
||||
resources.GetString("cmbroutingMode.Items3")});
|
||||
resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode");
|
||||
this.cmbroutingMode.Name = "cmbroutingMode";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.Controls.Add(this.linkLabelRoutingDoc);
|
||||
this.panel3.Controls.Add(this.btnSetDefRountingRule);
|
||||
this.panel3.Controls.Add(this.labRoutingTips);
|
||||
this.panel3.Controls.Add(this.cmbdomainStrategy);
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// linkLabelRoutingDoc
|
||||
//
|
||||
resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc");
|
||||
this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc";
|
||||
this.linkLabelRoutingDoc.TabStop = true;
|
||||
this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked);
|
||||
//
|
||||
// btnSetDefRountingRule
|
||||
//
|
||||
resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule");
|
||||
this.btnSetDefRountingRule.Name = "btnSetDefRountingRule";
|
||||
this.btnSetDefRountingRule.UseVisualStyleBackColor = true;
|
||||
this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click);
|
||||
//
|
||||
// labRoutingTips
|
||||
//
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// cmbdomainStrategy
|
||||
//
|
||||
this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainStrategy.FormattingEnabled = true;
|
||||
this.cmbdomainStrategy.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainStrategy.Items"),
|
||||
resources.GetString("cmbdomainStrategy.Items1"),
|
||||
resources.GetString("cmbdomainStrategy.Items2")});
|
||||
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
|
||||
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
|
||||
resources.ApplyResources(this.label14, "label14");
|
||||
this.label14.Name = "label14";
|
||||
//
|
||||
// tabPage6
|
||||
//
|
||||
@@ -512,18 +379,80 @@
|
||||
//
|
||||
// tabPage7
|
||||
//
|
||||
this.tabPage7.Controls.Add(this.txttrayMenuServersLimit);
|
||||
this.tabPage7.Controls.Add(this.label17);
|
||||
this.tabPage7.Controls.Add(this.txtautoUpdateSubInterval);
|
||||
this.tabPage7.Controls.Add(this.label3);
|
||||
this.tabPage7.Controls.Add(this.chkEnableSecurityProtocolTls13);
|
||||
this.tabPage7.Controls.Add(this.chkEnableAutoAdjustMainLvColWidth);
|
||||
this.tabPage7.Controls.Add(this.btnSetLoopback);
|
||||
this.tabPage7.Controls.Add(this.txtautoUpdateInterval);
|
||||
this.tabPage7.Controls.Add(this.label15);
|
||||
this.tabPage7.Controls.Add(this.chkIgnoreGeoUpdateCore);
|
||||
this.tabPage7.Controls.Add(this.chkKeepOlderDedupl);
|
||||
this.tabPage7.Controls.Add(this.cbFreshrate);
|
||||
this.tabPage7.Controls.Add(this.lbFreshrate);
|
||||
this.tabPage7.Controls.Add(this.chkEnableStatistics);
|
||||
this.tabPage7.Controls.Add(this.chkAllowLANConn);
|
||||
this.tabPage7.Controls.Add(this.txturlGFWList);
|
||||
this.tabPage7.Controls.Add(this.label13);
|
||||
this.tabPage7.Controls.Add(this.chkAutoRun);
|
||||
resources.ApplyResources(this.tabPage7, "tabPage7");
|
||||
this.tabPage7.Name = "tabPage7";
|
||||
this.tabPage7.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txttrayMenuServersLimit
|
||||
//
|
||||
resources.ApplyResources(this.txttrayMenuServersLimit, "txttrayMenuServersLimit");
|
||||
this.txttrayMenuServersLimit.Name = "txttrayMenuServersLimit";
|
||||
//
|
||||
// label17
|
||||
//
|
||||
resources.ApplyResources(this.label17, "label17");
|
||||
this.label17.Name = "label17";
|
||||
//
|
||||
// txtautoUpdateSubInterval
|
||||
//
|
||||
resources.ApplyResources(this.txtautoUpdateSubInterval, "txtautoUpdateSubInterval");
|
||||
this.txtautoUpdateSubInterval.Name = "txtautoUpdateSubInterval";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// chkEnableSecurityProtocolTls13
|
||||
//
|
||||
resources.ApplyResources(this.chkEnableSecurityProtocolTls13, "chkEnableSecurityProtocolTls13");
|
||||
this.chkEnableSecurityProtocolTls13.Name = "chkEnableSecurityProtocolTls13";
|
||||
this.chkEnableSecurityProtocolTls13.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkEnableAutoAdjustMainLvColWidth
|
||||
//
|
||||
resources.ApplyResources(this.chkEnableAutoAdjustMainLvColWidth, "chkEnableAutoAdjustMainLvColWidth");
|
||||
this.chkEnableAutoAdjustMainLvColWidth.Name = "chkEnableAutoAdjustMainLvColWidth";
|
||||
this.chkEnableAutoAdjustMainLvColWidth.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnSetLoopback
|
||||
//
|
||||
resources.ApplyResources(this.btnSetLoopback, "btnSetLoopback");
|
||||
this.btnSetLoopback.Name = "btnSetLoopback";
|
||||
this.btnSetLoopback.UseVisualStyleBackColor = true;
|
||||
this.btnSetLoopback.Click += new System.EventHandler(this.btnSetLoopback_Click);
|
||||
//
|
||||
// txtautoUpdateInterval
|
||||
//
|
||||
resources.ApplyResources(this.txtautoUpdateInterval, "txtautoUpdateInterval");
|
||||
this.txtautoUpdateInterval.Name = "txtautoUpdateInterval";
|
||||
//
|
||||
// label15
|
||||
//
|
||||
resources.ApplyResources(this.label15, "label15");
|
||||
this.label15.Name = "label15";
|
||||
//
|
||||
// chkIgnoreGeoUpdateCore
|
||||
//
|
||||
resources.ApplyResources(this.chkIgnoreGeoUpdateCore, "chkIgnoreGeoUpdateCore");
|
||||
this.chkIgnoreGeoUpdateCore.Name = "chkIgnoreGeoUpdateCore";
|
||||
this.chkIgnoreGeoUpdateCore.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkKeepOlderDedupl
|
||||
//
|
||||
resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl");
|
||||
@@ -548,52 +477,145 @@
|
||||
this.chkEnableStatistics.Name = "chkEnableStatistics";
|
||||
this.chkEnableStatistics.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkAllowLANConn
|
||||
//
|
||||
resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn");
|
||||
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
||||
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txturlGFWList
|
||||
//
|
||||
resources.ApplyResources(this.txturlGFWList, "txturlGFWList");
|
||||
this.txturlGFWList.Name = "txturlGFWList";
|
||||
//
|
||||
// label13
|
||||
//
|
||||
resources.ApplyResources(this.label13, "label13");
|
||||
this.label13.Name = "label13";
|
||||
//
|
||||
// chkAutoRun
|
||||
//
|
||||
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
||||
this.chkAutoRun.Name = "chkAutoRun";
|
||||
this.chkAutoRun.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// tabPage9
|
||||
// tabPageCoreType
|
||||
//
|
||||
this.tabPage9.Controls.Add(this.txtuserPacRule);
|
||||
this.tabPage9.Controls.Add(this.panel4);
|
||||
resources.ApplyResources(this.tabPage9, "tabPage9");
|
||||
this.tabPage9.Name = "tabPage9";
|
||||
this.tabPage9.UseVisualStyleBackColor = true;
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType6);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType6);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType5);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType5);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType4);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType4);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType3);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType3);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType2);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType2);
|
||||
this.tabPageCoreType.Controls.Add(this.cmbCoreType1);
|
||||
this.tabPageCoreType.Controls.Add(this.labCoreType1);
|
||||
resources.ApplyResources(this.tabPageCoreType, "tabPageCoreType");
|
||||
this.tabPageCoreType.Name = "tabPageCoreType";
|
||||
this.tabPageCoreType.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtuserPacRule
|
||||
// cmbCoreType6
|
||||
//
|
||||
resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule");
|
||||
this.txtuserPacRule.Name = "txtuserPacRule";
|
||||
this.cmbCoreType6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType6.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
|
||||
this.cmbCoreType6.Name = "cmbCoreType6";
|
||||
//
|
||||
// panel4
|
||||
// labCoreType6
|
||||
//
|
||||
this.panel4.Controls.Add(this.label4);
|
||||
resources.ApplyResources(this.panel4, "panel4");
|
||||
this.panel4.Name = "panel4";
|
||||
resources.ApplyResources(this.labCoreType6, "labCoreType6");
|
||||
this.labCoreType6.Name = "labCoreType6";
|
||||
//
|
||||
// label4
|
||||
// cmbCoreType5
|
||||
//
|
||||
this.label4.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
this.cmbCoreType5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType5.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType5, "cmbCoreType5");
|
||||
this.cmbCoreType5.Name = "cmbCoreType5";
|
||||
//
|
||||
// labCoreType5
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType5, "labCoreType5");
|
||||
this.labCoreType5.Name = "labCoreType5";
|
||||
//
|
||||
// cmbCoreType4
|
||||
//
|
||||
this.cmbCoreType4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType4.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType4, "cmbCoreType4");
|
||||
this.cmbCoreType4.Name = "cmbCoreType4";
|
||||
//
|
||||
// labCoreType4
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType4, "labCoreType4");
|
||||
this.labCoreType4.Name = "labCoreType4";
|
||||
//
|
||||
// cmbCoreType3
|
||||
//
|
||||
this.cmbCoreType3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType3.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType3, "cmbCoreType3");
|
||||
this.cmbCoreType3.Name = "cmbCoreType3";
|
||||
//
|
||||
// labCoreType3
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType3, "labCoreType3");
|
||||
this.labCoreType3.Name = "labCoreType3";
|
||||
//
|
||||
// cmbCoreType2
|
||||
//
|
||||
this.cmbCoreType2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType2.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType2, "cmbCoreType2");
|
||||
this.cmbCoreType2.Name = "cmbCoreType2";
|
||||
//
|
||||
// labCoreType2
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType2, "labCoreType2");
|
||||
this.labCoreType2.Name = "labCoreType2";
|
||||
//
|
||||
// cmbCoreType1
|
||||
//
|
||||
this.cmbCoreType1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType1.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType1, "cmbCoreType1");
|
||||
this.cmbCoreType1.Name = "cmbCoreType1";
|
||||
//
|
||||
// labCoreType1
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType1, "labCoreType1");
|
||||
this.labCoreType1.Name = "labCoreType1";
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
this.tabPage3.Controls.Add(this.groupBox2);
|
||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
||||
this.tabPage3.Name = "tabPage3";
|
||||
this.tabPage3.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.label18);
|
||||
this.groupBox2.Controls.Add(this.cmbSystemProxyAdvancedProtocol);
|
||||
this.groupBox2.Controls.Add(this.label13);
|
||||
this.groupBox2.Controls.Add(this.label12);
|
||||
this.groupBox2.Controls.Add(this.txtsystemProxyExceptions);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// label18
|
||||
//
|
||||
resources.ApplyResources(this.label18, "label18");
|
||||
this.label18.Name = "label18";
|
||||
//
|
||||
// cmbSystemProxyAdvancedProtocol
|
||||
//
|
||||
this.cmbSystemProxyAdvancedProtocol.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbSystemProxyAdvancedProtocol, "cmbSystemProxyAdvancedProtocol");
|
||||
this.cmbSystemProxyAdvancedProtocol.Name = "cmbSystemProxyAdvancedProtocol";
|
||||
//
|
||||
// label13
|
||||
//
|
||||
resources.ApplyResources(this.label13, "label13");
|
||||
this.label13.Name = "label13";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
resources.ApplyResources(this.label12, "label12");
|
||||
this.label12.Name = "label12";
|
||||
//
|
||||
// txtsystemProxyExceptions
|
||||
//
|
||||
resources.ApplyResources(this.txtsystemProxyExceptions, "txtsystemProxyExceptions");
|
||||
this.txtsystemProxyExceptions.Name = "txtsystemProxyExceptions";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
@@ -630,24 +652,16 @@
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.tabPage2.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.tabControl2.ResumeLayout(false);
|
||||
this.tabPage3.ResumeLayout(false);
|
||||
this.tabPage3.PerformLayout();
|
||||
this.tabPage4.ResumeLayout(false);
|
||||
this.tabPage4.PerformLayout();
|
||||
this.tabPage5.ResumeLayout(false);
|
||||
this.tabPage5.PerformLayout();
|
||||
this.tabPage8.ResumeLayout(false);
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
this.tabPage2.PerformLayout();
|
||||
this.tabPage6.ResumeLayout(false);
|
||||
this.tabPage6.PerformLayout();
|
||||
this.tabPage7.ResumeLayout(false);
|
||||
this.tabPage7.PerformLayout();
|
||||
this.tabPage9.ResumeLayout(false);
|
||||
this.tabPage9.PerformLayout();
|
||||
this.panel4.ResumeLayout(false);
|
||||
this.tabPageCoreType.ResumeLayout(false);
|
||||
this.tabPageCoreType.PerformLayout();
|
||||
this.tabPage3.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@@ -667,25 +681,10 @@
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.TabControl tabControl1;
|
||||
private System.Windows.Forms.TabPage tabPage1;
|
||||
private System.Windows.Forms.TabPage tabPage2;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.ComboBox cmbprotocol;
|
||||
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.TabControl tabControl2;
|
||||
private System.Windows.Forms.TabPage tabPage3;
|
||||
private System.Windows.Forms.TabPage tabPage4;
|
||||
private System.Windows.Forms.Label labRoutingTips;
|
||||
private System.Windows.Forms.TextBox txtUseragent;
|
||||
private System.Windows.Forms.TabPage tabPage5;
|
||||
private System.Windows.Forms.TextBox txtUserdirect;
|
||||
private System.Windows.Forms.TextBox txtUserblock;
|
||||
private System.Windows.Forms.TabPage tabPage6;
|
||||
private System.Windows.Forms.TextBox txtKcpmtu;
|
||||
private System.Windows.Forms.Label label6;
|
||||
@@ -702,28 +701,50 @@
|
||||
private System.Windows.Forms.CheckBox chkKcpcongestion;
|
||||
private System.Windows.Forms.TabPage tabPage7;
|
||||
private System.Windows.Forms.CheckBox chkAutoRun;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.TextBox txturlGFWList;
|
||||
private System.Windows.Forms.CheckBox chkAllowLANConn;
|
||||
private System.Windows.Forms.TextBox txtremoteDNS;
|
||||
private System.Windows.Forms.Label label14;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.ComboBox cmbdomainStrategy;
|
||||
private System.Windows.Forms.ComboBox cmbroutingMode;
|
||||
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
||||
private System.Windows.Forms.CheckBox chksniffingEnabled2;
|
||||
private System.Windows.Forms.Button btnSetDefRountingRule;
|
||||
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
||||
private System.Windows.Forms.ComboBox cbFreshrate;
|
||||
private System.Windows.Forms.Label lbFreshrate;
|
||||
private System.Windows.Forms.Label label16;
|
||||
private System.Windows.Forms.ComboBox cmblistenerType;
|
||||
private System.Windows.Forms.TabPage tabPage8;
|
||||
private System.Windows.Forms.TabPage tabPage9;
|
||||
private System.Windows.Forms.TextBox txtuserPacRule;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
|
||||
private System.Windows.Forms.LinkLabel linkLabelRoutingDoc;
|
||||
private System.Windows.Forms.CheckBox chkdefAllowInsecure;
|
||||
private System.Windows.Forms.TabPage tabPage2;
|
||||
private System.Windows.Forms.LinkLabel linkDnsObjectDoc;
|
||||
private System.Windows.Forms.TextBox txtremoteDNS;
|
||||
private System.Windows.Forms.Label label14;
|
||||
private System.Windows.Forms.CheckBox chkIgnoreGeoUpdateCore;
|
||||
private System.Windows.Forms.TabPage tabPage3;
|
||||
private System.Windows.Forms.TextBox txtsystemProxyExceptions;
|
||||
private System.Windows.Forms.Label label12;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.TextBox txtautoUpdateInterval;
|
||||
private System.Windows.Forms.Label label15;
|
||||
private System.Windows.Forms.Button btnSetLoopback;
|
||||
private System.Windows.Forms.CheckBox chkEnableAutoAdjustMainLvColWidth;
|
||||
private System.Windows.Forms.CheckBox chkEnableSecurityProtocolTls13;
|
||||
private System.Windows.Forms.TabPage tabPageCoreType;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType1;
|
||||
private System.Windows.Forms.Label labCoreType1;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType6;
|
||||
private System.Windows.Forms.Label labCoreType6;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType5;
|
||||
private System.Windows.Forms.Label labCoreType5;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType4;
|
||||
private System.Windows.Forms.Label labCoreType4;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType3;
|
||||
private System.Windows.Forms.Label labCoreType3;
|
||||
private System.Windows.Forms.ComboBox cmbCoreType2;
|
||||
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;
|
||||
private System.Windows.Forms.TextBox txtautoUpdateSubInterval;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.TextBox txttrayMenuServersLimit;
|
||||
private System.Windows.Forms.Label label17;
|
||||
private System.Windows.Forms.ComboBox cmbSystemProxyAdvancedProtocol;
|
||||
private System.Windows.Forms.Label label18;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.HttpProxyHandler;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
@@ -16,15 +18,15 @@ namespace v2rayN.Forms
|
||||
|
||||
private void OptionSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
InitBase();
|
||||
cmbSystemProxyAdvancedProtocol.Items.AddRange(Global.IEProxyProtocols.ToArray());
|
||||
|
||||
InitRouting();
|
||||
InitBase();
|
||||
|
||||
InitKCP();
|
||||
|
||||
InitGUI();
|
||||
|
||||
InitUserPAC();
|
||||
InitCoreType();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -46,45 +48,22 @@ namespace v2rayN.Forms
|
||||
cmbprotocol.Text = config.inbound[0].protocol.ToString();
|
||||
chkudpEnabled.Checked = config.inbound[0].udpEnabled;
|
||||
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
|
||||
txtremoteDNS.Text = config.remoteDNS;
|
||||
|
||||
cmblistenerType.SelectedIndex = (int)config.listenerType;
|
||||
chkdefAllowInsecure.Checked = config.defAllowInsecure;
|
||||
|
||||
txtsystemProxyExceptions.Text = config.systemProxyExceptions;
|
||||
|
||||
cmbSystemProxyAdvancedProtocol.Text = config.systemProxyAdvancedProtocol;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化路由设置
|
||||
/// </summary>
|
||||
private void InitRouting()
|
||||
{
|
||||
//路由
|
||||
cmbdomainStrategy.Text = config.domainStrategy;
|
||||
int.TryParse(config.routingMode, out int routingMode);
|
||||
cmbroutingMode.SelectedIndex = routingMode;
|
||||
|
||||
txtUseragent.Text = Utils.List2String(config.useragent, true);
|
||||
txtUserdirect.Text = Utils.List2String(config.userdirect, true);
|
||||
txtUserblock.Text = Utils.List2String(config.userblock, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化KCP设置
|
||||
@@ -108,21 +87,14 @@ namespace v2rayN.Forms
|
||||
//开机自动启动
|
||||
chkAutoRun.Checked = Utils.IsAutoRun();
|
||||
|
||||
//自定义GFWList
|
||||
txturlGFWList.Text = config.urlGFWList;
|
||||
|
||||
chkAllowLANConn.Checked = config.allowLANConn;
|
||||
chkEnableStatistics.Checked = config.enableStatistics;
|
||||
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
||||
|
||||
|
||||
|
||||
|
||||
ComboItem[] cbSource = new ComboItem[]
|
||||
{
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = UIRes.I18N("MediumFresh")},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = UIRes.I18N("SlowFresh")},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = ResUI.QuickFresh},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = ResUI.MediumFresh},
|
||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = ResUI.SlowFresh},
|
||||
};
|
||||
cbFreshrate.DataSource = cbSource;
|
||||
|
||||
@@ -142,11 +114,42 @@ namespace v2rayN.Forms
|
||||
break;
|
||||
}
|
||||
|
||||
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
|
||||
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
|
||||
chkEnableSecurityProtocolTls13.Checked = config.enableSecurityProtocolTls13;
|
||||
|
||||
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
|
||||
txtautoUpdateSubInterval.Text = config.autoUpdateSubInterval.ToString();
|
||||
txttrayMenuServersLimit.Text = config.trayMenuServersLimit.ToString();
|
||||
}
|
||||
|
||||
private void InitUserPAC()
|
||||
private void InitCoreType()
|
||||
{
|
||||
txtuserPacRule.Text = Utils.List2String(config.userPacRule, true);
|
||||
if (config.coreTypeItem == null)
|
||||
{
|
||||
config.coreTypeItem = new List<CoreTypeItem>();
|
||||
}
|
||||
|
||||
foreach (EConfigType it in Enum.GetValues(typeof(EConfigType)))
|
||||
{
|
||||
if (config.coreTypeItem.FindIndex(t => t.configType == it) >= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
config.coreTypeItem.Add(new CoreTypeItem()
|
||||
{
|
||||
configType = it,
|
||||
coreType = ECoreType.Xray
|
||||
});
|
||||
}
|
||||
for (int k = 1; k <= config.coreTypeItem.Count; k++)
|
||||
{
|
||||
var item = config.coreTypeItem[k - 1];
|
||||
((ComboBox)tabPageCoreType.Controls[$"cmbCoreType{k}"]).Items.AddRange(Global.coreTypes.ToArray());
|
||||
tabPageCoreType.Controls[$"labCoreType{k}"].Text = item.configType.ToString();
|
||||
tabPageCoreType.Controls[$"cmbCoreType{k}"].Text = item.coreType.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
@@ -156,10 +159,6 @@ namespace v2rayN.Forms
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveRouting() != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveKCP() != 0)
|
||||
{
|
||||
@@ -171,7 +170,7 @@ namespace v2rayN.Forms
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveUserPAC() != 0)
|
||||
if (SaveCoreType() != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -182,7 +181,7 @@ namespace v2rayN.Forms
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,55 +203,46 @@ namespace v2rayN.Forms
|
||||
string protocol = cmbprotocol.Text.TrimEx();
|
||||
bool udpEnabled = chkudpEnabled.Checked;
|
||||
bool sniffingEnabled = chksniffingEnabled.Checked;
|
||||
bool allowLANConn = chkAllowLANConn.Checked;
|
||||
if (Utils.IsNullOrEmpty(localPort) || !Utils.IsNumberic(localPort))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillLocalListeningPort"));
|
||||
UI.Show(ResUI.FillLocalListeningPort);
|
||||
return -1;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(protocol))
|
||||
{
|
||||
UI.Show(UIRes.I18N("PleaseSelectProtocol"));
|
||||
UI.Show(ResUI.PleaseSelectProtocol);
|
||||
return -1;
|
||||
}
|
||||
|
||||
var remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||
var obj = Utils.ParseJson(remoteDNS);
|
||||
if (obj != null && obj.ContainsKey("servers"))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if (remoteDNS.Contains("{") || remoteDNS.Contains("}"))
|
||||
{
|
||||
UI.Show(ResUI.FillCorrectDNSText);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
config.inbound[0].localPort = Utils.ToInt(localPort);
|
||||
config.inbound[0].protocol = protocol;
|
||||
config.inbound[0].udpEnabled = udpEnabled;
|
||||
config.inbound[0].sniffingEnabled = sniffingEnabled;
|
||||
config.inbound[0].allowLANConn = allowLANConn;
|
||||
config.inbound[0].user = txtuser.Text;
|
||||
config.inbound[0].pass = txtpass.Text;
|
||||
|
||||
//本地监听2
|
||||
string localPort2 = txtlocalPort2.Text.TrimEx();
|
||||
string protocol2 = cmbprotocol2.Text.TrimEx();
|
||||
bool udpEnabled2 = chkudpEnabled2.Checked;
|
||||
bool sniffingEnabled2 = chksniffingEnabled2.Checked;
|
||||
if (chkAllowIn2.Checked)
|
||||
if (config.inbound.Count > 1)
|
||||
{
|
||||
if (Utils.IsNullOrEmpty(localPort2) || !Utils.IsNumberic(localPort2))
|
||||
{
|
||||
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.inbound.RemoveAt(1);
|
||||
}
|
||||
|
||||
|
||||
//日志
|
||||
config.logEnabled = logEnabled;
|
||||
config.loglevel = loglevel;
|
||||
@@ -260,37 +250,18 @@ namespace v2rayN.Forms
|
||||
//Mux
|
||||
config.muxEnabled = muxEnabled;
|
||||
|
||||
//remoteDNS
|
||||
//remoteDNS
|
||||
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||
|
||||
config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex);
|
||||
config.defAllowInsecure = chkdefAllowInsecure.Checked;
|
||||
|
||||
config.systemProxyExceptions = txtsystemProxyExceptions.Text.TrimEx();
|
||||
|
||||
config.systemProxyAdvancedProtocol = cmbSystemProxyAdvancedProtocol.Text.TrimEx();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存路由设置
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private int SaveRouting()
|
||||
{
|
||||
//路由
|
||||
string domainStrategy = cmbdomainStrategy.Text;
|
||||
string routingMode = cmbroutingMode.SelectedIndex.ToString();
|
||||
|
||||
string useragent = txtUseragent.Text.TrimEx();
|
||||
string userdirect = txtUserdirect.Text.TrimEx();
|
||||
string userblock = txtUserblock.Text.TrimEx();
|
||||
|
||||
config.domainStrategy = domainStrategy;
|
||||
config.routingMode = routingMode;
|
||||
|
||||
config.useragent = Utils.String2List(useragent);
|
||||
config.userdirect = Utils.String2List(userdirect);
|
||||
config.userblock = Utils.String2List(userblock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存KCP设置
|
||||
@@ -313,7 +284,7 @@ namespace v2rayN.Forms
|
||||
|| Utils.IsNullOrEmpty(readBufferSize) || !Utils.IsNumberic(readBufferSize)
|
||||
|| Utils.IsNullOrEmpty(writeBufferSize) || !Utils.IsNumberic(writeBufferSize))
|
||||
{
|
||||
UI.Show(UIRes.I18N("FillKcpParameters"));
|
||||
UI.Show(ResUI.FillKcpParameters);
|
||||
return -1;
|
||||
}
|
||||
config.kcpItem.mtu = Utils.ToInt(mtu);
|
||||
@@ -336,123 +307,47 @@ namespace v2rayN.Forms
|
||||
//开机自动启动
|
||||
Utils.SetAutoRun(chkAutoRun.Checked);
|
||||
|
||||
//自定义GFWList
|
||||
config.urlGFWList = txturlGFWList.Text.TrimEx();
|
||||
|
||||
config.allowLANConn = chkAllowLANConn.Checked;
|
||||
|
||||
bool lastEnableStatistics = config.enableStatistics;
|
||||
config.enableStatistics = chkEnableStatistics.Checked;
|
||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
|
||||
|
||||
//if(lastEnableStatistics != config.enableStatistics)
|
||||
//{
|
||||
// /// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application
|
||||
// // Shut down the current app instance.
|
||||
// Application.Exit();
|
||||
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
|
||||
config.uiItem.enableAutoAdjustMainLvColWidth = chkEnableAutoAdjustMainLvColWidth.Checked;
|
||||
config.enableSecurityProtocolTls13 = chkEnableSecurityProtocolTls13.Checked;
|
||||
|
||||
// // Restart the app passing "/restart [processId]" as cmd line args
|
||||
// Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id);
|
||||
//}
|
||||
config.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
|
||||
config.autoUpdateSubInterval = Utils.ToInt(txtautoUpdateSubInterval.Text);
|
||||
config.trayMenuServersLimit = Utils.ToInt(txttrayMenuServersLimit.Text);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int SaveUserPAC()
|
||||
private int SaveCoreType()
|
||||
{
|
||||
string userPacRule = txtuserPacRule.Text.TrimEx();
|
||||
userPacRule = userPacRule.Replace("\"", "");
|
||||
|
||||
config.userPacRule = Utils.String2List(userPacRule);
|
||||
for (int k = 1; k <= config.coreTypeItem.Count; k++)
|
||||
{
|
||||
var item = config.coreTypeItem[k - 1];
|
||||
item.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), tabPageCoreType.Controls[$"cmbCoreType{k}"].Text);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void chkAllowIn2_CheckedChanged(object sender, EventArgs e)
|
||||
|
||||
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
chkAllowIn2State();
|
||||
}
|
||||
private void chkAllowIn2State()
|
||||
{
|
||||
bool blAllow2 = chkAllowIn2.Checked;
|
||||
txtlocalPort2.Enabled =
|
||||
cmbprotocol2.Enabled =
|
||||
chkudpEnabled2.Enabled = blAllow2;
|
||||
Process.Start("https://www.v2fly.org/config/dns.html#dnsobject");
|
||||
}
|
||||
|
||||
private void btnSetDefRountingRule_Click(object sender, EventArgs e)
|
||||
private void btnSetLoopback_Click(object sender, EventArgs e)
|
||||
{
|
||||
txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag);
|
||||
txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag);
|
||||
txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag);
|
||||
cmbroutingMode.SelectedIndex = 3;
|
||||
|
||||
List<string> lstUrl = new List<string>
|
||||
{
|
||||
Global.CustomRoutingListUrl + Global.agentTag,
|
||||
Global.CustomRoutingListUrl + Global.directTag,
|
||||
Global.CustomRoutingListUrl + Global.blockTag
|
||||
};
|
||||
|
||||
List<TextBox> lstTxt = new List<TextBox>
|
||||
{
|
||||
txtUseragent,
|
||||
txtUserdirect,
|
||||
txtUserblock
|
||||
};
|
||||
|
||||
for (int k = 0; k < lstUrl.Count; k++)
|
||||
{
|
||||
TextBox txt = lstTxt[k];
|
||||
DownloadHandle downloadHandle = new DownloadHandle();
|
||||
downloadHandle.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
string result = args.Msg;
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
return;
|
||||
}
|
||||
txt.Text = result;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendText(false, args.Msg);
|
||||
}
|
||||
};
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
AppendText(true, args.GetException().Message);
|
||||
};
|
||||
|
||||
downloadHandle.WebDownloadString(lstUrl[k]);
|
||||
}
|
||||
}
|
||||
void AppendText(bool notify, string text)
|
||||
{
|
||||
labRoutingTips.Text = text;
|
||||
Process.Start(Utils.GetPath("EnableLoopback.exe"));
|
||||
}
|
||||
|
||||
private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("https://www.v2ray.com/chapter_02/03_routing.html#routingobject");
|
||||
}
|
||||
}
|
||||
|
||||
class ComboItem
|
||||
{
|
||||
public int ID
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public string Text
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -117,188 +117,84 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>参数设置</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnSetDefRountingRule.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnSetDefRountingRule.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>351, 14</value>
|
||||
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="btnSetDefRountingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>201, 23</value>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value> Core:基础设置 </value>
|
||||
</data>
|
||||
<data name="btnSetDefRountingRule.Text" xml:space="preserve">
|
||||
<value>一键设置默认自定义路由规则</value>
|
||||
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="chkAllowIn2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>102, 16</value>
|
||||
<data name="tabPage2.Text" xml:space="preserve">
|
||||
<value> Core:DNS设置 </value>
|
||||
</data>
|
||||
<data name="chkAllowIn2.Text" xml:space="preserve">
|
||||
<value>本地监听端口2</value>
|
||||
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>144, 16</value>
|
||||
<data name="tabPage6.Text" xml:space="preserve">
|
||||
<value> Core:KCP设置 </value>
|
||||
</data>
|
||||
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
||||
<value>允许来自局域网的连接</value>
|
||||
<data name="txttrayMenuServersLimit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 211</value>
|
||||
</data>
|
||||
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 16</value>
|
||||
<data name="label17.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>185, 12</value>
|
||||
</data>
|
||||
<data name="chkAutoRun.Text" xml:space="preserve">
|
||||
<value>开机自动启动(可能会不成功)</value>
|
||||
<data name="label17.Text" xml:space="preserve">
|
||||
<value>托盘右键菜单服务器展示数量限制</value>
|
||||
</data>
|
||||
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>384, 16</value>
|
||||
<data name="txtautoUpdateSubInterval.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 184</value>
|
||||
</data>
|
||||
<data name="chkEnableStatistics.Text" xml:space="preserve">
|
||||
<value>启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)</value>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>自动更新订阅的间隔(单位小时)</value>
|
||||
</data>
|
||||
<data name="chkEnableSecurityProtocolTls13.Text" xml:space="preserve">
|
||||
<value>启用安全协议TLS v1.3 (订阅/检查更新/测速)</value>
|
||||
</data>
|
||||
<data name="chkEnableAutoAdjustMainLvColWidth.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>204, 16</value>
|
||||
</data>
|
||||
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
|
||||
<value>自动调整服务器列宽在更新订阅后</value>
|
||||
</data>
|
||||
<data name="btnSetLoopback.Text" xml:space="preserve">
|
||||
<value>解除Windows10 UWP应用回环代理限制</value>
|
||||
</data>
|
||||
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 157</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>自动更新Geo文件的间隔(单位小时)</value>
|
||||
</data>
|
||||
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 16</value>
|
||||
</data>
|
||||
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
|
||||
<value>更新Core时忽略Geo文件</value>
|
||||
</data>
|
||||
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>156, 16</value>
|
||||
</data>
|
||||
<data name="chkKeepOlderDedupl.Text" xml:space="preserve">
|
||||
<value>去重时保留序号较小的项</value>
|
||||
</data>
|
||||
<data name="chklogEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>156, 16</value>
|
||||
<data name="cbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>431, 37</value>
|
||||
</data>
|
||||
<data name="chklogEnabled.Text" xml:space="preserve">
|
||||
<value>记录本地日志(默认关闭)</value>
|
||||
</data>
|
||||
<data name="chkmuxEnabled.Text" xml:space="preserve">
|
||||
<value>开启Mux多路复用(默认开启)</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 16</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
||||
<value>开启流量探测</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 16</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled2.Text" xml:space="preserve">
|
||||
<value>开启流量探测</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>66, 16</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled.Text" xml:space="preserve">
|
||||
<value>开启UDP</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="cmblistenerType.Items" xml:space="preserve">
|
||||
<value>关闭Http代理</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items1" xml:space="preserve">
|
||||
<value>开启Http代理,并自动配置系统代理(全局模式)</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items2" xml:space="preserve">
|
||||
<value>开启PAC,并自动配置系统代理(PAC模式)</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items3" xml:space="preserve">
|
||||
<value>仅开启Http代理,并清除系统代理</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items4" xml:space="preserve">
|
||||
<value>仅开启PAC,并清除系统代理</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items5" xml:space="preserve">
|
||||
<value>仅开启Http代理,不改变系统代理</value>
|
||||
</data>
|
||||
<data name="cmblistenerType.Items6" xml:space="preserve">
|
||||
<value>仅开启PAC,不改变系统代理</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Items" xml:space="preserve">
|
||||
<value>全局</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Items1" xml:space="preserve">
|
||||
<value>绕过局域网地址</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Items2" xml:space="preserve">
|
||||
<value>绕过大陆地址</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Items3" xml:space="preserve">
|
||||
<value>绕过局域网及大陆地址</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>19, 26</value>
|
||||
</data>
|
||||
<data name="cmbroutingMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>244, 20</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>协议</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 12</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>自定义GFWList地址(不需自定义请填空白)</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</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>Http代理</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>本地监听端口</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 name="label4.Text" xml:space="preserve">
|
||||
<value>*设置用户PAC规则,用逗号(,)隔开</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>日志等级</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="labRoutingTips.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>5, 49</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>383, 12</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||
<value>*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP</value>
|
||||
<data name="lbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>339, 41</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
@@ -306,64 +202,178 @@
|
||||
<data name="lbFreshrate.Text" xml:space="preserve">
|
||||
<value>统计刷新频率</value>
|
||||
</data>
|
||||
<data name="linkLabelRoutingDoc.Text" xml:space="preserve">
|
||||
<value>域名解析策略</value>
|
||||
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 16</value>
|
||||
</data>
|
||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>642, 72</value>
|
||||
<data name="chkEnableStatistics.Text" xml:space="preserve">
|
||||
<value>启用统计(实时网速显示和使用流量显示,需要重启)</value>
|
||||
</data>
|
||||
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 89</value>
|
||||
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 16</value>
|
||||
</data>
|
||||
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>642, 481</value>
|
||||
<data name="chkAutoRun.Text" xml:space="preserve">
|
||||
<value>开机自动启动(可能会不成功)</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value> Core:基础设置 </value>
|
||||
</data>
|
||||
<data name="tabPage2.Text" xml:space="preserve">
|
||||
<value> Core:路由设置 </value>
|
||||
</data>
|
||||
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 455</value>
|
||||
</data>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value> 1.代理的Domain或IP </value>
|
||||
</data>
|
||||
<data name="tabPage4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 455</value>
|
||||
</data>
|
||||
<data name="tabPage4.Text" xml:space="preserve">
|
||||
<value> 2.直连的Domain或IP </value>
|
||||
</data>
|
||||
<data name="tabPage5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 455</value>
|
||||
</data>
|
||||
<data name="tabPage5.Text" xml:space="preserve">
|
||||
<value> 3.阻止的Domain或IP </value>
|
||||
</data>
|
||||
<data name="tabPage6.Text" xml:space="preserve">
|
||||
<value> Core:KCP设置 </value>
|
||||
<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="tabPage8.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 455</value>
|
||||
<data name="tabPageCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPage8.Text" xml:space="preserve">
|
||||
<value> 4.预定义规则 </value>
|
||||
<data name="tabPageCoreType.Text" xml:space="preserve">
|
||||
<value> Core类型设置 </value>
|
||||
</data>
|
||||
<data name="tabPage9.Text" xml:space="preserve">
|
||||
<value> 用户PAC设置 </value>
|
||||
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="txtUseragent.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>628, 449</value>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value> 系统代理设置 </value>
|
||||
</data>
|
||||
<data name="txtUserblock.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>628, 449</value>
|
||||
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>662, 469</value>
|
||||
</data>
|
||||
<data name="txtUserdirect.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>628, 449</value>
|
||||
<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">
|
||||
<value>324, 16</value>
|
||||
</data>
|
||||
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
|
||||
<value>传输层安全选tls时,默认跳过证书验证(allowInsecure)</value>
|
||||
</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="chksniffingEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 16</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
||||
<value>开启流量探测</value>
|
||||
</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">
|
||||
<value>114, 16</value>
|
||||
</data>
|
||||
<data name="chkmuxEnabled.Text" xml:space="preserve">
|
||||
<value>开启Mux多路复用</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>219, 29</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>协议</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>66, 16</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled.Text" xml:space="preserve">
|
||||
<value>开启UDP</value>
|
||||
</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">
|
||||
<value>156, 16</value>
|
||||
</data>
|
||||
<data name="chklogEnabled.Text" xml:space="preserve">
|
||||
<value>记录本地日志(默认关闭)</value>
|
||||
</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">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>日志等级</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>本地监听端口</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Text" xml:space="preserve">
|
||||
<value>支持填写DnsObject,JSON格式</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>例外</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>使用分号(;)分隔</value>
|
||||
</data>
|
||||
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>239, 12</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>对于下列字符开头的地址不使用代理服务器:</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 479</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>662, 60</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>662, 10</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>662, 539</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>参数设置</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>高级代理设置, 协议选择(可选)</value>
|
||||
</data>
|
||||
</root>
|
||||
10
v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs
generated
10
v2rayN/v2rayN/Forms/QRCodeControl.Designer.cs
generated
@@ -31,7 +31,6 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QRCodeControl));
|
||||
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||
this.picQRCode = new System.Windows.Forms.PictureBox();
|
||||
this.chkShow = new System.Windows.Forms.CheckBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -47,20 +46,12 @@
|
||||
this.picQRCode.Name = "picQRCode";
|
||||
this.picQRCode.TabStop = false;
|
||||
//
|
||||
// chkShow
|
||||
//
|
||||
resources.ApplyResources(this.chkShow, "chkShow");
|
||||
this.chkShow.Name = "chkShow";
|
||||
this.chkShow.UseVisualStyleBackColor = true;
|
||||
this.chkShow.CheckedChanged += new System.EventHandler(this.chkShow_CheckedChanged);
|
||||
//
|
||||
// QRCodeControl
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.picQRCode);
|
||||
this.Controls.Add(this.txtUrl);
|
||||
this.Controls.Add(this.chkShow);
|
||||
this.Name = "QRCodeControl";
|
||||
this.Load += new System.EventHandler(this.QRCodeControl_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit();
|
||||
@@ -73,6 +64,5 @@
|
||||
|
||||
private System.Windows.Forms.TextBox txtUrl;
|
||||
private System.Windows.Forms.PictureBox picQRCode;
|
||||
private System.Windows.Forms.CheckBox chkShow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,7 @@ namespace v2rayN.Forms
|
||||
}
|
||||
private void QRCodeControl_Load(object sender, System.EventArgs e)
|
||||
{
|
||||
chkShow_CheckedChanged(null, null);
|
||||
txtUrl.MouseUp += txtUrl_MouseUp;
|
||||
txtUrl.MouseUp += txtUrl_MouseUp;
|
||||
}
|
||||
|
||||
void txtUrl_MouseUp(object sender, MouseEventArgs e)
|
||||
@@ -21,27 +20,20 @@ namespace v2rayN.Forms
|
||||
txtUrl.SelectAll();
|
||||
}
|
||||
|
||||
public void showQRCode(int Index, Config config)
|
||||
public void showQRCode(VmessItem item)
|
||||
{
|
||||
if (Index >= 0)
|
||||
if (item != null)
|
||||
{
|
||||
string url = ConfigHandler.GetVmessQRCode(config, Index);
|
||||
string url = ShareHandler.GetShareUrl(item);
|
||||
if (Utils.IsNullOrEmpty(url))
|
||||
{
|
||||
picQRCode.Image = null;
|
||||
txtUrl.Text = string.Empty;
|
||||
return;
|
||||
}
|
||||
picQRCode.Image = QRCodeHelper.GetQRCode(url);
|
||||
txtUrl.Text = url;
|
||||
picQRCode.Image = QRCodeHelper.GetQRCode(url);
|
||||
}
|
||||
}
|
||||
|
||||
private void chkShow_CheckedChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
picQRCode.Visible =
|
||||
txtUrl.Visible = chkShow.Checked;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,60 +117,15 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>QRCodeControl</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 441</value>
|
||||
</data>
|
||||
<data name="chkShow.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="chkShow.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="chkShow.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="chkShow.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 16</value>
|
||||
</data>
|
||||
<data name="chkShow.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="chkShow.Text" xml:space="preserve">
|
||||
<value>Sharing panel</value>
|
||||
</data>
|
||||
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 16</value>
|
||||
</data>
|
||||
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 355</value>
|
||||
</data>
|
||||
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</value>
|
||||
</data>
|
||||
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="txtUrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 371</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
@@ -180,4 +135,58 @@
|
||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.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=">>txtUrl.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 371</value>
|
||||
</data>
|
||||
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</value>
|
||||
</data>
|
||||
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Name" xml:space="preserve">
|
||||
<value>picQRCode</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 441</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>QRCodeControl</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>
|
||||
@@ -117,7 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="chkShow.Text" xml:space="preserve">
|
||||
<value>显示分享内容</value>
|
||||
</data>
|
||||
</root>
|
||||
94
v2rayN/v2rayN/Forms/QRCodeForm.Designer.cs
generated
94
v2rayN/v2rayN/Forms/QRCodeForm.Designer.cs
generated
@@ -1,94 +0,0 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class QRCodeForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.picQRCode = new System.Windows.Forms.PictureBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// picQRCode
|
||||
//
|
||||
this.picQRCode.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.picQRCode.Location = new System.Drawing.Point(0, 0);
|
||||
this.picQRCode.Name = "picQRCode";
|
||||
this.picQRCode.Size = new System.Drawing.Size(482, 483);
|
||||
this.picQRCode.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.picQRCode.TabIndex = 23;
|
||||
this.picQRCode.TabStop = false;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.txtUrl);
|
||||
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.groupBox1.Location = new System.Drawing.Point(0, 483);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(482, 90);
|
||||
this.groupBox1.TabIndex = 0;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "URL";
|
||||
//
|
||||
// txtUrl
|
||||
//
|
||||
this.txtUrl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtUrl.Location = new System.Drawing.Point(3, 17);
|
||||
this.txtUrl.Multiline = true;
|
||||
this.txtUrl.Name = "txtUrl";
|
||||
this.txtUrl.ReadOnly = true;
|
||||
this.txtUrl.Size = new System.Drawing.Size(476, 70);
|
||||
this.txtUrl.TabIndex = 0;
|
||||
//
|
||||
// QRCodeForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(482, 573);
|
||||
this.Controls.Add(this.picQRCode);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Name = "QRCodeForm";
|
||||
this.Text = "服务器配置二维码和URL";
|
||||
this.Load += new System.EventHandler(this.QRCodeForm_Load);
|
||||
this.Shown += new System.EventHandler(this.QRCodeForm_Shown);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox txtUrl;
|
||||
private System.Windows.Forms.PictureBox picQRCode;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class QRCodeForm : BaseForm
|
||||
{
|
||||
public int Index { get; set; }
|
||||
|
||||
public QRCodeForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void QRCodeForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
txtUrl.MouseUp += txtUrl_MouseUp;
|
||||
}
|
||||
|
||||
void txtUrl_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
txtUrl.SelectAll();
|
||||
}
|
||||
|
||||
private void QRCodeForm_Shown(object sender, EventArgs e)
|
||||
{
|
||||
if (Index >= 0)
|
||||
{
|
||||
VmessQRCode vmessQRCode = null;
|
||||
if (ConfigHandler.GetVmessQRCode(config, Index, ref vmessQRCode) != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string url = Utils.ToJson(vmessQRCode);
|
||||
url = Utils.Base64Encode(url);
|
||||
url = string.Format("{0}{1}", Global.vmessProtocol, url);
|
||||
picQRCode.Image = QRCodeHelper.GetQRCode(url);
|
||||
txtUrl.Text = url;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
259
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
generated
Normal file
259
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
generated
Normal file
@@ -0,0 +1,259 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class RoutingRuleSettingDetailsForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingDetailsForm));
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.clbInboundTag = new System.Windows.Forms.CheckedListBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.clbProtocol = new System.Windows.Forms.CheckedListBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.labRoutingTips = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.cmbOutboundTag = new System.Windows.Forms.ComboBox();
|
||||
this.panel4 = new System.Windows.Forms.Panel();
|
||||
this.chkAutoSort = new System.Windows.Forms.CheckBox();
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.txtIP = new System.Windows.Forms.TextBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.txtDomain = new System.Windows.Forms.TextBox();
|
||||
this.panel3.SuspendLayout();
|
||||
this.panel4.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.Controls.Add(this.chkEnabled);
|
||||
this.panel3.Controls.Add(this.clbInboundTag);
|
||||
this.panel3.Controls.Add(this.label2);
|
||||
this.panel3.Controls.Add(this.clbProtocol);
|
||||
this.panel3.Controls.Add(this.label3);
|
||||
this.panel3.Controls.Add(this.txtPort);
|
||||
this.panel3.Controls.Add(this.label1);
|
||||
this.panel3.Controls.Add(this.labRoutingTips);
|
||||
this.panel3.Controls.Add(this.label4);
|
||||
this.panel3.Controls.Add(this.cmbOutboundTag);
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// chkEnabled
|
||||
//
|
||||
resources.ApplyResources(this.chkEnabled, "chkEnabled");
|
||||
this.chkEnabled.Name = "chkEnabled";
|
||||
this.chkEnabled.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// clbInboundTag
|
||||
//
|
||||
this.clbInboundTag.CheckOnClick = true;
|
||||
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
|
||||
this.clbInboundTag.FormattingEnabled = true;
|
||||
this.clbInboundTag.Items.AddRange(new object[] {
|
||||
resources.GetString("clbInboundTag.Items"),
|
||||
resources.GetString("clbInboundTag.Items1")});
|
||||
this.clbInboundTag.MultiColumn = true;
|
||||
this.clbInboundTag.Name = "clbInboundTag";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// clbProtocol
|
||||
//
|
||||
this.clbProtocol.CheckOnClick = true;
|
||||
resources.ApplyResources(this.clbProtocol, "clbProtocol");
|
||||
this.clbProtocol.FormattingEnabled = true;
|
||||
this.clbProtocol.Items.AddRange(new object[] {
|
||||
resources.GetString("clbProtocol.Items"),
|
||||
resources.GetString("clbProtocol.Items1"),
|
||||
resources.GetString("clbProtocol.Items2")});
|
||||
this.clbProtocol.MultiColumn = true;
|
||||
this.clbProtocol.Name = "clbProtocol";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPort, "txtPort");
|
||||
this.txtPort.Name = "txtPort";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// labRoutingTips
|
||||
//
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// cmbOutboundTag
|
||||
//
|
||||
this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbOutboundTag.FormattingEnabled = true;
|
||||
this.cmbOutboundTag.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbOutboundTag.Items"),
|
||||
resources.GetString("cmbOutboundTag.Items1"),
|
||||
resources.GetString("cmbOutboundTag.Items2")});
|
||||
resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
|
||||
this.cmbOutboundTag.Name = "cmbOutboundTag";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
this.panel4.Controls.Add(this.chkAutoSort);
|
||||
this.panel4.Controls.Add(this.btnClose);
|
||||
this.panel4.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel4, "panel4");
|
||||
this.panel4.Name = "panel4";
|
||||
//
|
||||
// chkAutoSort
|
||||
//
|
||||
resources.ApplyResources(this.chkAutoSort, "chkAutoSort");
|
||||
this.chkAutoSort.Name = "chkAutoSort";
|
||||
this.chkAutoSort.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.groupBox2);
|
||||
this.panel2.Controls.Add(this.groupBox1);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.txtIP);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// txtIP
|
||||
//
|
||||
resources.ApplyResources(this.txtIP, "txtIP");
|
||||
this.txtIP.Name = "txtIP";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.txtDomain);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// txtDomain
|
||||
//
|
||||
resources.ApplyResources(this.txtDomain, "txtDomain");
|
||||
this.txtDomain.Name = "txtDomain";
|
||||
//
|
||||
// RoutingRuleSettingDetailsForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel4);
|
||||
this.Controls.Add(this.panel3);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Name = "RoutingRuleSettingDetailsForm";
|
||||
this.Load += new System.EventHandler(this.RoutingRuleSettingDetailsForm_Load);
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
this.panel4.ResumeLayout(false);
|
||||
this.panel4.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.ComboBox cmbOutboundTag;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox txtDomain;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox txtIP;
|
||||
private System.Windows.Forms.Label labRoutingTips;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.CheckedListBox clbProtocol;
|
||||
private System.Windows.Forms.CheckedListBox clbInboundTag;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.CheckBox chkEnabled;
|
||||
private System.Windows.Forms.CheckBox chkAutoSort;
|
||||
}
|
||||
}
|
||||
148
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs
Normal file
148
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.cs
Normal file
@@ -0,0 +1,148 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class RoutingRuleSettingDetailsForm : BaseForm
|
||||
{
|
||||
public RulesItem rulesItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public RoutingRuleSettingDetailsForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RoutingRuleSettingDetailsForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (Utils.IsNullOrEmpty(rulesItem.outboundTag))
|
||||
{
|
||||
ClearBind();
|
||||
}
|
||||
else
|
||||
{
|
||||
BindingData();
|
||||
}
|
||||
}
|
||||
|
||||
private void EndBindingData()
|
||||
{
|
||||
if (rulesItem != null)
|
||||
{
|
||||
rulesItem.port = txtPort.Text.TrimEx();
|
||||
|
||||
var inboundTag = new List<String>();
|
||||
for (int i = 0; i < clbInboundTag.Items.Count; i++)
|
||||
{
|
||||
if (clbInboundTag.GetItemChecked(i))
|
||||
{
|
||||
inboundTag.Add(clbInboundTag.Items[i].ToString());
|
||||
}
|
||||
}
|
||||
rulesItem.inboundTag = inboundTag;
|
||||
rulesItem.outboundTag = cmbOutboundTag.Text;
|
||||
if (chkAutoSort.Checked)
|
||||
{
|
||||
rulesItem.domain = Utils.String2ListSorted(txtDomain.Text);
|
||||
rulesItem.ip = Utils.String2ListSorted(txtIP.Text);
|
||||
}
|
||||
else
|
||||
{
|
||||
rulesItem.domain = Utils.String2List(txtDomain.Text);
|
||||
rulesItem.ip = Utils.String2List(txtIP.Text);
|
||||
}
|
||||
|
||||
var protocol = new List<string>();
|
||||
for (int i = 0; i < clbProtocol.Items.Count; i++)
|
||||
{
|
||||
if (clbProtocol.GetItemChecked(i))
|
||||
{
|
||||
protocol.Add(clbProtocol.Items[i].ToString());
|
||||
}
|
||||
}
|
||||
rulesItem.protocol = protocol;
|
||||
rulesItem.enabled = chkEnabled.Checked;
|
||||
}
|
||||
}
|
||||
private void BindingData()
|
||||
{
|
||||
if (rulesItem != null)
|
||||
{
|
||||
txtPort.Text = rulesItem.port ?? string.Empty;
|
||||
cmbOutboundTag.Text = rulesItem.outboundTag;
|
||||
txtDomain.Text = Utils.List2String(rulesItem.domain, true);
|
||||
txtIP.Text = Utils.List2String(rulesItem.ip, true);
|
||||
|
||||
if (rulesItem.inboundTag != null)
|
||||
{
|
||||
for (int i = 0; i < clbInboundTag.Items.Count; i++)
|
||||
{
|
||||
if (rulesItem.inboundTag.Contains(clbInboundTag.Items[i].ToString()))
|
||||
{
|
||||
clbInboundTag.SetItemChecked(i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rulesItem.protocol != null)
|
||||
{
|
||||
for (int i = 0; i < clbProtocol.Items.Count; i++)
|
||||
{
|
||||
if (rulesItem.protocol.Contains(clbProtocol.Items[i].ToString()))
|
||||
{
|
||||
clbProtocol.SetItemChecked(i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
chkEnabled.Checked = rulesItem.enabled;
|
||||
}
|
||||
}
|
||||
private void ClearBind()
|
||||
{
|
||||
txtPort.Text = string.Empty;
|
||||
cmbOutboundTag.Text = Global.agentTag;
|
||||
txtDomain.Text = string.Empty;
|
||||
txtIP.Text = string.Empty;
|
||||
chkEnabled.Checked = true;
|
||||
}
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
EndBindingData();
|
||||
var hasRule = false;
|
||||
if (rulesItem.domain != null && rulesItem.domain.Count > 0)
|
||||
{
|
||||
hasRule = true;
|
||||
}
|
||||
if (rulesItem.ip != null && rulesItem.ip.Count > 0)
|
||||
{
|
||||
hasRule = true;
|
||||
}
|
||||
if (rulesItem.protocol != null && rulesItem.protocol.Count > 0)
|
||||
{
|
||||
hasRule = true;
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(rulesItem.port))
|
||||
{
|
||||
hasRule = true;
|
||||
}
|
||||
if (!hasRule)
|
||||
{
|
||||
UI.ShowWarning(string.Format(ResUI.RoutingRuleDetailRequiredTips, "Port/Protocol/Domain/IP"));
|
||||
return;
|
||||
}
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
||||
723
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx
Normal file
723
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.resx
Normal file
@@ -0,0 +1,723 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>742, 10</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>617, 19</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 16</value>
|
||||
</data>
|
||||
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>42</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Text" xml:space="preserve">
|
||||
<value>Enable</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Name" xml:space="preserve">
|
||||
<value>chkEnabled</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.ColumnWidth" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Items" xml:space="preserve">
|
||||
<value>socks</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Items1" xml:space="preserve">
|
||||
<value>http</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>347, 16</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>245, 20</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name=">>clbInboundTag.Name" xml:space="preserve">
|
||||
<value>clbInboundTag</value>
|
||||
</data>
|
||||
<data name=">>clbInboundTag.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>clbInboundTag.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>clbInboundTag.ZOrder" xml:space="preserve">
|
||||
<value>1</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>274, 20</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>inboundTag</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="clbProtocol.ColumnWidth" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Items" xml:space="preserve">
|
||||
<value>http</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Items1" xml:space="preserve">
|
||||
<value>tls</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Items2" xml:space="preserve">
|
||||
<value>bittorrent</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>347, 43</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>245, 20</value>
|
||||
</data>
|
||||
<data name="clbProtocol.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>39</value>
|
||||
</data>
|
||||
<data name=">>clbProtocol.Name" xml:space="preserve">
|
||||
<value>clbProtocol</value>
|
||||
</data>
|
||||
<data name=">>clbProtocol.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>clbProtocol.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>clbProtocol.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>274, 47</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Protocol</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>107, 43</value>
|
||||
</data>
|
||||
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>119, 21</value>
|
||||
</data>
|
||||
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name=">>txtPort.Name" xml:space="preserve">
|
||||
<value>txtPort</value>
|
||||
</data>
|
||||
<data name=">>txtPort.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=">>txtPort.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>txtPort.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>19, 47</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>34</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Port</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>panel3</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>19, 82</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>598, 16</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>33</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||
<value>*Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA></value>
|
||||
</data>
|
||||
<data name=">>labRoutingTips.Name" xml:space="preserve">
|
||||
<value>labRoutingTips</value>
|
||||
</data>
|
||||
<data name=">>labRoutingTips.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=">>labRoutingTips.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>labRoutingTips.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>19, 20</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>32</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>outboundTag</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name=">>label4.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=">>label4.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Items" xml:space="preserve">
|
||||
<value>proxy</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Items1" xml:space="preserve">
|
||||
<value>direct</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Items2" xml:space="preserve">
|
||||
<value>block</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>107, 16</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>119, 20</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>31</value>
|
||||
</data>
|
||||
<data name=">>cmbOutboundTag.Name" xml:space="preserve">
|
||||
<value>cmbOutboundTag</value>
|
||||
</data>
|
||||
<data name=">>cmbOutboundTag.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbOutboundTag.Parent" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>cmbOutboundTag.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="panel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>742, 111</value>
|
||||
</data>
|
||||
<data name="panel3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name=">>panel3.Name" xml:space="preserve">
|
||||
<value>panel3</value>
|
||||
</data>
|
||||
<data name=">>panel3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel3.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel3.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 18</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>270, 16</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Text" xml:space="preserve">
|
||||
<value>Domain and ip are auto sorted when saving</value>
|
||||
</data>
|
||||
<data name=">>chkAutoSort.Name" xml:space="preserve">
|
||||
<value>chkAutoSort</value>
|
||||
</data>
|
||||
<data name=">>chkAutoSort.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>chkAutoSort.Parent" xml:space="preserve">
|
||||
<value>panel4</value>
|
||||
</data>
|
||||
<data name=">>chkAutoSort.ZOrder" xml:space="preserve">
|
||||
<value>0</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>504, 15</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>panel4</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>1</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>411, 15</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>panel4</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="panel4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 516</value>
|
||||
</data>
|
||||
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>742, 60</value>
|
||||
</data>
|
||||
<data name="panel4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>panel4.Name" xml:space="preserve">
|
||||
<value>panel4</value>
|
||||
</data>
|
||||
<data name=">>panel4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel4.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel4.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtIP.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="txtIP.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 17</value>
|
||||
</data>
|
||||
<data name="txtIP.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtIP.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>344, 375</value>
|
||||
</data>
|
||||
<data name="txtIP.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name=">>txtIP.Name" xml:space="preserve">
|
||||
<value>txtIP</value>
|
||||
</data>
|
||||
<data name=">>txtIP.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=">>txtIP.Parent" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
</data>
|
||||
<data name=">>txtIP.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>392, 0</value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>350, 395</value>
|
||||
</data>
|
||||
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>IP</value>
|
||||
</data>
|
||||
<data name=">>groupBox2.Name" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
</data>
|
||||
<data name=">>groupBox2.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=">>groupBox2.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>groupBox2.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="txtDomain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="txtDomain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 17</value>
|
||||
</data>
|
||||
<data name="txtDomain.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>386, 375</value>
|
||||
</data>
|
||||
<data name="txtDomain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name=">>txtDomain.Name" xml:space="preserve">
|
||||
<value>txtDomain</value>
|
||||
</data>
|
||||
<data name=">>txtDomain.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=">>txtDomain.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtDomain.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>392, 395</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Domain</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 121</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>742, 395</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</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 name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>742, 576</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>RoutingSettingDetailsForm</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>RoutingRuleSettingDetailsForm</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>
|
||||
176
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx
Normal file
176
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx
Normal file
@@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>670, 18</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>372, 16</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>272, 20</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>279, 20</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>372, 46</value>
|
||||
</data>
|
||||
<data name="clbProtocol.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>272, 20</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>279, 50</value>
|
||||
</data>
|
||||
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>120, 46</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>19, 50</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||
<value>*设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>OutboundTag</value>
|
||||
</data>
|
||||
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>120, 16</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtIP.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="txtDomain.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>路由规则详情设置</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Text" xml:space="preserve">
|
||||
<value>保存时Domain和IP自动排序</value>
|
||||
</data>
|
||||
</root>
|
||||
357
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs
generated
Normal file
357
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,357 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class RoutingRuleSettingForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingRuleSettingForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.btnBrowse = new System.Windows.Forms.Button();
|
||||
this.txtCustomIcon = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.lvRoutings = new v2rayN.Base.ListViewFlickerFree();
|
||||
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menuAdd = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRemove = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuExportSelectedRules = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tabControl2 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuImportRulesFromFile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuImportRulesFromClipboard = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuImportRulesFromUrl = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.cmsLv.SuspendLayout();
|
||||
this.tabControl2.SuspendLayout();
|
||||
this.tabPage2.SuspendLayout();
|
||||
this.menuServer.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Controls.Add(this.label5);
|
||||
this.panel1.Controls.Add(this.btnBrowse);
|
||||
this.panel1.Controls.Add(this.txtCustomIcon);
|
||||
this.panel1.Controls.Add(this.label4);
|
||||
this.panel1.Controls.Add(this.label1);
|
||||
this.panel1.Controls.Add(this.txtUrl);
|
||||
this.panel1.Controls.Add(this.label3);
|
||||
this.panel1.Controls.Add(this.txtRemarks);
|
||||
this.panel1.Controls.Add(this.label2);
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
//
|
||||
// btnBrowse
|
||||
//
|
||||
resources.ApplyResources(this.btnBrowse, "btnBrowse");
|
||||
this.btnBrowse.Name = "btnBrowse";
|
||||
this.btnBrowse.UseVisualStyleBackColor = true;
|
||||
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
|
||||
//
|
||||
// txtCustomIcon
|
||||
//
|
||||
resources.ApplyResources(this.txtCustomIcon, "txtCustomIcon");
|
||||
this.txtCustomIcon.Name = "txtCustomIcon";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// txtUrl
|
||||
//
|
||||
resources.ApplyResources(this.txtUrl, "txtUrl");
|
||||
this.txtUrl.Name = "txtUrl";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// txtRemarks
|
||||
//
|
||||
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||
this.txtRemarks.Name = "txtRemarks";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// lvRoutings
|
||||
//
|
||||
resources.ApplyResources(this.lvRoutings, "lvRoutings");
|
||||
this.lvRoutings.ContextMenuStrip = this.cmsLv;
|
||||
this.lvRoutings.FullRowSelect = true;
|
||||
this.lvRoutings.GridLines = true;
|
||||
this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.lvRoutings.HideSelection = false;
|
||||
this.lvRoutings.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
|
||||
((System.Windows.Forms.ListViewItem)(resources.GetObject("lvRoutings.Items")))});
|
||||
this.lvRoutings.MultiSelect = false;
|
||||
this.lvRoutings.Name = "lvRoutings";
|
||||
this.lvRoutings.UseCompatibleStateImageBehavior = false;
|
||||
this.lvRoutings.View = System.Windows.Forms.View.Details;
|
||||
this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick);
|
||||
this.lvRoutings.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvRoutings_KeyDown);
|
||||
//
|
||||
// cmsLv
|
||||
//
|
||||
resources.ApplyResources(this.cmsLv, "cmsLv");
|
||||
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuAdd,
|
||||
this.menuRemove,
|
||||
this.menuSelectAll,
|
||||
this.menuExportSelectedRules,
|
||||
this.toolStripSeparator3,
|
||||
this.menuMoveTop,
|
||||
this.menuMoveUp,
|
||||
this.menuMoveDown,
|
||||
this.menuMoveBottom});
|
||||
this.cmsLv.Name = "cmsLv";
|
||||
this.cmsLv.OwnerItem = this.MenuItem1;
|
||||
//
|
||||
// menuAdd
|
||||
//
|
||||
resources.ApplyResources(this.menuAdd, "menuAdd");
|
||||
this.menuAdd.Name = "menuAdd";
|
||||
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
|
||||
//
|
||||
// menuRemove
|
||||
//
|
||||
resources.ApplyResources(this.menuRemove, "menuRemove");
|
||||
this.menuRemove.Name = "menuRemove";
|
||||
this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
|
||||
//
|
||||
// menuSelectAll
|
||||
//
|
||||
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
|
||||
this.menuSelectAll.Name = "menuSelectAll";
|
||||
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
|
||||
//
|
||||
// menuExportSelectedRules
|
||||
//
|
||||
resources.ApplyResources(this.menuExportSelectedRules, "menuExportSelectedRules");
|
||||
this.menuExportSelectedRules.Name = "menuExportSelectedRules";
|
||||
this.menuExportSelectedRules.Click += new System.EventHandler(this.menuExportSelectedRules_Click);
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
//
|
||||
// menuMoveTop
|
||||
//
|
||||
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
|
||||
this.menuMoveTop.Name = "menuMoveTop";
|
||||
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
|
||||
//
|
||||
// menuMoveUp
|
||||
//
|
||||
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
|
||||
this.menuMoveUp.Name = "menuMoveUp";
|
||||
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
|
||||
//
|
||||
// menuMoveDown
|
||||
//
|
||||
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
|
||||
this.menuMoveDown.Name = "menuMoveDown";
|
||||
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
|
||||
//
|
||||
// menuMoveBottom
|
||||
//
|
||||
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
|
||||
this.menuMoveBottom.Name = "menuMoveBottom";
|
||||
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
|
||||
//
|
||||
// MenuItem1
|
||||
//
|
||||
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
||||
this.MenuItem1.DropDown = this.cmsLv;
|
||||
this.MenuItem1.Name = "MenuItem1";
|
||||
//
|
||||
// tabControl2
|
||||
//
|
||||
resources.ApplyResources(this.tabControl2, "tabControl2");
|
||||
this.tabControl2.Controls.Add(this.tabPage2);
|
||||
this.tabControl2.Name = "tabControl2";
|
||||
this.tabControl2.SelectedIndex = 0;
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||
this.tabPage2.Controls.Add(this.lvRoutings);
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// menuServer
|
||||
//
|
||||
resources.ApplyResources(this.menuServer, "menuServer");
|
||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItem1,
|
||||
this.toolStripMenuItem1});
|
||||
this.menuServer.Name = "menuServer";
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
|
||||
this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuImportRulesFromFile,
|
||||
this.menuImportRulesFromClipboard,
|
||||
this.menuImportRulesFromUrl});
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
//
|
||||
// menuImportRulesFromFile
|
||||
//
|
||||
resources.ApplyResources(this.menuImportRulesFromFile, "menuImportRulesFromFile");
|
||||
this.menuImportRulesFromFile.Name = "menuImportRulesFromFile";
|
||||
this.menuImportRulesFromFile.Click += new System.EventHandler(this.menuImportRulesFromFile_Click);
|
||||
//
|
||||
// menuImportRulesFromClipboard
|
||||
//
|
||||
resources.ApplyResources(this.menuImportRulesFromClipboard, "menuImportRulesFromClipboard");
|
||||
this.menuImportRulesFromClipboard.Name = "menuImportRulesFromClipboard";
|
||||
this.menuImportRulesFromClipboard.Click += new System.EventHandler(this.menuImportRulesFromClipboard_Click);
|
||||
//
|
||||
// menuImportRulesFromUrl
|
||||
//
|
||||
resources.ApplyResources(this.menuImportRulesFromUrl, "menuImportRulesFromUrl");
|
||||
this.menuImportRulesFromUrl.Name = "menuImportRulesFromUrl";
|
||||
this.menuImportRulesFromUrl.Click += new System.EventHandler(this.menuImportRulesFromUrl_Click);
|
||||
//
|
||||
// RoutingRuleSettingForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.tabControl2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.menuServer);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Name = "RoutingRuleSettingForm";
|
||||
this.Load += new System.EventHandler(this.RoutingRuleSettingForm_Load);
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.cmsLv.ResumeLayout(false);
|
||||
this.tabControl2.ResumeLayout(false);
|
||||
this.tabPage2.ResumeLayout(false);
|
||||
this.menuServer.ResumeLayout(false);
|
||||
this.menuServer.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private Base.ListViewFlickerFree lvRoutings;
|
||||
private System.Windows.Forms.TabControl tabControl2;
|
||||
private System.Windows.Forms.TabPage tabPage2;
|
||||
private System.Windows.Forms.ContextMenuStrip cmsLv;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuRemove;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSelectAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAdd;
|
||||
private System.Windows.Forms.MenuStrip menuServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl;
|
||||
private System.Windows.Forms.TextBox txtRemarks;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtUrl;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox txtCustomIcon;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Button btnBrowse;
|
||||
private System.Windows.Forms.Label label5;
|
||||
}
|
||||
}
|
||||
374
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
Normal file
374
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
Normal file
@@ -0,0 +1,374 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class RoutingRuleSettingForm : BaseForm
|
||||
{
|
||||
public int EditIndex
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
protected RoutingItem routingItem = null;
|
||||
|
||||
private List<int> lvSelecteds = new List<int>();
|
||||
public RoutingRuleSettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RoutingRuleSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
{
|
||||
routingItem = config.routings[EditIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
routingItem = new RoutingItem();
|
||||
}
|
||||
if (routingItem.rules == null)
|
||||
{
|
||||
routingItem.rules = new List<RulesItem>();
|
||||
}
|
||||
|
||||
txtRemarks.Text = routingItem.remarks ?? string.Empty;
|
||||
txtUrl.Text = routingItem.url ?? string.Empty;
|
||||
txtCustomIcon.Text = routingItem.customIcon ?? string.Empty;
|
||||
|
||||
InitRoutingsView();
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
|
||||
private void InitRoutingsView()
|
||||
{
|
||||
lvRoutings.BeginUpdate();
|
||||
lvRoutings.Items.Clear();
|
||||
|
||||
lvRoutings.GridLines = true;
|
||||
lvRoutings.FullRowSelect = true;
|
||||
lvRoutings.View = View.Details;
|
||||
lvRoutings.MultiSelect = true;
|
||||
lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
|
||||
lvRoutings.RegisterDragEvent(UpdateDragEventHandler);
|
||||
|
||||
lvRoutings.Columns.Add("", 30);
|
||||
lvRoutings.Columns.Add("outboundTag", 80);
|
||||
lvRoutings.Columns.Add("port", 80);
|
||||
lvRoutings.Columns.Add("protocol", 80);
|
||||
lvRoutings.Columns.Add("inboundTag", 80);
|
||||
lvRoutings.Columns.Add("domain", 160);
|
||||
lvRoutings.Columns.Add("ip", 160);
|
||||
lvRoutings.Columns.Add("enable", 60);
|
||||
|
||||
lvRoutings.EndUpdate();
|
||||
}
|
||||
private void UpdateDragEventHandler(int index, int targetIndex)
|
||||
{
|
||||
if (index < 0 || targetIndex < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (ConfigHandler.MoveRoutingRule(ref routingItem, index, EMove.Position, targetIndex) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshRoutingsView()
|
||||
{
|
||||
lvRoutings.BeginUpdate();
|
||||
lvRoutings.Items.Clear();
|
||||
|
||||
for (int k = 0; k < routingItem.rules.Count; k++)
|
||||
{
|
||||
var item = routingItem.rules[k];
|
||||
|
||||
ListViewItem lvItem = new ListViewItem("");
|
||||
Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
|
||||
Utils.AddSubItem(lvItem, "port", item.port);
|
||||
Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol));
|
||||
Utils.AddSubItem(lvItem, "inboundTag", Utils.List2String(item.inboundTag));
|
||||
Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain));
|
||||
Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip));
|
||||
Utils.AddSubItem(lvItem, "enable", item.enabled.ToString());
|
||||
|
||||
if (lvItem != null) lvRoutings.Items.Add(lvItem);
|
||||
}
|
||||
lvRoutings.EndUpdate();
|
||||
}
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
routingItem.remarks = txtRemarks.Text.Trim();
|
||||
routingItem.url = txtUrl.Text.Trim();
|
||||
routingItem.customIcon = txtCustomIcon.Text.Trim();
|
||||
|
||||
if (ConfigHandler.AddRoutingItem(ref config, routingItem, EditIndex) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
private void btnBrowse_Click(object sender, EventArgs e)
|
||||
{
|
||||
OpenFileDialog openFileDialog1 = new OpenFileDialog();
|
||||
openFileDialog1.Filter = "PNG|*.png";
|
||||
openFileDialog1.ShowDialog();
|
||||
txtCustomIcon.Text = openFileDialog1.FileName;
|
||||
|
||||
}
|
||||
|
||||
private void lvRoutings_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var fm = new RoutingRuleSettingDetailsForm();
|
||||
fm.rulesItem = routingItem.rules[index];
|
||||
if (fm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
private int GetLvSelectedIndex()
|
||||
{
|
||||
int index = -1;
|
||||
lvSelecteds.Clear();
|
||||
try
|
||||
{
|
||||
if (lvRoutings.SelectedIndices.Count <= 0)
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectRules);
|
||||
return index;
|
||||
}
|
||||
|
||||
index = lvRoutings.SelectedIndices[0];
|
||||
foreach (int i in lvRoutings.SelectedIndices)
|
||||
{
|
||||
lvSelecteds.Add(i);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
#region Edit function
|
||||
|
||||
private void menuMoveTop_Click(object sender, EventArgs e)
|
||||
{
|
||||
MoveRule(EMove.Top);
|
||||
}
|
||||
|
||||
private void menuMoveUp_Click(object sender, EventArgs e)
|
||||
{
|
||||
MoveRule(EMove.Up);
|
||||
}
|
||||
|
||||
private void menuMoveDown_Click(object sender, EventArgs e)
|
||||
{
|
||||
MoveRule(EMove.Down);
|
||||
}
|
||||
|
||||
private void menuMoveBottom_Click(object sender, EventArgs e)
|
||||
{
|
||||
MoveRule(EMove.Bottom);
|
||||
}
|
||||
|
||||
private void MoveRule(EMove eMove)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectRules);
|
||||
return;
|
||||
}
|
||||
if (ConfigHandler.MoveRoutingRule(ref routingItem, index, eMove) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
private void menuSelectAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
foreach (ListViewItem item in lvRoutings.Items)
|
||||
{
|
||||
item.Selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void menuAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
var fm = new RoutingRuleSettingDetailsForm();
|
||||
fm.rulesItem = new RulesItem();
|
||||
if (fm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
routingItem.rules.Insert(0, fm.rulesItem);
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
private void menuRemove_Click(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (UI.ShowYesNo(ResUI.RemoveRules) == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
|
||||
{
|
||||
routingItem.rules.RemoveAt(index);
|
||||
}
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
private void menuExportSelectedRules_Click(object sender, EventArgs e)
|
||||
{
|
||||
GetLvSelectedIndex();
|
||||
var lst = new List<RulesItem>();
|
||||
foreach (int v in lvSelecteds)
|
||||
{
|
||||
lst.Add(routingItem.rules[v]);
|
||||
}
|
||||
if (lst.Count > 0)
|
||||
{
|
||||
Utils.SetClipboardData(Utils.ToJson(lst));
|
||||
//UI.Show(ResUI.OperationSuccess"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void lvRoutings_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.Control)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.A:
|
||||
menuSelectAll_Click(null, null);
|
||||
break;
|
||||
case Keys.C:
|
||||
menuExportSelectedRules_Click(null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.Delete:
|
||||
menuRemove_Click(null, null);
|
||||
break;
|
||||
case Keys.T:
|
||||
menuMoveTop_Click(null, null);
|
||||
break;
|
||||
case Keys.B:
|
||||
menuMoveBottom_Click(null, null);
|
||||
break;
|
||||
case Keys.U:
|
||||
menuMoveUp_Click(null, null);
|
||||
break;
|
||||
case Keys.D:
|
||||
menuMoveDown_Click(null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region preset rules
|
||||
|
||||
private void menuImportRulesFromFile_Click(object sender, EventArgs e)
|
||||
{
|
||||
OpenFileDialog fileDialog = new OpenFileDialog
|
||||
{
|
||||
Multiselect = false,
|
||||
Filter = "Rules|*.json|All|*.*"
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string fileName = fileDialog.FileName;
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
string result = Utils.LoadResource(fileName);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (AddBatchRoutingRules(ref routingItem, result) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
UI.Show(ResUI.OperationSuccess);
|
||||
}
|
||||
}
|
||||
|
||||
private void menuImportRulesFromClipboard_Click(object sender, EventArgs e)
|
||||
{
|
||||
string clipboardData = Utils.GetClipboardData();
|
||||
if (AddBatchRoutingRules(ref routingItem, clipboardData) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
UI.Show(ResUI.OperationSuccess);
|
||||
}
|
||||
}
|
||||
private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
|
||||
{
|
||||
var url = txtUrl.Text.Trim();
|
||||
if (Utils.IsNullOrEmpty(url))
|
||||
{
|
||||
UI.Show(ResUI.MsgNeedUrl);
|
||||
return;
|
||||
}
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
DownloadHandle downloadHandle = new DownloadHandle();
|
||||
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)
|
||||
{
|
||||
bool blReplace = false;
|
||||
if (UI.ShowYesNo(ResUI.AddBatchRoutingRulesYesNo) == DialogResult.No)
|
||||
{
|
||||
blReplace = true;
|
||||
}
|
||||
return ConfigHandler.AddBatchRoutingRules(ref routingItem, clipboardData, blReplace);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
785
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
Normal file
785
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.resx
Normal file
@@ -0,0 +1,785 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>tabControl2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>199, 6</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="lvRoutings.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromUrl.Name" xml:space="preserve">
|
||||
<value>menuImportRulesFromUrl</value>
|
||||
</data>
|
||||
<data name=">>label5.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="menuMoveDown.Text" xml:space="preserve">
|
||||
<value>Down (D)</value>
|
||||
</data>
|
||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>762, 25</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>32</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Text" xml:space="preserve">
|
||||
<value>Move to bottom (B)</value>
|
||||
</data>
|
||||
<data name=">>label4.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>Edit and Function</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>menuServer.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>menuMoveUp.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=">>label3.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem1.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="tabPage2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 22</value>
|
||||
</data>
|
||||
<data name=">>tabControl2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>menuMoveBottom.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="$this.Text" xml:space="preserve">
|
||||
<value>Rule Settings</value>
|
||||
</data>
|
||||
<data name="menuRemove.Text" xml:space="preserve">
|
||||
<value>Remove selected</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>tabPage2.Name" xml:space="preserve">
|
||||
<value>tabPage2</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="menuExportSelectedRules.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>475, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>33</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>MenuItem1.Name" xml:space="preserve">
|
||||
<value>MenuItem1</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>754, 231</value>
|
||||
</data>
|
||||
<data name=">>tabControl2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>568, 17</value>
|
||||
</data>
|
||||
<data name=">>menuAdd.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=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name=">>txtCustomIcon.Name" xml:space="preserve">
|
||||
<value>txtCustomIcon</value>
|
||||
</data>
|
||||
<data name="label5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>762, 60</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Sub Url</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 21</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>PNG(128*128)</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 21</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromUrl.Text" xml:space="preserve">
|
||||
<value>Import Rules From Sub Url</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>menuSelectAll.Name" xml:space="preserve">
|
||||
<value>menuSelectAll</value>
|
||||
</data>
|
||||
<data name=">>menuMoveTop.Name" xml:space="preserve">
|
||||
<value>menuMoveTop</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name=">>cmsLv.Name" xml:space="preserve">
|
||||
<value>cmsLv</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="menuAdd.Text" xml:space="preserve">
|
||||
<value>Add</value>
|
||||
</data>
|
||||
<data name="lvRoutings.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator3</value>
|
||||
</data>
|
||||
<data name=">>label5.Name" xml:space="preserve">
|
||||
<value>label5</value>
|
||||
</data>
|
||||
<data name=">>lvRoutings.Parent" xml:space="preserve">
|
||||
<value>tabPage2</value>
|
||||
</data>
|
||||
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>644, 48</value>
|
||||
</data>
|
||||
<data name=">>menuMoveBottom.Name" xml:space="preserve">
|
||||
<value>menuMoveBottom</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 25</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 105</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="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 63</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromFile.Text" xml:space="preserve">
|
||||
<value>Import Rules From File</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>762, 257</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>RoutingRuleSettingForm</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>166, 21</value>
|
||||
</data>
|
||||
<data name=">>label4.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=">>btnBrowse.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="menuMoveDown.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name=">>menuMoveTop.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=">>menuServer.Name" xml:space="preserve">
|
||||
<value>menuServer</value>
|
||||
</data>
|
||||
<data name=">>menuSelectAll.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=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>menuServer.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</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=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Text" xml:space="preserve">
|
||||
<value>Up (U)</value>
|
||||
</data>
|
||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>203, 186</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name="tabControl2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem1.Text" xml:space="preserve">
|
||||
<value>Import Rules</value>
|
||||
</data>
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>MenuItem1.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=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>10, 117</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromClipboard.Name" xml:space="preserve">
|
||||
<value>menuImportRulesFromClipboard</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromClipboard.Text" xml:space="preserve">
|
||||
<value>Import Rules From Clipboard</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>menuAdd.Name" xml:space="preserve">
|
||||
<value>menuAdd</value>
|
||||
</data>
|
||||
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 167</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromFile.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>247, 22</value>
|
||||
</data>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Text" xml:space="preserve">
|
||||
<value>Move to top (T)</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromUrl.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="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>762, 142</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>748, 225</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>660, 104</value>
|
||||
</data>
|
||||
<data name=">>menuServer.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Items" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0
|
||||
ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
|
||||
PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA
|
||||
BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5
|
||||
bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz
|
||||
dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA
|
||||
CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5
|
||||
bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3
|
||||
////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>34</value>
|
||||
</data>
|
||||
<data name=">>txtCustomIcon.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>247, 22</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name=">>lvRoutings.Type" xml:space="preserve">
|
||||
<value>v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 45</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>31</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>91, 45</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromClipboard.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=">>menuMoveDown.Name" xml:space="preserve">
|
||||
<value>menuMoveDown</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="menuAdd.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name=">>tabPage2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromFile.Name" xml:space="preserve">
|
||||
<value>menuImportRulesFromFile</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="txtUrl.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>&Browse</value>
|
||||
</data>
|
||||
<data name=">>txtCustomIcon.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=">>label1.Parent" xml:space="preserve">
|
||||
<value>panel1</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>
|
||||
<data name=">>tabPage2.Parent" xml:space="preserve">
|
||||
<value>tabControl2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Remarks</value>
|
||||
</data>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="tabPage2.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 424</value>
|
||||
</data>
|
||||
<data name=">>menuMoveUp.Name" xml:space="preserve">
|
||||
<value>menuMoveUp</value>
|
||||
</data>
|
||||
<data name="tabPage2.Text" xml:space="preserve">
|
||||
<value>RuleList</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem1.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem1</value>
|
||||
</data>
|
||||
<data name="txtCustomIcon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>563, 21</value>
|
||||
</data>
|
||||
<data name=">>label5.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Text" xml:space="preserve">
|
||||
<value>Select All (Ctrl+A)</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="tabControl2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>18, 13</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="txtCustomIcon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>37</value>
|
||||
</data>
|
||||
<data name=">>menuExportSelectedRules.Name" xml:space="preserve">
|
||||
<value>menuExportSelectedRules</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Optional</value>
|
||||
</data>
|
||||
<data name="menuExportSelectedRules.Text" xml:space="preserve">
|
||||
<value>Export Selected Rules</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>91, 13</value>
|
||||
</data>
|
||||
<data name=">>menuRemove.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="menuImportRulesFromClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>247, 22</value>
|
||||
</data>
|
||||
<data name="menuRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name=">>menuMoveDown.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=">>lvRoutings.Name" xml:space="preserve">
|
||||
<value>lvRoutings</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name="txtCustomIcon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>91, 105</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>menuRemove.Name" xml:space="preserve">
|
||||
<value>menuRemove</value>
|
||||
</data>
|
||||
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>762, 484</value>
|
||||
</data>
|
||||
<data name=">>menuImportRulesFromFile.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=">>btnBrowse.Name" xml:space="preserve">
|
||||
<value>btnBrowse</value>
|
||||
</data>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="btnBrowse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>39</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="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>202, 22</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="tabPage2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>txtCustomIcon.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>tabControl2.Name" xml:space="preserve">
|
||||
<value>tabControl2</value>
|
||||
</data>
|
||||
<data name=">>label5.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>tabPage2.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>cmsLv.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name=">>menuExportSelectedRules.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="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Custom icon</value>
|
||||
</data>
|
||||
<data name=">>lvRoutings.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>25</value>
|
||||
</metadata>
|
||||
<metadata name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>139, 17</value>
|
||||
</metadata>
|
||||
<metadata name="cmsLv.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
300
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
Normal file
300
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.zh-Hans.resx
Normal file
@@ -0,0 +1,300 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 501</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>785, 60</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>785, 147</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>670, 104</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>浏览(&B)</value>
|
||||
</data>
|
||||
<data name="txtCustomIcon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>101, 105</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="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>可选</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>101, 45</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>订阅地址(Url)</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>101, 13</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>别名</value>
|
||||
</data>
|
||||
<data name="menuAdd.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuAdd.Text" xml:space="preserve">
|
||||
<value>添加规则</value>
|
||||
</data>
|
||||
<data name="menuRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuRemove.Text" xml:space="preserve">
|
||||
<value>移除所选规则</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Text" xml:space="preserve">
|
||||
<value>全选</value>
|
||||
</data>
|
||||
<data name="menuExportSelectedRules.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuExportSelectedRules.Text" xml:space="preserve">
|
||||
<value>导出所选规则至剪贴板</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>193, 6</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Text" xml:space="preserve">
|
||||
<value>上移至顶 (T)</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Text" xml:space="preserve">
|
||||
<value>上移 (U)</value>
|
||||
</data>
|
||||
<data name="menuMoveDown.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveDown.Text" xml:space="preserve">
|
||||
<value>下移 (D)</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Text" xml:space="preserve">
|
||||
<value>下移至底 (B)</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>68, 21</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>规则功能</value>
|
||||
</data>
|
||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>197, 186</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Items" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0
|
||||
ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
|
||||
PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA
|
||||
BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5
|
||||
bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz
|
||||
dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA
|
||||
CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5
|
||||
bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3
|
||||
////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>771, 297</value>
|
||||
</data>
|
||||
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 172</value>
|
||||
</data>
|
||||
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>785, 329</value>
|
||||
</data>
|
||||
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>777, 303</value>
|
||||
</data>
|
||||
<data name="tabPage2.Text" xml:space="preserve">
|
||||
<value>规则列表</value>
|
||||
</data>
|
||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>785, 25</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>68, 21</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem1.Text" xml:space="preserve">
|
||||
<value>导入规则</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromFile.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromFile.Text" xml:space="preserve">
|
||||
<value>从文件中导入规则</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromClipboard.Text" xml:space="preserve">
|
||||
<value>从剪贴板中导入规则</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>189, 22</value>
|
||||
</data>
|
||||
<data name="menuImportRulesFromUrl.Text" xml:space="preserve">
|
||||
<value>从订阅Url中导入规则</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>785, 561</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>规则集设置</value>
|
||||
</data>
|
||||
</root>
|
||||
485
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
485
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,485 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class RoutingSettingForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RoutingSettingForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
this.labRoutingTips = new System.Windows.Forms.Label();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.cmbdomainMatcher = new System.Windows.Forms.ComboBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.chkenableRoutingAdvanced = new System.Windows.Forms.CheckBox();
|
||||
this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
|
||||
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menuAdd = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRemove = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetDefaultRouting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuImportAdvancedRules = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItemAdvanced = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
this.MenuItemBasic = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuImportBasicRules = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tabNormal = new System.Windows.Forms.TabControl();
|
||||
this.tabPageProxy = new System.Windows.Forms.TabPage();
|
||||
this.panel5 = new System.Windows.Forms.Panel();
|
||||
this.groupBox5 = new System.Windows.Forms.GroupBox();
|
||||
this.txtProxyIp = new System.Windows.Forms.TextBox();
|
||||
this.groupBox6 = new System.Windows.Forms.GroupBox();
|
||||
this.txtProxyDomain = new System.Windows.Forms.TextBox();
|
||||
this.tabPageDirect = new System.Windows.Forms.TabPage();
|
||||
this.panel4 = new System.Windows.Forms.Panel();
|
||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||
this.txtDirectIp = new System.Windows.Forms.TextBox();
|
||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
this.txtDirectDomain = new System.Windows.Forms.TextBox();
|
||||
this.tabPageBlock = new System.Windows.Forms.TabPage();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.txtBlockIp = new System.Windows.Forms.TextBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.txtBlockDomain = new System.Windows.Forms.TextBox();
|
||||
this.tabPageRuleList = new System.Windows.Forms.TabPage();
|
||||
this.lvRoutings = new v2rayN.Base.ListViewFlickerFree();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.panel2.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.cmsLv.SuspendLayout();
|
||||
this.menuServer.SuspendLayout();
|
||||
this.tabNormal.SuspendLayout();
|
||||
this.tabPageProxy.SuspendLayout();
|
||||
this.panel5.SuspendLayout();
|
||||
this.groupBox5.SuspendLayout();
|
||||
this.groupBox6.SuspendLayout();
|
||||
this.tabPageDirect.SuspendLayout();
|
||||
this.panel4.SuspendLayout();
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.groupBox4.SuspendLayout();
|
||||
this.tabPageBlock.SuspendLayout();
|
||||
this.panel3.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.tabPageRuleList.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.Controls.Add(this.labRoutingTips);
|
||||
this.panel2.Controls.Add(this.btnClose);
|
||||
this.panel2.Controls.Add(this.btnOK);
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// labRoutingTips
|
||||
//
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
resources.ApplyResources(this.btnOK, "btnOK");
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.cmbdomainMatcher);
|
||||
this.panel1.Controls.Add(this.label6);
|
||||
this.panel1.Controls.Add(this.chkenableRoutingAdvanced);
|
||||
this.panel1.Controls.Add(this.linkLabelRoutingDoc);
|
||||
this.panel1.Controls.Add(this.cmbdomainStrategy);
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// cmbdomainMatcher
|
||||
//
|
||||
this.cmbdomainMatcher.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainMatcher.FormattingEnabled = true;
|
||||
this.cmbdomainMatcher.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainMatcher.Items"),
|
||||
resources.GetString("cmbdomainMatcher.Items1")});
|
||||
resources.ApplyResources(this.cmbdomainMatcher, "cmbdomainMatcher");
|
||||
this.cmbdomainMatcher.Name = "cmbdomainMatcher";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
//
|
||||
// chkenableRoutingAdvanced
|
||||
//
|
||||
resources.ApplyResources(this.chkenableRoutingAdvanced, "chkenableRoutingAdvanced");
|
||||
this.chkenableRoutingAdvanced.Name = "chkenableRoutingAdvanced";
|
||||
this.chkenableRoutingAdvanced.UseVisualStyleBackColor = true;
|
||||
this.chkenableRoutingAdvanced.CheckedChanged += new System.EventHandler(this.chkenableRoutingAdvanced_CheckedChanged_1);
|
||||
//
|
||||
// linkLabelRoutingDoc
|
||||
//
|
||||
resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc");
|
||||
this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc";
|
||||
this.linkLabelRoutingDoc.TabStop = true;
|
||||
this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked);
|
||||
//
|
||||
// cmbdomainStrategy
|
||||
//
|
||||
this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainStrategy.FormattingEnabled = true;
|
||||
this.cmbdomainStrategy.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainStrategy.Items"),
|
||||
resources.GetString("cmbdomainStrategy.Items1"),
|
||||
resources.GetString("cmbdomainStrategy.Items2")});
|
||||
resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy");
|
||||
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
|
||||
//
|
||||
// cmsLv
|
||||
//
|
||||
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuAdd,
|
||||
this.menuRemove,
|
||||
this.menuSelectAll,
|
||||
this.menuSetDefaultRouting,
|
||||
this.toolStripSeparator1,
|
||||
this.menuImportAdvancedRules});
|
||||
this.cmsLv.Name = "cmsLv";
|
||||
this.cmsLv.OwnerItem = this.MenuItemAdvanced;
|
||||
resources.ApplyResources(this.cmsLv, "cmsLv");
|
||||
//
|
||||
// menuAdd
|
||||
//
|
||||
this.menuAdd.Name = "menuAdd";
|
||||
resources.ApplyResources(this.menuAdd, "menuAdd");
|
||||
this.menuAdd.Click += new System.EventHandler(this.menuAdd_Click);
|
||||
//
|
||||
// menuRemove
|
||||
//
|
||||
this.menuRemove.Name = "menuRemove";
|
||||
resources.ApplyResources(this.menuRemove, "menuRemove");
|
||||
this.menuRemove.Click += new System.EventHandler(this.menuRemove_Click);
|
||||
//
|
||||
// menuSelectAll
|
||||
//
|
||||
this.menuSelectAll.Name = "menuSelectAll";
|
||||
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
|
||||
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
|
||||
//
|
||||
// menuSetDefaultRouting
|
||||
//
|
||||
this.menuSetDefaultRouting.Name = "menuSetDefaultRouting";
|
||||
resources.ApplyResources(this.menuSetDefaultRouting, "menuSetDefaultRouting");
|
||||
this.menuSetDefaultRouting.Click += new System.EventHandler(this.menuSetDefaultRouting_Click);
|
||||
//
|
||||
// menuImportAdvancedRules
|
||||
//
|
||||
this.menuImportAdvancedRules.Name = "menuImportAdvancedRules";
|
||||
resources.ApplyResources(this.menuImportAdvancedRules, "menuImportAdvancedRules");
|
||||
this.menuImportAdvancedRules.Click += new System.EventHandler(this.menuImportAdvancedRules_Click);
|
||||
//
|
||||
// MenuItemAdvanced
|
||||
//
|
||||
this.MenuItemAdvanced.DropDown = this.cmsLv;
|
||||
this.MenuItemAdvanced.Name = "MenuItemAdvanced";
|
||||
resources.ApplyResources(this.MenuItemAdvanced, "MenuItemAdvanced");
|
||||
//
|
||||
// menuServer
|
||||
//
|
||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.MenuItemBasic,
|
||||
this.MenuItemAdvanced});
|
||||
resources.ApplyResources(this.menuServer, "menuServer");
|
||||
this.menuServer.Name = "menuServer";
|
||||
//
|
||||
// MenuItemBasic
|
||||
//
|
||||
this.MenuItemBasic.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuImportBasicRules});
|
||||
this.MenuItemBasic.Name = "MenuItemBasic";
|
||||
resources.ApplyResources(this.MenuItemBasic, "MenuItemBasic");
|
||||
//
|
||||
// menuImportBasicRules
|
||||
//
|
||||
this.menuImportBasicRules.Name = "menuImportBasicRules";
|
||||
resources.ApplyResources(this.menuImportBasicRules, "menuImportBasicRules");
|
||||
this.menuImportBasicRules.Click += new System.EventHandler(this.menuImportBasicRules_Click);
|
||||
//
|
||||
// tabNormal
|
||||
//
|
||||
this.tabNormal.Controls.Add(this.tabPageProxy);
|
||||
this.tabNormal.Controls.Add(this.tabPageDirect);
|
||||
this.tabNormal.Controls.Add(this.tabPageBlock);
|
||||
this.tabNormal.Controls.Add(this.tabPageRuleList);
|
||||
resources.ApplyResources(this.tabNormal, "tabNormal");
|
||||
this.tabNormal.Name = "tabNormal";
|
||||
this.tabNormal.SelectedIndex = 0;
|
||||
this.tabNormal.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabNormal_Selecting);
|
||||
//
|
||||
// tabPageProxy
|
||||
//
|
||||
this.tabPageProxy.Controls.Add(this.panel5);
|
||||
resources.ApplyResources(this.tabPageProxy, "tabPageProxy");
|
||||
this.tabPageProxy.Name = "tabPageProxy";
|
||||
this.tabPageProxy.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panel5
|
||||
//
|
||||
this.panel5.Controls.Add(this.groupBox5);
|
||||
this.panel5.Controls.Add(this.groupBox6);
|
||||
resources.ApplyResources(this.panel5, "panel5");
|
||||
this.panel5.Name = "panel5";
|
||||
//
|
||||
// groupBox5
|
||||
//
|
||||
this.groupBox5.Controls.Add(this.txtProxyIp);
|
||||
resources.ApplyResources(this.groupBox5, "groupBox5");
|
||||
this.groupBox5.Name = "groupBox5";
|
||||
this.groupBox5.TabStop = false;
|
||||
//
|
||||
// txtProxyIp
|
||||
//
|
||||
resources.ApplyResources(this.txtProxyIp, "txtProxyIp");
|
||||
this.txtProxyIp.Name = "txtProxyIp";
|
||||
//
|
||||
// groupBox6
|
||||
//
|
||||
this.groupBox6.Controls.Add(this.txtProxyDomain);
|
||||
resources.ApplyResources(this.groupBox6, "groupBox6");
|
||||
this.groupBox6.Name = "groupBox6";
|
||||
this.groupBox6.TabStop = false;
|
||||
//
|
||||
// txtProxyDomain
|
||||
//
|
||||
resources.ApplyResources(this.txtProxyDomain, "txtProxyDomain");
|
||||
this.txtProxyDomain.Name = "txtProxyDomain";
|
||||
//
|
||||
// tabPageDirect
|
||||
//
|
||||
this.tabPageDirect.Controls.Add(this.panel4);
|
||||
resources.ApplyResources(this.tabPageDirect, "tabPageDirect");
|
||||
this.tabPageDirect.Name = "tabPageDirect";
|
||||
this.tabPageDirect.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
this.panel4.Controls.Add(this.groupBox3);
|
||||
this.panel4.Controls.Add(this.groupBox4);
|
||||
resources.ApplyResources(this.panel4, "panel4");
|
||||
this.panel4.Name = "panel4";
|
||||
//
|
||||
// groupBox3
|
||||
//
|
||||
this.groupBox3.Controls.Add(this.txtDirectIp);
|
||||
resources.ApplyResources(this.groupBox3, "groupBox3");
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.TabStop = false;
|
||||
//
|
||||
// txtDirectIp
|
||||
//
|
||||
resources.ApplyResources(this.txtDirectIp, "txtDirectIp");
|
||||
this.txtDirectIp.Name = "txtDirectIp";
|
||||
//
|
||||
// groupBox4
|
||||
//
|
||||
this.groupBox4.Controls.Add(this.txtDirectDomain);
|
||||
resources.ApplyResources(this.groupBox4, "groupBox4");
|
||||
this.groupBox4.Name = "groupBox4";
|
||||
this.groupBox4.TabStop = false;
|
||||
//
|
||||
// txtDirectDomain
|
||||
//
|
||||
resources.ApplyResources(this.txtDirectDomain, "txtDirectDomain");
|
||||
this.txtDirectDomain.Name = "txtDirectDomain";
|
||||
//
|
||||
// tabPageBlock
|
||||
//
|
||||
this.tabPageBlock.Controls.Add(this.panel3);
|
||||
resources.ApplyResources(this.tabPageBlock, "tabPageBlock");
|
||||
this.tabPageBlock.Name = "tabPageBlock";
|
||||
this.tabPageBlock.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.Controls.Add(this.groupBox2);
|
||||
this.panel3.Controls.Add(this.groupBox1);
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.txtBlockIp);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// txtBlockIp
|
||||
//
|
||||
resources.ApplyResources(this.txtBlockIp, "txtBlockIp");
|
||||
this.txtBlockIp.Name = "txtBlockIp";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.txtBlockDomain);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// txtBlockDomain
|
||||
//
|
||||
resources.ApplyResources(this.txtBlockDomain, "txtBlockDomain");
|
||||
this.txtBlockDomain.Name = "txtBlockDomain";
|
||||
//
|
||||
// tabPageRuleList
|
||||
//
|
||||
this.tabPageRuleList.Controls.Add(this.lvRoutings);
|
||||
resources.ApplyResources(this.tabPageRuleList, "tabPageRuleList");
|
||||
this.tabPageRuleList.Name = "tabPageRuleList";
|
||||
this.tabPageRuleList.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lvRoutings
|
||||
//
|
||||
this.lvRoutings.ContextMenuStrip = this.cmsLv;
|
||||
resources.ApplyResources(this.lvRoutings, "lvRoutings");
|
||||
this.lvRoutings.FullRowSelect = true;
|
||||
this.lvRoutings.GridLines = true;
|
||||
this.lvRoutings.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.lvRoutings.HideSelection = false;
|
||||
this.lvRoutings.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
|
||||
((System.Windows.Forms.ListViewItem)(resources.GetObject("lvRoutings.Items")))});
|
||||
this.lvRoutings.MultiSelect = false;
|
||||
this.lvRoutings.Name = "lvRoutings";
|
||||
this.lvRoutings.UseCompatibleStateImageBehavior = false;
|
||||
this.lvRoutings.View = System.Windows.Forms.View.Details;
|
||||
this.lvRoutings.DoubleClick += new System.EventHandler(this.lvRoutings_DoubleClick);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// RoutingSettingForm
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnClose;
|
||||
this.Controls.Add(this.tabNormal);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.menuServer);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Name = "RoutingSettingForm";
|
||||
this.Load += new System.EventHandler(this.RoutingSettingForm_Load);
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.cmsLv.ResumeLayout(false);
|
||||
this.menuServer.ResumeLayout(false);
|
||||
this.menuServer.PerformLayout();
|
||||
this.tabNormal.ResumeLayout(false);
|
||||
this.tabPageProxy.ResumeLayout(false);
|
||||
this.panel5.ResumeLayout(false);
|
||||
this.groupBox5.ResumeLayout(false);
|
||||
this.groupBox5.PerformLayout();
|
||||
this.groupBox6.ResumeLayout(false);
|
||||
this.groupBox6.PerformLayout();
|
||||
this.tabPageDirect.ResumeLayout(false);
|
||||
this.panel4.ResumeLayout(false);
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
this.groupBox3.PerformLayout();
|
||||
this.groupBox4.ResumeLayout(false);
|
||||
this.groupBox4.PerformLayout();
|
||||
this.tabPageBlock.ResumeLayout(false);
|
||||
this.panel3.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.tabPageRuleList.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Button btnClose;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Panel panel2;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.LinkLabel linkLabelRoutingDoc;
|
||||
private System.Windows.Forms.ComboBox cmbdomainStrategy;
|
||||
private System.Windows.Forms.ContextMenuStrip cmsLv;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuRemove;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSelectAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAdd;
|
||||
private System.Windows.Forms.MenuStrip menuServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItemAdvanced;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSetDefaultRouting;
|
||||
private System.Windows.Forms.TabControl tabNormal;
|
||||
private System.Windows.Forms.TabPage tabPageProxy;
|
||||
private System.Windows.Forms.TabPage tabPageDirect;
|
||||
private System.Windows.Forms.TabPage tabPageBlock;
|
||||
private System.Windows.Forms.Panel panel5;
|
||||
private System.Windows.Forms.GroupBox groupBox5;
|
||||
private System.Windows.Forms.TextBox txtProxyIp;
|
||||
private System.Windows.Forms.GroupBox groupBox6;
|
||||
private System.Windows.Forms.TextBox txtProxyDomain;
|
||||
private System.Windows.Forms.Panel panel4;
|
||||
private System.Windows.Forms.GroupBox groupBox3;
|
||||
private System.Windows.Forms.TextBox txtDirectIp;
|
||||
private System.Windows.Forms.GroupBox groupBox4;
|
||||
private System.Windows.Forms.TextBox txtDirectDomain;
|
||||
private System.Windows.Forms.Panel panel3;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox txtBlockIp;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox txtBlockDomain;
|
||||
private System.Windows.Forms.TabPage tabPageRuleList;
|
||||
private Base.ListViewFlickerFree lvRoutings;
|
||||
private System.Windows.Forms.Label labRoutingTips;
|
||||
private System.Windows.Forms.CheckBox chkenableRoutingAdvanced;
|
||||
private System.Windows.Forms.ToolStripMenuItem MenuItemBasic;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuImportBasicRules;
|
||||
private System.Windows.Forms.ComboBox cmbdomainMatcher;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuImportAdvancedRules;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
}
|
||||
}
|
||||
319
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
319
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
@@ -0,0 +1,319 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class RoutingSettingForm : BaseForm
|
||||
{
|
||||
private List<int> lvSelecteds = new List<int>();
|
||||
private RoutingItem lockedItem;
|
||||
public RoutingSettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RoutingSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
ConfigHandler.InitBuiltinRouting(ref config);
|
||||
|
||||
cmbdomainStrategy.Text = config.domainStrategy;
|
||||
chkenableRoutingAdvanced.Checked = config.enableRoutingAdvanced;
|
||||
cmbdomainMatcher.Text = config.domainMatcher;
|
||||
|
||||
if (config.routings == null)
|
||||
{
|
||||
config.routings = new List<RoutingItem>();
|
||||
}
|
||||
InitRoutingsView();
|
||||
RefreshRoutingsView();
|
||||
|
||||
BindingLockedData();
|
||||
InitUI();
|
||||
}
|
||||
|
||||
|
||||
private void tabNormal_Selecting(object sender, TabControlCancelEventArgs e)
|
||||
{
|
||||
//if (tabNormal.SelectedTab == tabPageRuleList)
|
||||
//{
|
||||
// MenuItem1.Enabled = true;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// MenuItem1.Enabled = false;
|
||||
//}
|
||||
}
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
config.domainStrategy = cmbdomainStrategy.Text;
|
||||
config.enableRoutingAdvanced = chkenableRoutingAdvanced.Checked;
|
||||
config.domainMatcher = cmbdomainMatcher.Text;
|
||||
|
||||
EndBindingLockedData();
|
||||
|
||||
if (ConfigHandler.SaveRouting(ref config) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
private void chkenableRoutingAdvanced_CheckedChanged_1(object sender, EventArgs e)
|
||||
{
|
||||
InitUI();
|
||||
}
|
||||
private void InitUI()
|
||||
{
|
||||
if (chkenableRoutingAdvanced.Checked)
|
||||
{
|
||||
this.tabPageProxy.Parent = null;
|
||||
this.tabPageDirect.Parent = null;
|
||||
this.tabPageBlock.Parent = null;
|
||||
this.tabPageRuleList.Parent = tabNormal;
|
||||
MenuItemBasic.Enabled = false;
|
||||
MenuItemAdvanced.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
this.tabPageProxy.Parent = tabNormal;
|
||||
this.tabPageDirect.Parent = tabNormal;
|
||||
this.tabPageBlock.Parent = tabNormal;
|
||||
this.tabPageRuleList.Parent = null;
|
||||
MenuItemBasic.Enabled = true;
|
||||
MenuItemAdvanced.Enabled = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region locked
|
||||
private void BindingLockedData()
|
||||
{
|
||||
lockedItem = ConfigHandler.GetLockedRoutingItem(ref config);
|
||||
if (lockedItem != null)
|
||||
{
|
||||
txtProxyDomain.Text = Utils.List2String(lockedItem.rules[0].domain, true);
|
||||
txtProxyIp.Text = Utils.List2String(lockedItem.rules[0].ip, true);
|
||||
|
||||
txtDirectDomain.Text = Utils.List2String(lockedItem.rules[1].domain, true);
|
||||
txtDirectIp.Text = Utils.List2String(lockedItem.rules[1].ip, true);
|
||||
|
||||
txtBlockDomain.Text = Utils.List2String(lockedItem.rules[2].domain, true);
|
||||
txtBlockIp.Text = Utils.List2String(lockedItem.rules[2].ip, true);
|
||||
}
|
||||
}
|
||||
private void EndBindingLockedData()
|
||||
{
|
||||
if (lockedItem != null)
|
||||
{
|
||||
lockedItem.rules[0].domain = Utils.String2List(txtProxyDomain.Text.TrimEx());
|
||||
lockedItem.rules[0].ip = Utils.String2List(txtProxyIp.Text.TrimEx());
|
||||
|
||||
lockedItem.rules[1].domain = Utils.String2List(txtDirectDomain.Text.TrimEx());
|
||||
lockedItem.rules[1].ip = Utils.String2List(txtDirectIp.Text.TrimEx());
|
||||
|
||||
lockedItem.rules[2].domain = Utils.String2List(txtBlockDomain.Text.TrimEx());
|
||||
lockedItem.rules[2].ip = Utils.String2List(txtBlockIp.Text.TrimEx());
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ListView
|
||||
private void InitRoutingsView()
|
||||
{
|
||||
lvRoutings.BeginUpdate();
|
||||
lvRoutings.Items.Clear();
|
||||
|
||||
lvRoutings.GridLines = true;
|
||||
lvRoutings.FullRowSelect = true;
|
||||
lvRoutings.View = View.Details;
|
||||
lvRoutings.MultiSelect = true;
|
||||
lvRoutings.HeaderStyle = ColumnHeaderStyle.Clickable;
|
||||
|
||||
lvRoutings.Columns.Add("", 30);
|
||||
lvRoutings.Columns.Add(ResUI.LvAlias, 200);
|
||||
lvRoutings.Columns.Add(ResUI.LvCount, 60);
|
||||
lvRoutings.Columns.Add(ResUI.LvUrl, 240);
|
||||
lvRoutings.Columns.Add(ResUI.LvCustomIcon, 240);
|
||||
|
||||
lvRoutings.EndUpdate();
|
||||
}
|
||||
|
||||
private void RefreshRoutingsView()
|
||||
{
|
||||
lvRoutings.BeginUpdate();
|
||||
lvRoutings.Items.Clear();
|
||||
|
||||
for (int k = 0; k < config.routings.Count; k++)
|
||||
{
|
||||
var item = config.routings[k];
|
||||
if (item.locked == true)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
string def = string.Empty;
|
||||
if (config.routingIndex.Equals(k))
|
||||
{
|
||||
def = "√";
|
||||
}
|
||||
|
||||
ListViewItem lvItem = new ListViewItem(def);
|
||||
Utils.AddSubItem(lvItem, "remarks", item.remarks);
|
||||
Utils.AddSubItem(lvItem, "count", item.rules.Count.ToString());
|
||||
Utils.AddSubItem(lvItem, "url", item.url);
|
||||
Utils.AddSubItem(lvItem, "customIcon", item.customIcon);
|
||||
|
||||
if (lvItem != null) lvRoutings.Items.Add(lvItem);
|
||||
}
|
||||
lvRoutings.EndUpdate();
|
||||
}
|
||||
|
||||
|
||||
private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html");
|
||||
}
|
||||
|
||||
private void lvRoutings_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var fm = new RoutingRuleSettingForm();
|
||||
fm.EditIndex = index;
|
||||
if (fm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
private int GetLvSelectedIndex()
|
||||
{
|
||||
int index = -1;
|
||||
lvSelecteds.Clear();
|
||||
try
|
||||
{
|
||||
if (lvRoutings.SelectedIndices.Count <= 0)
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectRules);
|
||||
return index;
|
||||
}
|
||||
|
||||
index = lvRoutings.SelectedIndices[0];
|
||||
foreach (int i in lvRoutings.SelectedIndices)
|
||||
{
|
||||
lvSelecteds.Add(i);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Edit function
|
||||
|
||||
|
||||
private void menuSelectAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
foreach (ListViewItem item in lvRoutings.Items)
|
||||
{
|
||||
item.Selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void menuAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
var fm = new RoutingRuleSettingForm();
|
||||
fm.EditIndex = -1;
|
||||
if (fm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
private void menuRemove_Click(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (UI.ShowYesNo(ResUI.RemoveRules) == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
|
||||
{
|
||||
config.routings.RemoveAt(index);
|
||||
}
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
private void menuSetDefaultRouting_Click(object sender, EventArgs e)
|
||||
{
|
||||
int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SetDefaultRouting(index);
|
||||
}
|
||||
private int SetDefaultRouting(int index)
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
UI.Show(ResUI.PleaseSelectServer);
|
||||
return -1;
|
||||
}
|
||||
if (ConfigHandler.SetDefaultRouting(ref config, index) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void menuImportBasicRules_Click(object sender, EventArgs e)
|
||||
{
|
||||
//Extra to bypass the mainland
|
||||
txtProxyDomain.Text = "geosite:google";
|
||||
txtDirectDomain.Text = "geosite:cn";
|
||||
txtDirectIp.Text = "geoip:private,geoip:cn";
|
||||
|
||||
txtBlockDomain.Text = "geosite:category-ads-all";
|
||||
|
||||
UI.Show(ResUI.OperationSuccess);
|
||||
}
|
||||
|
||||
private void menuImportAdvancedRules_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (ConfigHandler.InitBuiltinRouting(ref config, true) == 0)
|
||||
{
|
||||
RefreshRoutingsView();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
1412
v2rayN/v2rayN/Forms/RoutingSettingForm.resx
Normal file
1412
v2rayN/v2rayN/Forms/RoutingSettingForm.resx
Normal file
File diff suppressed because it is too large
Load Diff
315
v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
Normal file
315
v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
Normal file
@@ -0,0 +1,315 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>691, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 545</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>817, 60</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>518, 16</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||
<value>*设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>598, 17</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>817, 51</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>域名匹配算法</value>
|
||||
</data>
|
||||
<data name="chkenableRoutingAdvanced.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 16</value>
|
||||
</data>
|
||||
<data name="chkenableRoutingAdvanced.Text" xml:space="preserve">
|
||||
<value>启用路由高级功能</value>
|
||||
</data>
|
||||
<data name="linkLabelRoutingDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>77, 12</value>
|
||||
</data>
|
||||
<data name="linkLabelRoutingDoc.Text" xml:space="preserve">
|
||||
<value>域名解析策略</value>
|
||||
</data>
|
||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>149, 114</value>
|
||||
</data>
|
||||
<data name="menuAdd.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
</data>
|
||||
<data name="menuAdd.Text" xml:space="preserve">
|
||||
<value>添加规则集</value>
|
||||
</data>
|
||||
<data name="menuRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
</data>
|
||||
<data name="menuRemove.Text" xml:space="preserve">
|
||||
<value>移除所选规则</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Text" xml:space="preserve">
|
||||
<value>全选</value>
|
||||
</data>
|
||||
<data name="menuSetDefaultRouting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>148, 22</value>
|
||||
</data>
|
||||
<data name="menuSetDefaultRouting.Text" xml:space="preserve">
|
||||
<value>设为活动路由</value>
|
||||
</data>
|
||||
<data name="MenuItemAdvanced.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>68, 21</value>
|
||||
</data>
|
||||
<data name="MenuItemAdvanced.Text" xml:space="preserve">
|
||||
<value>高级功能</value>
|
||||
</data>
|
||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>817, 25</value>
|
||||
</data>
|
||||
<data name="MenuItemBasic.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>68, 21</value>
|
||||
</data>
|
||||
<data name="MenuItemBasic.Text" xml:space="preserve">
|
||||
<value>基础功能</value>
|
||||
</data>
|
||||
<data name="menuImportBasicRules.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="menuImportBasicRules.Text" xml:space="preserve">
|
||||
<value>一键导入基础规则</value>
|
||||
</data>
|
||||
<data name="tabNormal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>817, 469</value>
|
||||
</data>
|
||||
<data name="tabPageProxy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>809, 443</value>
|
||||
</data>
|
||||
<data name="tabPageProxy.Text" xml:space="preserve">
|
||||
<value> 1.代理的Domain或IP </value>
|
||||
</data>
|
||||
<data name="panel5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>803, 437</value>
|
||||
</data>
|
||||
<data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>411, 437</value>
|
||||
</data>
|
||||
<data name="txtProxyIp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>405, 417</value>
|
||||
</data>
|
||||
<data name="groupBox6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>392, 437</value>
|
||||
</data>
|
||||
<data name="txtProxyDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>386, 417</value>
|
||||
</data>
|
||||
<data name="tabPageDirect.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>809, 443</value>
|
||||
</data>
|
||||
<data name="tabPageDirect.Text" xml:space="preserve">
|
||||
<value> 2.直连的Domain或IP </value>
|
||||
</data>
|
||||
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>803, 437</value>
|
||||
</data>
|
||||
<data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>411, 437</value>
|
||||
</data>
|
||||
<data name="txtDirectIp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>405, 417</value>
|
||||
</data>
|
||||
<data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>392, 437</value>
|
||||
</data>
|
||||
<data name="txtDirectDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>386, 417</value>
|
||||
</data>
|
||||
<data name="tabPageBlock.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>809, 443</value>
|
||||
</data>
|
||||
<data name="tabPageBlock.Text" xml:space="preserve">
|
||||
<value> 3.阻止的Domain或IP </value>
|
||||
</data>
|
||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>803, 437</value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>411, 437</value>
|
||||
</data>
|
||||
<data name="txtBlockIp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>405, 417</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>392, 437</value>
|
||||
</data>
|
||||
<data name="txtBlockDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>386, 417</value>
|
||||
</data>
|
||||
<data name="tabPageRuleList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>809, 443</value>
|
||||
</data>
|
||||
<data name="tabPageRuleList.Text" xml:space="preserve">
|
||||
<value> 预定义规则集列表</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Items" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0
|
||||
ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
|
||||
PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA
|
||||
BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5
|
||||
bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz
|
||||
dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA
|
||||
CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp
|
||||
bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5
|
||||
bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3
|
||||
////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>803, 437</value>
|
||||
</data>
|
||||
<data name="menuImportAdvancedRules.Text" xml:space="preserve">
|
||||
<value>一键导入高级规则</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>817, 605</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>路由设置</value>
|
||||
</data>
|
||||
</root>
|
||||
250
v2rayN/v2rayN/Forms/ServerTransportControl.Designer.cs
generated
Normal file
250
v2rayN/v2rayN/Forms/ServerTransportControl.Designer.cs
generated
Normal file
@@ -0,0 +1,250 @@
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
partial class ServerTransportControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 必需的设计器变量。
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// 清理所有正在使用的资源。
|
||||
/// </summary>
|
||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region 组件设计器生成的代码
|
||||
|
||||
/// <summary>
|
||||
/// 设计器支持所需的方法 - 不要修改
|
||||
/// 使用代码编辑器修改此方法的内容。
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerTransportControl));
|
||||
this.gbTransport = new System.Windows.Forms.GroupBox();
|
||||
this.panTlsMore = new System.Windows.Forms.Panel();
|
||||
this.clbAlpn = new System.Windows.Forms.CheckedListBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.txtSNI = new System.Windows.Forms.TextBox();
|
||||
this.labSNI = new System.Windows.Forms.Label();
|
||||
this.labAllowInsecure = new System.Windows.Forms.Label();
|
||||
this.cmbAllowInsecure = new System.Windows.Forms.ComboBox();
|
||||
this.tipNetwork = new System.Windows.Forms.Label();
|
||||
this.txtPath = new System.Windows.Forms.TextBox();
|
||||
this.cmbNetwork = new System.Windows.Forms.ComboBox();
|
||||
this.labNetwork = new System.Windows.Forms.Label();
|
||||
this.labPath = new System.Windows.Forms.Label();
|
||||
this.tipPath = new System.Windows.Forms.Label();
|
||||
this.tipRequestHost = new System.Windows.Forms.Label();
|
||||
this.labStreamSecurity = new System.Windows.Forms.Label();
|
||||
this.cmbStreamSecurity = new System.Windows.Forms.ComboBox();
|
||||
this.tipHeaderType = new System.Windows.Forms.Label();
|
||||
this.txtRequestHost = new System.Windows.Forms.TextBox();
|
||||
this.labHeaderType = new System.Windows.Forms.Label();
|
||||
this.labRequestHost = new System.Windows.Forms.Label();
|
||||
this.cmbHeaderType = new System.Windows.Forms.ComboBox();
|
||||
this.gbTransport.SuspendLayout();
|
||||
this.panTlsMore.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// gbTransport
|
||||
//
|
||||
this.gbTransport.Controls.Add(this.panTlsMore);
|
||||
this.gbTransport.Controls.Add(this.tipNetwork);
|
||||
this.gbTransport.Controls.Add(this.txtPath);
|
||||
this.gbTransport.Controls.Add(this.cmbNetwork);
|
||||
this.gbTransport.Controls.Add(this.labNetwork);
|
||||
this.gbTransport.Controls.Add(this.labPath);
|
||||
this.gbTransport.Controls.Add(this.tipPath);
|
||||
this.gbTransport.Controls.Add(this.tipRequestHost);
|
||||
this.gbTransport.Controls.Add(this.labStreamSecurity);
|
||||
this.gbTransport.Controls.Add(this.cmbStreamSecurity);
|
||||
this.gbTransport.Controls.Add(this.tipHeaderType);
|
||||
this.gbTransport.Controls.Add(this.txtRequestHost);
|
||||
this.gbTransport.Controls.Add(this.labHeaderType);
|
||||
this.gbTransport.Controls.Add(this.labRequestHost);
|
||||
this.gbTransport.Controls.Add(this.cmbHeaderType);
|
||||
resources.ApplyResources(this.gbTransport, "gbTransport");
|
||||
this.gbTransport.Name = "gbTransport";
|
||||
this.gbTransport.TabStop = false;
|
||||
//
|
||||
// panTlsMore
|
||||
//
|
||||
this.panTlsMore.Controls.Add(this.clbAlpn);
|
||||
this.panTlsMore.Controls.Add(this.label1);
|
||||
this.panTlsMore.Controls.Add(this.txtSNI);
|
||||
this.panTlsMore.Controls.Add(this.labSNI);
|
||||
this.panTlsMore.Controls.Add(this.labAllowInsecure);
|
||||
this.panTlsMore.Controls.Add(this.cmbAllowInsecure);
|
||||
resources.ApplyResources(this.panTlsMore, "panTlsMore");
|
||||
this.panTlsMore.Name = "panTlsMore";
|
||||
//
|
||||
// clbAlpn
|
||||
//
|
||||
this.clbAlpn.CheckOnClick = true;
|
||||
resources.ApplyResources(this.clbAlpn, "clbAlpn");
|
||||
this.clbAlpn.FormattingEnabled = true;
|
||||
this.clbAlpn.Items.AddRange(new object[] {
|
||||
resources.GetString("clbAlpn.Items"),
|
||||
resources.GetString("clbAlpn.Items1")});
|
||||
this.clbAlpn.MultiColumn = true;
|
||||
this.clbAlpn.Name = "clbAlpn";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// txtSNI
|
||||
//
|
||||
resources.ApplyResources(this.txtSNI, "txtSNI");
|
||||
this.txtSNI.Name = "txtSNI";
|
||||
//
|
||||
// labSNI
|
||||
//
|
||||
resources.ApplyResources(this.labSNI, "labSNI");
|
||||
this.labSNI.Name = "labSNI";
|
||||
//
|
||||
// labAllowInsecure
|
||||
//
|
||||
resources.ApplyResources(this.labAllowInsecure, "labAllowInsecure");
|
||||
this.labAllowInsecure.Name = "labAllowInsecure";
|
||||
//
|
||||
// cmbAllowInsecure
|
||||
//
|
||||
this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbAllowInsecure.FormattingEnabled = true;
|
||||
this.cmbAllowInsecure.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbAllowInsecure.Items"),
|
||||
resources.GetString("cmbAllowInsecure.Items1"),
|
||||
resources.GetString("cmbAllowInsecure.Items2")});
|
||||
resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure");
|
||||
this.cmbAllowInsecure.Name = "cmbAllowInsecure";
|
||||
//
|
||||
// tipNetwork
|
||||
//
|
||||
resources.ApplyResources(this.tipNetwork, "tipNetwork");
|
||||
this.tipNetwork.Name = "tipNetwork";
|
||||
//
|
||||
// txtPath
|
||||
//
|
||||
resources.ApplyResources(this.txtPath, "txtPath");
|
||||
this.txtPath.Name = "txtPath";
|
||||
//
|
||||
// cmbNetwork
|
||||
//
|
||||
this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbNetwork.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbNetwork, "cmbNetwork");
|
||||
this.cmbNetwork.Name = "cmbNetwork";
|
||||
this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged);
|
||||
//
|
||||
// labNetwork
|
||||
//
|
||||
resources.ApplyResources(this.labNetwork, "labNetwork");
|
||||
this.labNetwork.Name = "labNetwork";
|
||||
//
|
||||
// labPath
|
||||
//
|
||||
resources.ApplyResources(this.labPath, "labPath");
|
||||
this.labPath.Name = "labPath";
|
||||
//
|
||||
// tipPath
|
||||
//
|
||||
resources.ApplyResources(this.tipPath, "tipPath");
|
||||
this.tipPath.Name = "tipPath";
|
||||
//
|
||||
// tipRequestHost
|
||||
//
|
||||
resources.ApplyResources(this.tipRequestHost, "tipRequestHost");
|
||||
this.tipRequestHost.Name = "tipRequestHost";
|
||||
//
|
||||
// labStreamSecurity
|
||||
//
|
||||
resources.ApplyResources(this.labStreamSecurity, "labStreamSecurity");
|
||||
this.labStreamSecurity.Name = "labStreamSecurity";
|
||||
//
|
||||
// cmbStreamSecurity
|
||||
//
|
||||
this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbStreamSecurity.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity");
|
||||
this.cmbStreamSecurity.Name = "cmbStreamSecurity";
|
||||
this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged);
|
||||
//
|
||||
// tipHeaderType
|
||||
//
|
||||
resources.ApplyResources(this.tipHeaderType, "tipHeaderType");
|
||||
this.tipHeaderType.Name = "tipHeaderType";
|
||||
//
|
||||
// txtRequestHost
|
||||
//
|
||||
resources.ApplyResources(this.txtRequestHost, "txtRequestHost");
|
||||
this.txtRequestHost.Name = "txtRequestHost";
|
||||
//
|
||||
// labHeaderType
|
||||
//
|
||||
resources.ApplyResources(this.labHeaderType, "labHeaderType");
|
||||
this.labHeaderType.Name = "labHeaderType";
|
||||
//
|
||||
// labRequestHost
|
||||
//
|
||||
resources.ApplyResources(this.labRequestHost, "labRequestHost");
|
||||
this.labRequestHost.Name = "labRequestHost";
|
||||
//
|
||||
// cmbHeaderType
|
||||
//
|
||||
this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbHeaderType.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType");
|
||||
this.cmbHeaderType.Name = "cmbHeaderType";
|
||||
//
|
||||
// ServerTransportControl
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.gbTransport);
|
||||
this.Name = "ServerTransportControl";
|
||||
this.Load += new System.EventHandler(this.ServerTransportControl_Load);
|
||||
this.gbTransport.ResumeLayout(false);
|
||||
this.gbTransport.PerformLayout();
|
||||
this.panTlsMore.ResumeLayout(false);
|
||||
this.panTlsMore.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox gbTransport;
|
||||
private System.Windows.Forms.Panel panTlsMore;
|
||||
private System.Windows.Forms.TextBox txtSNI;
|
||||
private System.Windows.Forms.Label labSNI;
|
||||
private System.Windows.Forms.Label labAllowInsecure;
|
||||
private System.Windows.Forms.ComboBox cmbAllowInsecure;
|
||||
private System.Windows.Forms.Label tipNetwork;
|
||||
private System.Windows.Forms.TextBox txtPath;
|
||||
private System.Windows.Forms.ComboBox cmbNetwork;
|
||||
private System.Windows.Forms.Label labNetwork;
|
||||
private System.Windows.Forms.Label labPath;
|
||||
private System.Windows.Forms.Label tipPath;
|
||||
private System.Windows.Forms.Label tipRequestHost;
|
||||
private System.Windows.Forms.Label labStreamSecurity;
|
||||
private System.Windows.Forms.ComboBox cmbStreamSecurity;
|
||||
private System.Windows.Forms.Label tipHeaderType;
|
||||
private System.Windows.Forms.TextBox txtRequestHost;
|
||||
private System.Windows.Forms.Label labHeaderType;
|
||||
private System.Windows.Forms.Label labRequestHost;
|
||||
private System.Windows.Forms.ComboBox cmbHeaderType;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.CheckedListBox clbAlpn;
|
||||
}
|
||||
}
|
||||
205
v2rayN/v2rayN/Forms/ServerTransportControl.cs
Normal file
205
v2rayN/v2rayN/Forms/ServerTransportControl.cs
Normal file
@@ -0,0 +1,205 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
public partial class ServerTransportControl : UserControl
|
||||
{
|
||||
public bool AllowXtls { get; set; }
|
||||
private VmessItem vmessItem = null;
|
||||
|
||||
public ServerTransportControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
private void ServerTransportControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void Init(VmessItem item)
|
||||
{
|
||||
vmessItem = item;
|
||||
|
||||
cmbNetwork.Items.AddRange(Global.networks.ToArray());
|
||||
|
||||
cmbStreamSecurity.Items.Clear();
|
||||
cmbStreamSecurity.Items.Add(string.Empty);
|
||||
cmbStreamSecurity.Items.Add(Global.StreamSecurity);
|
||||
if (AllowXtls)
|
||||
{
|
||||
cmbStreamSecurity.Items.Add(Global.StreamSecurityX);
|
||||
}
|
||||
}
|
||||
|
||||
public void BindingServer(VmessItem item)
|
||||
{
|
||||
Init(item);
|
||||
|
||||
cmbNetwork.Text = vmessItem.network;
|
||||
cmbHeaderType.Text = vmessItem.headerType;
|
||||
txtRequestHost.Text = vmessItem.requestHost;
|
||||
txtPath.Text = vmessItem.path;
|
||||
cmbStreamSecurity.Text = vmessItem.streamSecurity;
|
||||
cmbAllowInsecure.Text = vmessItem.allowInsecure;
|
||||
txtSNI.Text = vmessItem.sni;
|
||||
|
||||
if (vmessItem.alpn != null)
|
||||
{
|
||||
for (int i = 0; i < clbAlpn.Items.Count; i++)
|
||||
{
|
||||
if (vmessItem.alpn.Contains(clbAlpn.Items[i].ToString()))
|
||||
{
|
||||
clbAlpn.SetItemChecked(i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearServer(VmessItem item)
|
||||
{
|
||||
Init(item);
|
||||
|
||||
cmbNetwork.Text = Global.DefaultNetwork;
|
||||
cmbHeaderType.Text = Global.None;
|
||||
txtRequestHost.Text = "";
|
||||
cmbStreamSecurity.Text = "";
|
||||
cmbAllowInsecure.Text = "";
|
||||
txtPath.Text = "";
|
||||
txtSNI.Text = "";
|
||||
for (int i = 0; i < clbAlpn.Items.Count; i++)
|
||||
{
|
||||
clbAlpn.SetItemChecked(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void EndBindingServer()
|
||||
{
|
||||
string network = cmbNetwork.Text;
|
||||
string headerType = cmbHeaderType.Text;
|
||||
string requestHost = txtRequestHost.Text;
|
||||
string path = txtPath.Text;
|
||||
string streamSecurity = cmbStreamSecurity.Text;
|
||||
string allowInsecure = cmbAllowInsecure.Text;
|
||||
string sni = txtSNI.Text;
|
||||
|
||||
vmessItem.network = network;
|
||||
vmessItem.headerType = headerType;
|
||||
vmessItem.requestHost = requestHost.Replace(" ", "");
|
||||
vmessItem.path = path.Replace(" ", "");
|
||||
vmessItem.streamSecurity = streamSecurity;
|
||||
vmessItem.allowInsecure = allowInsecure;
|
||||
vmessItem.sni = sni;
|
||||
|
||||
var alpn = new List<string>();
|
||||
for (int i = 0; i < clbAlpn.Items.Count; i++)
|
||||
{
|
||||
if (clbAlpn.GetItemChecked(i))
|
||||
{
|
||||
alpn.Add(clbAlpn.Items[i].ToString());
|
||||
}
|
||||
}
|
||||
vmessItem.alpn = alpn;
|
||||
}
|
||||
|
||||
private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
SetHeaderType();
|
||||
SetTips();
|
||||
}
|
||||
|
||||
private void SetHeaderType()
|
||||
{
|
||||
cmbHeaderType.Items.Clear();
|
||||
|
||||
string network = cmbNetwork.Text;
|
||||
if (Utils.IsNullOrEmpty(network))
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
return;
|
||||
}
|
||||
|
||||
if (network.Equals(Global.DefaultNetwork))
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
cmbHeaderType.Items.Add(Global.TcpHeaderHttp);
|
||||
}
|
||||
else if (network.Equals("kcp") || network.Equals("quic"))
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
cmbHeaderType.Items.AddRange(Global.kcpHeaderTypes.ToArray());
|
||||
}
|
||||
else if (network.Equals("grpc"))
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.GrpcgunMode);
|
||||
cmbHeaderType.Items.Add(Global.GrpcmultiMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmbHeaderType.Items.Add(Global.None);
|
||||
}
|
||||
cmbHeaderType.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void SetTips()
|
||||
{
|
||||
string network = cmbNetwork.Text;
|
||||
if (Utils.IsNullOrEmpty(network))
|
||||
{
|
||||
network = Global.DefaultNetwork;
|
||||
}
|
||||
labHeaderType.Visible = true;
|
||||
tipRequestHost.Text =
|
||||
tipPath.Text =
|
||||
tipHeaderType.Text = string.Empty;
|
||||
|
||||
if (network.Equals(Global.DefaultNetwork))
|
||||
{
|
||||
tipRequestHost.Text = ResUI.TransportRequestHostTip1;
|
||||
tipHeaderType.Text = ResUI.TransportHeaderTypeTip1;
|
||||
}
|
||||
else if (network.Equals("kcp"))
|
||||
{
|
||||
tipHeaderType.Text = ResUI.TransportHeaderTypeTip2;
|
||||
tipPath.Text = ResUI.TransportPathTip5;
|
||||
}
|
||||
else if (network.Equals("ws"))
|
||||
{
|
||||
tipRequestHost.Text = ResUI.TransportRequestHostTip2;
|
||||
tipPath.Text = ResUI.TransportPathTip1;
|
||||
}
|
||||
else if (network.Equals("h2"))
|
||||
{
|
||||
tipRequestHost.Text = ResUI.TransportRequestHostTip3;
|
||||
tipPath.Text = ResUI.TransportPathTip2;
|
||||
}
|
||||
else if (network.Equals("quic"))
|
||||
{
|
||||
tipRequestHost.Text = ResUI.TransportRequestHostTip4;
|
||||
tipPath.Text = ResUI.TransportPathTip3;
|
||||
tipHeaderType.Text = ResUI.TransportHeaderTypeTip3;
|
||||
}
|
||||
else if (network.Equals("grpc"))
|
||||
{
|
||||
tipPath.Text = ResUI.TransportPathTip4;
|
||||
tipHeaderType.Text = ResUI.TransportHeaderTypeTip4;
|
||||
labHeaderType.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
string security = cmbStreamSecurity.Text;
|
||||
if (Utils.IsNullOrEmpty(security))
|
||||
{
|
||||
panTlsMore.Hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
panTlsMore.Show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
738
v2rayN/v2rayN/Forms/ServerTransportControl.resx
Normal file
738
v2rayN/v2rayN/Forms/ServerTransportControl.resx
Normal file
@@ -0,0 +1,738 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="clbAlpn.ColumnWidth" type="System.Int32, mscorlib">
|
||||
<value>70</value>
|
||||
</data>
|
||||
<data name="clbAlpn.Items" xml:space="preserve">
|
||||
<value>h2</value>
|
||||
</data>
|
||||
<data name="clbAlpn.Items1" xml:space="preserve">
|
||||
<value>http/1.1</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="clbAlpn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>313, 7</value>
|
||||
</data>
|
||||
<data name="clbAlpn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 20</value>
|
||||
</data>
|
||||
<data name="clbAlpn.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>44</value>
|
||||
</data>
|
||||
<data name=">>clbAlpn.Name" xml:space="preserve">
|
||||
<value>clbAlpn</value>
|
||||
</data>
|
||||
<data name=">>clbAlpn.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>clbAlpn.Parent" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>clbAlpn.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<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 name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>241, 11</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>43</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>alpn</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>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtSNI.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>100, 39</value>
|
||||
</data>
|
||||
<data name="txtSNI.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>385, 21</value>
|
||||
</data>
|
||||
<data name="txtSNI.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>txtSNI.Name" xml:space="preserve">
|
||||
<value>txtSNI</value>
|
||||
</data>
|
||||
<data name=">>txtSNI.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=">>txtSNI.Parent" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>txtSNI.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labSNI.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labSNI.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labSNI.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 43</value>
|
||||
</data>
|
||||
<data name="labSNI.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>23, 12</value>
|
||||
</data>
|
||||
<data name="labSNI.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>32</value>
|
||||
</data>
|
||||
<data name="labSNI.Text" xml:space="preserve">
|
||||
<value>SNI</value>
|
||||
</data>
|
||||
<data name=">>labSNI.Name" xml:space="preserve">
|
||||
<value>labSNI</value>
|
||||
</data>
|
||||
<data name=">>labSNI.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=">>labSNI.Parent" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>labSNI.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 11</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>31</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.Text" xml:space="preserve">
|
||||
<value>allowInsecure</value>
|
||||
</data>
|
||||
<data name=">>labAllowInsecure.Name" xml:space="preserve">
|
||||
<value>labAllowInsecure</value>
|
||||
</data>
|
||||
<data name=">>labAllowInsecure.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=">>labAllowInsecure.Parent" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>labAllowInsecure.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Items" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Items1" xml:space="preserve">
|
||||
<value>true</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Items2" xml:space="preserve">
|
||||
<value>false</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>100, 7</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>80, 20</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>cmbAllowInsecure.Name" xml:space="preserve">
|
||||
<value>cmbAllowInsecure</value>
|
||||
</data>
|
||||
<data name=">>cmbAllowInsecure.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbAllowInsecure.Parent" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>cmbAllowInsecure.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="panTlsMore.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>200, 149</value>
|
||||
</data>
|
||||
<data name="panTlsMore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>500, 71</value>
|
||||
</data>
|
||||
<data name="panTlsMore.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>33</value>
|
||||
</data>
|
||||
<data name=">>panTlsMore.Name" xml:space="preserve">
|
||||
<value>panTlsMore</value>
|
||||
</data>
|
||||
<data name=">>panTlsMore.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panTlsMore.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>panTlsMore.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tipNetwork.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tipNetwork.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="tipNetwork.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>350, 32</value>
|
||||
</data>
|
||||
<data name="tipNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="tipNetwork.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="tipNetwork.Text" xml:space="preserve">
|
||||
<value>*Default value tcp</value>
|
||||
</data>
|
||||
<data name=">>tipNetwork.Name" xml:space="preserve">
|
||||
<value>tipNetwork</value>
|
||||
</data>
|
||||
<data name=">>tipNetwork.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=">>tipNetwork.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>tipNetwork.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 124</value>
|
||||
</data>
|
||||
<data name="txtPath.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>396, 20</value>
|
||||
</data>
|
||||
<data name="txtPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>txtPath.Name" xml:space="preserve">
|
||||
<value>txtPath</value>
|
||||
</data>
|
||||
<data name=">>txtPath.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=">>txtPath.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>txtPath.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>192, 28</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 20</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>cmbNetwork.Name" xml:space="preserve">
|
||||
<value>cmbNetwork</value>
|
||||
</data>
|
||||
<data name=">>cmbNetwork.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbNetwork.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>cmbNetwork.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="labNetwork.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labNetwork.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labNetwork.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 32</value>
|
||||
</data>
|
||||
<data name="labNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>167, 12</value>
|
||||
</data>
|
||||
<data name="labNetwork.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="labNetwork.Text" xml:space="preserve">
|
||||
<value>Transport protocol(network)</value>
|
||||
</data>
|
||||
<data name=">>labNetwork.Name" xml:space="preserve">
|
||||
<value>labNetwork</value>
|
||||
</data>
|
||||
<data name=">>labNetwork.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=">>labNetwork.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>labNetwork.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="labPath.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 128</value>
|
||||
</data>
|
||||
<data name="labPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="labPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>27</value>
|
||||
</data>
|
||||
<data name="labPath.Text" xml:space="preserve">
|
||||
<value>Path</value>
|
||||
</data>
|
||||
<data name=">>labPath.Name" xml:space="preserve">
|
||||
<value>labPath</value>
|
||||
</data>
|
||||
<data name=">>labPath.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=">>labPath.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>labPath.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="tipPath.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tipPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="tipPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>529, 128</value>
|
||||
</data>
|
||||
<data name="tipPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>11, 12</value>
|
||||
</data>
|
||||
<data name="tipPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="tipPath.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name=">>tipPath.Name" xml:space="preserve">
|
||||
<value>tipPath</value>
|
||||
</data>
|
||||
<data name=">>tipPath.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=">>tipPath.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>tipPath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>464, 96</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>11, 12</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="tipRequestHost.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name=">>tipRequestHost.Name" xml:space="preserve">
|
||||
<value>tipRequestHost</value>
|
||||
</data>
|
||||
<data name=">>tipRequestHost.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=">>tipRequestHost.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>tipRequestHost.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 160</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>23, 12</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.Text" xml:space="preserve">
|
||||
<value>TLS</value>
|
||||
</data>
|
||||
<data name=">>labStreamSecurity.Name" xml:space="preserve">
|
||||
<value>labStreamSecurity</value>
|
||||
</data>
|
||||
<data name=">>labStreamSecurity.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=">>labStreamSecurity.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>labStreamSecurity.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="cmbStreamSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 156</value>
|
||||
</data>
|
||||
<data name="cmbStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 20</value>
|
||||
</data>
|
||||
<data name="cmbStreamSecurity.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>cmbStreamSecurity.Name" xml:space="preserve">
|
||||
<value>cmbStreamSecurity</value>
|
||||
</data>
|
||||
<data name=">>cmbStreamSecurity.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbStreamSecurity.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>cmbStreamSecurity.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>282, 64</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>11, 12</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>20</value>
|
||||
</data>
|
||||
<data name="tipHeaderType.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name=">>tipHeaderType.Name" xml:space="preserve">
|
||||
<value>tipHeaderType</value>
|
||||
</data>
|
||||
<data name=">>tipHeaderType.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=">>tipHeaderType.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>tipHeaderType.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>158, 92</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 20</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>txtRequestHost.Name" xml:space="preserve">
|
||||
<value>txtRequestHost</value>
|
||||
</data>
|
||||
<data name=">>txtRequestHost.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=">>txtRequestHost.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>txtRequestHost.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="labHeaderType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labHeaderType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labHeaderType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 64</value>
|
||||
</data>
|
||||
<data name="labHeaderType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="labHeaderType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="labHeaderType.Text" xml:space="preserve">
|
||||
<value>Camouflage type</value>
|
||||
</data>
|
||||
<data name=">>labHeaderType.Name" xml:space="preserve">
|
||||
<value>labHeaderType</value>
|
||||
</data>
|
||||
<data name=">>labHeaderType.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=">>labHeaderType.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>labHeaderType.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="labRequestHost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labRequestHost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="labRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 96</value>
|
||||
</data>
|
||||
<data name="labRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 12</value>
|
||||
</data>
|
||||
<data name="labRequestHost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="labRequestHost.Text" xml:space="preserve">
|
||||
<value>Camouflage domain(host)</value>
|
||||
</data>
|
||||
<data name=">>labRequestHost.Name" xml:space="preserve">
|
||||
<value>labRequestHost</value>
|
||||
</data>
|
||||
<data name=">>labRequestHost.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=">>labRequestHost.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>labRequestHost.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="cmbHeaderType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 60</value>
|
||||
</data>
|
||||
<data name="cmbHeaderType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 20</value>
|
||||
</data>
|
||||
<data name="cmbHeaderType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>cmbHeaderType.Name" xml:space="preserve">
|
||||
<value>cmbHeaderType</value>
|
||||
</data>
|
||||
<data name=">>cmbHeaderType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbHeaderType.Parent" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>cmbHeaderType.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="gbTransport.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="gbTransport.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="gbTransport.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>723, 223</value>
|
||||
</data>
|
||||
<data name="gbTransport.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="gbTransport.Text" xml:space="preserve">
|
||||
<value>Transport</value>
|
||||
</data>
|
||||
<data name=">>gbTransport.Name" xml:space="preserve">
|
||||
<value>gbTransport</value>
|
||||
</data>
|
||||
<data name=">>gbTransport.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=">>gbTransport.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>gbTransport.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>723, 223</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>ServerTransportControl</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>
|
||||
193
v2rayN/v2rayN/Forms/ServerTransportControl.zh-Hans.resx
Normal file
193
v2rayN/v2rayN/Forms/ServerTransportControl.zh-Hans.resx
Normal file
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="tipNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 12</value>
|
||||
</data>
|
||||
<data name="tipNetwork.Text" xml:space="preserve">
|
||||
<value>*默认tcp,选错会无法连接</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 28</value>
|
||||
</data>
|
||||
<data name="cmbNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>208, 20</value>
|
||||
</data>
|
||||
<data name="labNetwork.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>107, 12</value>
|
||||
</data>
|
||||
<data name="labNetwork.Text" xml:space="preserve">
|
||||
<value>传输协议(network)</value>
|
||||
</data>
|
||||
<data name="labPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="labPath.Text" xml:space="preserve">
|
||||
<value>路径(path)</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>107, 12</value>
|
||||
</data>
|
||||
<data name="labStreamSecurity.Text" xml:space="preserve">
|
||||
<value>传输层安全(tls)</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 92</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>331, 20</value>
|
||||
</data>
|
||||
<data name="labHeaderType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="labHeaderType.Text" xml:space="preserve">
|
||||
<value>伪装类型(type)</value>
|
||||
</data>
|
||||
<data name="labRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="labRequestHost.Text" xml:space="preserve">
|
||||
<value>伪装域名(host)</value>
|
||||
</data>
|
||||
<data name="gbTransport.Text" xml:space="preserve">
|
||||
<value>底层传输方式(transport)</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>282, 11</value>
|
||||
</data>
|
||||
<data name="clbAlpn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>331, 7</value>
|
||||
</data>
|
||||
<data name="clbAlpn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>160, 20</value>
|
||||
</data>
|
||||
<data name="txtSNI.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>391, 21</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>167, 12</value>
|
||||
</data>
|
||||
<data name="labAllowInsecure.Text" xml:space="preserve">
|
||||
<value>跳过证书验证(allowInsecure)</value>
|
||||
</data>
|
||||
<data name="cmbAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>183, 7</value>
|
||||
</data>
|
||||
</root>
|
||||
89
v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs
generated
89
v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs
generated
@@ -29,27 +29,70 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl));
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.grbMain = new System.Windows.Forms.GroupBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.cmbGroup = new System.Windows.Forms.ComboBox();
|
||||
this.txtUserAgent = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.btnShare = new System.Windows.Forms.Button();
|
||||
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.btnRemove = new System.Windows.Forms.Button();
|
||||
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.picQRCode = new System.Windows.Forms.PictureBox();
|
||||
this.grbMain.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// groupBox2
|
||||
// grbMain
|
||||
//
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Controls.Add(this.chkEnabled);
|
||||
this.groupBox2.Controls.Add(this.btnRemove);
|
||||
this.groupBox2.Controls.Add(this.txtUrl);
|
||||
this.groupBox2.Controls.Add(this.txtRemarks);
|
||||
this.groupBox2.Controls.Add(this.label2);
|
||||
this.groupBox2.Controls.Add(this.label3);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
resources.ApplyResources(this.grbMain, "grbMain");
|
||||
this.grbMain.Controls.Add(this.label4);
|
||||
this.grbMain.Controls.Add(this.cmbGroup);
|
||||
this.grbMain.Controls.Add(this.txtUserAgent);
|
||||
this.grbMain.Controls.Add(this.label1);
|
||||
this.grbMain.Controls.Add(this.btnShare);
|
||||
this.grbMain.Controls.Add(this.chkEnabled);
|
||||
this.grbMain.Controls.Add(this.btnRemove);
|
||||
this.grbMain.Controls.Add(this.txtUrl);
|
||||
this.grbMain.Controls.Add(this.txtRemarks);
|
||||
this.grbMain.Controls.Add(this.label2);
|
||||
this.grbMain.Controls.Add(this.label3);
|
||||
this.grbMain.Name = "grbMain";
|
||||
this.grbMain.TabStop = false;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// cmbGroup
|
||||
//
|
||||
resources.ApplyResources(this.cmbGroup, "cmbGroup");
|
||||
this.cmbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbGroup.FormattingEnabled = true;
|
||||
this.cmbGroup.Name = "cmbGroup";
|
||||
this.cmbGroup.Leave += new System.EventHandler(this.txtRemarks_Leave);
|
||||
//
|
||||
// txtUserAgent
|
||||
//
|
||||
resources.ApplyResources(this.txtUserAgent, "txtUserAgent");
|
||||
this.txtUserAgent.Name = "txtUserAgent";
|
||||
this.txtUserAgent.Leave += new System.EventHandler(this.txtRemarks_Leave);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// btnShare
|
||||
//
|
||||
resources.ApplyResources(this.btnShare, "btnShare");
|
||||
this.btnShare.Name = "btnShare";
|
||||
this.btnShare.UseVisualStyleBackColor = true;
|
||||
this.btnShare.Click += new System.EventHandler(this.btnShare_Click);
|
||||
//
|
||||
// chkEnabled
|
||||
//
|
||||
@@ -87,27 +130,41 @@
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// picQRCode
|
||||
//
|
||||
resources.ApplyResources(this.picQRCode, "picQRCode");
|
||||
this.picQRCode.Name = "picQRCode";
|
||||
this.picQRCode.TabStop = false;
|
||||
//
|
||||
// SubSettingControl
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.picQRCode);
|
||||
this.Controls.Add(this.grbMain);
|
||||
this.Name = "SubSettingControl";
|
||||
this.Load += new System.EventHandler(this.SubSettingControl_Load);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.grbMain.ResumeLayout(false);
|
||||
this.grbMain.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.GroupBox grbMain;
|
||||
private System.Windows.Forms.TextBox txtUrl;
|
||||
private System.Windows.Forms.TextBox txtRemarks;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Button btnRemove;
|
||||
private System.Windows.Forms.CheckBox chkEnabled;
|
||||
private System.Windows.Forms.Button btnShare;
|
||||
private System.Windows.Forms.PictureBox picQRCode;
|
||||
private System.Windows.Forms.TextBox txtUserAgent;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.ComboBox cmbGroup;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
@@ -9,9 +12,12 @@ namespace v2rayN.Forms
|
||||
public partial class SubSettingControl : UserControl
|
||||
{
|
||||
public event ChangeEventHandler OnButtonClicked;
|
||||
private List<GroupItem> groupItem;
|
||||
|
||||
|
||||
public SubItem subItem { get; set; }
|
||||
public SubItem subItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public SubSettingControl()
|
||||
{
|
||||
@@ -20,6 +26,13 @@ namespace v2rayN.Forms
|
||||
|
||||
private void SubSettingControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.Height = grbMain.Height;
|
||||
|
||||
groupItem = LazyConfig.Instance.GetConfig().groupItem;
|
||||
|
||||
cmbGroup.Items.AddRange(groupItem.Select(t => t.remarks).ToArray());
|
||||
cmbGroup.Items.Add(string.Empty);
|
||||
|
||||
BindingSub();
|
||||
}
|
||||
|
||||
@@ -30,6 +43,13 @@ namespace v2rayN.Forms
|
||||
txtRemarks.Text = subItem.remarks.ToString();
|
||||
txtUrl.Text = subItem.url.ToString();
|
||||
chkEnabled.Checked = subItem.enabled;
|
||||
txtUserAgent.Text = subItem.userAgent;
|
||||
|
||||
var index = groupItem.FindIndex(t => t.id == subItem.groupId);
|
||||
if (index >= 0)
|
||||
{
|
||||
cmbGroup.SelectedIndex = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void EndBindingSub()
|
||||
@@ -39,6 +59,17 @@ namespace v2rayN.Forms
|
||||
subItem.remarks = txtRemarks.Text.TrimEx();
|
||||
subItem.url = txtUrl.Text.TrimEx();
|
||||
subItem.enabled = chkEnabled.Checked;
|
||||
subItem.userAgent = txtUserAgent.Text.TrimEx();
|
||||
|
||||
var index = groupItem.FindIndex(t => t.remarks == cmbGroup.Text);
|
||||
if (index >= 0)
|
||||
{
|
||||
subItem.groupId = groupItem[index].id;
|
||||
}
|
||||
else
|
||||
{
|
||||
subItem.groupId = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void txtRemarks_Leave(object sender, EventArgs e)
|
||||
@@ -56,5 +87,23 @@ namespace v2rayN.Forms
|
||||
|
||||
OnButtonClicked?.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void btnShare_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (this.Height <= grbMain.Height)
|
||||
{
|
||||
if (Utils.IsNullOrEmpty(subItem.url))
|
||||
{
|
||||
picQRCode.Image = null;
|
||||
return;
|
||||
}
|
||||
picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url);
|
||||
this.Height = grbMain.Height + 200;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Height = grbMain.Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,124 +117,373 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>User Agent(optional)</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>619, 162</value>
|
||||
</data>
|
||||
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib">
|
||||
<value>zh-Hans</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>584, 119</value>
|
||||
</data>
|
||||
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>484, 21</value>
|
||||
</data>
|
||||
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>&Remove</value>
|
||||
</data>
|
||||
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>406, 23</value>
|
||||
<data name="cmbGroup.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 147</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 16</value>
|
||||
</data>
|
||||
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
<data name=">>cmbGroup.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Text" xml:space="preserve">
|
||||
<value>Enable</value>
|
||||
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
<data name=">>cmbGroup.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 9</value>
|
||||
<data name=">>picQRCode.Name" xml:space="preserve">
|
||||
<value>picQRCode</value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>584, 110</value>
|
||||
<data name=">>btnShare.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="groupBox2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>Remove</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>525, 21</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name=">>txtUserAgent.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="txtUserAgent.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 111</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>SubSettingControl</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="grbMain.Text" xml:space="preserve">
|
||||
<value>Subscription details</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name="btnShare.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>26</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<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>
|
||||
</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="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 55</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Address (url)</value>
|
||||
</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>265, 21</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 55</value>
|
||||
<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="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 46</value>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name="btnShare.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>434, 21</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name=">>cmbGroup.Name" xml:space="preserve">
|
||||
<value>cmbGroup</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 21</value>
|
||||
</data>
|
||||
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 21</value>
|
||||
</data>
|
||||
<data name="btnShare.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnShare.Text" xml:space="preserve">
|
||||
<value>Share</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 53</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>27</value>
|
||||
</data>
|
||||
<data name=">>label4.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="txtUserAgent.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>473, 21</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>125, 12</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 53</value>
|
||||
</data>
|
||||
<data name="txtUserAgent.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="cmbGroup.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 20</value>
|
||||
</data>
|
||||
<data name=">>txtUserAgent.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name="txtUrl.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.Name" xml:space="preserve">
|
||||
<value>btnRemove</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.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="chkEnabled.Text" xml:space="preserve">
|
||||
<value>Enable</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Name" xml:space="preserve">
|
||||
<value>chkEnabled</value>
|
||||
</data>
|
||||
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Belong to Group</value>
|
||||
</data>
|
||||
<data name="cmbGroup.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnShare.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>btnShare.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>txtUserAgent.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>cmbGroup.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="grbMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>368, 23</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>grbMain.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>619, 188</value>
|
||||
</data>
|
||||
<data name=">>btnShare.Name" xml:space="preserve">
|
||||
<value>btnShare</value>
|
||||
</data>
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>619, 350</value>
|
||||
</data>
|
||||
<data name=">>btnShare.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 115</value>
|
||||
</data>
|
||||
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 188</value>
|
||||
</data>
|
||||
<data name=">>txtUserAgent.Name" xml:space="preserve">
|
||||
<value>txtUserAgent</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Remarks</value>
|
||||
</data>
|
||||
<data name=">>label4.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="picQRCode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>473, 46</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 25</value>
|
||||
</data>
|
||||
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 151</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Address (url)</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</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>
|
||||
<data name=">>picQRCode.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>grbMain.Name" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</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=">>chkEnabled.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -118,8 +118,20 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>移除</value>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>所属分组</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>User Agent(可选)</value>
|
||||
</data>
|
||||
<data name="btnShare.Text" xml:space="preserve">
|
||||
<value>分享</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>48, 16</value>
|
||||
@@ -127,8 +139,8 @@
|
||||
<data name="chkEnabled.Text" xml:space="preserve">
|
||||
<value>启用</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>订阅详情</value>
|
||||
<data name="btnRemove.Text" xml:space="preserve">
|
||||
<value>移除</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
@@ -142,4 +154,7 @@
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>地址 (url)</value>
|
||||
</data>
|
||||
<data name="grbMain.Text" xml:space="preserve">
|
||||
<value>订阅详情</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
@@ -68,18 +69,13 @@ namespace v2rayN.Forms
|
||||
|
||||
private void btnOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (config.subItem.Count <= 0)
|
||||
{
|
||||
AddSub();
|
||||
}
|
||||
|
||||
if (ConfigHandler.SaveSubItem(ref config) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -118,19 +118,61 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 17</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>581, 629</value>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<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>1</value>
|
||||
</data>
|
||||
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Subscription settings</value>
|
||||
<data name="panCon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="panCon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="panCon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 401</value>
|
||||
</data>
|
||||
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>panCon.Name" xml:space="preserve">
|
||||
<value>panCon</value>
|
||||
</data>
|
||||
<data name=">>panCon.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panCon.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panCon.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
@@ -147,20 +189,17 @@
|
||||
<data name="btnAdd.Text" xml:space="preserve">
|
||||
<value>&Add</value>
|
||||
</data>
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
<data name=">>btnAdd.Name" xml:space="preserve">
|
||||
<value>btnAdd</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>448, 17</value>
|
||||
<data name=">>btnAdd.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.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
<data name=">>btnAdd.Parent" xml:space="preserve">
|
||||
<value>panel2</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 name=">>btnAdd.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
@@ -177,31 +216,58 @@
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name="panCon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
<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="panCon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="panCon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>581, 569</value>
|
||||
</data>
|
||||
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 569</value>
|
||||
<value>0, 401</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>581, 60</value>
|
||||
<value>634, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>634, 461</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Subscription settings</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>SubSettingForm</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>
|
||||
@@ -1,29 +1,38 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace v2rayN
|
||||
{
|
||||
class Global
|
||||
{
|
||||
#region 常量
|
||||
|
||||
|
||||
public const string v2rayWebsiteUrl = @"https://www.v2ray.com/";
|
||||
//public const string DownloadFileName = "v2ray-windows.zip";
|
||||
public const string v2rayWebsiteUrl = @"https://www.v2fly.org/";
|
||||
public const string AboutUrl = @"https://github.com/2dust/v2rayN";
|
||||
public const string UpdateUrl = AboutUrl + @"/releases";
|
||||
public const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases";
|
||||
public const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases";
|
||||
public const string NUrl = @"https://github.com/2dust/v2rayN/releases";
|
||||
public const string clashCoreUrl = "https://github.com/Dreamacro/clash/releases";
|
||||
public const string clashMetaCoreUrl = "https://github.com/MetaCubeX/Clash.Meta/releases";
|
||||
public const string hysteriaCoreUrl = "https://github.com/HyNetwork/hysteria/releases";
|
||||
public const string naiveproxyCoreUrl = "https://github.com/klzgrad/naiveproxy/releases";
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// SpeedTestUrl
|
||||
/// </summary>
|
||||
public const string SpeedTestUrl = @"http://speedtest-sgp1.digitalocean.com/10mb.test";
|
||||
public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test";
|
||||
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
|
||||
public const string AvailabilityTestUrl = @"https://www.google.com/generate_204";
|
||||
|
||||
/// <summary>
|
||||
/// CustomRoutingListUrl
|
||||
/// </summary>
|
||||
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
|
||||
|
||||
public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt";
|
||||
|
||||
/// <summary>
|
||||
/// PromotionUrl
|
||||
@@ -56,13 +65,11 @@ namespace v2rayN
|
||||
/// v2ray配置Httpresponse文件名
|
||||
/// </summary>
|
||||
public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt";
|
||||
/// <summary>
|
||||
/// 空白的pac文件
|
||||
/// </summary>
|
||||
public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt";
|
||||
|
||||
public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_";
|
||||
|
||||
public const string v2raySampleInbound = "v2rayN.Sample.SampleInbound.txt";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 默认加密方式
|
||||
@@ -103,9 +110,12 @@ namespace v2rayN
|
||||
///
|
||||
/// </summary>
|
||||
public const string StreamSecurity = "tls";
|
||||
public const string StreamSecurityX = "xtls";
|
||||
|
||||
public const string InboundSocks = "socks";
|
||||
public const string InboundHttp = "http";
|
||||
public const string InboundSocks2 = "socks2";
|
||||
public const string InboundHttp2 = "http2";
|
||||
public const string Loopback = "127.0.0.1";
|
||||
public const string InboundAPITagName = "api";
|
||||
public const string InboundAPIProtocal = "dokodemo-door";
|
||||
@@ -116,14 +126,26 @@ namespace v2rayN
|
||||
/// </summary>
|
||||
public const string vmessProtocol = "vmess://";
|
||||
/// <summary>
|
||||
/// vmess
|
||||
/// </summary>
|
||||
public const string vmessProtocolLite = "vmess";
|
||||
/// <summary>
|
||||
/// shadowsocks
|
||||
/// </summary>
|
||||
public const string ssProtocol = "ss://";
|
||||
/// <summary>
|
||||
/// shadowsocks
|
||||
/// </summary>
|
||||
public const string ssProtocolLite = "shadowsocks";
|
||||
/// <summary>
|
||||
/// socks
|
||||
/// </summary>
|
||||
public const string socksProtocol = "socks://";
|
||||
/// <summary>
|
||||
/// socks
|
||||
/// </summary>
|
||||
public const string socksProtocolLite = "socks";
|
||||
/// <summary>
|
||||
/// http
|
||||
/// </summary>
|
||||
public const string httpProtocol = "http://";
|
||||
@@ -131,11 +153,22 @@ namespace v2rayN
|
||||
/// https
|
||||
/// </summary>
|
||||
public const string httpsProtocol = "https://";
|
||||
|
||||
/// <summary>
|
||||
/// pac
|
||||
/// vless
|
||||
/// </summary>
|
||||
public const string pacFILE = "pac.txt";
|
||||
public const string vlessProtocol = "vless://";
|
||||
/// <summary>
|
||||
/// vless
|
||||
/// </summary>
|
||||
public const string vlessProtocolLite = "vless";
|
||||
/// <summary>
|
||||
/// trojan
|
||||
/// </summary>
|
||||
public const string trojanProtocol = "trojan://";
|
||||
/// <summary>
|
||||
/// trojan
|
||||
/// </summary>
|
||||
public const string trojanProtocolLite = "trojan";
|
||||
|
||||
/// <summary>
|
||||
/// email
|
||||
@@ -151,6 +184,7 @@ namespace v2rayN
|
||||
/// Language
|
||||
/// </summary>
|
||||
public const string MyRegKeyLanguage = "CurrentLanguage";
|
||||
|
||||
/// <summary>
|
||||
/// Icon
|
||||
/// </summary>
|
||||
@@ -165,6 +199,25 @@ namespace v2rayN
|
||||
public const string StatisticLogOverall = "StatisticLogOverall.json";
|
||||
|
||||
public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*";
|
||||
public static readonly List<string> IEProxyProtocols = new List<string> {
|
||||
"{ip}:{http_port}",
|
||||
"socks={ip}:{socks_port}",
|
||||
"http={ip}:{http_port};https={ip}:{http_port};ftp={ip}:{http_port};socks={ip}:{socks_port}",
|
||||
"http=http://{ip}:{http_port};https=http://{ip}:{http_port}",
|
||||
""
|
||||
};
|
||||
|
||||
public const string RoutingRuleComma = "<COMMA>";
|
||||
|
||||
public static readonly List<string> vmessSecuritys = new List<string> { "aes-128-gcm", "chacha20-poly1305", "auto", "none", "zero" };
|
||||
public static readonly List<string> ssSecuritys = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" };
|
||||
public static readonly List<string> ssSecuritysInXray = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "none", "plain", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" };
|
||||
public static readonly List<string> xtlsFlows = new List<string> { "", "xtls-rprx-origin", "xtls-rprx-origin-udp443", "xtls-rprx-direct", "xtls-rprx-direct-udp443" };
|
||||
public static readonly List<string> networks = new List<string> { "tcp", "kcp", "ws", "h2", "quic", "grpc" };
|
||||
public static readonly List<string> kcpHeaderTypes = new List<string> { "srtp", "utp", "wechat-video", "dtls", "wireguard" };
|
||||
public static readonly List<string> coreTypes = new List<string> { "v2fly", "Xray" };
|
||||
public const string GrpcgunMode = "gun";
|
||||
public const string GrpcmultiMode = "multi";
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -178,38 +231,6 @@ namespace v2rayN
|
||||
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>
|
||||
/// PAC端口
|
||||
/// </summary>
|
||||
public static int pacPort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,14 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
@@ -19,19 +17,10 @@ namespace v2rayN.Handler
|
||||
/// </summary>
|
||||
class DownloadHandle
|
||||
{
|
||||
public event EventHandler<ResultEventArgs> AbsoluteCompleted;
|
||||
|
||||
public event EventHandler<ResultEventArgs> UpdateCompleted;
|
||||
|
||||
public event ErrorEventHandler Error;
|
||||
|
||||
public string DownloadFileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return "v2ray-windows.zip";
|
||||
}
|
||||
}
|
||||
|
||||
public class ResultEventArgs : EventArgs
|
||||
{
|
||||
@@ -45,224 +34,99 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
private int progressPercentage = -1;
|
||||
private long totalBytesToReceive = 0;
|
||||
private DateTime totalDatetime = new DateTime();
|
||||
private int DownloadTimeout = -1;
|
||||
|
||||
#region Check for updates
|
||||
|
||||
private readonly string nLatestUrl = "https://github.com/2dust/v2rayN/releases/latest";
|
||||
private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip";
|
||||
private readonly string coreLatestUrl = "https://github.com/v2ray/v2ray-core/releases/latest";
|
||||
private const string coreUrl = "https://github.com/v2ray/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip";
|
||||
|
||||
public async void CheckUpdateAsync(string type)
|
||||
public async Task<int> DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
|
||||
{
|
||||
Utils.SetSecurityProtocol();
|
||||
try
|
||||
{
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, ResUI.Speedtesting));
|
||||
|
||||
var client = new HttpClient(new WebRequestHandler()
|
||||
{
|
||||
Proxy = webProxy
|
||||
});
|
||||
|
||||
var progress = new Progress<string>();
|
||||
progress.ProgressChanged += (sender, value) =>
|
||||
{
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
string msg = string.Format("{0} M/s", value).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)
|
||||
{
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void DownloadFileAsync(string url, bool blProxy, int downloadTimeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, ResUI.Downloading));
|
||||
|
||||
var client = new HttpClient(new WebRequestHandler()
|
||||
{
|
||||
Proxy = GetWebProxy(blProxy)
|
||||
});
|
||||
|
||||
var progress = new Progress<double>();
|
||||
progress.ProgressChanged += (sender, value) =>
|
||||
{
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
string msg = string.Format("...{0}%", value);
|
||||
UpdateCompleted(this, new ResultEventArgs(value > 100 ? true : false, msg));
|
||||
}
|
||||
};
|
||||
|
||||
var cancellationToken = new CancellationTokenSource();
|
||||
_ = HttpClientHelper.GetInstance().DownloadFileAsync(client,
|
||||
url,
|
||||
Utils.GetPath(Utils.GetDownloadFileName(url)),
|
||||
progress,
|
||||
cancellationToken.Token);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string> UrlRedirectAsync(string url, bool blProxy)
|
||||
{
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
WebRequestHandler webRequestHandler = new WebRequestHandler
|
||||
{
|
||||
AllowAutoRedirect = false
|
||||
AllowAutoRedirect = false,
|
||||
Proxy = GetWebProxy(blProxy)
|
||||
};
|
||||
HttpClient httpClient = new HttpClient(webRequestHandler);
|
||||
HttpClient client = new HttpClient(webRequestHandler);
|
||||
|
||||
string url;
|
||||
if (type == "Core")
|
||||
{
|
||||
url = coreLatestUrl;
|
||||
}
|
||||
else if (type == "v2rayN")
|
||||
{
|
||||
url = nLatestUrl;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Type");
|
||||
}
|
||||
HttpResponseMessage response = await httpClient.GetAsync(url);
|
||||
HttpResponseMessage response = await client.GetAsync(url);
|
||||
if (response.StatusCode.ToString() == "Redirect")
|
||||
{
|
||||
responseHandler(type, response.Headers.Location.ToString());
|
||||
return response.Headers.Location.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.SaveLog("StatusCode error: " + url);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取V2RayCore版本
|
||||
/// </summary>
|
||||
public string getV2rayVersion()
|
||||
{
|
||||
try
|
||||
{
|
||||
string filePath = Utils.GetPath("V2ray.exe");
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases");
|
||||
//ShowMsg(true, msg);
|
||||
return "";
|
||||
}
|
||||
|
||||
Process p = new Process();
|
||||
p.StartInfo.FileName = filePath;
|
||||
p.StartInfo.Arguments = "-version";
|
||||
p.StartInfo.WorkingDirectory = Utils.StartupPath();
|
||||
p.StartInfo.UseShellExecute = false;
|
||||
p.StartInfo.RedirectStandardOutput = true;
|
||||
p.StartInfo.CreateNoWindow = true;
|
||||
p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
|
||||
p.Start();
|
||||
p.WaitForExit(5000);
|
||||
string echo = p.StandardOutput.ReadToEnd();
|
||||
string version = Regex.Match(echo, "V2Ray ([0-9.]+) \\(").Groups[1].Value;
|
||||
return version;
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
private void responseHandler(string type, string redirectUrl)
|
||||
{
|
||||
try
|
||||
{
|
||||
string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
|
||||
|
||||
string curVersion;
|
||||
string message;
|
||||
string url;
|
||||
if (type == "Core") {
|
||||
curVersion = "v" + getV2rayVersion();
|
||||
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||
url = string.Format(coreUrl, version, osBit);
|
||||
}
|
||||
else if (type == "v2rayN") {
|
||||
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
|
||||
message = string.Format(UIRes.I18N("IsLatestN"), curVersion);
|
||||
url = string.Format(nUrl, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Type");
|
||||
}
|
||||
|
||||
if (curVersion == version)
|
||||
{
|
||||
AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message));
|
||||
return;
|
||||
}
|
||||
|
||||
AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, url));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Download
|
||||
|
||||
public void DownloadFileAsync(string url, WebProxy webProxy, int downloadTimeout)
|
||||
{
|
||||
try
|
||||
{
|
||||
Utils.SetSecurityProtocol();
|
||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading")));
|
||||
|
||||
progressPercentage = -1;
|
||||
totalBytesToReceive = 0;
|
||||
|
||||
WebClientEx ws = new WebClientEx();
|
||||
DownloadTimeout = downloadTimeout;
|
||||
if (webProxy != null)
|
||||
{
|
||||
ws.Proxy = webProxy;// new WebProxy(Global.Loopback, Global.httpPort);
|
||||
}
|
||||
|
||||
ws.DownloadFileCompleted += ws_DownloadFileCompleted;
|
||||
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
|
||||
ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
|
||||
{
|
||||
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
|
||||
{
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
if (e.Cancelled)
|
||||
{
|
||||
((WebClientEx)sender).Dispose();
|
||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||
string speed = string.Format("<{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##"));
|
||||
UpdateCompleted(this, new ResultEventArgs(true, speed));
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.Error == null
|
||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
||||
{
|
||||
|
||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##"));
|
||||
UpdateCompleted(this, new ResultEventArgs(true, speed));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw e.Error;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,87 +134,117 @@ namespace v2rayN.Handler
|
||||
/// DownloadString
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
public void WebDownloadString(string url)
|
||||
public async Task<string> DownloadStringAsync(string url, bool blProxy, string userAgent)
|
||||
{
|
||||
string source = string.Empty;
|
||||
try
|
||||
{
|
||||
Utils.SetSecurityProtocol();
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
var client = new HttpClient(new WebRequestHandler()
|
||||
{
|
||||
Proxy = GetWebProxy(blProxy)
|
||||
});
|
||||
|
||||
WebClientEx ws = new WebClientEx();
|
||||
ws.DownloadStringCompleted += Ws_DownloadStringCompleted;
|
||||
ws.DownloadStringAsync(new Uri(url));
|
||||
if (Utils.IsNullOrEmpty(userAgent))
|
||||
{
|
||||
userAgent = $"{Utils.GetVersion(false)}";
|
||||
}
|
||||
client.DefaultRequestHeaders.UserAgent.TryParseAdd(userAgent);
|
||||
|
||||
Uri uri = new Uri(url);
|
||||
//Authorization Header
|
||||
if (!Utils.IsNullOrEmpty(uri.UserInfo))
|
||||
{
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Utils.Base64Encode(uri.UserInfo));
|
||||
}
|
||||
|
||||
var cts = new CancellationTokenSource();
|
||||
cts.CancelAfter(1000 * 30);
|
||||
|
||||
var result = await HttpClientHelper.GetInstance().GetAsync(client, url, cts.Token);
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void Ws_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
|
||||
public int RunAvailabilityCheck(WebProxy webProxy)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.Error == null
|
||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
||||
if (webProxy == null)
|
||||
{
|
||||
string source = e.Result;
|
||||
UpdateCompleted?.Invoke(this, new ResultEventArgs(true, source));
|
||||
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
|
||||
webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||
}
|
||||
else
|
||||
|
||||
try
|
||||
{
|
||||
throw e.Error;
|
||||
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;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region PAC
|
||||
|
||||
public string GenPacFile(string result)
|
||||
public string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
responseTime = -1;
|
||||
try
|
||||
{
|
||||
File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8);
|
||||
List<string> lines = ParsePacResult(result);
|
||||
string abpContent = Utils.UnGzip(Resources.abp_js);
|
||||
abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented));
|
||||
File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8);
|
||||
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||
myHttpWebRequest.Timeout = 5000;
|
||||
myHttpWebRequest.Proxy = webProxy;
|
||||
|
||||
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);
|
||||
return ex.Message;
|
||||
msg = ex.Message;
|
||||
}
|
||||
return string.Empty;
|
||||
return msg;
|
||||
}
|
||||
|
||||
private List<string> ParsePacResult(string response)
|
||||
private WebProxy GetWebProxy(bool blProxy)
|
||||
{
|
||||
IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' };
|
||||
|
||||
byte[] bytes = Convert.FromBase64String(response);
|
||||
string content = Encoding.UTF8.GetString(bytes);
|
||||
List<string> valid_lines = new List<string>();
|
||||
using (StringReader sr = new StringReader(content))
|
||||
if (!blProxy)
|
||||
{
|
||||
foreach (string line in sr.NonWhiteSpaceLines())
|
||||
{
|
||||
if (line.BeginWithAny(IgnoredLineBegins))
|
||||
continue;
|
||||
valid_lines.Add(line);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
|
||||
var webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||
if (RunAvailabilityCheck(webProxy) > 0)
|
||||
{
|
||||
return webProxy;
|
||||
}
|
||||
return valid_lines;
|
||||
}
|
||||
|
||||
#endregion
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
121
v2rayN/v2rayN/Handler/LazyConfig.cs
Normal file
121
v2rayN/v2rayN/Handler/LazyConfig.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using v2rayN.Mode;
|
||||
using System.Linq;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
public sealed class LazyConfig
|
||||
{
|
||||
private static readonly Lazy<LazyConfig> _instance = new Lazy<LazyConfig>(() => new LazyConfig());
|
||||
private Config _config;
|
||||
private List<CoreInfo> coreInfos;
|
||||
|
||||
public static LazyConfig Instance
|
||||
{
|
||||
get { return _instance.Value; }
|
||||
}
|
||||
public void SetConfig(ref Config config)
|
||||
{
|
||||
_config = config;
|
||||
}
|
||||
public Config GetConfig()
|
||||
{
|
||||
return _config;
|
||||
}
|
||||
|
||||
public List<string> GetShadowsocksSecuritys()
|
||||
{
|
||||
if (GetCoreType(null, EConfigType.Shadowsocks) == ECoreType.v2fly)
|
||||
{
|
||||
return Global.ssSecuritys;
|
||||
}
|
||||
|
||||
return Global.ssSecuritysInXray;
|
||||
}
|
||||
|
||||
public ECoreType GetCoreType(VmessItem vmessItem, EConfigType eConfigType)
|
||||
{
|
||||
if (vmessItem != null && vmessItem.coreType != null)
|
||||
{
|
||||
return (ECoreType)vmessItem.coreType;
|
||||
}
|
||||
|
||||
if (_config.coreTypeItem == null)
|
||||
{
|
||||
return ECoreType.Xray;
|
||||
}
|
||||
var item = _config.coreTypeItem.FirstOrDefault(it => it.configType == eConfigType);
|
||||
if (item == null)
|
||||
{
|
||||
return ECoreType.Xray;
|
||||
}
|
||||
return item.coreType;
|
||||
}
|
||||
|
||||
public CoreInfo GetCoreInfo(ECoreType coreType)
|
||||
{
|
||||
if (coreInfos == null)
|
||||
{
|
||||
InitCoreInfo();
|
||||
}
|
||||
return coreInfos.Where(t => t.coreType == coreType).FirstOrDefault();
|
||||
}
|
||||
|
||||
private void InitCoreInfo()
|
||||
{
|
||||
coreInfos = new List<CoreInfo>();
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.v2fly,
|
||||
coreExes = new List<string> { "wv2ray", "v2ray" },
|
||||
arguments = "",
|
||||
coreUrl = Global.v2flyCoreUrl,
|
||||
match = "V2Ray"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.Xray,
|
||||
coreExes = new List<string> { "xray" },
|
||||
arguments = "",
|
||||
coreUrl = Global.xrayCoreUrl,
|
||||
match = "Xray"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.clash,
|
||||
coreExes = new List<string> { "clash-windows-amd64-v3", "clash-windows-amd64", "clash-windows-386", "clash" },
|
||||
arguments = "-f config.json",
|
||||
coreUrl = Global.clashCoreUrl
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.clash_meta,
|
||||
coreExes = new List<string> { "Clash.Meta-windows-amd64v1", "Clash.Meta-windows-amd64", "Clash.Meta-windows-386", "Clash.Meta", "clash" },
|
||||
arguments = "-f config.json",
|
||||
coreUrl = Global.clashMetaCoreUrl
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.hysteria,
|
||||
coreExes = new List<string> { "hysteria-tun-windows-6.0-amd64", "hysteria-tun-windows-6.0-386", "hysteria" },
|
||||
arguments = "",
|
||||
coreUrl = Global.hysteriaCoreUrl
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.naiveproxy,
|
||||
coreExes = new List<string> { "naiveproxy", "naive" },
|
||||
arguments = "config.json",
|
||||
coreUrl = Global.naiveproxyCoreUrl
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,22 @@
|
||||
using System;
|
||||
using NHotkey;
|
||||
using NHotkey.WindowsForms;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Mode;
|
||||
using System.Linq;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class MainFormHandler
|
||||
public sealed class MainFormHandler
|
||||
{
|
||||
private static MainFormHandler instance;
|
||||
private static readonly Lazy<MainFormHandler> instance = new Lazy<MainFormHandler>(() => new MainFormHandler());
|
||||
//Action<bool, string> _updateUI;
|
||||
|
||||
//private DownloadHandle downloadHandle2;
|
||||
//private Config _config;
|
||||
@@ -17,26 +26,65 @@ namespace v2rayN.Handler
|
||||
//Action<int, string> _updateFunc;
|
||||
public static MainFormHandler Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = new MainFormHandler();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
get { return instance.Value; }
|
||||
}
|
||||
|
||||
public Icon GetNotifyIcon(Config config, Icon def)
|
||||
{
|
||||
try
|
||||
{
|
||||
int index = (int)config.sysProxyType;
|
||||
|
||||
//Load from routing setting
|
||||
var createdIcon = GetNotifyIcon4Routing(config);
|
||||
if (createdIcon != null)
|
||||
{
|
||||
return createdIcon;
|
||||
}
|
||||
|
||||
//Load from local file
|
||||
var fileName = Utils.GetPath($"NotifyIcon{index + 1}.ico");
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
return new Icon(fileName);
|
||||
}
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return Properties.Resources.NotifyIcon1;
|
||||
case 1:
|
||||
return Properties.Resources.NotifyIcon2;
|
||||
case 2:
|
||||
return Properties.Resources.NotifyIcon3;
|
||||
}
|
||||
|
||||
return Properties.Resources.NotifyIcon1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return def;
|
||||
}
|
||||
}
|
||||
private Icon GetNotifyIcon4Routing(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!config.enableRoutingAdvanced)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var item = config.routings[config.routingIndex];
|
||||
if (Utils.IsNullOrEmpty(item.customIcon) || !File.Exists(item.customIcon))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
Color color = ColorTranslator.FromHtml("#3399CC");
|
||||
int index = (int)config.listenerType;
|
||||
int index = (int)config.sysProxyType;
|
||||
if (index > 0)
|
||||
{
|
||||
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
||||
//color = ColorTranslator.FromHtml(new string[] { "#CC0066", "#CC6600", "#99CC99", "#666699" }[index - 1]);
|
||||
}
|
||||
|
||||
int width = 128;
|
||||
@@ -46,10 +94,8 @@ namespace v2rayN.Handler
|
||||
Graphics graphics = Graphics.FromImage(bitmap);
|
||||
SolidBrush drawBrush = new SolidBrush(color);
|
||||
|
||||
graphics.FillEllipse(drawBrush, new Rectangle(0, 0, width, height));
|
||||
int zoom = 16;
|
||||
graphics.DrawImage(new Bitmap(Properties.Resources.notify, width - zoom, width - zoom), zoom / 2, zoom / 2);
|
||||
|
||||
graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height));
|
||||
graphics.DrawImage(new Bitmap(item.customIcon), 0, 0, width, height);
|
||||
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
|
||||
|
||||
drawBrush.Dispose();
|
||||
@@ -61,20 +107,20 @@ namespace v2rayN.Handler
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return def;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Export2ClientConfig(int index, Config config)
|
||||
public void Export2ClientConfig(VmessItem item, Config config)
|
||||
{
|
||||
//int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
if (item == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (config.vmess[index].configType != (int)EConfigType.Vmess)
|
||||
if (item.configType != EConfigType.Vmess
|
||||
&& item.configType != EConfigType.VLESS)
|
||||
{
|
||||
UI.Show(UIRes.I18N("NonVmessService"));
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -93,28 +139,28 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return;
|
||||
}
|
||||
Config configCopy = Utils.DeepCopy(config);
|
||||
configCopy.index = index;
|
||||
if (V2rayConfigHandler.Export2ClientConfig(configCopy, fileName, out string msg) != 0)
|
||||
//Config configCopy = Utils.DeepCopy(config);
|
||||
//configCopy.index = index;
|
||||
if (V2rayConfigHandler.Export2ClientConfig(item, fileName, out string msg) != 0)
|
||||
{
|
||||
UI.Show(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(string.Format(UIRes.I18N("SaveClientConfigurationIn"), fileName));
|
||||
UI.ShowWarning(string.Format(ResUI.SaveClientConfigurationIn, fileName));
|
||||
}
|
||||
}
|
||||
|
||||
public void Export2ServerConfig(int index, Config config)
|
||||
public void Export2ServerConfig(VmessItem item, Config config)
|
||||
{
|
||||
//int index = GetLvSelectedIndex();
|
||||
if (index < 0)
|
||||
if (item == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (config.vmess[index].configType != (int)EConfigType.Vmess)
|
||||
if (item.configType != EConfigType.Vmess
|
||||
&& item.configType != EConfigType.VLESS)
|
||||
{
|
||||
UI.Show(UIRes.I18N("NonVmessService"));
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -133,18 +179,159 @@ namespace v2rayN.Handler
|
||||
{
|
||||
return;
|
||||
}
|
||||
Config configCopy = Utils.DeepCopy(config);
|
||||
configCopy.index = index;
|
||||
if (V2rayConfigHandler.Export2ServerConfig(configCopy, fileName, out string msg) != 0)
|
||||
//Config configCopy = Utils.DeepCopy(config);
|
||||
//configCopy.index = index;
|
||||
if (V2rayConfigHandler.Export2ServerConfig(item, fileName, out string msg) != 0)
|
||||
{
|
||||
UI.Show(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(string.Format(UIRes.I18N("SaveServerConfigurationIn"), fileName));
|
||||
UI.ShowWarning(string.Format(ResUI.SaveServerConfigurationIn, fileName));
|
||||
}
|
||||
}
|
||||
|
||||
public void BackupGuiNConfig(Config config, bool auto = false)
|
||||
{
|
||||
string fileName = $"guiNConfig_{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_fff")}.json";
|
||||
if (auto)
|
||||
{
|
||||
fileName = Utils.GetBackupPath(fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveFileDialog fileDialog = new SaveFileDialog
|
||||
{
|
||||
FileName = fileName,
|
||||
Filter = "guiNConfig|*.json",
|
||||
FilterIndex = 2,
|
||||
RestoreDirectory = true
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
fileName = fileDialog.FileName;
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
var ret = Utils.ToJsonFile(config, fileName);
|
||||
if (!auto)
|
||||
{
|
||||
if (ret == 0)
|
||||
{
|
||||
|
||||
UI.Show(ResUI.OperationSuccess);
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateTask(Config config, Action<bool, string> update)
|
||||
{
|
||||
Task.Run(() => UpdateTaskRun(config, update));
|
||||
}
|
||||
|
||||
private void UpdateTaskRun(Config config, Action<bool, string> update)
|
||||
{
|
||||
var autoUpdateSubTime = DateTime.Now;
|
||||
var autoUpdateGeoTime = DateTime.Now;
|
||||
|
||||
Thread.Sleep(60000);
|
||||
Utils.SaveLog("UpdateTaskRun");
|
||||
|
||||
var updateHandle = new UpdateHandle();
|
||||
while (true)
|
||||
{
|
||||
var dtNow = DateTime.Now;
|
||||
|
||||
if (config.autoUpdateSubInterval > 0)
|
||||
{
|
||||
if ((dtNow - autoUpdateSubTime).Hours % config.autoUpdateSubInterval == 0)
|
||||
{
|
||||
updateHandle.UpdateSubscriptionProcess(config, true, (bool success, string msg) =>
|
||||
{
|
||||
update(success, msg);
|
||||
if (success)
|
||||
Utils.SaveLog("subscription" + msg);
|
||||
});
|
||||
autoUpdateSubTime = dtNow;
|
||||
}
|
||||
Thread.Sleep(60000);
|
||||
}
|
||||
|
||||
if (config.autoUpdateInterval > 0)
|
||||
{
|
||||
if ((dtNow - autoUpdateGeoTime).Hours % config.autoUpdateInterval == 0)
|
||||
{
|
||||
updateHandle.UpdateGeoFile("geosite", config, (bool success, string msg) =>
|
||||
{
|
||||
update(false, msg);
|
||||
if (success)
|
||||
Utils.SaveLog("geosite" + msg);
|
||||
});
|
||||
|
||||
updateHandle.UpdateGeoFile("geoip", config, (bool success, string msg) =>
|
||||
{
|
||||
update(false, msg);
|
||||
if (success)
|
||||
Utils.SaveLog("geoip" + msg);
|
||||
});
|
||||
autoUpdateGeoTime = dtNow;
|
||||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(1000 * 3600);
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterGlobalHotkey(Config config, EventHandler<HotkeyEventArgs> handler, Action<bool, string> update)
|
||||
{
|
||||
if (config.globalHotkeys == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var item in config.globalHotkeys)
|
||||
{
|
||||
if (item.KeyCode == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Keys keys = (Keys)item.KeyCode;
|
||||
if (item.Control)
|
||||
{
|
||||
keys |= Keys.Control;
|
||||
}
|
||||
if (item.Alt)
|
||||
{
|
||||
keys |= Keys.Alt;
|
||||
}
|
||||
if (item.Shift)
|
||||
{
|
||||
keys |= Keys.Shift;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
HotkeyManager.Current.AddOrReplace(((int)item.eGlobalHotkey).ToString(), keys, handler);
|
||||
var msg = string.Format(ResUI.RegisterGlobalHotkeySuccessfully, $"{item.eGlobalHotkey.ToString()} = {keys}");
|
||||
update(false, msg);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var msg = string.Format(ResUI.RegisterGlobalHotkeyFailed, $"{item.eGlobalHotkey.ToString()} = {keys}", ex.Message);
|
||||
update(false, msg);
|
||||
Utils.SaveLog(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class ProxySetting
|
||||
{
|
||||
823
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
823
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
@@ -0,0 +1,823 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class ShareHandler
|
||||
{
|
||||
|
||||
#region GetShareUrl
|
||||
|
||||
/// <summary>
|
||||
/// GetShareUrl
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetShareUrl(VmessItem item)
|
||||
{
|
||||
try
|
||||
{
|
||||
string url = string.Empty;
|
||||
|
||||
switch (item.configType)
|
||||
{
|
||||
case EConfigType.Vmess:
|
||||
url = ShareVmess(item);
|
||||
break;
|
||||
case EConfigType.Shadowsocks:
|
||||
url = ShareShadowsocks(item);
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
url = ShareSocks(item);
|
||||
break;
|
||||
case EConfigType.Trojan:
|
||||
url = ShareTrojan(item);
|
||||
break;
|
||||
case EConfigType.VLESS:
|
||||
url = ShareVLESS(item);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private static string ShareVmess(VmessItem item)
|
||||
{
|
||||
string url = string.Empty;
|
||||
|
||||
VmessQRCode vmessQRCode = new VmessQRCode
|
||||
{
|
||||
v = item.configVersion.ToString(),
|
||||
ps = item.remarks.TrimEx(), //备注也许很长 ;
|
||||
add = item.address,
|
||||
port = item.port.ToString(),
|
||||
id = item.id,
|
||||
aid = item.alterId.ToString(),
|
||||
scy = item.security,
|
||||
net = item.network,
|
||||
type = item.headerType,
|
||||
host = item.requestHost,
|
||||
path = item.path,
|
||||
tls = item.streamSecurity,
|
||||
sni = item.sni,
|
||||
alpn = Utils.List2String(item.alpn)
|
||||
};
|
||||
|
||||
url = Utils.ToJson(vmessQRCode);
|
||||
url = Utils.Base64Encode(url);
|
||||
url = string.Format("{0}{1}", Global.vmessProtocol, url);
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
private static string ShareShadowsocks(VmessItem item)
|
||||
{
|
||||
string url = string.Empty;
|
||||
|
||||
string remark = string.Empty;
|
||||
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||
{
|
||||
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||
}
|
||||
//url = string.Format("{0}:{1}@{2}:{3}",
|
||||
// item.security,
|
||||
// item.id,
|
||||
// item.address,
|
||||
// item.port);
|
||||
//url = Utils.Base64Encode(url);
|
||||
//new Sip002
|
||||
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
|
||||
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
|
||||
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
|
||||
return url;
|
||||
}
|
||||
|
||||
private static string ShareSocks(VmessItem item)
|
||||
{
|
||||
string url = string.Empty;
|
||||
string remark = string.Empty;
|
||||
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||
{
|
||||
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||
}
|
||||
//url = string.Format("{0}:{1}@{2}:{3}",
|
||||
// item.security,
|
||||
// item.id,
|
||||
// item.address,
|
||||
// item.port);
|
||||
//url = Utils.Base64Encode(url);
|
||||
//new
|
||||
var pw = Utils.Base64Encode($"{item.security}:{item.id}");
|
||||
url = $"{pw}@{GetIpv6(item.address)}:{ item.port}";
|
||||
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
|
||||
return url;
|
||||
}
|
||||
|
||||
private static string ShareTrojan(VmessItem item)
|
||||
{
|
||||
string url = string.Empty;
|
||||
string remark = string.Empty;
|
||||
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||
{
|
||||
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||
}
|
||||
var dicQuery = new Dictionary<string, string>();
|
||||
GetStdTransport(item, null, ref dicQuery);
|
||||
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
|
||||
|
||||
url = string.Format("{0}@{1}:{2}",
|
||||
item.id,
|
||||
GetIpv6(item.address),
|
||||
item.port);
|
||||
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
|
||||
return url;
|
||||
}
|
||||
|
||||
private static string ShareVLESS(VmessItem item)
|
||||
{
|
||||
string url = string.Empty;
|
||||
string remark = string.Empty;
|
||||
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||
{
|
||||
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||
}
|
||||
var dicQuery = new Dictionary<string, string>();
|
||||
if (!Utils.IsNullOrEmpty(item.security))
|
||||
{
|
||||
dicQuery.Add("encryption", item.security);
|
||||
}
|
||||
else
|
||||
{
|
||||
dicQuery.Add("encryption", "none");
|
||||
}
|
||||
GetStdTransport(item, "none", ref dicQuery);
|
||||
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
|
||||
|
||||
url = string.Format("{0}@{1}:{2}",
|
||||
item.id,
|
||||
GetIpv6(item.address),
|
||||
item.port);
|
||||
url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark);
|
||||
return url;
|
||||
}
|
||||
private static string GetIpv6(string address)
|
||||
{
|
||||
return Utils.IsIpv6(address) ? $"[{address}]" : address;
|
||||
}
|
||||
|
||||
private static int GetStdTransport(VmessItem item, string securityDef, ref Dictionary<string, string> dicQuery)
|
||||
{
|
||||
if (!Utils.IsNullOrEmpty(item.flow))
|
||||
{
|
||||
dicQuery.Add("flow", item.flow);
|
||||
}
|
||||
|
||||
if (!Utils.IsNullOrEmpty(item.streamSecurity))
|
||||
{
|
||||
dicQuery.Add("security", item.streamSecurity);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (securityDef != null)
|
||||
{
|
||||
dicQuery.Add("security", securityDef);
|
||||
}
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.sni))
|
||||
{
|
||||
dicQuery.Add("sni", item.sni);
|
||||
}
|
||||
if (item.alpn != null && item.alpn.Count > 0)
|
||||
{
|
||||
dicQuery.Add("alpn", Utils.UrlEncode(Utils.List2String(item.alpn)));
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.network))
|
||||
{
|
||||
dicQuery.Add("type", item.network);
|
||||
}
|
||||
else
|
||||
{
|
||||
dicQuery.Add("type", "tcp");
|
||||
}
|
||||
|
||||
switch (item.network)
|
||||
{
|
||||
case "tcp":
|
||||
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||
{
|
||||
dicQuery.Add("headerType", item.headerType);
|
||||
}
|
||||
else
|
||||
{
|
||||
dicQuery.Add("headerType", "none");
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||
{
|
||||
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||
}
|
||||
break;
|
||||
case "kcp":
|
||||
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||
{
|
||||
dicQuery.Add("headerType", item.headerType);
|
||||
}
|
||||
else
|
||||
{
|
||||
dicQuery.Add("headerType", "none");
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.path))
|
||||
{
|
||||
dicQuery.Add("seed", Utils.UrlEncode(item.path));
|
||||
}
|
||||
break;
|
||||
|
||||
case "ws":
|
||||
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||
{
|
||||
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.path))
|
||||
{
|
||||
dicQuery.Add("path", Utils.UrlEncode(item.path));
|
||||
}
|
||||
break;
|
||||
|
||||
case "http":
|
||||
case "h2":
|
||||
dicQuery["type"] = "http";
|
||||
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||
{
|
||||
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(item.path))
|
||||
{
|
||||
dicQuery.Add("path", Utils.UrlEncode(item.path));
|
||||
}
|
||||
break;
|
||||
|
||||
case "quic":
|
||||
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||
{
|
||||
dicQuery.Add("headerType", item.headerType);
|
||||
}
|
||||
else
|
||||
{
|
||||
dicQuery.Add("headerType", "none");
|
||||
}
|
||||
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
|
||||
dicQuery.Add("key", Utils.UrlEncode(item.path));
|
||||
break;
|
||||
case "grpc":
|
||||
if (!Utils.IsNullOrEmpty(item.path))
|
||||
{
|
||||
dicQuery.Add("serviceName", Utils.UrlEncode(item.path));
|
||||
if (item.headerType == Global.GrpcgunMode || item.headerType == Global.GrpcmultiMode)
|
||||
{
|
||||
dicQuery.Add("mode", Utils.UrlEncode(item.headerType));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ImportShareUrl
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 从剪贴板导入URL
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
public static VmessItem ImportFromClipboardConfig(string clipboardData, out string msg)
|
||||
{
|
||||
msg = string.Empty;
|
||||
VmessItem vmessItem = new VmessItem();
|
||||
|
||||
try
|
||||
{
|
||||
//载入配置文件
|
||||
string result = clipboardData.TrimEx();// Utils.GetClipboardData();
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
msg = ResUI.FailedReadConfiguration;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (result.StartsWith(Global.vmessProtocol))
|
||||
{
|
||||
int indexSplit = result.IndexOf("?");
|
||||
if (indexSplit > 0)
|
||||
{
|
||||
vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = ResolveVmess(result, out msg);
|
||||
}
|
||||
|
||||
ConfigHandler.UpgradeServerVersion(ref vmessItem);
|
||||
}
|
||||
else if (result.StartsWith(Global.ssProtocol))
|
||||
{
|
||||
msg = ResUI.ConfigurationFormatIncorrect;
|
||||
|
||||
vmessItem = ResolveSSLegacy(result);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
vmessItem = ResolveSip002(result);
|
||||
}
|
||||
if (vmessItem == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
vmessItem.configType = EConfigType.Shadowsocks;
|
||||
}
|
||||
else if (result.StartsWith(Global.socksProtocol))
|
||||
{
|
||||
msg = ResUI.ConfigurationFormatIncorrect;
|
||||
|
||||
vmessItem = ResolveSocksNew(result);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
vmessItem = ResolveSocks(result);
|
||||
}
|
||||
if (vmessItem == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (vmessItem.address.Length == 0 || vmessItem.port == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
vmessItem.configType = EConfigType.Socks;
|
||||
}
|
||||
else if (result.StartsWith(Global.trojanProtocol))
|
||||
{
|
||||
msg = ResUI.ConfigurationFormatIncorrect;
|
||||
|
||||
vmessItem = ResolveTrojan(result);
|
||||
}
|
||||
else if (result.StartsWith(Global.vlessProtocol))
|
||||
{
|
||||
vmessItem = ResolveStdVLESS(result);
|
||||
|
||||
ConfigHandler.UpgradeServerVersion(ref vmessItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = ResUI.NonvmessOrssProtocol;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
msg = ResUI.Incorrectconfiguration;
|
||||
return null;
|
||||
}
|
||||
|
||||
return vmessItem;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveVmess(string result, out string msg)
|
||||
{
|
||||
msg = string.Empty;
|
||||
VmessItem vmessItem = new VmessItem();
|
||||
|
||||
vmessItem.configType = EConfigType.Vmess;
|
||||
result = result.Substring(Global.vmessProtocol.Length);
|
||||
result = Utils.Base64Decode(result);
|
||||
|
||||
//转成Json
|
||||
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
|
||||
if (vmessQRCode == null)
|
||||
{
|
||||
msg = ResUI.FailedConversionConfiguration;
|
||||
return null;
|
||||
}
|
||||
|
||||
vmessItem.network = Global.DefaultNetwork;
|
||||
vmessItem.headerType = Global.None;
|
||||
|
||||
vmessItem.configVersion = Utils.ToInt(vmessQRCode.v);
|
||||
vmessItem.remarks = Utils.ToString(vmessQRCode.ps);
|
||||
vmessItem.address = Utils.ToString(vmessQRCode.add);
|
||||
vmessItem.port = Utils.ToInt(vmessQRCode.port);
|
||||
vmessItem.id = Utils.ToString(vmessQRCode.id);
|
||||
vmessItem.alterId = Utils.ToInt(vmessQRCode.aid);
|
||||
vmessItem.security = Utils.ToString(vmessQRCode.scy);
|
||||
|
||||
if (!Utils.IsNullOrEmpty(vmessQRCode.scy))
|
||||
{
|
||||
vmessItem.security = vmessQRCode.scy;
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem.security = Global.DefaultSecurity;
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(vmessQRCode.net))
|
||||
{
|
||||
vmessItem.network = vmessQRCode.net;
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(vmessQRCode.type))
|
||||
{
|
||||
vmessItem.headerType = vmessQRCode.type;
|
||||
}
|
||||
|
||||
vmessItem.requestHost = Utils.ToString(vmessQRCode.host);
|
||||
vmessItem.path = Utils.ToString(vmessQRCode.path);
|
||||
vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls);
|
||||
vmessItem.sni = Utils.ToString(vmessQRCode.sni);
|
||||
vmessItem.alpn = Utils.String2List(vmessQRCode.alpn);
|
||||
|
||||
return vmessItem;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveVmess4Kitsunebi(string result)
|
||||
{
|
||||
VmessItem vmessItem = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Vmess
|
||||
};
|
||||
result = result.Substring(Global.vmessProtocol.Length);
|
||||
int indexSplit = result.IndexOf("?");
|
||||
if (indexSplit > 0)
|
||||
{
|
||||
result = result.Substring(0, indexSplit);
|
||||
}
|
||||
result = Utils.Base64Decode(result);
|
||||
|
||||
string[] arr1 = result.Split('@');
|
||||
if (arr1.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
string[] arr21 = arr1[0].Split(':');
|
||||
string[] arr22 = arr1[1].Split(':');
|
||||
if (arr21.Length != 2 || arr21.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
vmessItem.address = arr22[0];
|
||||
vmessItem.port = Utils.ToInt(arr22[1]);
|
||||
vmessItem.security = arr21[0];
|
||||
vmessItem.id = arr21[1];
|
||||
|
||||
vmessItem.network = Global.DefaultNetwork;
|
||||
vmessItem.headerType = Global.None;
|
||||
vmessItem.remarks = "Alien";
|
||||
|
||||
return vmessItem;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveStdVmess(string result)
|
||||
{
|
||||
VmessItem i = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Vmess,
|
||||
security = "auto"
|
||||
};
|
||||
|
||||
Uri u = new Uri(result);
|
||||
|
||||
i.address = u.IdnHost;
|
||||
i.port = u.Port;
|
||||
i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||
var q = HttpUtility.ParseQueryString(u.Query);
|
||||
|
||||
var m = StdVmessUserInfo.Match(u.UserInfo);
|
||||
if (!m.Success) return null;
|
||||
|
||||
i.id = m.Groups["id"].Value;
|
||||
|
||||
if (m.Groups["streamSecurity"].Success)
|
||||
{
|
||||
i.streamSecurity = m.Groups["streamSecurity"].Value;
|
||||
}
|
||||
switch (i.streamSecurity)
|
||||
{
|
||||
case "tls":
|
||||
// TODO tls config
|
||||
break;
|
||||
default:
|
||||
if (!string.IsNullOrWhiteSpace(i.streamSecurity))
|
||||
return null;
|
||||
break;
|
||||
}
|
||||
|
||||
i.network = m.Groups["network"].Value;
|
||||
switch (i.network)
|
||||
{
|
||||
case "tcp":
|
||||
string t1 = q["type"] ?? "none";
|
||||
i.headerType = t1;
|
||||
// TODO http option
|
||||
|
||||
break;
|
||||
case "kcp":
|
||||
i.headerType = q["type"] ?? "none";
|
||||
// TODO kcp seed
|
||||
break;
|
||||
|
||||
case "ws":
|
||||
string p1 = q["path"] ?? "/";
|
||||
string h1 = q["host"] ?? "";
|
||||
i.requestHost = Utils.UrlDecode(h1);
|
||||
i.path = p1;
|
||||
break;
|
||||
|
||||
case "http":
|
||||
case "h2":
|
||||
i.network = "h2";
|
||||
string p2 = q["path"] ?? "/";
|
||||
string h2 = q["host"] ?? "";
|
||||
i.requestHost = Utils.UrlDecode(h2);
|
||||
i.path = p2;
|
||||
break;
|
||||
|
||||
case "quic":
|
||||
string s = q["security"] ?? "none";
|
||||
string k = q["key"] ?? "";
|
||||
string t3 = q["type"] ?? "none";
|
||||
i.headerType = t3;
|
||||
i.requestHost = Utils.UrlDecode(s);
|
||||
i.path = k;
|
||||
break;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveSip002(string result)
|
||||
{
|
||||
Uri parsedUrl;
|
||||
try
|
||||
{
|
||||
parsedUrl = new Uri(result);
|
||||
}
|
||||
catch (UriFormatException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
VmessItem server = new VmessItem
|
||||
{
|
||||
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||
address = parsedUrl.IdnHost,
|
||||
port = parsedUrl.Port,
|
||||
};
|
||||
|
||||
// parse base64 UserInfo
|
||||
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.UriEscaped);
|
||||
string userInfo = Utils.Base64Decode(rawUserInfo);
|
||||
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
||||
if (userInfoParts.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
server.security = userInfoParts[0];
|
||||
server.id = userInfoParts[1];
|
||||
|
||||
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
|
||||
if (queryParameters["plugin"] != null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
private static readonly Regex UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase);
|
||||
private static readonly Regex DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase);
|
||||
|
||||
private static VmessItem ResolveSSLegacy(string result)
|
||||
{
|
||||
var match = UrlFinder.Match(result);
|
||||
if (!match.Success)
|
||||
return null;
|
||||
|
||||
VmessItem server = new VmessItem();
|
||||
var base64 = match.Groups["base64"].Value.TrimEnd('/');
|
||||
var tag = match.Groups["tag"].Value;
|
||||
if (!Utils.IsNullOrEmpty(tag))
|
||||
{
|
||||
server.remarks = Utils.UrlDecode(tag);
|
||||
}
|
||||
Match details;
|
||||
try
|
||||
{
|
||||
details = DetailsParser.Match(Utils.Base64Decode(base64));
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (!details.Success)
|
||||
return null;
|
||||
server.security = details.Groups["method"].Value;
|
||||
server.id = details.Groups["password"].Value;
|
||||
server.address = details.Groups["hostname"].Value;
|
||||
server.port = int.Parse(details.Groups["port"].Value);
|
||||
return server;
|
||||
}
|
||||
|
||||
|
||||
private static readonly Regex StdVmessUserInfo = new Regex(
|
||||
@"^(?<network>[a-z]+)(\+(?<streamSecurity>[a-z]+))?:(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$");
|
||||
|
||||
private static VmessItem ResolveSocks(string result)
|
||||
{
|
||||
VmessItem vmessItem = new VmessItem();
|
||||
vmessItem.configType = EConfigType.Socks;
|
||||
result = result.Substring(Global.socksProtocol.Length);
|
||||
//remark
|
||||
int indexRemark = result.IndexOf("#");
|
||||
if (indexRemark > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
vmessItem.remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1));
|
||||
}
|
||||
catch { }
|
||||
result = result.Substring(0, indexRemark);
|
||||
}
|
||||
//part decode
|
||||
int indexS = result.IndexOf("@");
|
||||
if (indexS > 0)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
result = Utils.Base64Decode(result);
|
||||
}
|
||||
|
||||
string[] arr1 = result.Split('@');
|
||||
if (arr1.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
string[] arr21 = arr1[0].Split(':');
|
||||
//string[] arr22 = arr1[1].Split(':');
|
||||
int indexPort = arr1[1].LastIndexOf(":");
|
||||
if (arr21.Length != 2 || indexPort < 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
vmessItem.address = arr1[1].Substring(0, indexPort);
|
||||
vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1)));
|
||||
vmessItem.security = arr21[0];
|
||||
vmessItem.id = arr21[1];
|
||||
|
||||
return vmessItem;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveSocksNew(string result)
|
||||
{
|
||||
Uri parsedUrl;
|
||||
try
|
||||
{
|
||||
parsedUrl = new Uri(result);
|
||||
}
|
||||
catch (UriFormatException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
VmessItem server = new VmessItem
|
||||
{
|
||||
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||
address = parsedUrl.IdnHost,
|
||||
port = parsedUrl.Port,
|
||||
};
|
||||
|
||||
// parse base64 UserInfo
|
||||
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
|
||||
string userInfo = Utils.Base64Decode(rawUserInfo);
|
||||
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
||||
if (userInfoParts.Length == 2)
|
||||
{
|
||||
server.security = userInfoParts[0];
|
||||
server.id = userInfoParts[1];
|
||||
}
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveTrojan(string result)
|
||||
{
|
||||
VmessItem item = new VmessItem
|
||||
{
|
||||
configType = EConfigType.Trojan
|
||||
};
|
||||
|
||||
Uri url = new Uri(result);
|
||||
|
||||
item.address = url.IdnHost;
|
||||
item.port = url.Port;
|
||||
item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||
item.id = url.UserInfo;
|
||||
|
||||
var query = HttpUtility.ParseQueryString(url.Query);
|
||||
ResolveStdTransport(query, ref item);
|
||||
|
||||
return item;
|
||||
}
|
||||
private static VmessItem ResolveStdVLESS(string result)
|
||||
{
|
||||
VmessItem item = new VmessItem
|
||||
{
|
||||
configType = EConfigType.VLESS,
|
||||
security = "none"
|
||||
};
|
||||
|
||||
Uri url = new Uri(result);
|
||||
|
||||
item.address = url.IdnHost;
|
||||
item.port = url.Port;
|
||||
item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped);
|
||||
item.id = url.UserInfo;
|
||||
|
||||
var query = HttpUtility.ParseQueryString(url.Query);
|
||||
item.security = query["encryption"] ?? "none";
|
||||
item.streamSecurity = query["security"] ?? "";
|
||||
ResolveStdTransport(query, ref item);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
private static int ResolveStdTransport(NameValueCollection query, ref VmessItem item)
|
||||
{
|
||||
item.flow = query["flow"] ?? "";
|
||||
item.streamSecurity = query["security"] ?? "";
|
||||
item.sni = query["sni"] ?? "";
|
||||
item.alpn = Utils.String2List(Utils.UrlDecode(query["alpn"] ?? ""));
|
||||
item.network = query["type"] ?? "tcp";
|
||||
switch (item.network)
|
||||
{
|
||||
case "tcp":
|
||||
item.headerType = query["headerType"] ?? "none";
|
||||
item.requestHost = Utils.UrlDecode(query["host"] ?? "");
|
||||
|
||||
break;
|
||||
case "kcp":
|
||||
item.headerType = query["headerType"] ?? "none";
|
||||
item.path = Utils.UrlDecode(query["seed"] ?? "");
|
||||
break;
|
||||
|
||||
case "ws":
|
||||
item.requestHost = Utils.UrlDecode(query["host"] ?? "");
|
||||
item.path = Utils.UrlDecode(query["path"] ?? "/");
|
||||
break;
|
||||
|
||||
case "http":
|
||||
case "h2":
|
||||
item.network = "h2";
|
||||
item.requestHost = Utils.UrlDecode(query["host"] ?? "");
|
||||
item.path = Utils.UrlDecode(query["path"] ?? "/");
|
||||
break;
|
||||
|
||||
case "quic":
|
||||
item.headerType = query["headerType"] ?? "none";
|
||||
item.requestHost = query["quicSecurity"] ?? "none";
|
||||
item.path = Utils.UrlDecode(query["key"] ?? "");
|
||||
break;
|
||||
case "grpc":
|
||||
item.path = Utils.UrlDecode(query["serviceName"] ?? "");
|
||||
item.headerType = Utils.UrlDecode(query["mode"] ?? Global.GrpcgunMode);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -6,64 +6,72 @@ using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class SpeedtestHandler
|
||||
{
|
||||
private DownloadHandle downloadHandle2;
|
||||
private Config _config;
|
||||
private V2rayHandler _v2rayHandler;
|
||||
private List<int> _selecteds;
|
||||
Action<int, string> _updateFunc;
|
||||
private List<ServerTestItem> _selecteds;
|
||||
Action<string, string> _updateFunc;
|
||||
|
||||
private int testCounter = 0;
|
||||
private int ItemIndex
|
||||
public SpeedtestHandler(Config config)
|
||||
{
|
||||
get
|
||||
{
|
||||
return _selecteds[testCounter - 1];
|
||||
}
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public SpeedtestHandler(ref Config config, ref V2rayHandler v2rayHandler, List<int> selecteds, string actionType, Action<int, string> update)
|
||||
public SpeedtestHandler(Config config, V2rayHandler v2rayHandler, List<VmessItem> selecteds, ESpeedActionType actionType, Action<string, string> update)
|
||||
{
|
||||
_config = config;
|
||||
_v2rayHandler = v2rayHandler;
|
||||
_selecteds = selecteds;
|
||||
//_selecteds = Utils.DeepCopy(selecteds);
|
||||
_updateFunc = update;
|
||||
|
||||
if (actionType == "ping")
|
||||
_selecteds = new List<ServerTestItem>();
|
||||
foreach (var it in selecteds)
|
||||
{
|
||||
_selecteds.Add(new ServerTestItem()
|
||||
{
|
||||
indexId = it.indexId,
|
||||
address = it.address,
|
||||
port = it.port,
|
||||
configType = it.configType
|
||||
});
|
||||
}
|
||||
|
||||
if (actionType == ESpeedActionType.Ping)
|
||||
{
|
||||
Task.Run(() => RunPing());
|
||||
}
|
||||
if (actionType == "tcping")
|
||||
else if (actionType == ESpeedActionType.Tcping)
|
||||
{
|
||||
Task.Run(() => RunTcping());
|
||||
}
|
||||
else if (actionType == "realping")
|
||||
else if (actionType == ESpeedActionType.Realping)
|
||||
{
|
||||
Task.Run(() => RunRealPing());
|
||||
}
|
||||
else if (actionType == "speedtest")
|
||||
else if (actionType == ESpeedActionType.Speedtest)
|
||||
{
|
||||
Task.Run(() => RunSpeedTest());
|
||||
Task.Run(() => RunSpeedTestAsync());
|
||||
}
|
||||
}
|
||||
|
||||
private void RunPingSub(Action<int> updateFun)
|
||||
private void RunPingSub(Action<ServerTestItem> updateFun)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (int index in _selecteds)
|
||||
foreach (var it in _selecteds)
|
||||
{
|
||||
if (_config.vmess[index].configType == (int)EConfigType.Custom)
|
||||
if (it.configType == EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
try
|
||||
{
|
||||
updateFun(index);
|
||||
Task.Run(() => updateFun(it));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -82,19 +90,21 @@ namespace v2rayN.Handler
|
||||
|
||||
private void RunPing()
|
||||
{
|
||||
RunPingSub((int index) =>
|
||||
RunPingSub((ServerTestItem it) =>
|
||||
{
|
||||
long time = Utils.Ping(_config.vmess[index].address);
|
||||
_updateFunc(index, string.Format("{0}ms", time));
|
||||
long time = Utils.Ping(it.address);
|
||||
|
||||
_updateFunc(it.indexId, FormatOut(time, "ms"));
|
||||
});
|
||||
}
|
||||
|
||||
private void RunTcping()
|
||||
{
|
||||
RunPingSub((int index) =>
|
||||
RunPingSub((ServerTestItem it) =>
|
||||
{
|
||||
int time = GetTcpingTime(_config.vmess[index].address, _config.vmess[index].port);
|
||||
_updateFunc(index, string.Format("{0}ms", time));
|
||||
int time = GetTcpingTime(it.address, it.port);
|
||||
|
||||
_updateFunc(it.indexId, FormatOut(time, "ms"));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -106,13 +116,22 @@ namespace v2rayN.Handler
|
||||
string msg = string.Empty;
|
||||
|
||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||
|
||||
//Thread.Sleep(5000);
|
||||
int httpPort = _config.GetLocalPort("speedtest");
|
||||
List<Task> tasks = new List<Task>();
|
||||
foreach (int itemIndex in _selecteds)
|
||||
if (pid < 0)
|
||||
{
|
||||
if (_config.vmess[itemIndex].configType == (int)EConfigType.Custom)
|
||||
_updateFunc(_selecteds[0].indexId, ResUI.OperationFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
DownloadHandle downloadHandle = new DownloadHandle();
|
||||
//Thread.Sleep(5000);
|
||||
List<Task> tasks = new List<Task>();
|
||||
foreach (var it in _selecteds)
|
||||
{
|
||||
if (!it.allowTest)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (it.configType == EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -120,11 +139,13 @@ namespace v2rayN.Handler
|
||||
{
|
||||
try
|
||||
{
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex);
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||
int responseTime = -1;
|
||||
string status = GetRealPingTime(_config.speedPingTestUrl, webProxy, out responseTime);
|
||||
string output = Utils.IsNullOrEmpty(status) ? string.Format("{0}ms", responseTime) : string.Format("{0}", status);
|
||||
_updateFunc(itemIndex, output);
|
||||
string status = downloadHandle.GetRealPingTime(_config.constItem.speedPingTestUrl, webProxy, out responseTime);
|
||||
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
|
||||
|
||||
_config.GetVmessItem(it.indexId)?.SetTestResult(output);
|
||||
_updateFunc(it.indexId, output);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -145,82 +166,49 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
public int RunAvailabilityCheck() // alias: isLive
|
||||
{
|
||||
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.AvailabilityTestUrl, 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()
|
||||
private async Task RunSpeedTestAsync()
|
||||
{
|
||||
string testIndexId = string.Empty;
|
||||
int pid = -1;
|
||||
|
||||
if (_config.vmess.Count <= 0)
|
||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||
if (pid < 0)
|
||||
{
|
||||
_updateFunc(_selecteds[0].indexId, ResUI.OperationFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||
|
||||
string url = _config.speedTestUrl;
|
||||
testCounter = 0;
|
||||
if (downloadHandle2 == null)
|
||||
string url = _config.constItem.speedTestUrl;
|
||||
DownloadHandle downloadHandle2 = new DownloadHandle();
|
||||
downloadHandle2.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
downloadHandle2 = new DownloadHandle();
|
||||
downloadHandle2.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(ItemIndex, args.Msg);
|
||||
if (args.Success) StartNext();
|
||||
};
|
||||
downloadHandle2.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(ItemIndex, args.GetException().Message);
|
||||
StartNext();
|
||||
};
|
||||
}
|
||||
|
||||
StartNext();
|
||||
|
||||
void StartNext()
|
||||
_config.GetVmessItem(testIndexId)?.SetTestResult(args.Msg);
|
||||
_updateFunc(testIndexId, args.Msg);
|
||||
};
|
||||
downloadHandle2.Error += (sender2, args) =>
|
||||
{
|
||||
if (testCounter >= _selecteds.Count)
|
||||
_updateFunc(testIndexId, args.GetException().Message);
|
||||
};
|
||||
|
||||
var timeout = 8;
|
||||
foreach (var it in _selecteds)
|
||||
{
|
||||
if (!it.allowTest)
|
||||
{
|
||||
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
if (it.configType == EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
testIndexId = it.indexId;
|
||||
if (_config.FindIndexId(it.indexId) < 0) continue;
|
||||
|
||||
int httpPort = _config.GetLocalPort("speedtest");
|
||||
int index = _selecteds[testCounter];
|
||||
|
||||
testCounter++;
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + index);
|
||||
downloadHandle2.DownloadFileAsync(url, webProxy, 20);
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||
await downloadHandle2.DownloadDataAsync(url, webProxy, timeout);
|
||||
}
|
||||
|
||||
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
||||
}
|
||||
|
||||
|
||||
@@ -258,36 +246,13 @@ namespace v2rayN.Handler
|
||||
return responseTime;
|
||||
}
|
||||
|
||||
private string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
||||
private string FormatOut(object time, string unit)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
responseTime = -1;
|
||||
try
|
||||
if (time.ToString().Equals("-1"))
|
||||
{
|
||||
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();
|
||||
return "Timeout";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ex.Message;
|
||||
}
|
||||
return msg;
|
||||
return string.Format("{0}{1}", time, unit).PadLeft(8, ' ');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace v2rayN.Handler
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
public List<ServerStatItem> Statistic
|
||||
{
|
||||
get
|
||||
@@ -110,12 +111,12 @@ namespace v2rayN.Handler
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
|
||||
if (res != null)
|
||||
{
|
||||
string itemId = config_.getItemId();
|
||||
string itemId = config_.indexId;
|
||||
ServerStatItem serverStatItem = GetServerStatItem(itemId);
|
||||
|
||||
//TODO: parse output
|
||||
@@ -137,7 +138,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -191,6 +192,25 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearAllServerStatistics()
|
||||
{
|
||||
if (serverStatistics_ != null)
|
||||
{
|
||||
foreach (var item in serverStatistics_.server)
|
||||
{
|
||||
item.todayUp = 0;
|
||||
item.todayDown = 0;
|
||||
item.totalUp = 0;
|
||||
item.totalDown = 0;
|
||||
// update ui display to zero
|
||||
updateFunc_(0, 0, new List<ServerStatItem> { item });
|
||||
}
|
||||
|
||||
// update statistic json file
|
||||
SaveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
private ServerStatItem GetServerStatItem(string itemId)
|
||||
{
|
||||
long ticks = DateTime.Now.Date.Ticks;
|
||||
@@ -251,7 +271,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Tool;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
public static class SysProxyHandle
|
||||
{
|
||||
@@ -47,38 +47,76 @@ namespace v2rayN.HttpProxyHandler
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetIEProxy(bool enable, bool global, string strProxy)
|
||||
|
||||
public static bool UpdateSysProxy(Config config, bool forceDisable)
|
||||
{
|
||||
//Read();
|
||||
var type = config.sysProxyType;
|
||||
|
||||
//if (!_userSettings.UserSettingsRecorded)
|
||||
//{
|
||||
// // record user settings
|
||||
// ExecSysproxy("query");
|
||||
// //ParseQueryStr(_queryStr);
|
||||
//}
|
||||
|
||||
string arguments;
|
||||
if (enable)
|
||||
if (forceDisable && type == ESysProxyType.ForcedChange)
|
||||
{
|
||||
arguments = global
|
||||
? $"global {strProxy} {Global.IEProxyExceptions}"
|
||||
: $"pac {strProxy}";
|
||||
}
|
||||
else
|
||||
{
|
||||
// restore user settings
|
||||
string flags = _userSettings.Flags;
|
||||
string proxy_server = _userSettings.ProxyServer ?? "-";
|
||||
string bypass_list = _userSettings.BypassList ?? "-";
|
||||
string pac_url = _userSettings.PacUrl ?? "-";
|
||||
arguments = $"set {flags} {proxy_server} {bypass_list} {pac_url}";
|
||||
|
||||
// have to get new settings
|
||||
_userSettings.UserSettingsRecorded = false;
|
||||
type = ESysProxyType.ForcedClear;
|
||||
}
|
||||
|
||||
//Save();
|
||||
try
|
||||
{
|
||||
int port = config.GetLocalPort(Global.InboundHttp);
|
||||
int portSocks = config.GetLocalPort(Global.InboundSocks);
|
||||
if (port <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (type == ESysProxyType.ForcedChange)
|
||||
{
|
||||
var strExceptions = $"{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}";
|
||||
|
||||
var strProxy = string.Empty;
|
||||
if (Utils.IsNullOrEmpty(config.systemProxyAdvancedProtocol))
|
||||
{
|
||||
strProxy = $"{Global.Loopback}:{port}";
|
||||
}
|
||||
else
|
||||
{
|
||||
strProxy = config.systemProxyAdvancedProtocol
|
||||
.Replace("{ip}", Global.Loopback)
|
||||
.Replace("{http_port}", port.ToString())
|
||||
.Replace("{socks_port}", portSocks.ToString());
|
||||
}
|
||||
SetIEProxy(true, strProxy, strExceptions);
|
||||
}
|
||||
else if (type == ESysProxyType.ForcedClear)
|
||||
{
|
||||
ResetIEProxy();
|
||||
}
|
||||
else if (type == ESysProxyType.Unchanged)
|
||||
{
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void ResetIEProxy4WindowsShutDown()
|
||||
{
|
||||
try
|
||||
{
|
||||
//TODO To be verified
|
||||
Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void SetIEProxy(bool global, string strProxy, string strExceptions)
|
||||
{
|
||||
string arguments = global
|
||||
? $"global {strProxy} {strExceptions}"
|
||||
: $"pac {strProxy}";
|
||||
|
||||
ExecSysproxy(arguments);
|
||||
}
|
||||
|
||||
464
v2rayN/v2rayN/Handler/UpdateHandle.cs
Normal file
464
v2rayN/v2rayN/Handler/UpdateHandle.cs
Normal file
@@ -0,0 +1,464 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class UpdateHandle
|
||||
{
|
||||
Action<bool, string> _updateFunc;
|
||||
private Config _config;
|
||||
|
||||
public event EventHandler<ResultEventArgs> AbsoluteCompleted;
|
||||
|
||||
public class ResultEventArgs : EventArgs
|
||||
{
|
||||
public bool Success;
|
||||
public string Msg;
|
||||
|
||||
public ResultEventArgs(bool success, string msg)
|
||||
{
|
||||
this.Success = success;
|
||||
this.Msg = msg;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly string nLatestUrl = Global.NUrl + "/latest";
|
||||
private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip";
|
||||
private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest";
|
||||
private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip";
|
||||
private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest";
|
||||
private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip";
|
||||
private const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
|
||||
|
||||
public void CheckUpdateGuiN(Config config, Action<bool, string> update)
|
||||
{
|
||||
_config = config;
|
||||
_updateFunc = update;
|
||||
var url = string.Empty;
|
||||
|
||||
DownloadHandle downloadHandle = null;
|
||||
if (downloadHandle == null)
|
||||
{
|
||||
downloadHandle = new DownloadHandle();
|
||||
|
||||
downloadHandle.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully);
|
||||
|
||||
try
|
||||
{
|
||||
string fileName = Utils.GetPath(Utils.GetDownloadFileName(url));
|
||||
fileName = Utils.UrlEncode(fileName);
|
||||
Process process = new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "v2rayUpgrade.exe",
|
||||
Arguments = "\"" + fileName + "\"",
|
||||
WorkingDirectory = Utils.StartupPath()
|
||||
}
|
||||
};
|
||||
process.Start();
|
||||
if (process.Id > 0)
|
||||
{
|
||||
_updateFunc(true, "");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_updateFunc(false, ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, args.Msg);
|
||||
}
|
||||
};
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(false, args.GetException().Message);
|
||||
};
|
||||
}
|
||||
AbsoluteCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "v2rayN"));
|
||||
|
||||
url = args.Msg;
|
||||
askToDownload(downloadHandle, url, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, args.Msg);
|
||||
}
|
||||
};
|
||||
_updateFunc(false, string.Format(ResUI.MsgStartUpdating, "v2rayN"));
|
||||
CheckUpdateAsync(ECoreType.v2rayN);
|
||||
}
|
||||
|
||||
|
||||
public void CheckUpdateCore(ECoreType type, Config config, Action<bool, string> update)
|
||||
{
|
||||
_config = config;
|
||||
_updateFunc = update;
|
||||
var url = string.Empty;
|
||||
|
||||
DownloadHandle downloadHandle = null;
|
||||
if (downloadHandle == null)
|
||||
{
|
||||
downloadHandle = new DownloadHandle();
|
||||
downloadHandle.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully);
|
||||
_updateFunc(false, ResUI.MsgUnpacking);
|
||||
|
||||
try
|
||||
{
|
||||
_updateFunc(true, url);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_updateFunc(false, ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, args.Msg);
|
||||
}
|
||||
};
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(true, args.GetException().Message);
|
||||
};
|
||||
}
|
||||
|
||||
AbsoluteCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "Core"));
|
||||
url = args.Msg;
|
||||
askToDownload(downloadHandle, url, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, args.Msg);
|
||||
}
|
||||
};
|
||||
_updateFunc(false, string.Format(ResUI.MsgStartUpdating, "Core"));
|
||||
CheckUpdateAsync(type);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateSubscriptionProcess(Config config, bool blProxy, Action<bool, string> update)
|
||||
{
|
||||
_config = config;
|
||||
_updateFunc = update;
|
||||
|
||||
_updateFunc(false, ResUI.MsgUpdateSubscriptionStart);
|
||||
|
||||
if (config.subItem == null || config.subItem.Count <= 0)
|
||||
{
|
||||
_updateFunc(false, ResUI.MsgNoValidSubscription);
|
||||
return;
|
||||
}
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
//Turn off system proxy
|
||||
bool bSysProxyType = false;
|
||||
if (!blProxy && config.sysProxyType == ESysProxyType.ForcedChange)
|
||||
{
|
||||
bSysProxyType = true;
|
||||
config.sysProxyType = ESysProxyType.ForcedClear;
|
||||
SysProxyHandle.UpdateSysProxy(config, false);
|
||||
Thread.Sleep(3000);
|
||||
}
|
||||
|
||||
foreach (var item in config.subItem)
|
||||
{
|
||||
if (item.enabled == false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string id = item.id.TrimEx();
|
||||
string url = item.url.TrimEx();
|
||||
string userAgent = item.userAgent.TrimEx();
|
||||
string groupId = item.groupId.TrimEx();
|
||||
string hashCode = $"{item.remarks}->";
|
||||
if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url))
|
||||
{
|
||||
//_updateFunc(false, $"{hashCode}{ResUI.MsgNoValidSubscription}");
|
||||
continue;
|
||||
}
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}");
|
||||
var result = await (new DownloadHandle()).DownloadStringAsync(url, blProxy, userAgent);
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}");
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgSubscriptionDecodingFailed}");
|
||||
}
|
||||
else
|
||||
{
|
||||
int ret = ConfigHandler.AddBatchServers(ref config, result, id, groupId);
|
||||
if (ret > 0)
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}");
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgFailedImportSubscription}");
|
||||
}
|
||||
}
|
||||
_updateFunc(false, $"-------------------------------------------------------");
|
||||
}
|
||||
//restore system proxy
|
||||
if (bSysProxyType)
|
||||
{
|
||||
config.sysProxyType = ESysProxyType.ForcedChange;
|
||||
SysProxyHandle.UpdateSysProxy(config, false);
|
||||
}
|
||||
_updateFunc(true, $"{ResUI.MsgUpdateSubscriptionEnd}");
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void UpdateGeoFile(string geoName, Config config, Action<bool, string> update)
|
||||
{
|
||||
_config = config;
|
||||
_updateFunc = update;
|
||||
var url = string.Format(geoUrl, geoName);
|
||||
|
||||
DownloadHandle downloadHandle = null;
|
||||
if (downloadHandle == null)
|
||||
{
|
||||
downloadHandle = new DownloadHandle();
|
||||
|
||||
downloadHandle.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(false, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, geoName));
|
||||
|
||||
try
|
||||
{
|
||||
string fileName = Utils.GetPath(Utils.GetDownloadFileName(url));
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
string targetPath = Utils.GetPath($"{geoName}.dat");
|
||||
if (File.Exists(targetPath))
|
||||
{
|
||||
File.Delete(targetPath);
|
||||
}
|
||||
File.Move(fileName, targetPath);
|
||||
//_updateFunc(true, "");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_updateFunc(false, ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, args.Msg);
|
||||
}
|
||||
};
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(false, args.GetException().Message);
|
||||
};
|
||||
}
|
||||
askToDownload(downloadHandle, url, false);
|
||||
|
||||
}
|
||||
|
||||
public void RunAvailabilityCheck(Action<bool, string> update)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
var time = (new DownloadHandle()).RunAvailabilityCheck(null);
|
||||
|
||||
update(false, string.Format(ResUI.TestMeOutput, time));
|
||||
});
|
||||
}
|
||||
|
||||
#region private
|
||||
|
||||
private async void CheckUpdateAsync(ECoreType type)
|
||||
{
|
||||
try
|
||||
{
|
||||
string url;
|
||||
if (type == ECoreType.v2fly)
|
||||
{
|
||||
url = v2flyCoreLatestUrl;
|
||||
}
|
||||
else if (type == ECoreType.Xray)
|
||||
{
|
||||
url = xrayCoreLatestUrl;
|
||||
}
|
||||
else if (type == ECoreType.v2rayN)
|
||||
{
|
||||
url = nLatestUrl;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Type");
|
||||
}
|
||||
|
||||
var result = await (new DownloadHandle()).UrlRedirectAsync(url, true);
|
||||
if (!Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
responseHandler(type, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.SaveLog("StatusCode error: " + url);
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
_updateFunc(false, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取V2RayCore版本
|
||||
/// </summary>
|
||||
private string getCoreVersion(ECoreType type)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
|
||||
string filePath = string.Empty;
|
||||
foreach (string name in coreInfo.coreExes)
|
||||
{
|
||||
string vName = string.Format("{0}.exe", name);
|
||||
vName = Utils.GetPath(vName);
|
||||
if (File.Exists(vName))
|
||||
{
|
||||
filePath = vName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
string msg = string.Format(ResUI.NotFoundCore, @"");
|
||||
//ShowMsg(true, msg);
|
||||
return "";
|
||||
}
|
||||
|
||||
Process p = new Process();
|
||||
p.StartInfo.FileName = filePath;
|
||||
p.StartInfo.Arguments = "-version";
|
||||
p.StartInfo.WorkingDirectory = Utils.StartupPath();
|
||||
p.StartInfo.UseShellExecute = false;
|
||||
p.StartInfo.RedirectStandardOutput = true;
|
||||
p.StartInfo.CreateNoWindow = true;
|
||||
p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
|
||||
p.Start();
|
||||
p.WaitForExit(5000);
|
||||
string echo = p.StandardOutput.ReadToEnd();
|
||||
string version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value;
|
||||
return version;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
_updateFunc(false, ex.Message);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
private void responseHandler(ECoreType type, string redirectUrl)
|
||||
{
|
||||
try
|
||||
{
|
||||
string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
|
||||
|
||||
string curVersion;
|
||||
string message;
|
||||
string url;
|
||||
if (type == ECoreType.v2fly)
|
||||
{
|
||||
curVersion = "v" + getCoreVersion(type);
|
||||
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||
url = string.Format(v2flyCoreUrl, version, osBit);
|
||||
}
|
||||
else if (type == ECoreType.Xray)
|
||||
{
|
||||
curVersion = "v" + getCoreVersion(type);
|
||||
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||
url = string.Format(xrayCoreUrl, version, osBit);
|
||||
}
|
||||
else if (type == ECoreType.v2rayN)
|
||||
{
|
||||
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
|
||||
message = string.Format(ResUI.IsLatestN, curVersion);
|
||||
url = string.Format(nUrl, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Type");
|
||||
}
|
||||
|
||||
if (curVersion == version)
|
||||
{
|
||||
AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message));
|
||||
return;
|
||||
}
|
||||
|
||||
AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, url));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
_updateFunc(false, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void askToDownload(DownloadHandle downloadHandle, string url, bool blAsk)
|
||||
{
|
||||
bool blDownload = false;
|
||||
if (blAsk)
|
||||
{
|
||||
if (UI.ShowYesNo(string.Format(ResUI.DownloadYesNo, url)) == DialogResult.Yes)
|
||||
{
|
||||
blDownload = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
blDownload = true;
|
||||
}
|
||||
if (blDownload)
|
||||
{
|
||||
downloadHandle.DownloadFileAsync(url, true, 600);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
@@ -21,18 +22,13 @@ namespace v2rayN.Handler
|
||||
class V2rayHandler
|
||||
{
|
||||
private static string v2rayConfigRes = Global.v2rayConfigFileName;
|
||||
private List<string> lstV2ray;
|
||||
private CoreInfo coreInfo;
|
||||
public event ProcessDelegate ProcessEvent;
|
||||
//private int processId = 0;
|
||||
private Process _process;
|
||||
|
||||
public V2rayHandler()
|
||||
{
|
||||
lstV2ray = new List<string>
|
||||
{
|
||||
"wv2ray",
|
||||
"v2ray"
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -42,8 +38,20 @@ namespace v2rayN.Handler
|
||||
{
|
||||
if (Global.reloadV2ray)
|
||||
{
|
||||
var item = ConfigHandler.GetDefaultServer(ref config);
|
||||
if (item == null)
|
||||
{
|
||||
ShowMsg(false, ResUI.CheckServerSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
if (SetCore(config, item) != 0)
|
||||
{
|
||||
ShowMsg(false, ResUI.CheckServerSettings);
|
||||
return;
|
||||
}
|
||||
string fileName = Utils.GetPath(v2rayConfigRes);
|
||||
if (V2rayConfigHandler.GenerateClientConfig(config, fileName, false, out string msg) != 0)
|
||||
if (V2rayConfigHandler.GenerateClientConfig(item, fileName, false, out string msg) != 0)
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
@@ -59,7 +67,7 @@ namespace v2rayN.Handler
|
||||
/// 新建进程,载入V2ray配置文件字符串
|
||||
/// 返回新进程pid。
|
||||
/// </summary>
|
||||
public int LoadV2rayConfigString(Config config, List<int> _selecteds)
|
||||
public int LoadV2rayConfigString(Config config, List<ServerTestItem> _selecteds)
|
||||
{
|
||||
int pid = -1;
|
||||
string configStr = V2rayConfigHandler.GenerateClientSpeedtestConfigString(config, _selecteds, out string msg);
|
||||
@@ -69,7 +77,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMsg(true, msg);
|
||||
ShowMsg(false, msg);
|
||||
pid = V2rayStartNew(configStr);
|
||||
//V2rayRestart();
|
||||
// start with -config
|
||||
@@ -101,7 +109,11 @@ namespace v2rayN.Handler
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (string vName in lstV2ray)
|
||||
if (coreInfo == null || coreInfo.coreExes == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (string vName in coreInfo.coreExes)
|
||||
{
|
||||
Process[] existing = Process.GetProcessesByName(vName);
|
||||
foreach (Process p in existing)
|
||||
@@ -158,11 +170,10 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
private string V2rayFindexe() {
|
||||
//查找v2ray文件是否存在
|
||||
private string V2rayFindexe(List<string> lstCoreTemp)
|
||||
{
|
||||
string fileName = string.Empty;
|
||||
lstV2ray.Reverse();
|
||||
foreach (string name in lstV2ray)
|
||||
foreach (string name in lstCoreTemp)
|
||||
{
|
||||
string vName = string.Format("{0}.exe", name);
|
||||
vName = Utils.GetPath(vName);
|
||||
@@ -174,8 +185,8 @@ namespace v2rayN.Handler
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases");
|
||||
ShowMsg(true, msg);
|
||||
string msg = string.Format(ResUI.NotFoundCore, coreInfo.coreUrl);
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
@@ -185,11 +196,11 @@ namespace v2rayN.Handler
|
||||
/// </summary>
|
||||
private void V2rayStart()
|
||||
{
|
||||
ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString()));
|
||||
ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString()));
|
||||
|
||||
try
|
||||
{
|
||||
string fileName = V2rayFindexe();
|
||||
string fileName = V2rayFindexe(coreInfo.coreExes);
|
||||
if (fileName == "") return;
|
||||
|
||||
Process p = new Process
|
||||
@@ -197,6 +208,7 @@ namespace v2rayN.Handler
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = fileName,
|
||||
Arguments = coreInfo.arguments,
|
||||
WorkingDirectory = Utils.StartupPath(),
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
@@ -214,6 +226,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
});
|
||||
p.Start();
|
||||
p.PriorityClass = ProcessPriorityClass.High;
|
||||
p.BeginOutputReadLine();
|
||||
//processId = p.Id;
|
||||
_process = p;
|
||||
@@ -237,11 +250,11 @@ namespace v2rayN.Handler
|
||||
/// </summary>
|
||||
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
|
||||
{
|
||||
string fileName = V2rayFindexe();
|
||||
string fileName = V2rayFindexe(new List<string> { "xray", "wv2ray", "v2ray" });
|
||||
if (fileName == "") return -1;
|
||||
|
||||
Process p = new Process
|
||||
@@ -316,6 +329,23 @@ namespace v2rayN.Handler
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int SetCore(Config config, VmessItem item)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
var coreType = LazyConfig.Instance.GetCoreType(item, item.configType);
|
||||
|
||||
coreInfo = LazyConfig.Instance.GetCoreInfo(coreType);
|
||||
|
||||
if (coreInfo == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,186 +0,0 @@
|
||||
using System;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统代理(http)模式
|
||||
/// </summary>
|
||||
public enum ListenerType
|
||||
{
|
||||
noHttpProxy = 0,
|
||||
GlobalHttp = 1,
|
||||
GlobalPac = 2,
|
||||
HttpOpenAndClear = 3,
|
||||
PacOpenAndClear = 4,
|
||||
HttpOpenOnly = 5,
|
||||
PacOpenOnly = 6
|
||||
}
|
||||
/// <summary>
|
||||
/// 系统代理(http)总处理
|
||||
/// 启动privoxy提供http协议
|
||||
/// 设置IE系统代理或者PAC模式
|
||||
/// </summary>
|
||||
class HttpProxyHandle
|
||||
{
|
||||
private static bool Update(Config config, bool forceDisable)
|
||||
{
|
||||
ListenerType type = config.listenerType;
|
||||
|
||||
if (forceDisable)
|
||||
{
|
||||
type = ListenerType.noHttpProxy;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (type != ListenerType.noHttpProxy)
|
||||
{
|
||||
int port = Global.httpPort;
|
||||
if (port <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (type == ListenerType.GlobalHttp)
|
||||
{
|
||||
//PACServerHandle.Stop();
|
||||
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
|
||||
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
||||
}
|
||||
else if (type == ListenerType.GlobalPac)
|
||||
{
|
||||
string pacUrl = GetPacUrl();
|
||||
//ProxySetting.SetProxy(pacUrl, "", 4);
|
||||
SysProxyHandle.SetIEProxy(true, false, pacUrl);
|
||||
//PACServerHandle.Stop();
|
||||
PACServerHandle.Init(config);
|
||||
}
|
||||
else if (type == ListenerType.HttpOpenAndClear)
|
||||
{
|
||||
//PACServerHandle.Stop();
|
||||
SysProxyHandle.ResetIEProxy();
|
||||
}
|
||||
else if (type == ListenerType.PacOpenAndClear)
|
||||
{
|
||||
string pacUrl = GetPacUrl();
|
||||
SysProxyHandle.ResetIEProxy();
|
||||
//PACServerHandle.Stop();
|
||||
PACServerHandle.Init(config);
|
||||
}
|
||||
else if (type == ListenerType.HttpOpenOnly)
|
||||
{
|
||||
//PACServerHandle.Stop();
|
||||
//SysProxyHandle.ResetIEProxy();
|
||||
}
|
||||
else if (type == ListenerType.PacOpenOnly)
|
||||
{
|
||||
string pacUrl = GetPacUrl();
|
||||
//SysProxyHandle.ResetIEProxy();
|
||||
//PACServerHandle.Stop();
|
||||
PACServerHandle.Init(config);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SysProxyHandle.ResetIEProxy();
|
||||
//PACServerHandle.Stop();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启用系统代理(http)
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
private static void StartHttpAgent(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
int localPort = config.GetLocalPort(Global.InboundSocks);
|
||||
if (localPort > 0)
|
||||
{
|
||||
PrivoxyHandler.Instance.Restart(localPort, config);
|
||||
if (PrivoxyHandler.Instance.RunningPort > 0)
|
||||
{
|
||||
Global.sysAgent = true;
|
||||
Global.socksPort = localPort;
|
||||
Global.httpPort = PrivoxyHandler.Instance.RunningPort;
|
||||
Global.pacPort = config.GetLocalPort("pac");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭系统代理
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
public static void CloseHttpAgent(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly)
|
||||
{
|
||||
Update(config, true);
|
||||
}
|
||||
|
||||
PrivoxyHandler.Instance.Stop();
|
||||
|
||||
Global.sysAgent = false;
|
||||
Global.socksPort = 0;
|
||||
Global.httpPort = 0;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重启系统代理(http)
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
/// <param name="forced"></param>
|
||||
public static void RestartHttpAgent(Config config, bool forced)
|
||||
{
|
||||
bool isRestart = false;
|
||||
if (config.listenerType == ListenerType.noHttpProxy)
|
||||
{
|
||||
// 关闭http proxy时,直接返回
|
||||
return;
|
||||
}
|
||||
//强制重启或者socks端口变化
|
||||
if (forced)
|
||||
{
|
||||
isRestart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
int localPort = config.GetLocalPort(Global.InboundSocks);
|
||||
if (localPort != Global.socksPort)
|
||||
{
|
||||
isRestart = true;
|
||||
}
|
||||
}
|
||||
if (isRestart)
|
||||
{
|
||||
CloseHttpAgent(config);
|
||||
StartHttpAgent(config);
|
||||
}
|
||||
Update(config, false);
|
||||
}
|
||||
|
||||
public static string GetPacUrl()
|
||||
{
|
||||
string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}";
|
||||
return pacUrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,209 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Tool;
|
||||
using v2rayN.Base;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// 提供PAC功能支持
|
||||
/// </summary>
|
||||
class PACServerHandle
|
||||
{
|
||||
private static int pacPort = 0;
|
||||
private static HttpWebServer server;
|
||||
private static HttpWebServerB serverB;
|
||||
private static Config _config;
|
||||
|
||||
public static bool IsRunning
|
||||
{
|
||||
get
|
||||
{
|
||||
return (pacPort > 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Init(Config config)
|
||||
{
|
||||
_config = config;
|
||||
Global.pacPort = config.GetLocalPort("pac");
|
||||
|
||||
if (InitServer("*"))
|
||||
{
|
||||
pacPort = Global.pacPort;
|
||||
}
|
||||
//else if (InitServer(Global.Loopback))
|
||||
//{
|
||||
// pacPort = Global.pacPort;
|
||||
//}
|
||||
else if (InitServerB(Global.Loopback))
|
||||
{
|
||||
pacPort = Global.pacPort;
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.SaveLog("Webserver init failed ");
|
||||
pacPort = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool InitServer(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (pacPort != Global.pacPort)
|
||||
{
|
||||
if (server != null)
|
||||
{
|
||||
server.Stop();
|
||||
server = null;
|
||||
}
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
string prefixes = string.Format("http://{0}:{1}/pac/", address, Global.pacPort);
|
||||
Utils.SaveLog("Webserver prefixes " + prefixes);
|
||||
|
||||
server = new HttpWebServer(SendResponse, prefixes);
|
||||
server.Run();
|
||||
|
||||
}
|
||||
}
|
||||
Utils.SaveLog("Webserver at " + address);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("Webserver InitServer " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool InitServerB(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (pacPort != Global.pacPort)
|
||||
{
|
||||
if (serverB != null)
|
||||
{
|
||||
serverB.Stop();
|
||||
serverB = null;
|
||||
}
|
||||
|
||||
if (serverB == null)
|
||||
{
|
||||
serverB = new HttpWebServerB(Global.pacPort, SendResponse);
|
||||
}
|
||||
}
|
||||
Utils.SaveLog("WebserverB at " + address);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("WebserverB InitServer " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static string SendResponse(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
string pac = GetPacList(address);
|
||||
return pac;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("Webserver SendResponse " + ex.Message);
|
||||
return ex.Message;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Stop()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (server != null)
|
||||
{
|
||||
server.Stop();
|
||||
server = null;
|
||||
}
|
||||
if (serverB != null)
|
||||
{
|
||||
serverB.Stop();
|
||||
serverB = null;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog("Webserver Stop " + ex.Message);
|
||||
}
|
||||
|
||||
//try
|
||||
//{
|
||||
// if (httpWebServer == null)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// foreach (var key in httpWebServer.Keys)
|
||||
// {
|
||||
// Utils.SaveLog("Webserver Stop " + key.ToString());
|
||||
// ((HttpWebServer)httpWebServer[key]).Stop();
|
||||
// }
|
||||
// httpWebServer.Clear();
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// Utils.SaveLog("Webserver Stop " + ex.Message);
|
||||
//}
|
||||
}
|
||||
|
||||
private static string GetPacList(string address)
|
||||
{
|
||||
int port = Global.httpPort;
|
||||
if (port <= 0)
|
||||
{
|
||||
return "No port";
|
||||
}
|
||||
try
|
||||
{
|
||||
List<string> lstProxy = new List<string>
|
||||
{
|
||||
string.Format("PROXY {0}:{1};", address, port)
|
||||
};
|
||||
string proxy = string.Join("", lstProxy.ToArray());
|
||||
|
||||
string strPacfile = Utils.GetPath(Global.pacFILE);
|
||||
if (!File.Exists(strPacfile))
|
||||
{
|
||||
FileManager.UncompressFile(strPacfile, Resources.pac_txt);
|
||||
}
|
||||
string pac = File.ReadAllText(strPacfile, Encoding.UTF8);
|
||||
pac = pac.Replace("__PROXY__", proxy);
|
||||
|
||||
if (_config.userPacRule.Count > 0)
|
||||
{
|
||||
string keyWords = "var rules = [";
|
||||
if (pac.IndexOf(keyWords) >= 0)
|
||||
{
|
||||
string userPac = string.Join($"\",{Environment.NewLine}\"", _config.userPacRule.ToArray());
|
||||
userPac = string.Format("\"{0}\",", userPac);
|
||||
pac = pac.Replace(keyWords, keyWords + userPac);
|
||||
}
|
||||
}
|
||||
|
||||
return pac;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
return "No pac content";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,194 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Tool;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// Privoxy处理类,提供http协议代理
|
||||
/// </summary>
|
||||
class PrivoxyHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// 单例
|
||||
/// </summary>
|
||||
private static PrivoxyHandler instance;
|
||||
|
||||
private static int _uid;
|
||||
private static string _uniqueConfigFile;
|
||||
private Process _process;
|
||||
private static string _privoxyName = "v2ray_privoxy";
|
||||
|
||||
static PrivoxyHandler()
|
||||
{
|
||||
try
|
||||
{
|
||||
_uid = Application.StartupPath.GetHashCode();
|
||||
_uniqueConfigFile = string.Format("privoxy_{0}.conf", _uid);
|
||||
|
||||
FileManager.UncompressFile(Utils.GetTempPath($"{_privoxyName}.exe"), Resources.privoxy_exe);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 单例
|
||||
/// </summary>
|
||||
public static PrivoxyHandler Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = new PrivoxyHandler();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
public int RunningPort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public void Restart(int localPort, Config config)
|
||||
{
|
||||
Stop();
|
||||
Start(localPort, config);
|
||||
}
|
||||
|
||||
|
||||
public void Start(int localPort, Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_process == null)
|
||||
{
|
||||
|
||||
string privoxyConfig = Resources.privoxy_conf;
|
||||
RunningPort = config.GetLocalPort(Global.InboundHttp);
|
||||
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
|
||||
if (config.allowLANConn)
|
||||
{
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0");
|
||||
}
|
||||
else
|
||||
{
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", Global.Loopback);
|
||||
}
|
||||
FileManager.ByteArrayToFile(Utils.GetTempPath(_uniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig));
|
||||
|
||||
_process = new Process
|
||||
{
|
||||
// Configure the process using the StartInfo properties.
|
||||
StartInfo =
|
||||
{
|
||||
FileName = $"{_privoxyName}.exe",
|
||||
Arguments = _uniqueConfigFile,
|
||||
WorkingDirectory = Utils.GetTempPath(),
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
UseShellExecute = true,
|
||||
CreateNoWindow = true
|
||||
}
|
||||
};
|
||||
_process.Start();
|
||||
|
||||
/*
|
||||
* Add this process to job obj associated with this ss process, so that
|
||||
* when ss exit unexpectedly, this process will be forced killed by system.
|
||||
*/
|
||||
|
||||
Global.processJob.AddProcess(_process.Handle);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RunningPort = 0;
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (_process != null)
|
||||
{
|
||||
KillProcess(_process);
|
||||
_process.Dispose();
|
||||
_process = null;
|
||||
RunningPort = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Process[] existingPrivoxy = Process.GetProcessesByName(_privoxyName);
|
||||
foreach (Process p in existingPrivoxy.Where(IsChildProcess))
|
||||
{
|
||||
KillProcess(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void KillProcess(Process p)
|
||||
{
|
||||
try
|
||||
{
|
||||
p.CloseMainWindow();
|
||||
p.WaitForExit(100);
|
||||
if (!p.HasExited)
|
||||
{
|
||||
p.Kill();
|
||||
p.WaitForExit(100);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We won't like to kill other ss instances' v2ray_privoxy.exe.
|
||||
* This function will check whether the given process is created
|
||||
* by this process by checking the module path or command line.
|
||||
*
|
||||
* Since it's required to put ss in different dirs to run muti instances,
|
||||
* different instance will create their unique "privoxy_UID.conf" where
|
||||
* UID is hash of ss's location.
|
||||
*/
|
||||
|
||||
private static bool IsChildProcess(Process process)
|
||||
{
|
||||
try
|
||||
{
|
||||
/*
|
||||
* Under PortableMode, we could identify it by the path of v2ray_privoxy.exe.
|
||||
*/
|
||||
string path = process.MainModule.FileName;
|
||||
|
||||
return Utils.GetTempPath($"{_privoxyName}.exe").Equals(path);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
/*
|
||||
* Sometimes Process.GetProcessesByName will return some processes that
|
||||
* are already dead, and that will cause exceptions here.
|
||||
* We could simply ignore those exceptions.
|
||||
*/
|
||||
//Logging.LogUsefulException(ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
14
v2rayN/v2rayN/Mode/ComboItem.cs
Normal file
14
v2rayN/v2rayN/Mode/ComboItem.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace v2rayN.Mode
|
||||
{
|
||||
class ComboItem
|
||||
{
|
||||
public int ID
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public string Text
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.HttpProxyHandler;
|
||||
|
||||
using System.Linq;
|
||||
using System.Drawing;
|
||||
|
||||
namespace v2rayN.Mode
|
||||
{
|
||||
@@ -12,13 +13,7 @@ namespace v2rayN.Mode
|
||||
[Serializable]
|
||||
public class Config
|
||||
{
|
||||
/// <summary>
|
||||
/// 本地监听
|
||||
/// </summary>
|
||||
public List<InItem> inbound
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
#region property
|
||||
|
||||
/// <summary>
|
||||
/// 允许日志
|
||||
@@ -36,18 +31,7 @@ namespace v2rayN.Mode
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 活动配置序号
|
||||
/// </summary>
|
||||
public int index
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// vmess服务器信息
|
||||
/// </summary>
|
||||
public List<VmessItem> vmess
|
||||
public string indexId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
@@ -61,87 +45,9 @@ namespace v2rayN.Mode
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 域名解析策略
|
||||
///
|
||||
/// </summary>
|
||||
public string domainStrategy
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 路由模式
|
||||
/// </summary>
|
||||
public string routingMode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义需代理的网址或ip
|
||||
/// </summary>
|
||||
public List<string> useragent
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义直连的网址或ip
|
||||
/// </summary>
|
||||
public List<string> userdirect
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义阻止的网址或ip
|
||||
/// </summary>
|
||||
public List<string> userblock
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// KcpItem
|
||||
/// </summary>
|
||||
public KcpItem kcpItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 监听状态
|
||||
/// </summary>
|
||||
public ListenerType listenerType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自定义服务器下载测速url
|
||||
/// </summary>
|
||||
public string speedTestUrl
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 自定义“服务器真连接延迟”测试url
|
||||
/// </summary>
|
||||
public string speedPingTestUrl
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 自定义GFWList url
|
||||
/// </summary>
|
||||
public string urlGFWList
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许来自局域网的连接
|
||||
/// </summary>
|
||||
public bool allowLANConn
|
||||
public ESysProxyType sysProxyType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
@@ -169,7 +75,6 @@ namespace v2rayN.Mode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 自定义远程DNS
|
||||
@@ -178,6 +83,88 @@ namespace v2rayN.Mode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否允许不安全连接
|
||||
/// </summary>
|
||||
public bool defAllowInsecure
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 域名解析策略
|
||||
/// </summary>
|
||||
public string domainStrategy
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public string domainMatcher
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public int routingIndex
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public bool enableRoutingAdvanced
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public bool ignoreGeoUpdateCore
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// systemProxyExceptions
|
||||
/// </summary>
|
||||
public string systemProxyExceptions
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public string systemProxyAdvancedProtocol { get; set; }
|
||||
|
||||
public int autoUpdateInterval { get; set; } = 0;
|
||||
|
||||
public int autoUpdateSubInterval { get; set; } = 0;
|
||||
|
||||
public bool enableSecurityProtocolTls13
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public int trayMenuServersLimit { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region other entities
|
||||
|
||||
/// <summary>
|
||||
/// 本地监听
|
||||
/// </summary>
|
||||
public List<InItem> inbound
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// vmess服务器信息
|
||||
/// </summary>
|
||||
public List<VmessItem> vmess
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// KcpItem
|
||||
/// </summary>
|
||||
public KcpItem kcpItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 订阅
|
||||
/// </summary>
|
||||
@@ -192,169 +179,97 @@ namespace v2rayN.Mode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public List<string> userPacRule
|
||||
public List<RoutingItem> routings
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
#region 函数
|
||||
|
||||
public string address()
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].address.TrimEx();
|
||||
}
|
||||
|
||||
public int port()
|
||||
public ConstItem constItem
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return 10808;
|
||||
}
|
||||
return vmess[index].port;
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string id()
|
||||
public List<KeyEventItem> globalHotkeys
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].id.TrimEx();
|
||||
get; set;
|
||||
}
|
||||
|
||||
public int alterId()
|
||||
public List<GroupItem> groupItem
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return vmess[index].alterId;
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string security()
|
||||
public List<CoreTypeItem> coreTypeItem
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].security.TrimEx();
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string remarks()
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].remarks.TrimEx();
|
||||
}
|
||||
public string network()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].network))
|
||||
{
|
||||
return Global.DefaultNetwork;
|
||||
}
|
||||
return vmess[index].network.TrimEx();
|
||||
}
|
||||
public string headerType()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].headerType))
|
||||
{
|
||||
return Global.None;
|
||||
}
|
||||
return vmess[index].headerType.Replace(" ", "").TrimEx();
|
||||
}
|
||||
public string requestHost()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].requestHost))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].requestHost.Replace(" ", "").TrimEx();
|
||||
}
|
||||
public string path()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].path))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].path.Replace(" ", "").TrimEx();
|
||||
}
|
||||
public string streamSecurity()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].streamSecurity))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].streamSecurity;
|
||||
}
|
||||
public bool allowInsecure()
|
||||
{
|
||||
if (index < 0 || Utils.IsNullOrEmpty(vmess[index].allowInsecure))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return Convert.ToBoolean(vmess[index].allowInsecure);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region function
|
||||
|
||||
public int GetLocalPort(string protocol)
|
||||
{
|
||||
if (protocol == Global.InboundHttp)
|
||||
int localPort = inbound.FirstOrDefault(t => t.protocol == Global.InboundSocks).localPort;
|
||||
|
||||
if (protocol == Global.InboundSocks)
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 1;
|
||||
return localPort;
|
||||
}
|
||||
else if (protocol == "pac")
|
||||
else if (protocol == Global.InboundHttp)
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 2;
|
||||
return localPort + 1;
|
||||
}
|
||||
else if (protocol == Global.InboundSocks2)
|
||||
{
|
||||
return localPort + 2;
|
||||
}
|
||||
else if (protocol == Global.InboundHttp2)
|
||||
{
|
||||
return localPort + 3;
|
||||
}
|
||||
else if (protocol == "speedtest")
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 103;
|
||||
}
|
||||
|
||||
int localPort = 0;
|
||||
foreach (InItem inItem in inbound)
|
||||
{
|
||||
if (inItem.protocol.Equals(protocol))
|
||||
{
|
||||
localPort = inItem.localPort;
|
||||
break;
|
||||
}
|
||||
return localPort + 103;
|
||||
}
|
||||
return localPort;
|
||||
}
|
||||
|
||||
public int configType()
|
||||
public int FindIndexId(string id)
|
||||
{
|
||||
if (index < 0)
|
||||
if (string.IsNullOrEmpty(id))
|
||||
{
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
return vmess[index].configType;
|
||||
return vmess.FindIndex(it => it.indexId == id);
|
||||
}
|
||||
|
||||
public string getSummary()
|
||||
public VmessItem GetVmessItem(string id)
|
||||
{
|
||||
if (index < 0)
|
||||
if (string.IsNullOrEmpty(id))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return vmess.FirstOrDefault(it => it.indexId == id);
|
||||
}
|
||||
|
||||
public bool IsActiveNode(VmessItem item)
|
||||
{
|
||||
if (!Utils.IsNullOrEmpty(item.indexId) && item.indexId == indexId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public string GetGroupRemarks(string groupId)
|
||||
{
|
||||
if (string.IsNullOrEmpty(groupId))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return vmess[index].getSummary();
|
||||
}
|
||||
|
||||
public string getItemId()
|
||||
{
|
||||
if (index < 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
return vmess[index].getItemId();
|
||||
return groupItem.Where(it => it.id == groupId).FirstOrDefault()?.remarks;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -366,7 +281,10 @@ namespace v2rayN.Mode
|
||||
{
|
||||
public VmessItem()
|
||||
{
|
||||
configVersion = 1;
|
||||
indexId = string.Empty;
|
||||
configType = EConfigType.Vmess;
|
||||
configVersion = 2;
|
||||
sort = 0;
|
||||
address = string.Empty;
|
||||
port = 0;
|
||||
id = string.Empty;
|
||||
@@ -379,14 +297,16 @@ namespace v2rayN.Mode
|
||||
path = string.Empty;
|
||||
streamSecurity = string.Empty;
|
||||
allowInsecure = string.Empty;
|
||||
configType = (int)EConfigType.Vmess;
|
||||
testResult = string.Empty;
|
||||
subid = string.Empty;
|
||||
flow = string.Empty;
|
||||
groupId = string.Empty;
|
||||
}
|
||||
|
||||
public string getSummary()
|
||||
#region function
|
||||
public string GetSummary()
|
||||
{
|
||||
string summary = string.Format("{0}-", ((EConfigType)configType).ToString());
|
||||
string summary = string.Format("[{0}] ", (configType).ToString());
|
||||
string[] arrAddr = address.Split('.');
|
||||
string addr;
|
||||
if (arrAddr.Length > 2)
|
||||
@@ -401,50 +321,91 @@ namespace v2rayN.Mode
|
||||
{
|
||||
addr = address;
|
||||
}
|
||||
if (configType == (int)EConfigType.Vmess)
|
||||
switch (configType)
|
||||
{
|
||||
summary += string.Format("{0}({1}:{2})", remarks, addr, port);
|
||||
}
|
||||
else if (configType == (int)EConfigType.Shadowsocks)
|
||||
{
|
||||
summary += string.Format("{0}({1}:{2})", remarks, addr, port);
|
||||
}
|
||||
else if (configType == (int)EConfigType.Socks)
|
||||
{
|
||||
summary += string.Format("{0}({1}:{2})", remarks, addr, port);
|
||||
}
|
||||
else
|
||||
{
|
||||
summary += string.Format("{0}", remarks);
|
||||
case EConfigType.Vmess:
|
||||
case EConfigType.Shadowsocks:
|
||||
case EConfigType.Socks:
|
||||
case EConfigType.VLESS:
|
||||
case EConfigType.Trojan:
|
||||
summary += string.Format("{0}({1}:{2})", remarks, addr, port);
|
||||
break;
|
||||
default:
|
||||
summary += string.Format("{0}", remarks);
|
||||
break;
|
||||
}
|
||||
return summary;
|
||||
}
|
||||
public string getSubRemarks(Config config)
|
||||
public string GetSubRemarks(Config config)
|
||||
{
|
||||
string subRemarks = string.Empty;
|
||||
if (Utils.IsNullOrEmpty(subid))
|
||||
{
|
||||
return subRemarks;
|
||||
}
|
||||
foreach (SubItem sub in config.subItem)
|
||||
{
|
||||
if (sub.id.EndsWith(subid))
|
||||
{
|
||||
return sub.remarks;
|
||||
}
|
||||
}
|
||||
if (subid.Length <= 4)
|
||||
{
|
||||
return subid;
|
||||
}
|
||||
var sub = config.subItem.FirstOrDefault(t => t.id == subid);
|
||||
if (sub != null)
|
||||
{
|
||||
return sub.remarks;
|
||||
}
|
||||
return subid.Substring(0, 4);
|
||||
}
|
||||
|
||||
public string getItemId()
|
||||
public string GetGroupRemarks(Config config)
|
||||
{
|
||||
string itemId = $"{address}{port}{requestHost}{path}";
|
||||
itemId = Utils.Base64Encode(itemId);
|
||||
return itemId;
|
||||
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()
|
||||
{
|
||||
if (alpn != null && alpn.Count > 0)
|
||||
{
|
||||
return alpn;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public string GetNetwork()
|
||||
{
|
||||
if (Utils.IsNullOrEmpty(network) || !Global.networks.Contains(network))
|
||||
{
|
||||
return Global.DefaultNetwork;
|
||||
}
|
||||
return network.TrimEx();
|
||||
}
|
||||
|
||||
public void SetTestResult(string value)
|
||||
{
|
||||
testResult = value;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public string indexId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// config type(1=normal,2=custom)
|
||||
/// </summary>
|
||||
public EConfigType configType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -455,6 +416,11 @@ namespace v2rayN.Mode
|
||||
get; set;
|
||||
}
|
||||
|
||||
public int sort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 远程服务器地址
|
||||
/// </summary>
|
||||
@@ -530,7 +496,7 @@ namespace v2rayN.Mode
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 底层传输安全
|
||||
/// 传输层安全
|
||||
/// </summary>
|
||||
public string streamSecurity
|
||||
{
|
||||
@@ -545,15 +511,6 @@ namespace v2rayN.Mode
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// config type(1=normal,2=custom)
|
||||
/// </summary>
|
||||
public int configType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -569,6 +526,37 @@ namespace v2rayN.Mode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VLESS flow
|
||||
/// </summary>
|
||||
public string flow
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// tls sni
|
||||
/// </summary>
|
||||
public string sni
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// tls alpn
|
||||
/// </summary>
|
||||
public List<string> alpn
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string groupId
|
||||
{
|
||||
get; set;
|
||||
} = string.Empty;
|
||||
public ECoreType? coreType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
@@ -602,6 +590,13 @@ namespace v2rayN.Mode
|
||||
/// 开启流量探测
|
||||
/// </summary>
|
||||
public bool sniffingEnabled { get; set; } = true;
|
||||
|
||||
public bool allowLANConn { get; set; }
|
||||
|
||||
public string user { get; set; }
|
||||
|
||||
public string pass { get; set; }
|
||||
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
@@ -690,15 +685,116 @@ namespace v2rayN.Mode
|
||||
/// enable
|
||||
/// </summary>
|
||||
public bool enabled { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string userAgent
|
||||
{
|
||||
get; set;
|
||||
} = string.Empty;
|
||||
|
||||
public string groupId
|
||||
{
|
||||
get; set;
|
||||
} = string.Empty;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class UIItem
|
||||
{
|
||||
public bool enableAutoAdjustMainLvColWidth
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public Point mainLocation { get; set; }
|
||||
|
||||
public Size mainSize
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public Dictionary<string, int> mainLvColWidth
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class ConstItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 自定义服务器下载测速url
|
||||
/// </summary>
|
||||
public string speedTestUrl
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 自定义“服务器真连接延迟”测试url
|
||||
/// </summary>
|
||||
public string speedPingTestUrl
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public string defIEProxyExceptions
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class KeyEventItem
|
||||
{
|
||||
public EGlobalHotkey eGlobalHotkey { get; set; }
|
||||
|
||||
public bool Alt { get; set; }
|
||||
|
||||
public bool Control { get; set; }
|
||||
|
||||
public bool Shift { get; set; }
|
||||
|
||||
public Keys? KeyCode { get; set; }
|
||||
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class GroupItem
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int mainQRCodeWidth { get; set; } = 600;
|
||||
public string id
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string remarks
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public int sort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
public class CoreTypeItem
|
||||
{
|
||||
public EConfigType configType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public ECoreType coreType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
19
v2rayN/v2rayN/Mode/CoreInfo.cs
Normal file
19
v2rayN/v2rayN/Mode/CoreInfo.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace v2rayN.Mode
|
||||
{
|
||||
[Serializable]
|
||||
public class CoreInfo
|
||||
{
|
||||
public ECoreType coreType { get; set; }
|
||||
|
||||
public List<string> coreExes { get; set; }
|
||||
|
||||
public string arguments { get; set; }
|
||||
|
||||
public string coreUrl { get; set; }
|
||||
|
||||
public string match { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,8 @@ namespace v2rayN.Mode
|
||||
Vmess = 1,
|
||||
Custom = 2,
|
||||
Shadowsocks = 3,
|
||||
Socks = 4
|
||||
Socks = 4,
|
||||
VLESS = 5,
|
||||
Trojan = 6
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user