Compare commits
623 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
272de5f34d | ||
|
|
60a319a482 | ||
|
|
9e440fd5e6 | ||
|
|
235f20813d | ||
|
|
55ce8a3e97 | ||
|
|
b7ac15ad55 | ||
|
|
038b64a416 | ||
|
|
ec2fbca979 | ||
|
|
7f28b1d2c9 | ||
|
|
6a0ec7d294 | ||
|
|
217215b035 | ||
|
|
a6fefcacc9 | ||
|
|
03023c04fc | ||
|
|
8dadfe6579 | ||
|
|
6c06de63e4 | ||
|
|
54a122ae34 | ||
|
|
7a0daee443 | ||
|
|
88b5e29092 | ||
|
|
b3ea08dd99 | ||
|
|
95794bc5b2 | ||
|
|
3275454bd6 | ||
|
|
7f5bb86127 | ||
|
|
cf1ae8f240 | ||
|
|
9b2261918f | ||
|
|
f74071691f | ||
|
|
6d5e02860e | ||
|
|
ffa2acb2f5 | ||
|
|
25b4ff771e | ||
|
|
7a48617fea | ||
|
|
800807b47a | ||
|
|
eaf11c6998 | ||
|
|
e2053d5a77 | ||
|
|
ae6b3ef7fb | ||
|
|
359c6e0f02 | ||
|
|
9a8b4593e1 | ||
|
|
02fc631e3c | ||
|
|
19e03a1fdd | ||
|
|
5ea6279711 | ||
|
|
c44578c341 | ||
|
|
ab34d3fe30 | ||
|
|
5aa27c14c6 | ||
|
|
a5e9edb2e5 | ||
|
|
bbd8ef1f26 | ||
|
|
ad8afa0d3d | ||
|
|
5198f30363 | ||
|
|
50e55761ab | ||
|
|
7cb67aa49c | ||
|
|
1d4993180a | ||
|
|
73a36d5556 | ||
|
|
368e489190 | ||
|
|
d582d4846e | ||
|
|
87ffad398e | ||
|
|
439e7eaca0 | ||
|
|
90d703ae91 | ||
|
|
2d80c90f78 | ||
|
|
b54c8e97bd | ||
|
|
58e69a6644 | ||
|
|
f09a13259f | ||
|
|
8775c5e1f2 | ||
|
|
61b7997ae9 | ||
|
|
99fa98844c | ||
|
|
6e5781c633 | ||
|
|
b58e524d78 | ||
|
|
0d669af44e | ||
|
|
a331c70233 | ||
|
|
fd7d688e6b | ||
|
|
069d47f01b | ||
|
|
3079f1c651 | ||
|
|
f5ecda9255 | ||
|
|
d83ae315ed | ||
|
|
2b40e87eb9 | ||
|
|
f7e3eb180b | ||
|
|
209786cdb6 | ||
|
|
d418f79d8f | ||
|
|
eddd38ff03 | ||
|
|
e4fa729071 | ||
|
|
b3e7eac895 | ||
|
|
c43675d987 | ||
|
|
cdaff66126 | ||
|
|
cf45e89b16 | ||
|
|
aec8459761 | ||
|
|
de746375a9 | ||
|
|
25c2871888 | ||
|
|
28b2e1a405 | ||
|
|
2603132dae | ||
|
|
6f08cb0e88 | ||
|
|
dd65c3fcaa | ||
|
|
fec8641efe | ||
|
|
d5eaa56b60 | ||
|
|
db7e8dd6dc | ||
|
|
9415055e6f | ||
|
|
f597f09914 | ||
|
|
7903228c13 | ||
|
|
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 | ||
|
|
07bdcb5491 | ||
|
|
01ac3be89f | ||
|
|
5f90b5b4c4 | ||
|
|
a616ba50c2 | ||
|
|
3ebaabc1ef | ||
|
|
1510549663 | ||
|
|
db0a757a49 | ||
|
|
20ab51e339 | ||
|
|
948b9c26d9 | ||
|
|
300a4d8067 | ||
|
|
a65afd7524 | ||
|
|
d8458e84f4 | ||
|
|
a6664fbc01 | ||
|
|
111f77c59c | ||
|
|
48218a3dad | ||
|
|
ec3eb2215b | ||
|
|
a6fcf53b10 | ||
|
|
be9bbcc2c7 | ||
|
|
a4a0b29250 | ||
|
|
01b34dd45a | ||
|
|
2d2e4deb82 | ||
|
|
3daa8f479c | ||
|
|
d2ab186e44 | ||
|
|
5b2a6b12af | ||
|
|
5357f504d8 | ||
|
|
df427d80a1 | ||
|
|
b1f5d5ad75 | ||
|
|
af71eed96e | ||
|
|
6293ddacc6 | ||
|
|
1a807c056c | ||
|
|
3bd65b8d85 | ||
|
|
cf6d0598f8 | ||
|
|
a2758f0e0a | ||
|
|
300f5ef949 | ||
|
|
01fef4d357 | ||
|
|
62b521718e | ||
|
|
6da0b6a628 | ||
|
|
9f3b128044 | ||
|
|
a7e215dd5b | ||
|
|
443605d1dc | ||
|
|
1865621a6a | ||
|
|
d94fcbd8a3 | ||
|
|
794b88e5ab | ||
|
|
e60369c817 | ||
|
|
2add30cc77 | ||
|
|
ec3c471df6 | ||
|
|
2f6236353b | ||
|
|
973d4ddbb2 | ||
|
|
0334d52cfb | ||
|
|
88d1948b51 | ||
|
|
11d90dfb68 | ||
|
|
cdc96817e8 | ||
|
|
edea40012c | ||
|
|
67b99c4c8b | ||
|
|
56c3c22568 | ||
|
|
d8d8346d45 | ||
|
|
8b68ecb891 | ||
|
|
c183f1ed6e | ||
|
|
4a9d9ac2ac | ||
|
|
5dffb30b27 | ||
|
|
cf195c7694 | ||
|
|
1922f30f0f | ||
|
|
b6d1c4330f | ||
|
|
aee8994c41 | ||
|
|
593313a684 | ||
|
|
c71caec9df | ||
|
|
89bc92b98e | ||
|
|
17dec098cd | ||
|
|
4e38ec8f57 | ||
|
|
eda7b1789a | ||
|
|
db2510fac5 | ||
|
|
e354dad70b | ||
|
|
02607e116e | ||
|
|
932fd330ce | ||
|
|
c9c0dc9b5b | ||
|
|
2b3e29f3d1 | ||
|
|
b83b624dc3 | ||
|
|
1d3832f562 | ||
|
|
daa358a0ca | ||
|
|
ecf1be42ee | ||
|
|
3d6afe50e3 | ||
|
|
c1bb333555 | ||
|
|
5a386c2802 | ||
|
|
6dddaa03ae | ||
|
|
643a8094a6 | ||
|
|
a62f375f5b | ||
|
|
a498578c17 | ||
|
|
7cf6ab4b51 | ||
|
|
dda920e33e | ||
|
|
ae296fced8 | ||
|
|
cdf381ce41 | ||
|
|
195828cee1 | ||
|
|
cc3560ab29 | ||
|
|
c975896c5e | ||
|
|
627e4513f3 | ||
|
|
c4c05bfafd | ||
|
|
31fb479459 | ||
|
|
1b0e3b3575 | ||
|
|
6206c81546 | ||
|
|
e09210e6c3 | ||
|
|
4089cc5cf0 | ||
|
|
2c6b2f8065 | ||
|
|
112273036b | ||
|
|
df5b55b14f | ||
|
|
40bb7a5ea1 | ||
|
|
cf5b0cbd06 | ||
|
|
504a6c5d89 | ||
|
|
a33e586ff4 | ||
|
|
a1d579e1ec | ||
|
|
59a9fc9a3d | ||
|
|
194d9a0abc | ||
|
|
5566df791c | ||
|
|
1ca416bacf | ||
|
|
97d7229974 | ||
|
|
6a0bfc43dd | ||
|
|
732da0c330 | ||
|
|
012bb5654b | ||
|
|
068fe3113b | ||
|
|
4a74102eb7 | ||
|
|
b310cfeda2 | ||
|
|
07cd855446 | ||
|
|
ab08660c20 | ||
|
|
daf271ee0d | ||
|
|
f949c9f4f0 | ||
|
|
a609eb4bcf | ||
|
|
fd9b6d0ff0 | ||
|
|
cb074528f4 | ||
|
|
5cadf59e10 | ||
|
|
86229bf73b | ||
|
|
cf04c64fee | ||
|
|
f8517a316b | ||
|
|
8bcbd34c27 | ||
|
|
3e35882fee | ||
|
|
cf204fac39 | ||
|
|
dfc22258dd | ||
|
|
b7ac195bfc | ||
|
|
45c74cfe59 | ||
|
|
fe15fde594 | ||
|
|
ec312055be | ||
|
|
b08a0212ff | ||
|
|
3f1688f8b7 | ||
|
|
912f682359 | ||
|
|
1a84090cc7 | ||
|
|
70dadf9964 | ||
|
|
9eab95e870 | ||
|
|
f199e3bf82 | ||
|
|
7d31c2e472 | ||
|
|
ad406c3682 | ||
|
|
2779670fa2 | ||
|
|
5b00bf82fb | ||
|
|
473e0cf839 | ||
|
|
ef01b4aa5e | ||
|
|
c0340843eb | ||
|
|
e6ca25462e | ||
|
|
53494341fc | ||
|
|
5aee97320b | ||
|
|
d5c69c7838 | ||
|
|
9224ea9819 |
58
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
Normal file
58
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Bug 报告
|
||||
description: 在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。
|
||||
title: "[Bug]: "
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: input
|
||||
id: "expectation"
|
||||
attributes:
|
||||
label: "预期情况"
|
||||
description: "描述你认为应该发生什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "describe-the-bug"
|
||||
attributes:
|
||||
label: "实际情况"
|
||||
description: "描述实际发生了什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "reproduction-method"
|
||||
attributes:
|
||||
label: "复现方法"
|
||||
description: "在BUG出现前执行了哪些操作"
|
||||
placeholder: 标序号
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "log"
|
||||
attributes:
|
||||
label: "日志信息"
|
||||
description: "位置在软件当前目录下的guiLogs"
|
||||
placeholder: 在日志开始和结束位置粘贴冒号后的内容:```
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: "more"
|
||||
attributes:
|
||||
label: "额外信息"
|
||||
description: "可选"
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: "latest-version"
|
||||
attributes:
|
||||
label: "我确认已更新至最新版本"
|
||||
description: "否则请更新后尝试"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: "issues"
|
||||
attributes:
|
||||
label: "我确认已查询历史issues"
|
||||
description: "否则请查询后提出"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
34
.github/ISSUE_TEMPLATE/02_feature_request.yml
vendored
Normal file
34
.github/ISSUE_TEMPLATE/02_feature_request.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Feature 请求
|
||||
description: "为这个项目提出一个建议"
|
||||
title: "[Feature request]: "
|
||||
labels: ['enhancement']
|
||||
body:
|
||||
- type: input
|
||||
id: problem
|
||||
attributes:
|
||||
label: 相关问题
|
||||
description: "清楚而简洁地描述问题是什么。"
|
||||
placeholder: "当我想要……时,软件不能……"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: way-to-solve
|
||||
attributes:
|
||||
label: 描述你希望的解决方案
|
||||
description: "你希望发生什么"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: instead
|
||||
attributes:
|
||||
label: 描述你所考虑的替代方案
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: "issues"
|
||||
attributes:
|
||||
label: "我确认已查询历史issues"
|
||||
description: "否则请查询后提出"
|
||||
options:
|
||||
- label: 是
|
||||
required: true
|
||||
25
.github/issue_template.md
vendored
25
.github/issue_template.md
vendored
@@ -1,25 +0,0 @@
|
||||
在提出问题前请先自行排除服务器端问题,同时也请通过搜索确认是否有人提出过相同问题。
|
||||
|
||||
### 预期行为
|
||||
描述你认为应该发生什么
|
||||
|
||||
### 实际行为
|
||||
描述实际发生了什么
|
||||
|
||||
### 复现方法
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### 日志信息,位置在当前目录下的guiLogs
|
||||
<details>
|
||||
|
||||
```
|
||||
在这里粘贴日志
|
||||
```
|
||||
</details>
|
||||
|
||||
### 环境信息
|
||||
|
||||
### 额外信息(可选)
|
||||
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -5,11 +5,14 @@
|
||||
/v2rayN/.vs/
|
||||
/v2rayN/v2rayN/bin/Debug/app.publish
|
||||
/v2rayN/v2rayN/bin/Debug
|
||||
/v2rayN/v2rayN/obj/Debug
|
||||
/v2rayN/.vs/v2rayN/DesignTimeBuild
|
||||
/v2rayN/v2rayN/bin/Release
|
||||
/v2rayN/v2rayN/obj/Release
|
||||
/v2rayN/v2rayN/obj/
|
||||
/v2rayN/.vs/v2rayN/DesignTimeBuild
|
||||
/v2rayN/packages
|
||||
.vs/ProjectSettings.json
|
||||
.vs/slnx.sqlite
|
||||
.vs/VSWorkspaceState.json
|
||||
/v2rayN/v2rayUpgrade/bin/Debug
|
||||
/v2rayN/v2rayUpgrade/bin/Release
|
||||
/v2rayN/v2rayUpgrade/obj/
|
||||
*.user
|
||||
|
||||
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 new to this, please download v2rayN-Core.zip from [releases](https://github.com/2dust/v2rayN/releases)
|
||||
- Otherwise please download v2rayN.zip (you will also need to download v2ray core into the same folder with v2rayN.exe)
|
||||
- Run v2rayN.exe
|
||||
|
||||
### Requirements
|
||||
- Microsoft [.NET Framework 4.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 Runtime](https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net48-offline-installer)
|
||||
- v2fly core [https://github.com/v2fly/v2ray-core/releases](https://github.com/v2fly/v2ray-core/releases)
|
||||
- Xray core [https://github.com/XTLS/Xray-core/releases](https://github.com/XTLS/Xray-core/releases)
|
||||
|
||||
@@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.28010.2050
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "v2rayN", "v2rayN\v2rayN.csproj", "{0A9785E6-D256-4B73-9757-4EF59955FD1E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "v2rayUpgrade", "v2rayUpgrade\v2rayUpgrade.csproj", "{F82BE52A-155C-492C-9E0A-1E917EC62C78}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -20,11 +22,20 @@ Global
|
||||
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F82BE52A-155C-492C-9E0A-1E917EC62C78}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
RESX_SortFileContentOnSave = True
|
||||
SolutionGuid = {56B88873-C9CC-4069-A1E5-DABD6C6E865E}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
220
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
220
v2rayN/v2rayN/Base/HttpClientHelper.cs
Normal file
@@ -0,0 +1,220 @@
|
||||
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;
|
||||
}
|
||||
HttpResponseMessage response = await httpClient.GetAsync(url);
|
||||
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
public async Task<string> GetAsync(HttpClient client, string url, CancellationToken token)
|
||||
{
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
HttpResponseMessage response = await client.GetAsync(url, token);
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
|
||||
}
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
112
v2rayN/v2rayN/Base/ListViewFlickerFree.cs
Normal file
112
v2rayN/v2rayN/Base/ListViewFlickerFree.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace v2rayN.Base
|
||||
{
|
||||
class ListViewFlickerFree : ListView
|
||||
{
|
||||
Action<int, int> _updateFunc;
|
||||
|
||||
public ListViewFlickerFree()
|
||||
{
|
||||
SetStyle(ControlStyles.OptimizedDoubleBuffer
|
||||
| ControlStyles.AllPaintingInWmPaint
|
||||
, true);
|
||||
UpdateStyles();
|
||||
}
|
||||
|
||||
public void RegisterDragEvent(Action<int, int> update)
|
||||
{
|
||||
_updateFunc = update;
|
||||
AllowDrop = true;
|
||||
|
||||
ItemDrag += lv_ItemDrag;
|
||||
DragDrop += lv_DragDrop;
|
||||
DragEnter += lv_DragEnter;
|
||||
DragOver += lv_DragOver;
|
||||
DragLeave += lv_DragLeave;
|
||||
}
|
||||
|
||||
private void lv_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
int targetIndex = InsertionMark.Index;
|
||||
if (targetIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (InsertionMark.AppearsAfterItem)
|
||||
{
|
||||
targetIndex++;
|
||||
}
|
||||
|
||||
|
||||
if (SelectedIndices.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_updateFunc(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)
|
||||
{
|
||||
InsertionMark.Index = -1;
|
||||
}
|
||||
|
||||
private void lv_DragOver(object sender, DragEventArgs e)
|
||||
{
|
||||
Point targetPoint = PointToClient(new Point(e.X, e.Y));
|
||||
int targetIndex = InsertionMark.NearestIndex(targetPoint);
|
||||
|
||||
if (targetIndex > -1)
|
||||
{
|
||||
Rectangle itemBounds = GetItemRect(targetIndex);
|
||||
EnsureVisible(targetIndex);
|
||||
|
||||
if (targetPoint.Y > itemBounds.Top + (itemBounds.Height / 2))
|
||||
{
|
||||
InsertionMark.AppearsAfterItem = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
InsertionMark.AppearsAfterItem = false;
|
||||
}
|
||||
}
|
||||
InsertionMark.Index = targetIndex;
|
||||
}
|
||||
|
||||
private void lv_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
InsertionMark.Index = -1;
|
||||
}
|
||||
public void SetScrollPosition(int pos)
|
||||
{
|
||||
pos = Math.Min(Items.Count - 1, pos);
|
||||
|
||||
if (pos < 0 || pos >= Items.Count)
|
||||
return;
|
||||
|
||||
EnsureVisible(pos);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
if (TopItem != null && TopItem.Index != pos)
|
||||
TopItem = Items[pos];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace v2rayN
|
||||
namespace v2rayN.Base
|
||||
{
|
||||
static class StringEx
|
||||
{
|
||||
@@ -24,7 +24,7 @@ namespace v2rayN
|
||||
|
||||
public static bool IsWhiteSpace(this string value)
|
||||
{
|
||||
foreach (var c in value)
|
||||
foreach (char c in value)
|
||||
{
|
||||
if (char.IsWhiteSpace(c)) continue;
|
||||
|
||||
62
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
62
v2rayN/v2rayN/Forms/AddServer2Form.Designer.cs
generated
@@ -31,6 +31,13 @@
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer2Form));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtPreSocksPort = new System.Windows.Forms.TextBox();
|
||||
this.btnEdit = new System.Windows.Forms.Button();
|
||||
this.cmbCoreType = new System.Windows.Forms.ComboBox();
|
||||
this.labCoreType = new System.Windows.Forms.Label();
|
||||
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();
|
||||
@@ -54,6 +61,13 @@
|
||||
// groupBox1
|
||||
//
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.txtPreSocksPort);
|
||||
this.groupBox1.Controls.Add(this.btnEdit);
|
||||
this.groupBox1.Controls.Add(this.cmbCoreType);
|
||||
this.groupBox1.Controls.Add(this.labCoreType);
|
||||
this.groupBox1.Controls.Add(this.btnBrowse);
|
||||
this.groupBox1.Controls.Add(this.txtAddress);
|
||||
this.groupBox1.Controls.Add(this.label13);
|
||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||
@@ -62,6 +76,47 @@
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// txtPreSocksPort
|
||||
//
|
||||
resources.ApplyResources(this.txtPreSocksPort, "txtPreSocksPort");
|
||||
this.txtPreSocksPort.Name = "txtPreSocksPort";
|
||||
//
|
||||
// btnEdit
|
||||
//
|
||||
resources.ApplyResources(this.btnEdit, "btnEdit");
|
||||
this.btnEdit.Name = "btnEdit";
|
||||
this.btnEdit.UseVisualStyleBackColor = true;
|
||||
this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
|
||||
//
|
||||
// cmbCoreType
|
||||
//
|
||||
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||
this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType.FormattingEnabled = true;
|
||||
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");
|
||||
@@ -136,5 +191,12 @@
|
||||
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;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtPreSocksPort;
|
||||
private System.Windows.Forms.Label label3;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
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 +19,28 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddServer2Form_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
List<string> coreTypes = new List<string>();
|
||||
foreach (ECoreType it in Enum.GetValues(typeof(ECoreType)))
|
||||
{
|
||||
if (it == ECoreType.v2rayN)
|
||||
continue;
|
||||
coreTypes.Add(it.ToString());
|
||||
}
|
||||
|
||||
cmbCoreType.Items.AddRange(coreTypes.ToArray());
|
||||
cmbCoreType.Items.Add(string.Empty);
|
||||
|
||||
txtAddress.ReadOnly = true;
|
||||
if (vmessItem != null)
|
||||
{
|
||||
BindingServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
vmessItem = new VmessItem
|
||||
{
|
||||
groupId = groupId
|
||||
};
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
@@ -32,10 +50,11 @@ namespace v2rayN.Forms
|
||||
/// </summary>
|
||||
private void BindingServer()
|
||||
{
|
||||
vmessItem = config.vmess[EditIndex];
|
||||
txtRemarks.Text = vmessItem.remarks;
|
||||
txtAddress.Text = vmessItem.address;
|
||||
txtAddress.ReadOnly = true;
|
||||
txtPreSocksPort.Text = vmessItem.preSocksPort.ToString();
|
||||
|
||||
cmbCoreType.Text = vmessItem.coreType == null ? string.Empty : vmessItem.coreType.ToString();
|
||||
}
|
||||
|
||||
|
||||
@@ -52,24 +71,85 @@ 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;
|
||||
vmessItem.preSocksPort = Utils.ToInt(txtPreSocksPort.Text);
|
||||
|
||||
if (ConfigHandler.EditCustomServer(ref config, vmessItem, EditIndex) == 0)
|
||||
if (Utils.IsNullOrEmpty(cmbCoreType.Text))
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
vmessItem.coreType = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.Show(UIRes.I18N("OperationFailed"));
|
||||
vmessItem.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), cmbCoreType.Text);
|
||||
}
|
||||
|
||||
if (ConfigHandler.EditCustomServer(ref config, vmessItem) == 0)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
DialogResult = Utils.IsNullOrEmpty(vmessItem.indexId) ? DialogResult.Cancel : 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,98 +117,293 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||
<value>txtAddress</value>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</value>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>370, 41</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<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>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</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 name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>* After setting this value, an socks service will be started using V2ray to provide functions such as speed display</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
<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=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>labCoreType.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>AddServer2Form</value>
|
||||
<data name="labCoreType.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
<data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</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">
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 27</value>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<data name="cmbCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 157</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
</data>
|
||||
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="labCoreType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Custom configuration server</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 110</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>357, 17</value>
|
||||
</data>
|
||||
<data name=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>46</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 37</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>450, 17</value>
|
||||
</data>
|
||||
<data name="btnEdit.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>43</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.Name" xml:space="preserve">
|
||||
<value>txtPreSocksPort</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="txtPreSocksPort.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>45</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnEdit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>208, 110</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>&Edit</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 21</value>
|
||||
</data>
|
||||
<data name=">>label13.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
<data name="btnBrowse.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 name="cmbCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>41</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Alias (remarks)</value>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>AddServer2Form</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>446, 26</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Name" xml:space="preserve">
|
||||
<value>labCoreType</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="cmbCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 20</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="labCoreType.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>42</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="txtPreSocksPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>89, 21</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 10</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core Type</value>
|
||||
</data>
|
||||
<data name="txtPreSocksPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 195</value>
|
||||
</data>
|
||||
<data name="btnEdit.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.Name" xml:space="preserve">
|
||||
<value>btnEdit</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>229, 189</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>44</value>
|
||||
</data>
|
||||
<data name="txtAddress.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="labCoreType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 161</value>
|
||||
</data>
|
||||
<data name=">>label13.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
@@ -216,174 +411,162 @@
|
||||
<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="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 60</value>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</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 name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Edit custom configuration server</value>
|
||||
<data name=">>cmbCoreType.Name" xml:space="preserve">
|
||||
<value>cmbCoreType</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 104</value>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>&Browse</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 10</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>panel1.Name" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>2</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, 211</value>
|
||||
</data>
|
||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>label13.Type" xml:space="preserve">
|
||||
<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=">>groupBox1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Pre-Socks Port</value>
|
||||
</data>
|
||||
<data name=">>panel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 10</value>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 259</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="btnEdit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>labCoreType.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 12</value>
|
||||
</data>
|
||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Address</value>
|
||||
</data>
|
||||
<data name=">>btnEdit.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 201</value>
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>cmbCoreType.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>* Fill in manually</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>txtPreSocksPort.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 199</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 319</value>
|
||||
</data>
|
||||
<data name=">>btnBrowse.Name" xml:space="preserve">
|
||||
<value>btnBrowse</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>611, 249</value>
|
||||
</data>
|
||||
<data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>40</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>label13.Name" xml:space="preserve">
|
||||
<value>label13</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 62</value>
|
||||
<data name=">>btnEdit.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||
<value>txtAddress</value>
|
||||
</data>
|
||||
<data name=">>txtAddress.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Server</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 27</value>
|
||||
</data>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 62</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>0</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="label13.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>446, 26</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<data name=">>panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</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=">>label13.Name" xml:space="preserve">
|
||||
<value>label13</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</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>611, 271</value>
|
||||
</data>
|
||||
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||
<value>0</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=">>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=">>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>
|
||||
|
||||
@@ -120,22 +120,53 @@
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>337, 41</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>* 自定义配置的Socks端口值,可不设置;当设置此值后,将使用V2ray-core额外启动一个前置Socks服务,提供分流和速度显示等功能</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>59, 12</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Socks端口</value>
|
||||
</data>
|
||||
<data name="btnEdit.Text" xml:space="preserve">
|
||||
<value>编辑(&E)</value>
|
||||
</data>
|
||||
<data name="labCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="labCoreType.Text" xml:space="preserve">
|
||||
<value>Core类型</value>
|
||||
</data>
|
||||
<data name="btnBrowse.Text" xml:space="preserve">
|
||||
<value>浏览(&B)</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑自定义配置服务器</value>
|
||||
<value>自定义配置</value>
|
||||
</data>
|
||||
</root>
|
||||
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,143 +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.Show(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();
|
||||
|
||||
string msg;
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.Show(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,132 +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.Show(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();
|
||||
|
||||
string msg;
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.Show(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,59 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddServerForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (EditIndex >= 0)
|
||||
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(vmessItem).ToArray());
|
||||
break;
|
||||
case EConfigType.Socks:
|
||||
panSocks.Dock = DockStyle.Fill;
|
||||
panSocks.Visible = true;
|
||||
panTran.Visible = false;
|
||||
Height = 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 = new VmessItem
|
||||
{
|
||||
groupId = groupId
|
||||
};
|
||||
ClearServer();
|
||||
}
|
||||
}
|
||||
@@ -34,260 +78,208 @@ 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;
|
||||
}
|
||||
|
||||
cmbCoreType.Text = vmessItem.coreType == null ? string.Empty : 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 (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0)
|
||||
if (Utils.IsNullOrEmpty(cmbCoreType.Text))
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
vmessItem.coreType = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.Show(UIRes.I18N("OperationFailed"));
|
||||
vmessItem.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), cmbCoreType.Text);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
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();
|
||||
fileDialog.Multiselect = false;
|
||||
fileDialog.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.Show(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();
|
||||
|
||||
string msg;
|
||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out msg);
|
||||
if (vmessItem == null)
|
||||
{
|
||||
UI.Show(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();
|
||||
}
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -123,129 +123,91 @@
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="btnGUID.Text" xml:space="preserve">
|
||||
<value>生成(&G)</value>
|
||||
</data>
|
||||
<data name="label13.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>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label24.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>270, 156</value>
|
||||
</data>
|
||||
<data name="label24.Text" xml:space="preserve">
|
||||
<value>3)QUIC 加密密钥</value>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>115, 61</value>
|
||||
</data>
|
||||
<data name="label23.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<data name="label23.Text" xml:space="preserve">
|
||||
<value>4)QUIC 加密方式</value>
|
||||
</data>
|
||||
<data name="label22.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label22.Text" xml:space="preserve">
|
||||
<value>默认true</value>
|
||||
</data>
|
||||
<data name="label20.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>149, 12</value>
|
||||
</data>
|
||||
<data name="label20.Text" xml:space="preserve">
|
||||
<value>3)h2 host中间逗号(,)隔开</value>
|
||||
</data>
|
||||
<data name="label19.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label19.Text" xml:space="preserve">
|
||||
<value>路径(path)</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="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>197, 12</value>
|
||||
<value>89, 12</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>*tcp或kcp或QUIC伪装类型,默认none</value>
|
||||
<value>密码(password)</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>124, 58</value>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="txtRequestHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>334, 51</value>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>流控(flow)</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="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="label9.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>143, 12</value>
|
||||
</data>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>*默认tcp,选错会无法连接</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="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 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>107, 12</value>
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>传输协议(network)</value>
|
||||
<value>用户ID(id)</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 143</value>
|
||||
<data name="label9.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>211, 20</value>
|
||||
<data name="label9.Text" xml:space="preserve">
|
||||
<value>流控(flow)</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
<data name="label10.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
<data name="label10.Text" xml:space="preserve">
|
||||
<value>加密(encryption)</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>113, 12</value>
|
||||
<data name="button1.Text" xml:space="preserve">
|
||||
<value>生成</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>加密方式(security)</value>
|
||||
<data name="label11.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>71, 12</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 name="label11.Text" xml:space="preserve">
|
||||
<value>*非空(none)</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
@@ -253,11 +215,38 @@
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>用户ID(id)</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
<data name="btnGUID.Text" xml:space="preserve">
|
||||
<value>生成(&G)</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>端口(port)</value>
|
||||
<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>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>加密方式(security)</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
@@ -265,37 +254,22 @@
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>地址(address)</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>端口(port)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</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="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="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="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="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[VMess]服务器</value>
|
||||
</data>
|
||||
<data name="btnGUID5.Text" xml:space="preserve">
|
||||
<value>生成</value>
|
||||
</data>
|
||||
<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);
|
||||
Icon = new System.Drawing.Icon(file);
|
||||
return;
|
||||
}
|
||||
this.Icon = icon;
|
||||
|
||||
Icon = Properties.Resources.NotifyIcon1;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
121
v2rayN/v2rayN/Forms/BaseServerForm.resx
Normal file
121
v2rayN/v2rayN/Forms/BaseServerForm.resx
Normal file
@@ -0,0 +1,121 @@
|
||||
<?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" />
|
||||
</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)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,472 +117,421 @@
|
||||
<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>396, 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>0</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>
|
||||
<data name=">>txtSecurity.Name" xml:space="preserve">
|
||||
<value>txtSecurity</value>
|
||||
</data>
|
||||
<data name=">>txtSecurity.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=">>txtSecurity.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtSecurity.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<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="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<data name="label2.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=">>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>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 117</value>
|
||||
</data>
|
||||
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 21</value>
|
||||
</data>
|
||||
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name=">>txtId.Name" xml:space="preserve">
|
||||
<value>txtId</value>
|
||||
</data>
|
||||
<data name=">>txtId.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=">>txtId.Parent" xml:space="preserve">
|
||||
<value>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtId.ZOrder" xml:space="preserve">
|
||||
<value>2</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=">>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>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>3</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=">>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>4</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=">>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>5</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=">>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 name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>6</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=">>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>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>txtPort.ZOrder" xml:space="preserve">
|
||||
<value>7</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">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Server port</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>groupBox1</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 27</value>
|
||||
</data>
|
||||
<data name="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>359, 21</value>
|
||||
</data>
|
||||
<data name="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</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>9</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=">>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>10</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=">>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.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>303, 17</value>
|
||||
</data>
|
||||
<data name="btnOK.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="btnReset.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>panel1</value>
|
||||
</data>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</value>
|
||||
<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=">>btnOK.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<data name=">>btnOK.Name" xml:space="preserve">
|
||||
<value>btnOK</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>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>panel2.Name" xml:space="preserve">
|
||||
<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=">>panel2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>GlobalHotkeySettingForm</value>
|
||||
</data>
|
||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 25</value>
|
||||
<data name="txtGlobalHotkey3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>189, 138</value>
|
||||
</data>
|
||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>547, 10</value>
|
||||
<data name="txtGlobalHotkey1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>34</value>
|
||||
</data>
|
||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<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=">>panel1.Name" xml:space="preserve">
|
||||
<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=">>panel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="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=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<metadata name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>235, 22</value>
|
||||
<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="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>Import URL from clipboard</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="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.Name" xml:space="preserve">
|
||||
<value>menuServer</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=">>menuServer.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>menuServer.ZOrder" xml:space="preserve">
|
||||
<value>3</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>547, 291</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Edit or add a [Socks] server</value>
|
||||
</data>
|
||||
<data name=">>MenuItem1.Name" xml:space="preserve">
|
||||
<value>MenuItem1</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=">>menuItemImportClipboard.Name" xml:space="preserve">
|
||||
<value>menuItemImportClipboard</value>
|
||||
</data>
|
||||
<data name=">>menuItemImportClipboard.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.Name" xml:space="preserve">
|
||||
<value>AddServer4Form</value>
|
||||
<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>
|
||||
@@ -120,71 +120,47 @@
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
<data name="btnReset.Text" xml:space="preserve">
|
||||
<value>重置(&R)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="txtSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 85</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="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 115</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">
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>密码(可选)</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 12</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
<value>重启后生效</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>服务器地址</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</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>
|
||||
<value>显示主界面</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[Socks]服务器</value>
|
||||
<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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
273
v2rayN/v2rayN/Forms/GroupSettingForm.resx
Normal file
273
v2rayN/v2rayN/Forms/GroupSettingForm.resx
Normal file
@@ -0,0 +1,273 @@
|
||||
<?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="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="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>355, 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>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, 351</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>614, 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>614, 411</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Group settings</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>GroupSettingForm</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>
|
||||
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>
|
||||
@@ -1,56 +0,0 @@
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
class ListViewFlickerFree : ListView
|
||||
{
|
||||
public ListViewFlickerFree()
|
||||
{
|
||||
SetStyle(ControlStyles.OptimizedDoubleBuffer
|
||||
| ControlStyles.AllPaintingInWmPaint
|
||||
, true);
|
||||
UpdateStyles();
|
||||
}
|
||||
|
||||
|
||||
public void AutoResizeColumns()
|
||||
{
|
||||
try
|
||||
{
|
||||
int count = this.Columns.Count;
|
||||
int MaxWidth = 0;
|
||||
Graphics graphics = this.CreateGraphics();
|
||||
Font font = this.Font;
|
||||
ListView.ListViewItemCollection items = this.Items;
|
||||
|
||||
string str;
|
||||
int width;
|
||||
|
||||
this.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
630
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
630
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
@@ -30,21 +30,26 @@
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.lvServers = new v2rayN.Forms.ListViewFlickerFree();
|
||||
this.scServers = new System.Windows.Forms.SplitContainer();
|
||||
this.lvServers = new v2rayN.Base.ListViewFlickerFree();
|
||||
this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menuAddVmessServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddVlessServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddShadowsocksServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddSocksServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddTrojanServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddCustomServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuAddServers = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuScanScreen = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuServerFilter = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRemoveServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRemoveDuplicateServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuCopyServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetDefaultServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuMoveToGroup = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveEvent = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@@ -55,94 +60,106 @@
|
||||
this.menuTcpingServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSortServerResult = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbTestMe = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuClearServerStatistics = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuExport2ClientConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuExport2SubContent = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.qrCodeControl = new v2rayN.Forms.QRCodeControl();
|
||||
this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tabGroup = new System.Windows.Forms.TabControl();
|
||||
this.qrCodeControl = new v2rayN.Forms.QRCodeControl();
|
||||
this.scBig = new System.Windows.Forms.SplitContainer();
|
||||
this.gbServers = new System.Windows.Forms.GroupBox();
|
||||
this.mainMsgControl = new v2rayN.Forms.MainMsgControl();
|
||||
this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components);
|
||||
this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.menuSysAgentEnabled = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuGlobalPAC = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuKeep = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuKeepPAC = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuRoutings = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuUpdateSubViaProxy = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.bgwScan = new System.ComponentModel.BackgroundWorker();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.txtMsgBox = new System.Windows.Forms.TextBox();
|
||||
this.ssMain = new System.Windows.Forms.StatusStrip();
|
||||
this.toolSslSocksPortLab = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslSocksPort = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank1 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank2 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslPacPortLab = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslPacPort = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank3 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.tsMain = new System.Windows.Forms.ToolStrip();
|
||||
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbSub = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tsbSubSetting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbSubUpdateViaProxy = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbSubGroupUpdate = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbSubGroupUpdateViaProxy = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton();
|
||||
this.tsbSetting = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tsbOptionSetting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbRoutingSetting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbGlobalHotkeySetting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbGroupSetting = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbBackupGuiNConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbRestoreGuiNConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbReload = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateSagerNetCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbCheckUpdateClashCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbCheckUpdateClashMetaCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbCheckUpdateGeo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbV2rayWebsite = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbLanguageDef = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbLanguageZhHans = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tsbPromotion = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsbClose = new System.Windows.Forms.ToolStripButton();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
this.splitContainer1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.scServers)).BeginInit();
|
||||
this.scServers.Panel1.SuspendLayout();
|
||||
this.scServers.Panel2.SuspendLayout();
|
||||
this.scServers.SuspendLayout();
|
||||
this.cmsLv.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.scBig)).BeginInit();
|
||||
this.scBig.Panel1.SuspendLayout();
|
||||
this.scBig.Panel2.SuspendLayout();
|
||||
this.scBig.SuspendLayout();
|
||||
this.gbServers.SuspendLayout();
|
||||
this.cmsMain.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.ssMain.SuspendLayout();
|
||||
this.tsMain.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// splitContainer1
|
||||
// scServers
|
||||
//
|
||||
resources.ApplyResources(this.splitContainer1, "splitContainer1");
|
||||
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
this.splitContainer1.Name = "splitContainer1";
|
||||
resources.ApplyResources(this.scServers, "scServers");
|
||||
this.scServers.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
this.scServers.Name = "scServers";
|
||||
//
|
||||
// splitContainer1.Panel1
|
||||
// scServers.Panel1
|
||||
//
|
||||
this.splitContainer1.Panel1.Controls.Add(this.lvServers);
|
||||
this.scServers.Panel1.Controls.Add(this.lvServers);
|
||||
this.scServers.Panel1.Controls.Add(this.tabGroup);
|
||||
//
|
||||
// splitContainer1.Panel2
|
||||
// scServers.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.qrCodeControl);
|
||||
this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);
|
||||
this.scServers.Panel2.Controls.Add(this.qrCodeControl);
|
||||
this.scServers.TabStop = false;
|
||||
//
|
||||
// lvServers
|
||||
//
|
||||
@@ -158,7 +175,9 @@
|
||||
this.lvServers.Name = "lvServers";
|
||||
this.lvServers.UseCompatibleStateImageBehavior = false;
|
||||
this.lvServers.View = System.Windows.Forms.View.Details;
|
||||
this.lvServers.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvServers_ColumnClick);
|
||||
this.lvServers.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged);
|
||||
this.lvServers.Click += new System.EventHandler(this.lvServers_Click);
|
||||
this.lvServers.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick);
|
||||
this.lvServers.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvServers_KeyDown);
|
||||
//
|
||||
@@ -167,27 +186,31 @@
|
||||
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuAddVmessServer,
|
||||
this.menuAddVlessServer,
|
||||
this.menuAddShadowsocksServer,
|
||||
this.menuAddSocksServer,
|
||||
this.menuAddTrojanServer,
|
||||
this.menuAddCustomServer,
|
||||
this.menuAddServers,
|
||||
this.menuScanScreen,
|
||||
this.toolStripSeparator1,
|
||||
this.menuServerFilter,
|
||||
this.menuRemoveServer,
|
||||
this.menuRemoveDuplicateServer,
|
||||
this.menuCopyServer,
|
||||
this.menuSetDefaultServer,
|
||||
this.toolStripSeparator3,
|
||||
this.menuMoveTop,
|
||||
this.menuMoveUp,
|
||||
this.menuMoveDown,
|
||||
this.menuMoveBottom,
|
||||
this.menuMoveToGroup,
|
||||
this.menuMoveEvent,
|
||||
this.menuSelectAll,
|
||||
this.toolStripSeparator9,
|
||||
this.menuPingServer,
|
||||
this.menuTcpingServer,
|
||||
this.menuRealPingServer,
|
||||
this.menuSpeedServer,
|
||||
this.menuSortServerResult,
|
||||
this.tsbTestMe,
|
||||
this.menuClearServerStatistics,
|
||||
this.toolStripSeparator6,
|
||||
this.menuExport2ClientConfig,
|
||||
this.menuExport2ServerConfig,
|
||||
@@ -203,6 +226,12 @@
|
||||
resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
|
||||
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
|
||||
//
|
||||
// menuAddVlessServer
|
||||
//
|
||||
this.menuAddVlessServer.Name = "menuAddVlessServer";
|
||||
resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
|
||||
this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
|
||||
//
|
||||
// menuAddShadowsocksServer
|
||||
//
|
||||
this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
|
||||
@@ -215,6 +244,12 @@
|
||||
resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
|
||||
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
|
||||
//
|
||||
// menuAddTrojanServer
|
||||
//
|
||||
this.menuAddTrojanServer.Name = "menuAddTrojanServer";
|
||||
resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
|
||||
this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
|
||||
//
|
||||
// menuAddCustomServer
|
||||
//
|
||||
this.menuAddCustomServer.Name = "menuAddCustomServer";
|
||||
@@ -238,6 +273,12 @@
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// menuServerFilter
|
||||
//
|
||||
this.menuServerFilter.Name = "menuServerFilter";
|
||||
resources.ApplyResources(this.menuServerFilter, "menuServerFilter");
|
||||
this.menuServerFilter.Click += new System.EventHandler(this.menuServerFilter_Click);
|
||||
//
|
||||
// menuRemoveServer
|
||||
//
|
||||
this.menuRemoveServer.Name = "menuRemoveServer";
|
||||
@@ -267,6 +308,22 @@
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||
//
|
||||
// menuMoveToGroup
|
||||
//
|
||||
this.menuMoveToGroup.Name = "menuMoveToGroup";
|
||||
resources.ApplyResources(this.menuMoveToGroup, "menuMoveToGroup");
|
||||
this.menuMoveToGroup.Click += new System.EventHandler(this.menuMoveToGroup_Click);
|
||||
//
|
||||
// menuMoveEvent
|
||||
//
|
||||
this.menuMoveEvent.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuMoveTop,
|
||||
this.menuMoveUp,
|
||||
this.menuMoveDown,
|
||||
this.menuMoveBottom});
|
||||
this.menuMoveEvent.Name = "menuMoveEvent";
|
||||
resources.ApplyResources(this.menuMoveEvent, "menuMoveEvent");
|
||||
//
|
||||
// menuMoveTop
|
||||
//
|
||||
this.menuMoveTop.Name = "menuMoveTop";
|
||||
@@ -326,6 +383,24 @@
|
||||
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
|
||||
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
|
||||
//
|
||||
// menuSortServerResult
|
||||
//
|
||||
this.menuSortServerResult.Name = "menuSortServerResult";
|
||||
resources.ApplyResources(this.menuSortServerResult, "menuSortServerResult");
|
||||
this.menuSortServerResult.Click += new System.EventHandler(this.menuSortServerResult_Click);
|
||||
//
|
||||
// tsbTestMe
|
||||
//
|
||||
this.tsbTestMe.Name = "tsbTestMe";
|
||||
resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
|
||||
this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click);
|
||||
//
|
||||
// menuClearServerStatistics
|
||||
//
|
||||
this.menuClearServerStatistics.Name = "menuClearServerStatistics";
|
||||
resources.ApplyResources(this.menuClearServerStatistics, "menuClearServerStatistics");
|
||||
this.menuClearServerStatistics.Click += new System.EventHandler(this.menuClearStatistic_Click);
|
||||
//
|
||||
// toolStripSeparator6
|
||||
//
|
||||
this.toolStripSeparator6.Name = "toolStripSeparator6";
|
||||
@@ -355,11 +430,6 @@
|
||||
resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
|
||||
this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click);
|
||||
//
|
||||
// qrCodeControl
|
||||
//
|
||||
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
|
||||
this.qrCodeControl.Name = "qrCodeControl";
|
||||
//
|
||||
// tsbServer
|
||||
//
|
||||
this.tsbServer.DropDown = this.cmsLv;
|
||||
@@ -367,6 +437,43 @@
|
||||
resources.ApplyResources(this.tsbServer, "tsbServer");
|
||||
this.tsbServer.Name = "tsbServer";
|
||||
//
|
||||
// tabGroup
|
||||
//
|
||||
resources.ApplyResources(this.tabGroup, "tabGroup");
|
||||
this.tabGroup.Name = "tabGroup";
|
||||
this.tabGroup.SelectedIndex = 0;
|
||||
this.tabGroup.SelectedIndexChanged += new System.EventHandler(this.tabGroup_SelectedIndexChanged);
|
||||
//
|
||||
// qrCodeControl
|
||||
//
|
||||
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
|
||||
this.qrCodeControl.Name = "qrCodeControl";
|
||||
//
|
||||
// scBig
|
||||
//
|
||||
resources.ApplyResources(this.scBig, "scBig");
|
||||
this.scBig.Name = "scBig";
|
||||
//
|
||||
// scBig.Panel1
|
||||
//
|
||||
this.scBig.Panel1.Controls.Add(this.gbServers);
|
||||
//
|
||||
// scBig.Panel2
|
||||
//
|
||||
this.scBig.Panel2.Controls.Add(this.mainMsgControl);
|
||||
//
|
||||
// gbServers
|
||||
//
|
||||
this.gbServers.Controls.Add(this.scServers);
|
||||
resources.ApplyResources(this.gbServers, "gbServers");
|
||||
this.gbServers.Name = "gbServers";
|
||||
this.gbServers.TabStop = false;
|
||||
//
|
||||
// mainMsgControl
|
||||
//
|
||||
resources.ApplyResources(this.mainMsgControl, "mainMsgControl");
|
||||
this.mainMsgControl.Name = "mainMsgControl";
|
||||
//
|
||||
// notifyMain
|
||||
//
|
||||
this.notifyMain.ContextMenuStrip = this.cmsMain;
|
||||
@@ -378,12 +485,14 @@
|
||||
this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
resources.ApplyResources(this.cmsMain, "cmsMain");
|
||||
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuSysAgentEnabled,
|
||||
this.menuSysAgentMode,
|
||||
this.menuRoutings,
|
||||
this.menuServers,
|
||||
this.toolStripSeparator13,
|
||||
this.menuAddServers2,
|
||||
this.menuScanScreen2,
|
||||
this.menuCopyPACUrl,
|
||||
this.menuUpdateSubscriptions,
|
||||
this.menuUpdateSubViaProxy,
|
||||
this.toolStripSeparator2,
|
||||
this.menuExit});
|
||||
this.cmsMain.Name = "contextMenuStrip1";
|
||||
@@ -391,51 +500,48 @@
|
||||
this.cmsMain.ShowCheckMargin = true;
|
||||
this.cmsMain.ShowImageMargin = false;
|
||||
//
|
||||
// menuSysAgentEnabled
|
||||
//
|
||||
this.menuSysAgentEnabled.Name = "menuSysAgentEnabled";
|
||||
resources.ApplyResources(this.menuSysAgentEnabled, "menuSysAgentEnabled");
|
||||
this.menuSysAgentEnabled.Click += new System.EventHandler(this.menuSysAgentEnabled_Click);
|
||||
//
|
||||
// menuSysAgentMode
|
||||
//
|
||||
this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuKeepClear,
|
||||
this.menuGlobal,
|
||||
this.menuGlobalPAC,
|
||||
this.menuKeep,
|
||||
this.menuKeepPAC});
|
||||
this.menuKeepNothing});
|
||||
this.menuSysAgentMode.Name = "menuSysAgentMode";
|
||||
resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
|
||||
//
|
||||
// menuKeepClear
|
||||
//
|
||||
this.menuKeepClear.Name = "menuKeepClear";
|
||||
resources.ApplyResources(this.menuKeepClear, "menuKeepClear");
|
||||
this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click);
|
||||
//
|
||||
// menuGlobal
|
||||
//
|
||||
this.menuGlobal.Name = "menuGlobal";
|
||||
resources.ApplyResources(this.menuGlobal, "menuGlobal");
|
||||
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
|
||||
//
|
||||
// menuGlobalPAC
|
||||
// menuKeepNothing
|
||||
//
|
||||
this.menuGlobalPAC.Name = "menuGlobalPAC";
|
||||
resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC");
|
||||
this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click);
|
||||
this.menuKeepNothing.Name = "menuKeepNothing";
|
||||
resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
|
||||
this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
|
||||
//
|
||||
// menuKeep
|
||||
// menuRoutings
|
||||
//
|
||||
this.menuKeep.Name = "menuKeep";
|
||||
resources.ApplyResources(this.menuKeep, "menuKeep");
|
||||
this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click);
|
||||
//
|
||||
// menuKeepPAC
|
||||
//
|
||||
this.menuKeepPAC.Name = "menuKeepPAC";
|
||||
resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC");
|
||||
this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click);
|
||||
this.menuRoutings.Name = "menuRoutings";
|
||||
resources.ApplyResources(this.menuRoutings, "menuRoutings");
|
||||
//
|
||||
// menuServers
|
||||
//
|
||||
this.menuServers.Name = "menuServers";
|
||||
resources.ApplyResources(this.menuServers, "menuServers");
|
||||
//
|
||||
// toolStripSeparator13
|
||||
//
|
||||
this.toolStripSeparator13.Name = "toolStripSeparator13";
|
||||
resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
|
||||
//
|
||||
// menuAddServers2
|
||||
//
|
||||
this.menuAddServers2.Name = "menuAddServers2";
|
||||
@@ -448,11 +554,17 @@
|
||||
resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
|
||||
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
|
||||
//
|
||||
// menuCopyPACUrl
|
||||
// menuUpdateSubscriptions
|
||||
//
|
||||
this.menuCopyPACUrl.Name = "menuCopyPACUrl";
|
||||
resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl");
|
||||
this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click);
|
||||
this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
|
||||
resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
|
||||
this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
|
||||
//
|
||||
// menuUpdateSubViaProxy
|
||||
//
|
||||
this.menuUpdateSubViaProxy.Name = "menuUpdateSubViaProxy";
|
||||
resources.ApplyResources(this.menuUpdateSubViaProxy, "menuUpdateSubViaProxy");
|
||||
this.menuUpdateSubViaProxy.Click += new System.EventHandler(this.menuUpdateSubViaProxy_Click);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
@@ -465,113 +577,6 @@
|
||||
resources.ApplyResources(this.menuExit, "menuExit");
|
||||
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
|
||||
//
|
||||
// bgwScan
|
||||
//
|
||||
this.bgwScan.WorkerReportsProgress = true;
|
||||
this.bgwScan.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgwScan_DoWork);
|
||||
this.bgwScan.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bgwScan_ProgressChanged);
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.splitContainer1);
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.txtMsgBox);
|
||||
this.groupBox2.Controls.Add(this.ssMain);
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// 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;
|
||||
resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
|
||||
this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
|
||||
this.txtMsgBox.Name = "txtMsgBox";
|
||||
this.txtMsgBox.ReadOnly = true;
|
||||
//
|
||||
// ssMain
|
||||
//
|
||||
this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolSslSocksPortLab,
|
||||
this.toolSslSocksPort,
|
||||
this.toolSslBlank1,
|
||||
this.toolSslHttpPortLab,
|
||||
this.toolSslHttpPort,
|
||||
this.toolSslBlank2,
|
||||
this.toolSslPacPortLab,
|
||||
this.toolSslPacPort,
|
||||
this.toolSslBlank3,
|
||||
this.toolSslServerSpeed,
|
||||
this.toolSslBlank4});
|
||||
resources.ApplyResources(this.ssMain, "ssMain");
|
||||
this.ssMain.Name = "ssMain";
|
||||
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
|
||||
//
|
||||
// toolSslSocksPortLab
|
||||
//
|
||||
resources.ApplyResources(this.toolSslSocksPortLab, "toolSslSocksPortLab");
|
||||
this.toolSslSocksPortLab.Name = "toolSslSocksPortLab";
|
||||
//
|
||||
// toolSslSocksPort
|
||||
//
|
||||
this.toolSslSocksPort.Name = "toolSslSocksPort";
|
||||
resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
|
||||
//
|
||||
// toolSslBlank1
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank1, "toolSslBlank1");
|
||||
this.toolSslBlank1.Name = "toolSslBlank1";
|
||||
this.toolSslBlank1.Spring = true;
|
||||
//
|
||||
// toolSslHttpPortLab
|
||||
//
|
||||
resources.ApplyResources(this.toolSslHttpPortLab, "toolSslHttpPortLab");
|
||||
this.toolSslHttpPortLab.Name = "toolSslHttpPortLab";
|
||||
//
|
||||
// toolSslHttpPort
|
||||
//
|
||||
this.toolSslHttpPort.Name = "toolSslHttpPort";
|
||||
resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
|
||||
//
|
||||
// toolSslBlank2
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank2, "toolSslBlank2");
|
||||
this.toolSslBlank2.Name = "toolSslBlank2";
|
||||
this.toolSslBlank2.Spring = true;
|
||||
//
|
||||
// toolSslPacPortLab
|
||||
//
|
||||
resources.ApplyResources(this.toolSslPacPortLab, "toolSslPacPortLab");
|
||||
this.toolSslPacPortLab.Name = "toolSslPacPortLab";
|
||||
//
|
||||
// toolSslPacPort
|
||||
//
|
||||
this.toolSslPacPort.Name = "toolSslPacPort";
|
||||
resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort");
|
||||
//
|
||||
// toolSslBlank3
|
||||
//
|
||||
resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3");
|
||||
this.toolSslBlank3.Name = "toolSslBlank3";
|
||||
this.toolSslBlank3.Spring = true;
|
||||
//
|
||||
// toolSslServerSpeed
|
||||
//
|
||||
resources.ApplyResources(this.toolSslServerSpeed, "toolSslServerSpeed");
|
||||
this.toolSslServerSpeed.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.toolSslServerSpeed.Name = "toolSslServerSpeed";
|
||||
//
|
||||
// toolSslBlank4
|
||||
//
|
||||
this.toolSslBlank4.Name = "toolSslBlank4";
|
||||
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
@@ -584,8 +589,9 @@
|
||||
this.tsbServer,
|
||||
this.toolStripSeparator4,
|
||||
this.tsbSub,
|
||||
this.tsbQRCodeSwitch,
|
||||
this.toolStripSeparator8,
|
||||
this.tsbOptionSetting,
|
||||
this.tsbSetting,
|
||||
this.toolStripSeparator5,
|
||||
this.tsbReload,
|
||||
this.toolStripSeparator7,
|
||||
@@ -597,6 +603,7 @@
|
||||
this.tsbClose});
|
||||
resources.ApplyResources(this.tsMain, "tsMain");
|
||||
this.tsMain.Name = "tsMain";
|
||||
this.tsMain.TabStop = true;
|
||||
//
|
||||
// toolStripSeparator4
|
||||
//
|
||||
@@ -607,7 +614,10 @@
|
||||
//
|
||||
this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsbSubSetting,
|
||||
this.tsbSubUpdate});
|
||||
this.tsbSubUpdate,
|
||||
this.tsbSubUpdateViaProxy,
|
||||
this.tsbSubGroupUpdate,
|
||||
this.tsbSubGroupUpdateViaProxy});
|
||||
this.tsbSub.Image = global::v2rayN.Properties.Resources.sub;
|
||||
resources.ApplyResources(this.tsbSub, "tsbSub");
|
||||
this.tsbSub.Name = "tsbSub";
|
||||
@@ -624,18 +634,93 @@
|
||||
resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
|
||||
this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click);
|
||||
//
|
||||
// tsbSubUpdateViaProxy
|
||||
//
|
||||
this.tsbSubUpdateViaProxy.Name = "tsbSubUpdateViaProxy";
|
||||
resources.ApplyResources(this.tsbSubUpdateViaProxy, "tsbSubUpdateViaProxy");
|
||||
this.tsbSubUpdateViaProxy.Click += new System.EventHandler(this.tsbSubUpdateViaProxy_Click);
|
||||
//
|
||||
// tsbSubGroupUpdate
|
||||
//
|
||||
this.tsbSubGroupUpdate.Name = "tsbSubGroupUpdate";
|
||||
resources.ApplyResources(this.tsbSubGroupUpdate, "tsbSubGroupUpdate");
|
||||
this.tsbSubGroupUpdate.Click += new System.EventHandler(this.tsbSubGroupUpdate_Click);
|
||||
//
|
||||
// tsbSubGroupUpdateViaProxy
|
||||
//
|
||||
this.tsbSubGroupUpdateViaProxy.Name = "tsbSubGroupUpdateViaProxy";
|
||||
resources.ApplyResources(this.tsbSubGroupUpdateViaProxy, "tsbSubGroupUpdateViaProxy");
|
||||
this.tsbSubGroupUpdateViaProxy.Click += new System.EventHandler(this.tsbSubGroupUpdateViaProxy_Click);
|
||||
//
|
||||
// tsbQRCodeSwitch
|
||||
//
|
||||
this.tsbQRCodeSwitch.CheckOnClick = true;
|
||||
this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black;
|
||||
this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share;
|
||||
resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
|
||||
this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch";
|
||||
this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged);
|
||||
//
|
||||
// toolStripSeparator8
|
||||
//
|
||||
this.toolStripSeparator8.Name = "toolStripSeparator8";
|
||||
resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8");
|
||||
//
|
||||
// tsbSetting
|
||||
//
|
||||
this.tsbSetting.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsbOptionSetting,
|
||||
this.tsbRoutingSetting,
|
||||
this.tsbGlobalHotkeySetting,
|
||||
this.tsbGroupSetting,
|
||||
this.toolStripSeparator14,
|
||||
this.tsbBackupGuiNConfig,
|
||||
this.tsbRestoreGuiNConfig});
|
||||
this.tsbSetting.Image = global::v2rayN.Properties.Resources.option;
|
||||
resources.ApplyResources(this.tsbSetting, "tsbSetting");
|
||||
this.tsbSetting.Name = "tsbSetting";
|
||||
//
|
||||
// tsbOptionSetting
|
||||
//
|
||||
this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option;
|
||||
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
|
||||
this.tsbOptionSetting.Name = "tsbOptionSetting";
|
||||
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
|
||||
this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click);
|
||||
//
|
||||
// tsbRoutingSetting
|
||||
//
|
||||
this.tsbRoutingSetting.Name = "tsbRoutingSetting";
|
||||
resources.ApplyResources(this.tsbRoutingSetting, "tsbRoutingSetting");
|
||||
this.tsbRoutingSetting.Click += new System.EventHandler(this.tsbRoutingSetting_Click);
|
||||
//
|
||||
// tsbGlobalHotkeySetting
|
||||
//
|
||||
this.tsbGlobalHotkeySetting.Name = "tsbGlobalHotkeySetting";
|
||||
resources.ApplyResources(this.tsbGlobalHotkeySetting, "tsbGlobalHotkeySetting");
|
||||
this.tsbGlobalHotkeySetting.Click += new System.EventHandler(this.tsbGlobalHotkeySetting_Click);
|
||||
//
|
||||
// tsbGroupSetting
|
||||
//
|
||||
this.tsbGroupSetting.Name = "tsbGroupSetting";
|
||||
resources.ApplyResources(this.tsbGroupSetting, "tsbGroupSetting");
|
||||
this.tsbGroupSetting.Click += new System.EventHandler(this.tsbGroupSetting_Click);
|
||||
//
|
||||
// toolStripSeparator14
|
||||
//
|
||||
this.toolStripSeparator14.Name = "toolStripSeparator14";
|
||||
resources.ApplyResources(this.toolStripSeparator14, "toolStripSeparator14");
|
||||
//
|
||||
// tsbBackupGuiNConfig
|
||||
//
|
||||
this.tsbBackupGuiNConfig.Name = "tsbBackupGuiNConfig";
|
||||
resources.ApplyResources(this.tsbBackupGuiNConfig, "tsbBackupGuiNConfig");
|
||||
this.tsbBackupGuiNConfig.Click += new System.EventHandler(this.tsbBackupGuiNConfig_Click);
|
||||
//
|
||||
// tsbRestoreGuiNConfig
|
||||
//
|
||||
this.tsbRestoreGuiNConfig.Name = "tsbRestoreGuiNConfig";
|
||||
resources.ApplyResources(this.tsbRestoreGuiNConfig, "tsbRestoreGuiNConfig");
|
||||
this.tsbRestoreGuiNConfig.Click += new System.EventHandler(this.tsbRestoreGuiNConfig_Click);
|
||||
//
|
||||
// toolStripSeparator5
|
||||
//
|
||||
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
||||
@@ -643,6 +728,7 @@
|
||||
//
|
||||
// tsbReload
|
||||
//
|
||||
this.tsbReload.Image = global::v2rayN.Properties.Resources.restart;
|
||||
resources.ApplyResources(this.tsbReload, "tsbReload");
|
||||
this.tsbReload.Name = "tsbReload";
|
||||
this.tsbReload.Click += new System.EventHandler(this.tsbReload_Click);
|
||||
@@ -657,8 +743,13 @@
|
||||
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsbCheckUpdateN,
|
||||
this.tsbCheckUpdateCore,
|
||||
this.tsbCheckUpdatePACList,
|
||||
this.tsbCheckClearPACList});
|
||||
this.tsbCheckUpdateSagerNetCore,
|
||||
this.tsbCheckUpdateXrayCore,
|
||||
this.toolStripSeparator16,
|
||||
this.tsbCheckUpdateClashCore,
|
||||
this.tsbCheckUpdateClashMetaCore,
|
||||
this.toolStripSeparator15,
|
||||
this.tsbCheckUpdateGeo});
|
||||
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
|
||||
resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
|
||||
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
|
||||
@@ -675,17 +766,45 @@
|
||||
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
|
||||
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
|
||||
//
|
||||
// tsbCheckUpdatePACList
|
||||
// tsbCheckUpdateSagerNetCore
|
||||
//
|
||||
this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList";
|
||||
resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList");
|
||||
this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click);
|
||||
this.tsbCheckUpdateSagerNetCore.Name = "tsbCheckUpdateSagerNetCore";
|
||||
resources.ApplyResources(this.tsbCheckUpdateSagerNetCore, "tsbCheckUpdateSagerNetCore");
|
||||
this.tsbCheckUpdateSagerNetCore.Click += new System.EventHandler(this.tsbCheckUpdateSagerNetCore_Click);
|
||||
//
|
||||
// tsbCheckClearPACList
|
||||
// tsbCheckUpdateXrayCore
|
||||
//
|
||||
this.tsbCheckClearPACList.Name = "tsbCheckClearPACList";
|
||||
resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList");
|
||||
this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click);
|
||||
this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
|
||||
resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
|
||||
this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click);
|
||||
//
|
||||
// toolStripSeparator16
|
||||
//
|
||||
this.toolStripSeparator16.Name = "toolStripSeparator16";
|
||||
resources.ApplyResources(this.toolStripSeparator16, "toolStripSeparator16");
|
||||
//
|
||||
// tsbCheckUpdateClashCore
|
||||
//
|
||||
this.tsbCheckUpdateClashCore.Name = "tsbCheckUpdateClashCore";
|
||||
resources.ApplyResources(this.tsbCheckUpdateClashCore, "tsbCheckUpdateClashCore");
|
||||
this.tsbCheckUpdateClashCore.Click += new System.EventHandler(this.tsbCheckUpdateClashCore_Click);
|
||||
//
|
||||
// tsbCheckUpdateClashMetaCore
|
||||
//
|
||||
this.tsbCheckUpdateClashMetaCore.Name = "tsbCheckUpdateClashMetaCore";
|
||||
resources.ApplyResources(this.tsbCheckUpdateClashMetaCore, "tsbCheckUpdateClashMetaCore");
|
||||
this.tsbCheckUpdateClashMetaCore.Click += new System.EventHandler(this.tsbCheckUpdateClashMetaCore_Click);
|
||||
//
|
||||
// toolStripSeparator15
|
||||
//
|
||||
this.toolStripSeparator15.Name = "toolStripSeparator15";
|
||||
resources.ApplyResources(this.toolStripSeparator15, "toolStripSeparator15");
|
||||
//
|
||||
// tsbCheckUpdateGeo
|
||||
//
|
||||
this.tsbCheckUpdateGeo.Name = "tsbCheckUpdateGeo";
|
||||
resources.ApplyResources(this.tsbCheckUpdateGeo, "tsbCheckUpdateGeo");
|
||||
this.tsbCheckUpdateGeo.Click += new System.EventHandler(this.tsbCheckUpdateGeo_Click);
|
||||
//
|
||||
// toolStripSeparator10
|
||||
//
|
||||
@@ -696,6 +815,7 @@
|
||||
//
|
||||
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tsbAbout,
|
||||
this.tsbV2rayWebsite,
|
||||
this.toolStripSeparator12,
|
||||
this.tsbLanguageDef,
|
||||
this.tsbLanguageZhHans});
|
||||
@@ -709,6 +829,12 @@
|
||||
resources.ApplyResources(this.tsbAbout, "tsbAbout");
|
||||
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
|
||||
//
|
||||
// tsbV2rayWebsite
|
||||
//
|
||||
this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
|
||||
resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
|
||||
this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
|
||||
//
|
||||
// toolStripSeparator12
|
||||
//
|
||||
this.toolStripSeparator12.Name = "toolStripSeparator12";
|
||||
@@ -741,6 +867,7 @@
|
||||
//
|
||||
// tsbClose
|
||||
//
|
||||
this.tsbClose.Image = global::v2rayN.Properties.Resources.minimize;
|
||||
resources.ApplyResources(this.tsbClose, "tsbClose");
|
||||
this.tsbClose.Name = "tsbClose";
|
||||
this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click);
|
||||
@@ -749,8 +876,7 @@
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.scBig);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.tsMain);
|
||||
this.MaximizeBox = true;
|
||||
@@ -761,17 +887,17 @@
|
||||
this.Shown += new System.EventHandler(this.MainForm_Shown);
|
||||
this.VisibleChanged += new System.EventHandler(this.MainForm_VisibleChanged);
|
||||
this.Resize += new System.EventHandler(this.MainForm_Resize);
|
||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||
this.splitContainer1.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
|
||||
this.splitContainer1.ResumeLayout(false);
|
||||
this.scServers.Panel1.ResumeLayout(false);
|
||||
this.scServers.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.scServers)).EndInit();
|
||||
this.scServers.ResumeLayout(false);
|
||||
this.cmsLv.ResumeLayout(false);
|
||||
this.scBig.Panel1.ResumeLayout(false);
|
||||
this.scBig.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.scBig)).EndInit();
|
||||
this.scBig.ResumeLayout(false);
|
||||
this.gbServers.ResumeLayout(false);
|
||||
this.cmsMain.ResumeLayout(false);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.ssMain.ResumeLayout(false);
|
||||
this.ssMain.PerformLayout();
|
||||
this.tsMain.ResumeLayout(false);
|
||||
this.tsMain.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
@@ -779,12 +905,10 @@
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox txtMsgBox;
|
||||
private v2rayN.Forms.ListViewFlickerFree lvServers;
|
||||
private System.Windows.Forms.GroupBox gbServers;
|
||||
private v2rayN.Base.ListViewFlickerFree lvServers;
|
||||
private System.Windows.Forms.NotifyIcon notifyMain;
|
||||
private System.Windows.Forms.ContextMenuStrip cmsMain;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuExit;
|
||||
@@ -802,34 +926,24 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem menuExport2ServerConfig;
|
||||
private System.Windows.Forms.ToolStrip tsMain;
|
||||
private System.Windows.Forms.ToolStripDropDownButton tsbServer;
|
||||
private System.Windows.Forms.ToolStripButton tsbOptionSetting;
|
||||
private System.Windows.Forms.ToolStripButton tsbReload;
|
||||
private System.Windows.Forms.ToolStripButton tsbClose;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuGlobal;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuGlobalPAC;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuKeep;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSysAgentEnabled;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuCopyPACUrl;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuKeepClear;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer;
|
||||
private System.Windows.Forms.SplitContainer splitContainer1;
|
||||
private System.Windows.Forms.SplitContainer scServers;
|
||||
private QRCodeControl qrCodeControl;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator10;
|
||||
private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateN;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdatePACList;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddServers;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuExport2ShareUrl;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSpeedServer;
|
||||
@@ -837,15 +951,12 @@
|
||||
private System.Windows.Forms.ToolStripDropDownButton tsbHelp;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbAbout;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddServers2;
|
||||
private System.ComponentModel.BackgroundWorker bgwScan;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuScanScreen;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuScanScreen2;
|
||||
private System.Windows.Forms.ToolStripDropDownButton tsbSub;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbSubSetting;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdate;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckClearPACList;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuKeepPAC;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSelectAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuExport2SubContent;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator12;
|
||||
@@ -853,21 +964,50 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbLanguageZhHans;
|
||||
private System.Windows.Forms.ToolStripButton tsbPromotion;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddSocksServer;
|
||||
private System.Windows.Forms.StatusStrip ssMain;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPort;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslPacPort;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuTcpingServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbTestMe;
|
||||
private System.Windows.Forms.ToolStripButton tsbReload;
|
||||
private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer;
|
||||
private System.Windows.Forms.ToolStripDropDownButton tsbSetting;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbOptionSetting;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbRoutingSetting;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateXrayCore;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuClearServerStatistics;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuRoutings;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator14;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbBackupGuiNConfig;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator15;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateGeo;
|
||||
private System.Windows.Forms.SplitContainer scBig;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdateViaProxy;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubViaProxy;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbGlobalHotkeySetting;
|
||||
private System.Windows.Forms.TabControl tabGroup;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbGroupSetting;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveToGroup;
|
||||
private MainMsgControl mainMsgControl;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveEvent;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveTop;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveUp;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveDown;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuMoveBottom;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuServerFilter;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateClashCore;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateClashMetaCore;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator16;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSortServerResult;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateSagerNetCore;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbSubGroupUpdate;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbSubGroupUpdateViaProxy;
|
||||
private System.Windows.Forms.ToolStripMenuItem tsbRestoreGuiNConfig;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -119,157 +119,187 @@
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="menuAddVmessServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<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>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuAddShadowsocksServer.Text" xml:space="preserve">
|
||||
<value>添加[Shadowsocks]服务器</value>
|
||||
</data>
|
||||
<data name="menuAddSocksServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<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>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuAddCustomServer.Text" xml:space="preserve">
|
||||
<value>添加自定义配置服务器</value>
|
||||
</data>
|
||||
<data name="menuAddServers.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuAddServers.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入批量URL</value>
|
||||
<value>从剪贴板导入批量URL (Ctrl+V)</value>
|
||||
</data>
|
||||
<data name="menuScanScreen.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuScanScreen.Text" xml:space="preserve">
|
||||
<value>扫描屏幕上的二维码</value>
|
||||
<value>扫描屏幕上的二维码 (Ctrl+S)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>275, 6</value>
|
||||
<value>297, 6</value>
|
||||
</data>
|
||||
<data name="menuRemoveServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuRemoveServer.Text" xml:space="preserve">
|
||||
<value>移除所选服务器(多选) (Delete)</value>
|
||||
<value>移除所选服务器(多选) (Delete)</value>
|
||||
</data>
|
||||
<data name="menuRemoveDuplicateServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuRemoveDuplicateServer.Text" xml:space="preserve">
|
||||
<value>移除重复的服务器</value>
|
||||
</data>
|
||||
<data name="menuCopyServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuCopyServer.Text" xml:space="preserve">
|
||||
<value>复制所选服务器</value>
|
||||
<value>克隆所选服务器</value>
|
||||
</data>
|
||||
<data name="menuSetDefaultServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuSetDefaultServer.Text" xml:space="preserve">
|
||||
<value>设为活动服务器 (Enter)</value>
|
||||
<value>设为活动服务器 (Enter)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>275, 6</value>
|
||||
<value>297, 6</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveTop.Text" xml:space="preserve">
|
||||
<value>上移至顶</value>
|
||||
<value>上移至顶 (T)</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveUp.Text" xml:space="preserve">
|
||||
<value>上移 (U)</value>
|
||||
<value>上移 (U)</value>
|
||||
</data>
|
||||
<data name="menuMoveDown.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveDown.Text" xml:space="preserve">
|
||||
<value>下移 (D)</value>
|
||||
<value>下移 (D)</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuMoveBottom.Text" xml:space="preserve">
|
||||
<value>下移至底</value>
|
||||
<value>下移至底 (B)</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuSelectAll.Text" xml:space="preserve">
|
||||
<value>全选 (Ctrl+A)</value>
|
||||
<value>全选 (Ctrl+A)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator9.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>275, 6</value>
|
||||
<value>297, 6</value>
|
||||
</data>
|
||||
<data name="menuPingServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuPingServer.Text" xml:space="preserve">
|
||||
<value>测试服务器延迟Ping(多选)(Ctrl+P)</value>
|
||||
<value>测试服务器延迟Ping(多选) (Ctrl+P)</value>
|
||||
</data>
|
||||
<data name="menuTcpingServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuTcpingServer.Text" xml:space="preserve">
|
||||
<value>测试服务器延迟Tcping(多选)(Ctrl+O)</value>
|
||||
<value>测试服务器延迟Tcping(多选) (Ctrl+O)</value>
|
||||
</data>
|
||||
<data name="menuRealPingServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuRealPingServer.Text" xml:space="preserve">
|
||||
<value>测试服务器真连接延迟(多选)(Ctrl+R)</value>
|
||||
<value>测试服务器真连接延迟(多选) (Ctrl+R)</value>
|
||||
</data>
|
||||
<data name="menuSpeedServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuSpeedServer.Text" xml:space="preserve">
|
||||
<value>测试服务器速度(多选)(Ctrl+T)</value>
|
||||
<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>275, 6</value>
|
||||
<value>297, 6</value>
|
||||
</data>
|
||||
<data name="menuExport2ClientConfig.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuExport2ClientConfig.Text" xml:space="preserve">
|
||||
<value>导出所选服务器为客户端配置</value>
|
||||
</data>
|
||||
<data name="menuExport2ServerConfig.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuExport2ServerConfig.Text" xml:space="preserve">
|
||||
<value>导出所选服务器为服务端配置</value>
|
||||
</data>
|
||||
<data name="menuExport2ShareUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuExport2ShareUrl.Text" xml:space="preserve">
|
||||
<value>批量导出分享URL至剪贴板(多选)</value>
|
||||
<value>批量导出分享URL至剪贴板(多选) (Ctrl+C)</value>
|
||||
</data>
|
||||
<data name="menuExport2SubContent.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>278, 22</value>
|
||||
<value>300, 22</value>
|
||||
</data>
|
||||
<data name="menuExport2SubContent.Text" xml:space="preserve">
|
||||
<value>批量导出订阅内容至剪贴板(多选)</value>
|
||||
</data>
|
||||
<data name="tsbServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>73, 53</value>
|
||||
</data>
|
||||
<data name="tsbServer.Text" xml:space="preserve">
|
||||
<value> 服务器 </value>
|
||||
</data>
|
||||
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>279, 534</value>
|
||||
<value>301, 622</value>
|
||||
</data>
|
||||
<data name="lvServers.Items" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
@@ -288,92 +318,125 @@
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>73, 53</value>
|
||||
<data name="menuMsgBoxSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="tsbServer.Text" xml:space="preserve">
|
||||
<value> 服务器 </value>
|
||||
<data name="menuMsgBoxCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>196, 164</value>
|
||||
<data name="menuMsgBoxCopyAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuSysAgentEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<data name="menuMsgBoxClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuSysAgentEnabled.Text" xml:space="preserve">
|
||||
<value>启用Http代理</value>
|
||||
<data name="menuMsgBoxAddRoutingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>195, 22</value>
|
||||
<data name="menuMsgBoxFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>221, 22</value>
|
||||
</data>
|
||||
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
||||
<value>Http代理模式</value>
|
||||
<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>340, 22</value>
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
<data name="menuGlobal.Text" xml:space="preserve">
|
||||
<value>开启Http代理,并自动配置代理服务器(全局模式)</value>
|
||||
<value>自动配置系统代理</value>
|
||||
</data>
|
||||
<data name="menuGlobalPAC.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>340, 22</value>
|
||||
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
<data name="menuGlobalPAC.Text" xml:space="preserve">
|
||||
<value>开启PAC,并自动配置PAC(PAC模式)</value>
|
||||
<data name="menuKeepNothing.Text" xml:space="preserve">
|
||||
<value>不改变系统代理</value>
|
||||
</data>
|
||||
<data name="menuKeep.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>340, 22</value>
|
||||
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuKeep.Text" xml:space="preserve">
|
||||
<value>仅开启Http代理,不自动配置代理服务器(直连模式)</value>
|
||||
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
||||
<value>系统代理</value>
|
||||
</data>
|
||||
<data name="menuKeepPAC.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>340, 22</value>
|
||||
<data name="menuRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuKeepPAC.Text" xml:space="preserve">
|
||||
<value>仅开启PAC,不自动配置PAC</value>
|
||||
<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 name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>260, 22</value>
|
||||
</data>
|
||||
<data name="menuCopyPACUrl.Text" xml:space="preserve">
|
||||
<value>复制本地PAC网址</value>
|
||||
<data name="menuUpdateSubscriptions.Text" xml:space="preserve">
|
||||
<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="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器列表</value>
|
||||
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>261, 221</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>信息</value>
|
||||
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||
<value>网速显示未启用</value>
|
||||
<data name="tsbSubSetting.Text" xml:space="preserve">
|
||||
<value>订阅设置</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||
<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>
|
||||
@@ -381,34 +444,50 @@
|
||||
<data name="tsbSub.Text" xml:space="preserve">
|
||||
<value> 订阅 </value>
|
||||
</data>
|
||||
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>124, 22</value>
|
||||
<data name="tsbQRCodeSwitch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>52, 53</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>
|
||||
</data>
|
||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||
<value>更新订阅</value>
|
||||
<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="tsbReload.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 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>76, 53</value>
|
||||
@@ -416,35 +495,44 @@
|
||||
<data name="tsbReload.Text" xml:space="preserve">
|
||||
<value> 重启服务 </value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<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>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
|
||||
<value>v2fly_v5-Core</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
|
||||
<value>Xray-Core</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 6</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateGeoSite.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 22</value>
|
||||
</data>
|
||||
<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>
|
||||
</data>
|
||||
<data name="tsbCheckUpdate.Text" xml:space="preserve">
|
||||
<value> 检查更新 </value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 22</value>
|
||||
<data name="tsbAbout.Text" xml:space="preserve">
|
||||
<value>v2rayN 项目</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
|
||||
<value>检查更新v2rayN</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
|
||||
<value>检查更新v2rayCore</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdatePACList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdatePACList.Text" xml:space="preserve">
|
||||
<value>检查更新PAC (需要Http代理)</value>
|
||||
</data>
|
||||
<data name="tsbCheckClearPACList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 22</value>
|
||||
</data>
|
||||
<data name="tsbCheckClearPACList.Text" xml:space="preserve">
|
||||
<value>简化PAC (请设置Core路由)</value>
|
||||
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
|
||||
<value>V2Ray 官网</value>
|
||||
</data>
|
||||
<data name="tsbHelp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>69, 53</value>
|
||||
@@ -452,23 +540,46 @@
|
||||
<data name="tsbHelp.Text" xml:space="preserve">
|
||||
<value> 帮助 </value>
|
||||
</data>
|
||||
<data name="tsbAbout.Text" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
<data name="tsbPromotion.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>68, 53</value>
|
||||
</data>
|
||||
<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 name="tsbClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 53</value>
|
||||
</data>
|
||||
<data name="tsbClose.Text" xml:space="preserve">
|
||||
<value> 关闭 </value>
|
||||
<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>
|
||||
<data name="tsbCheckUpdateClashCore.Text" xml:space="preserve">
|
||||
<value>Update clash Core</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateClashMetaCore.Text" xml:space="preserve">
|
||||
<value>Update Clash.Meta Core</value>
|
||||
</data>
|
||||
<data name="menuSortServerResult.Text" xml:space="preserve">
|
||||
<value>按测试结果排序 (Ctrl+E)</value>
|
||||
</data>
|
||||
<data name="tsbCheckUpdateSagerNetCore.Text" xml:space="preserve">
|
||||
<value>SagerNet-Core</value>
|
||||
</data>
|
||||
<data name="tsbSubGroupUpdate.Text" xml:space="preserve">
|
||||
<value>更新当前分组订阅(不通过代理)</value>
|
||||
</data>
|
||||
<data name="tsbSubGroupUpdateViaProxy.Text" xml:space="preserve">
|
||||
<value>更新当前分组订阅(通过代理)</value>
|
||||
</data>
|
||||
<data name="tsbRestoreGuiNConfig.Text" xml:space="preserve">
|
||||
<value>恢复v2rayN配置文件</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;
|
||||
}
|
||||
}
|
||||
210
v2rayN/v2rayN/Forms/MainMsgControl.cs
Normal file
210
v2rayN/v2rayN/Forms/MainMsgControl.cs
Normal file
@@ -0,0 +1,210 @@
|
||||
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)
|
||||
{
|
||||
_msgFilter = Utils.RegReadValue(Global.MyRegPath, Utils.MainMsgFilterKey, "");
|
||||
if (!Utils.IsNullOrEmpty(_msgFilter))
|
||||
{
|
||||
gbMsgTitle.Text = string.Format(ResUI.MsgInformationTitle, _msgFilter);
|
||||
}
|
||||
}
|
||||
|
||||
#region 提示信息
|
||||
|
||||
public void AppendText(string text)
|
||||
{
|
||||
if (txtMsgBox.InvokeRequired)
|
||||
{
|
||||
Invoke(new AppendTextDelegate(AppendText), 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();
|
||||
}
|
||||
txtMsgBox.AppendText(msg);
|
||||
if (!msg.EndsWith(Environment.NewLine))
|
||||
{
|
||||
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()
|
||||
{
|
||||
txtMsgBox.ScrollToCaret();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region MsgBoxMenu
|
||||
private void menuMsgBoxSelectAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
txtMsgBox.Focus();
|
||||
txtMsgBox.SelectAll();
|
||||
}
|
||||
|
||||
private void menuMsgBoxCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
var data = txtMsgBox.SelectedText.TrimEx();
|
||||
Utils.SetClipboardData(data);
|
||||
}
|
||||
|
||||
private void menuMsgBoxCopyAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
var data = txtMsgBox.Text;
|
||||
Utils.SetClipboardData(data);
|
||||
}
|
||||
private void menuMsgBoxClear_Click(object sender, EventArgs e)
|
||||
{
|
||||
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);
|
||||
Utils.RegWriteValue(Global.MyRegPath, Utils.MainMsgFilterKey, _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;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
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;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
381
v2rayN/v2rayN/Forms/MsgFilterSetForm.resx
Normal file
381
v2rayN/v2rayN/Forms/MsgFilterSetForm.resx
Normal file
@@ -0,0 +1,381 @@
|
||||
<?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=">>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="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 76</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
</data>
|
||||
<data name=">>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>
|
||||
</data>
|
||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>&Cancel</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Name" xml:space="preserve">
|
||||
<value>btnClose</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||
<value>panel2</value>
|
||||
</data>
|
||||
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||
<value>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>
|
||||
<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>2</value>
|
||||
</data>
|
||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 76</value>
|
||||
</data>
|
||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>490, 60</value>
|
||||
</data>
|
||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>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>490, 136</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>MsgFilterSetForm</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>MsgFilterSetForm</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,43 +117,25 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>过滤器</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>*手填,方便识别管理</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>别名(remarks)</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>加密方式</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>密码</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>服务器端口</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>服务器地址</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>服务器</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
||||
<value>从剪贴板导入URL</value>
|
||||
</data>
|
||||
<data name="menuItemScanScreen.Text" xml:space="preserve">
|
||||
<value>扫描屏幕上的二维码</value>
|
||||
</data>
|
||||
<data name="MenuItem1.Text" xml:space="preserve">
|
||||
<value>导入配置文件</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>编辑或添加[Shadowsocks]服务器</value>
|
||||
<value>设置过滤器</value>
|
||||
</data>
|
||||
<data name="btnFilderProxy.Text" xml:space="preserve">
|
||||
<value>过滤Proxy</value>
|
||||
</data>
|
||||
<data name="btnFilterDirect.Text" xml:space="preserve">
|
||||
<value>过滤Direct</value>
|
||||
</data>
|
||||
<data name="btnClear.Text" xml:space="preserve">
|
||||
<value>清空</value>
|
||||
</data>
|
||||
</root>
|
||||
641
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
641
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
@@ -28,22 +28,19 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionSettingForm));
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.txtpass = new System.Windows.Forms.TextBox();
|
||||
this.txtuser = new System.Windows.Forms.TextBox();
|
||||
this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
|
||||
this.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();
|
||||
@@ -53,21 +50,11 @@
|
||||
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.panel3 = new System.Windows.Forms.Panel();
|
||||
this.btnSetDefRountingRule = new System.Windows.Forms.Button();
|
||||
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
|
||||
this.labRoutingTips = new System.Windows.Forms.Label();
|
||||
this.label15 = new System.Windows.Forms.Label();
|
||||
this.label12 = new System.Windows.Forms.Label();
|
||||
this.cmbroutingMode = new System.Windows.Forms.ComboBox();
|
||||
this.cmbdomainStrategy4Freedom = new System.Windows.Forms.ComboBox();
|
||||
this.label19 = new System.Windows.Forms.Label();
|
||||
this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.txtremoteDNS = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.tabPage6 = new System.Windows.Forms.TabPage();
|
||||
this.chkKcpcongestion = new System.Windows.Forms.CheckBox();
|
||||
this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox();
|
||||
@@ -83,33 +70,56 @@
|
||||
this.txtKcpmtu = new System.Windows.Forms.TextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.tabPage7 = new System.Windows.Forms.TabPage();
|
||||
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
||||
this.tbCacheDays = new System.Windows.Forms.TextBox();
|
||||
this.numStatisticsFreshRate = new System.Windows.Forms.NumericUpDown();
|
||||
this.txttrayMenuServersLimit = new System.Windows.Forms.TextBox();
|
||||
this.label17 = new System.Windows.Forms.Label();
|
||||
this.txtautoUpdateSubInterval = new System.Windows.Forms.TextBox();
|
||||
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.lbFreshrate = new System.Windows.Forms.Label();
|
||||
this.lbCacheDays = 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.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();
|
||||
this.configBindingSource = new System.Windows.Forms.BindingSource(this.components);
|
||||
this.chkEnableCheckPreReleaseUpdate = new System.Windows.Forms.CheckBox();
|
||||
this.tabControl1.SuspendLayout();
|
||||
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.panel3.SuspendLayout();
|
||||
this.tabPage6.SuspendLayout();
|
||||
this.tabPage7.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numStatisticsFreshRate)).BeginInit();
|
||||
this.tabPageCoreType.SuspendLayout();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.configBindingSource)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnClose
|
||||
@@ -126,6 +136,8 @@
|
||||
this.tabControl1.Controls.Add(this.tabPage2);
|
||||
this.tabControl1.Controls.Add(this.tabPage6);
|
||||
this.tabControl1.Controls.Add(this.tabPage7);
|
||||
this.tabControl1.Controls.Add(this.tabPageCoreType);
|
||||
this.tabControl1.Controls.Add(this.tabPage3);
|
||||
resources.ApplyResources(this.tabControl1, "tabControl1");
|
||||
this.tabControl1.Name = "tabControl1";
|
||||
this.tabControl1.SelectedIndex = 0;
|
||||
@@ -139,16 +151,14 @@
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
|
||||
this.groupBox1.Controls.Add(this.label16);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.txtpass);
|
||||
this.groupBox1.Controls.Add(this.txtuser);
|
||||
this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
|
||||
this.groupBox1.Controls.Add(this.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);
|
||||
@@ -161,11 +171,37 @@
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// chksniffingEnabled2
|
||||
// label16
|
||||
//
|
||||
resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2");
|
||||
this.chksniffingEnabled2.Name = "chksniffingEnabled2";
|
||||
this.chksniffingEnabled2.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.label16, "label16");
|
||||
this.label16.Name = "label16";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// txtpass
|
||||
//
|
||||
resources.ApplyResources(this.txtpass, "txtpass");
|
||||
this.txtpass.Name = "txtpass";
|
||||
//
|
||||
// txtuser
|
||||
//
|
||||
resources.ApplyResources(this.txtuser, "txtuser");
|
||||
this.txtuser.Name = "txtuser";
|
||||
//
|
||||
// chkdefAllowInsecure
|
||||
//
|
||||
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
|
||||
//
|
||||
@@ -173,55 +209,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;
|
||||
@@ -279,120 +272,48 @@
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
this.tabPage2.Controls.Add(this.groupBox2);
|
||||
this.tabPage2.Controls.Add(this.cmbdomainStrategy4Freedom);
|
||||
this.tabPage2.Controls.Add(this.label19);
|
||||
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
|
||||
this.tabPage2.Controls.Add(this.txtremoteDNS);
|
||||
this.tabPage2.Controls.Add(this.label14);
|
||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox2
|
||||
// cmbdomainStrategy4Freedom
|
||||
//
|
||||
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;
|
||||
this.cmbdomainStrategy4Freedom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbdomainStrategy4Freedom.FormattingEnabled = true;
|
||||
this.cmbdomainStrategy4Freedom.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items1"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items2"),
|
||||
resources.GetString("cmbdomainStrategy4Freedom.Items3")});
|
||||
resources.ApplyResources(this.cmbdomainStrategy4Freedom, "cmbdomainStrategy4Freedom");
|
||||
this.cmbdomainStrategy4Freedom.Name = "cmbdomainStrategy4Freedom";
|
||||
//
|
||||
// tabControl2
|
||||
// label19
|
||||
//
|
||||
this.tabControl2.Controls.Add(this.tabPage3);
|
||||
this.tabControl2.Controls.Add(this.tabPage4);
|
||||
this.tabControl2.Controls.Add(this.tabPage5);
|
||||
resources.ApplyResources(this.tabControl2, "tabControl2");
|
||||
this.tabControl2.Name = "tabControl2";
|
||||
this.tabControl2.SelectedIndex = 0;
|
||||
resources.ApplyResources(this.label19, "label19");
|
||||
this.label19.Name = "label19";
|
||||
//
|
||||
// tabPage3
|
||||
// linkDnsObjectDoc
|
||||
//
|
||||
this.tabPage3.Controls.Add(this.txtUseragent);
|
||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
||||
this.tabPage3.Name = "tabPage3";
|
||||
this.tabPage3.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc");
|
||||
this.linkDnsObjectDoc.Name = "linkDnsObjectDoc";
|
||||
this.linkDnsObjectDoc.TabStop = true;
|
||||
this.linkDnsObjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDnsObjectDoc_LinkClicked);
|
||||
//
|
||||
// txtUseragent
|
||||
// txtremoteDNS
|
||||
//
|
||||
resources.ApplyResources(this.txtUseragent, "txtUseragent");
|
||||
this.txtUseragent.Name = "txtUseragent";
|
||||
resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS");
|
||||
this.txtremoteDNS.Name = "txtremoteDNS";
|
||||
//
|
||||
// tabPage4
|
||||
// label14
|
||||
//
|
||||
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";
|
||||
//
|
||||
// panel3
|
||||
//
|
||||
this.panel3.Controls.Add(this.btnSetDefRountingRule);
|
||||
this.panel3.Controls.Add(this.cmbdomainStrategy);
|
||||
this.panel3.Controls.Add(this.labRoutingTips);
|
||||
this.panel3.Controls.Add(this.label15);
|
||||
this.panel3.Controls.Add(this.label12);
|
||||
this.panel3.Controls.Add(this.cmbroutingMode);
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// btnSetDefRountingRule
|
||||
//
|
||||
resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule");
|
||||
this.btnSetDefRountingRule.Name = "btnSetDefRountingRule";
|
||||
this.btnSetDefRountingRule.UseVisualStyleBackColor = true;
|
||||
this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click);
|
||||
//
|
||||
// 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";
|
||||
//
|
||||
// labRoutingTips
|
||||
//
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// label15
|
||||
//
|
||||
resources.ApplyResources(this.label15, "label15");
|
||||
this.label15.Name = "label15";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
resources.ApplyResources(this.label12, "label12");
|
||||
this.label12.Name = "label12";
|
||||
//
|
||||
// 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";
|
||||
resources.ApplyResources(this.label14, "label14");
|
||||
this.label14.Name = "label14";
|
||||
//
|
||||
// tabPage6
|
||||
//
|
||||
@@ -481,68 +402,242 @@
|
||||
//
|
||||
// tabPage7
|
||||
//
|
||||
this.tabPage7.Controls.Add(this.cbFreshrate);
|
||||
this.tabPage7.Controls.Add(this.tbCacheDays);
|
||||
this.tabPage7.Controls.Add(this.chkEnableCheckPreReleaseUpdate);
|
||||
this.tabPage7.Controls.Add(this.numStatisticsFreshRate);
|
||||
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.lbFreshrate);
|
||||
this.tabPage7.Controls.Add(this.lbCacheDays);
|
||||
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;
|
||||
//
|
||||
// cbFreshrate
|
||||
// numStatisticsFreshRate
|
||||
//
|
||||
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbFreshrate.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
||||
this.cbFreshrate.Name = "cbFreshrate";
|
||||
resources.ApplyResources(this.numStatisticsFreshRate, "numStatisticsFreshRate");
|
||||
this.numStatisticsFreshRate.Name = "numStatisticsFreshRate";
|
||||
//
|
||||
// tbCacheDays
|
||||
// txttrayMenuServersLimit
|
||||
//
|
||||
resources.ApplyResources(this.tbCacheDays, "tbCacheDays");
|
||||
this.tbCacheDays.Name = "tbCacheDays";
|
||||
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");
|
||||
this.chkKeepOlderDedupl.Name = "chkKeepOlderDedupl";
|
||||
this.chkKeepOlderDedupl.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lbFreshrate
|
||||
//
|
||||
resources.ApplyResources(this.lbFreshrate, "lbFreshrate");
|
||||
this.lbFreshrate.Name = "lbFreshrate";
|
||||
//
|
||||
// lbCacheDays
|
||||
//
|
||||
resources.ApplyResources(this.lbCacheDays, "lbCacheDays");
|
||||
this.lbCacheDays.Name = "lbCacheDays";
|
||||
//
|
||||
// chkEnableStatistics
|
||||
//
|
||||
resources.ApplyResources(this.chkEnableStatistics, "chkEnableStatistics");
|
||||
this.chkEnableStatistics.Name = "chkEnableStatistics";
|
||||
this.chkEnableStatistics.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkAllowLANConn
|
||||
// chkAutoRun
|
||||
//
|
||||
resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn");
|
||||
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
||||
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
||||
this.chkAutoRun.Name = "chkAutoRun";
|
||||
this.chkAutoRun.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txturlGFWList
|
||||
// tabPageCoreType
|
||||
//
|
||||
resources.ApplyResources(this.txturlGFWList, "txturlGFWList");
|
||||
this.txturlGFWList.Name = "txturlGFWList";
|
||||
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;
|
||||
//
|
||||
// cmbCoreType6
|
||||
//
|
||||
this.cmbCoreType6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbCoreType6.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.cmbCoreType6, "cmbCoreType6");
|
||||
this.cmbCoreType6.Name = "cmbCoreType6";
|
||||
//
|
||||
// labCoreType6
|
||||
//
|
||||
resources.ApplyResources(this.labCoreType6, "labCoreType6");
|
||||
this.labCoreType6.Name = "labCoreType6";
|
||||
//
|
||||
// cmbCoreType5
|
||||
//
|
||||
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";
|
||||
//
|
||||
// chkAutoRun
|
||||
// label12
|
||||
//
|
||||
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
||||
this.chkAutoRun.Name = "chkAutoRun";
|
||||
this.chkAutoRun.UseVisualStyleBackColor = true;
|
||||
resources.ApplyResources(this.label12, "label12");
|
||||
this.label12.Name = "label12";
|
||||
//
|
||||
// txtsystemProxyExceptions
|
||||
//
|
||||
resources.ApplyResources(this.txtsystemProxyExceptions, "txtsystemProxyExceptions");
|
||||
this.txtsystemProxyExceptions.Name = "txtsystemProxyExceptions";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
@@ -563,9 +658,11 @@
|
||||
resources.ApplyResources(this.panel1, "panel1");
|
||||
this.panel1.Name = "panel1";
|
||||
//
|
||||
// configBindingSource
|
||||
// chkEnableCheckPreReleaseUpdate
|
||||
//
|
||||
this.configBindingSource.DataSource = typeof(v2rayN.Mode.Config);
|
||||
resources.ApplyResources(this.chkEnableCheckPreReleaseUpdate, "chkEnableCheckPreReleaseUpdate");
|
||||
this.chkEnableCheckPreReleaseUpdate.Name = "chkEnableCheckPreReleaseUpdate";
|
||||
this.chkEnableCheckPreReleaseUpdate.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// OptionSettingForm
|
||||
//
|
||||
@@ -583,22 +680,18 @@
|
||||
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.panel3.ResumeLayout(false);
|
||||
this.panel3.PerformLayout();
|
||||
this.tabPage2.PerformLayout();
|
||||
this.tabPage6.ResumeLayout(false);
|
||||
this.tabPage6.PerformLayout();
|
||||
this.tabPage7.ResumeLayout(false);
|
||||
this.tabPage7.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numStatisticsFreshRate)).EndInit();
|
||||
this.tabPageCoreType.ResumeLayout(false);
|
||||
this.tabPageCoreType.PerformLayout();
|
||||
this.tabPage3.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.configBindingSource)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
@@ -617,25 +710,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;
|
||||
@@ -652,24 +730,53 @@
|
||||
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.CheckBox chksniffingEnabled;
|
||||
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
||||
private System.Windows.Forms.Label lbFreshrate;
|
||||
private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
|
||||
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.Panel panel3;
|
||||
private System.Windows.Forms.ComboBox cmbdomainStrategy;
|
||||
private System.Windows.Forms.Label label15;
|
||||
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.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.TextBox tbCacheDays;
|
||||
private System.Windows.Forms.Label lbCacheDays;
|
||||
private System.Windows.Forms.ComboBox cbFreshrate;
|
||||
private System.Windows.Forms.Label lbFreshrate;
|
||||
private System.Windows.Forms.BindingSource configBindingSource;
|
||||
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;
|
||||
private System.Windows.Forms.NumericUpDown numStatisticsFreshRate;
|
||||
private System.Windows.Forms.ComboBox cmbdomainStrategy4Freedom;
|
||||
private System.Windows.Forms.Label label19;
|
||||
private System.Windows.Forms.CheckBox chkEnableCheckPreReleaseUpdate;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Handler;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Forms
|
||||
{
|
||||
@@ -14,13 +18,15 @@ namespace v2rayN.Forms
|
||||
|
||||
private void OptionSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
cmbSystemProxyAdvancedProtocol.Items.AddRange(Global.IEProxyProtocols.ToArray());
|
||||
|
||||
InitBase();
|
||||
|
||||
InitRouting();
|
||||
|
||||
InitKCP();
|
||||
|
||||
InitGUI();
|
||||
|
||||
InitCoreType();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -42,44 +48,23 @@ 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 = "socks + 1";
|
||||
cmbprotocol2.Text = "http";
|
||||
|
||||
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;
|
||||
cmbdomainStrategy4Freedom.Text = config.domainStrategy4Freedom;
|
||||
|
||||
chkdefAllowInsecure.Checked = config.defAllowInsecure;
|
||||
|
||||
txtsystemProxyExceptions.Text = config.systemProxyExceptions;
|
||||
|
||||
cmbSystemProxyAdvancedProtocol.Text = config.systemProxyAdvancedProtocol;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化路由设置
|
||||
/// </summary>
|
||||
private void InitRouting()
|
||||
{
|
||||
//路由
|
||||
cmbdomainStrategy.Text = config.domainStrategy;
|
||||
int routingMode = 0;
|
||||
int.TryParse(config.routingMode, out 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设置
|
||||
@@ -103,42 +88,47 @@ namespace v2rayN.Forms
|
||||
//开机自动启动
|
||||
chkAutoRun.Checked = Utils.IsAutoRun();
|
||||
|
||||
//自定义GFWList
|
||||
txturlGFWList.Text = config.urlGFWList;
|
||||
chkEnableStatistics.Checked = config.enableStatistics;
|
||||
numStatisticsFreshRate.Value = config.statisticsFreshRate;
|
||||
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
||||
|
||||
chkAllowLANConn.Checked = config.allowLANConn;
|
||||
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
|
||||
chkEnableAutoAdjustMainLvColWidth.Checked = config.uiItem.enableAutoAdjustMainLvColWidth;
|
||||
chkEnableSecurityProtocolTls13.Checked = config.enableSecurityProtocolTls13;
|
||||
|
||||
txtautoUpdateInterval.Text = config.autoUpdateInterval.ToString();
|
||||
txtautoUpdateSubInterval.Text = config.autoUpdateSubInterval.ToString();
|
||||
chkEnableCheckPreReleaseUpdate.Checked = config.checkPreReleaseUpdate;
|
||||
txttrayMenuServersLimit.Text = config.trayMenuServersLimit.ToString();
|
||||
}
|
||||
|
||||
var enableStatistics = config.enableStatistics;
|
||||
chkEnableStatistics.Checked = enableStatistics;
|
||||
|
||||
tbCacheDays.Text = config.CacheDays.ToString();
|
||||
|
||||
|
||||
var cbSource = new ComboItem[]
|
||||
private void InitCoreType()
|
||||
{
|
||||
if (config.coreTypeItem == null)
|
||||
{
|
||||
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")},
|
||||
};
|
||||
cbFreshrate.DataSource = cbSource;
|
||||
|
||||
cbFreshrate.DisplayMember = "Text";
|
||||
cbFreshrate.ValueMember = "ID";
|
||||
|
||||
switch(config.statisticsFreshRate)
|
||||
{
|
||||
case (int)Global.StatisticsFreshRate.quick:
|
||||
cbFreshrate.SelectedItem = cbSource[0];
|
||||
break;
|
||||
case (int)Global.StatisticsFreshRate.medium:
|
||||
cbFreshrate.SelectedItem = cbSource[1];
|
||||
break;
|
||||
case (int)Global.StatisticsFreshRate.slow:
|
||||
cbFreshrate.SelectedItem = cbSource[2];
|
||||
break;
|
||||
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)
|
||||
@@ -148,10 +138,6 @@ namespace v2rayN.Forms
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveRouting() != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveKCP() != 0)
|
||||
{
|
||||
@@ -163,13 +149,18 @@ namespace v2rayN.Forms
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveCoreType() != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ConfigHandler.SaveConfig(ref config) == 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.Show(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,55 +182,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;
|
||||
@@ -247,35 +229,19 @@ namespace v2rayN.Forms
|
||||
//Mux
|
||||
config.muxEnabled = muxEnabled;
|
||||
|
||||
//remoteDNS
|
||||
//remoteDNS
|
||||
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||
config.domainStrategy4Freedom = cmbdomainStrategy4Freedom.Text;
|
||||
|
||||
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设置
|
||||
@@ -298,7 +264,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);
|
||||
@@ -321,100 +287,53 @@ namespace v2rayN.Forms
|
||||
//开机自动启动
|
||||
Utils.SetAutoRun(chkAutoRun.Checked);
|
||||
|
||||
//自定义GFWList
|
||||
config.urlGFWList = txturlGFWList.Text.TrimEx();
|
||||
|
||||
config.allowLANConn = chkAllowLANConn.Checked;
|
||||
|
||||
var lastEnableStatistics = config.enableStatistics;
|
||||
bool lastEnableStatistics = config.enableStatistics;
|
||||
config.enableStatistics = chkEnableStatistics.Checked;
|
||||
config.statisticsFreshRate = Convert.ToInt32(numStatisticsFreshRate.Value);
|
||||
if (config.statisticsFreshRate > 100 || config.statisticsFreshRate < 1)
|
||||
{
|
||||
config.statisticsFreshRate = 1;
|
||||
}
|
||||
|
||||
uint days = 0;
|
||||
var valid = uint.TryParse(tbCacheDays.Text, out days);
|
||||
if (!valid)
|
||||
days = 7;
|
||||
config.CacheDays = days;
|
||||
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
|
||||
|
||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
|
||||
config.uiItem.enableAutoAdjustMainLvColWidth = chkEnableAutoAdjustMainLvColWidth.Checked;
|
||||
config.enableSecurityProtocolTls13 = chkEnableSecurityProtocolTls13.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.autoUpdateInterval = Utils.ToInt(txtautoUpdateInterval.Text);
|
||||
config.autoUpdateSubInterval = Utils.ToInt(txtautoUpdateSubInterval.Text);
|
||||
config.checkPreReleaseUpdate = chkEnableCheckPreReleaseUpdate.Checked;
|
||||
config.trayMenuServersLimit = Utils.ToInt(txttrayMenuServersLimit.Text);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int SaveCoreType()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
// // Restart the app passing "/restart [processId]" as cmd line args
|
||||
// Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id);
|
||||
//}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void chkAllowIn2_CheckedChanged(object sender, EventArgs e)
|
||||
|
||||
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
chkAllowIn2State();
|
||||
Process.Start("https://www.v2fly.org/config/dns.html#dnsobject");
|
||||
}
|
||||
private void chkAllowIn2State()
|
||||
|
||||
private void btnSetLoopback_Click(object sender, EventArgs e)
|
||||
{
|
||||
bool blAllow2 = chkAllowIn2.Checked;
|
||||
txtlocalPort2.Enabled =
|
||||
cmbprotocol2.Enabled =
|
||||
chkudpEnabled2.Enabled = blAllow2;
|
||||
Process.Start(Utils.GetPath("EnableLoopback.exe"));
|
||||
}
|
||||
|
||||
private void btnSetDefRountingRule_Click(object sender, EventArgs e)
|
||||
{
|
||||
var lstUrl = new List<string>();
|
||||
lstUrl.Add(Global.CustomRoutingListUrl + "proxy");
|
||||
lstUrl.Add(Global.CustomRoutingListUrl + "direct");
|
||||
lstUrl.Add(Global.CustomRoutingListUrl + "block");
|
||||
|
||||
var lstTxt = new List<TextBox>();
|
||||
lstTxt.Add(txtUseragent);
|
||||
lstTxt.Add(txtUserdirect);
|
||||
lstTxt.Add(txtUserblock);
|
||||
|
||||
for (int k = 0; k < lstUrl.Count; k++)
|
||||
{
|
||||
var txt = lstTxt[k];
|
||||
V2rayUpdateHandle v2rayUpdateHandle3 = new V2rayUpdateHandle();
|
||||
v2rayUpdateHandle3.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
var result = args.Msg;
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
return;
|
||||
}
|
||||
txt.Text = result;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendText(false, args.Msg);
|
||||
}
|
||||
};
|
||||
v2rayUpdateHandle3.Error += (sender2, args) =>
|
||||
{
|
||||
AppendText(true, args.GetException().Message);
|
||||
};
|
||||
|
||||
v2rayUpdateHandle3.WebDownloadString(lstUrl[k]);
|
||||
}
|
||||
}
|
||||
void AppendText(bool notify, string text)
|
||||
{
|
||||
labRoutingTips.Text = text;
|
||||
}
|
||||
}
|
||||
|
||||
class ComboItem
|
||||
{
|
||||
public int ID { get; set; }
|
||||
public string Text { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -121,11 +121,47 @@
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>96, 16</value>
|
||||
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>662, 469</value>
|
||||
</data>
|
||||
<data name="chksniffingEnabled2.Text" xml:space="preserve">
|
||||
<value>开启流量探测</value>
|
||||
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value> Core:基础设置 </value>
|
||||
</data>
|
||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>648, 437</value>
|
||||
</data>
|
||||
<data name="label16.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label16.Text" xml:space="preserve">
|
||||
<value>认证密码</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>219, 65</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 12</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>认证用户名</value>
|
||||
</data>
|
||||
<data name="chkdefAllowInsecure.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>15, 208</value>
|
||||
</data>
|
||||
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<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>
|
||||
@@ -133,32 +169,17 @@
|
||||
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
||||
<value>开启流量探测</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
<data name="chkmuxEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>15, 145</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||
<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>
|
||||
<value>开启Mux多路复用</value>
|
||||
</data>
|
||||
<data name="chkAllowIn2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>102, 16</value>
|
||||
</data>
|
||||
<data name="chkAllowIn2.Text" xml:space="preserve">
|
||||
<value>本地监听端口2</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>66, 16</value>
|
||||
</data>
|
||||
<data name="chkudpEnabled2.Text" xml:space="preserve">
|
||||
<value>开启UDP</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>29, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>协议</value>
|
||||
<data 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>
|
||||
@@ -172,12 +193,21 @@
|
||||
<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>
|
||||
@@ -190,88 +220,113 @@
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>本地监听端口</value>
|
||||
</data>
|
||||
<data name="tabPage1.Text" xml:space="preserve">
|
||||
<value> Core:基础设置 </value>
|
||||
</data>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value> 代理的Domain或IP </value>
|
||||
</data>
|
||||
<data name="tabPage4.Text" xml:space="preserve">
|
||||
<value> 直连的Domain或IP </value>
|
||||
</data>
|
||||
<data name="tabPage5.Text" xml:space="preserve">
|
||||
<value> 阻止的Domain或IP </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>
|
||||
<data name="btnSetDefRountingRule.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>381, 43</value>
|
||||
</data>
|
||||
<data name="btnSetDefRountingRule.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>201, 23</value>
|
||||
</data>
|
||||
<data name="btnSetDefRountingRule.Text" xml:space="preserve">
|
||||
<value>一键设置默认自定义路由规则</value>
|
||||
</data>
|
||||
<data name="cmbdomainStrategy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 20</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.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>383, 12</value>
|
||||
</data>
|
||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||
<value>*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>域名策略</value>
|
||||
</data>
|
||||
<data name="label12.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 12</value>
|
||||
</data>
|
||||
<data name="label12.Text" xml:space="preserve">
|
||||
<value>路由模式</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.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>232, 20</value>
|
||||
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPage2.Text" xml:space="preserve">
|
||||
<value> Core:路由设置 </value>
|
||||
<value> Core:DNS设置 </value>
|
||||
</data>
|
||||
<data name="cmbdomainStrategy4Freedom.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>223, 413</value>
|
||||
</data>
|
||||
<data name="label19.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>8, 417</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>161, 12</value>
|
||||
</data>
|
||||
<data name="linkDnsObjectDoc.Text" xml:space="preserve">
|
||||
<value>支持填写DnsObject,JSON格式</value>
|
||||
</data>
|
||||
<data name="txtremoteDNS.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>638, 366</value>
|
||||
</data>
|
||||
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<data name="label14.Text" xml:space="preserve">
|
||||
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||
</data>
|
||||
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPage6.Text" xml:space="preserve">
|
||||
<value> Core:KCP设置 </value>
|
||||
</data>
|
||||
<data name="chkAllowLANConn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>144, 16</value>
|
||||
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
||||
<value>允许来自局域网的连接</value>
|
||||
<data name="tabPage7.Text" xml:space="preserve">
|
||||
<value> v2rayN设置 </value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>227, 12</value>
|
||||
<data name="numStatisticsFreshRate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>472, 37</value>
|
||||
</data>
|
||||
<data name="label13.Text" xml:space="preserve">
|
||||
<value>自定义GFWList地址(不需自定义请填空白)</value>
|
||||
<data name="txttrayMenuServersLimit.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 211</value>
|
||||
</data>
|
||||
<data name="label17.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>185, 12</value>
|
||||
</data>
|
||||
<data name="label17.Text" xml:space="preserve">
|
||||
<value>托盘右键菜单服务器展示数量限制</value>
|
||||
</data>
|
||||
<data name="txtautoUpdateSubInterval.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 184</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 12</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>自动更新订阅的间隔(单位小时)</value>
|
||||
</data>
|
||||
<data name="chkEnableSecurityProtocolTls13.Text" xml:space="preserve">
|
||||
<value>启用安全协议TLS v1.3 (订阅/检查更新/测速)</value>
|
||||
</data>
|
||||
<data name="chkEnableAutoAdjustMainLvColWidth.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>204, 16</value>
|
||||
</data>
|
||||
<data name="chkEnableAutoAdjustMainLvColWidth.Text" xml:space="preserve">
|
||||
<value>自动调整服务器列宽在更新订阅后</value>
|
||||
</data>
|
||||
<data name="btnSetLoopback.Text" xml:space="preserve">
|
||||
<value>解除Windows10 UWP应用回环代理限制</value>
|
||||
</data>
|
||||
<data name="txtautoUpdateInterval.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>248, 157</value>
|
||||
</data>
|
||||
<data name="label15.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>191, 12</value>
|
||||
</data>
|
||||
<data name="label15.Text" xml:space="preserve">
|
||||
<value>自动更新Geo文件的间隔(单位小时)</value>
|
||||
</data>
|
||||
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 16</value>
|
||||
</data>
|
||||
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
|
||||
<value>更新Core时忽略Geo文件</value>
|
||||
</data>
|
||||
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>156, 16</value>
|
||||
</data>
|
||||
<data name="chkKeepOlderDedupl.Text" xml:space="preserve">
|
||||
<value>去重时保留序号较小的项</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>339, 41</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>125, 12</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Text" xml:space="preserve">
|
||||
<value>统计刷新频率(单位秒)</value>
|
||||
</data>
|
||||
<data name="chkEnableStatistics.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>300, 16</value>
|
||||
</data>
|
||||
<data name="chkEnableStatistics.Text" xml:space="preserve">
|
||||
<value>启用统计(实时网速显示和使用流量显示,需要重启)</value>
|
||||
</data>
|
||||
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 16</value>
|
||||
@@ -279,22 +334,61 @@
|
||||
<data name="chkAutoRun.Text" xml:space="preserve">
|
||||
<value>开机自动启动(可能会不成功)</value>
|
||||
</data>
|
||||
<data name="tabPage7.Text" xml:space="preserve">
|
||||
<value> v2rayN设置 </value>
|
||||
<data name="tabPageCoreType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPageCoreType.Text" xml:space="preserve">
|
||||
<value> Core类型设置 </value>
|
||||
</data>
|
||||
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="tabPage3.Text" xml:space="preserve">
|
||||
<value> 系统代理设置 </value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>654, 443</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>例外</value>
|
||||
</data>
|
||||
<data name="label18.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 12</value>
|
||||
</data>
|
||||
<data name="label18.Text" xml:space="preserve">
|
||||
<value>高级代理设置, 协议选择(可选)</value>
|
||||
</data>
|
||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 12</value>
|
||||
</data>
|
||||
<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="chkEnableStatistics.Text" xml:space="preserve">
|
||||
<value>启用统计(实时网速显示和使用流量显示,需要重启v2rayN客户端)</value>
|
||||
</data>
|
||||
<data name="lbCacheDays.Text" xml:space="preserve">
|
||||
<value>缓存天数(0-30, 0关闭缓存单独每天的数据使用情况)</value>
|
||||
</data>
|
||||
<data name="lbFreshrate.Text" xml:space="preserve">
|
||||
<value>统计刷新频率</value>
|
||||
<data name="chkEnableCheckPreReleaseUpdate.Text" xml:space="preserve">
|
||||
<value>检查Pre-Release更新(请谨慎启用)</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,106 +117,76 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>picQRCode.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 441</value>
|
||||
</data>
|
||||
<data name="chkShow.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="chkShow.Text" xml:space="preserve">
|
||||
<value>Show shared content</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="chkShow.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 16</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>QRCodeControl</value>
|
||||
</data>
|
||||
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 355</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 371</value>
|
||||
</data>
|
||||
<data name=">>chkShow.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=">>picQRCode.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="txtUrl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
</data>
|
||||
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="chkShow.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
<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>
|
||||
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</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.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>chkShow.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 16</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>chkShow.Name" xml:space="preserve">
|
||||
<value>chkShow</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name=">>chkShow.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Name" xml:space="preserve">
|
||||
<value>picQRCode</value>
|
||||
</data>
|
||||
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>356, 70</value>
|
||||
</data>
|
||||
<data name="chkShow.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name="chkShow.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
271
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
generated
Normal file
271
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.Designer.cs
generated
Normal file
@@ -0,0 +1,271 @@
|
||||
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.linkRuleobjectDoc = new System.Windows.Forms.LinkLabel();
|
||||
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.clbInboundTag = new System.Windows.Forms.CheckedListBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
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
|
||||
//
|
||||
resources.ApplyResources(this.panel3, "panel3");
|
||||
this.panel3.Controls.Add(this.linkRuleobjectDoc);
|
||||
this.panel3.Controls.Add(this.chkEnabled);
|
||||
this.panel3.Controls.Add(this.clbInboundTag);
|
||||
this.panel3.Controls.Add(this.label2);
|
||||
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);
|
||||
this.panel3.Name = "panel3";
|
||||
//
|
||||
// linkRuleobjectDoc
|
||||
//
|
||||
resources.ApplyResources(this.linkRuleobjectDoc, "linkRuleobjectDoc");
|
||||
this.linkRuleobjectDoc.Name = "linkRuleobjectDoc";
|
||||
this.linkRuleobjectDoc.TabStop = true;
|
||||
this.linkRuleobjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkRuleobjectDoc_LinkClicked);
|
||||
//
|
||||
// chkEnabled
|
||||
//
|
||||
resources.ApplyResources(this.chkEnabled, "chkEnabled");
|
||||
this.chkEnabled.Name = "chkEnabled";
|
||||
this.chkEnabled.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// clbInboundTag
|
||||
//
|
||||
resources.ApplyResources(this.clbInboundTag, "clbInboundTag");
|
||||
this.clbInboundTag.CheckOnClick = true;
|
||||
this.clbInboundTag.FormattingEnabled = true;
|
||||
this.clbInboundTag.Items.AddRange(new object[] {
|
||||
resources.GetString("clbInboundTag.Items"),
|
||||
resources.GetString("clbInboundTag.Items1"),
|
||||
resources.GetString("clbInboundTag.Items2"),
|
||||
resources.GetString("clbInboundTag.Items3")});
|
||||
this.clbInboundTag.MultiColumn = true;
|
||||
this.clbInboundTag.Name = "clbInboundTag";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// clbProtocol
|
||||
//
|
||||
resources.ApplyResources(this.clbProtocol, "clbProtocol");
|
||||
this.clbProtocol.CheckOnClick = true;
|
||||
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
|
||||
//
|
||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||
this.labRoutingTips.Name = "labRoutingTips";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// cmbOutboundTag
|
||||
//
|
||||
resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
|
||||
this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbOutboundTag.FormattingEnabled = true;
|
||||
this.cmbOutboundTag.Items.AddRange(new object[] {
|
||||
resources.GetString("cmbOutboundTag.Items"),
|
||||
resources.GetString("cmbOutboundTag.Items1"),
|
||||
resources.GetString("cmbOutboundTag.Items2")});
|
||||
this.cmbOutboundTag.Name = "cmbOutboundTag";
|
||||
//
|
||||
// panel4
|
||||
//
|
||||
resources.ApplyResources(this.panel4, "panel4");
|
||||
this.panel4.Controls.Add(this.chkAutoSort);
|
||||
this.panel4.Controls.Add(this.btnClose);
|
||||
this.panel4.Controls.Add(this.btnOK);
|
||||
this.panel4.Name = "panel4";
|
||||
//
|
||||
// chkAutoSort
|
||||
//
|
||||
resources.ApplyResources(this.chkAutoSort, "chkAutoSort");
|
||||
this.chkAutoSort.Name = "chkAutoSort";
|
||||
this.chkAutoSort.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
resources.ApplyResources(this.btnClose, "btnClose");
|
||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
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
|
||||
//
|
||||
resources.ApplyResources(this.panel2, "panel2");
|
||||
this.panel2.Controls.Add(this.groupBox2);
|
||||
this.panel2.Controls.Add(this.groupBox1);
|
||||
this.panel2.Name = "panel2";
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||
this.groupBox2.Controls.Add(this.txtIP);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.TabStop = false;
|
||||
//
|
||||
// txtIP
|
||||
//
|
||||
resources.ApplyResources(this.txtIP, "txtIP");
|
||||
this.txtIP.Name = "txtIP";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||
this.groupBox1.Controls.Add(this.txtDomain);
|
||||
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;
|
||||
private System.Windows.Forms.LinkLabel linkRuleobjectDoc;
|
||||
}
|
||||
}
|
||||
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.Diagnostics;
|
||||
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();
|
||||
|
||||
bool hasRule =
|
||||
rulesItem.domain != null
|
||||
&& rulesItem.domain.Count > 0
|
||||
|| rulesItem.ip != null
|
||||
&& rulesItem.ip.Count > 0
|
||||
|| rulesItem.protocol != null
|
||||
&& rulesItem.protocol.Count > 0
|
||||
|| !Utils.IsNullOrEmpty(rulesItem.port);
|
||||
|
||||
if (!hasRule)
|
||||
{
|
||||
UI.ShowWarning(string.Format(ResUI.RoutingRuleDetailRequiredTips, "Port/Protocol/Domain/IP"));
|
||||
return;
|
||||
}
|
||||
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void linkRuleobjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
Process.Start("https://www.v2fly.org/config/routing.html#ruleobject");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
185
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx
Normal file
185
v2rayN/v2rayN/Forms/RoutingRuleSettingDetailsForm.zh-Hans.resx
Normal file
@@ -0,0 +1,185 @@
|
||||
<?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="linkRuleobjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 12</value>
|
||||
</data>
|
||||
<data name="linkRuleobjectDoc.Text" xml:space="preserve">
|
||||
<value>规则详细说明文档</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>670, 48</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>372, 16</value>
|
||||
</data>
|
||||
<data name="clbInboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>347, 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="chkAutoSort.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>168, 16</value>
|
||||
</data>
|
||||
<data name="chkAutoSort.Text" xml:space="preserve">
|
||||
<value>保存时Domain和IP自动排序</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<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>
|
||||
</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;
|
||||
}
|
||||
}
|
||||
365
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
Normal file
365
v2rayN/v2rayN/Forms/RoutingRuleSettingForm.cs
Normal file
@@ -0,0 +1,365 @@
|
||||
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;
|
||||
|
||||
private readonly List<int> lvSelecteds = new List<int>();
|
||||
public RoutingRuleSettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RoutingRuleSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
routingItem = EditIndex >= 0 ? config.routings[EditIndex] : 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();
|
||||
|
||||
foreach (var item in routingItem.rules)
|
||||
{
|
||||
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)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
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>
|
||||
482
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
482
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,482 @@
|
||||
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.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuImportAdvancedRules = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.MenuItemAdvanced = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuServer = new System.Windows.Forms.MenuStrip();
|
||||
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.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;
|
||||
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);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||
//
|
||||
// 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);
|
||||
//
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
320
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
320
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
@@ -0,0 +1,320 @@
|
||||
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 readonly List<int> _lvSelecteds = new List<int>();
|
||||
private RoutingItem _lockedItem;
|
||||
public RoutingSettingForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void RoutingSettingForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
ConfigHandler.InitBuiltinRouting(ref config);
|
||||
cmbdomainMatcher.Items.AddRange(Global.domainMatchers.ToArray());
|
||||
|
||||
cmbdomainStrategy.Text = config.domainStrategy;
|
||||
chkenableRoutingAdvanced.Checked = config.enableRoutingAdvanced;
|
||||
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)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
private void chkenableRoutingAdvanced_CheckedChanged_1(object sender, EventArgs e)
|
||||
{
|
||||
InitUI();
|
||||
}
|
||||
private void InitUI()
|
||||
{
|
||||
if (chkenableRoutingAdvanced.Checked)
|
||||
{
|
||||
tabPageProxy.Parent = null;
|
||||
tabPageDirect.Parent = null;
|
||||
tabPageBlock.Parent = null;
|
||||
tabPageRuleList.Parent = tabNormal;
|
||||
MenuItemBasic.Enabled = false;
|
||||
MenuItemAdvanced.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
tabPageProxy.Parent = tabNormal;
|
||||
tabPageDirect.Parent = tabNormal;
|
||||
tabPageBlock.Parent = tabNormal;
|
||||
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 = Global.CheckMark;
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
}
|
||||
}
|
||||
1142
v2rayN/v2rayN/Forms/RoutingSettingForm.resx
Normal file
1142
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;
|
||||
|
||||
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,6 +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
|
||||
{
|
||||
@@ -8,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()
|
||||
{
|
||||
@@ -19,6 +26,13 @@ namespace v2rayN.Forms
|
||||
|
||||
private void SubSettingControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
Height = grbMain.Height;
|
||||
|
||||
groupItem = LazyConfig.Instance.GetConfig().groupItem;
|
||||
|
||||
cmbGroup.Items.AddRange(groupItem.Select(t => t.remarks).ToArray());
|
||||
cmbGroup.Items.Add(string.Empty);
|
||||
|
||||
BindingSub();
|
||||
}
|
||||
|
||||
@@ -29,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()
|
||||
@@ -38,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)
|
||||
@@ -53,9 +85,24 @@ namespace v2rayN.Forms
|
||||
subItem.url = string.Empty;
|
||||
}
|
||||
|
||||
if (OnButtonClicked != null)
|
||||
OnButtonClicked?.Invoke(sender, e);
|
||||
}
|
||||
|
||||
private void btnShare_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Height <= grbMain.Height)
|
||||
{
|
||||
OnButtonClicked(sender, e);
|
||||
if (Utils.IsNullOrEmpty(subItem.url))
|
||||
{
|
||||
picQRCode.Image = null;
|
||||
return;
|
||||
}
|
||||
picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url);
|
||||
Height = grbMain.Height + 200;
|
||||
}
|
||||
else
|
||||
{
|
||||
Height = grbMain.Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,36 +117,72 @@
|
||||
<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>groupBox2</value>
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>619, 162</value>
|
||||
</data>
|
||||
<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=">>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=">>txtUrl.Name" xml:space="preserve">
|
||||
<value>txtUrl</value>
|
||||
</data>
|
||||
<data name=">>cmbGroup.Parent" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>picQRCode.Name" xml:space="preserve">
|
||||
<value>picQRCode</value>
|
||||
</data>
|
||||
<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="btnRemove.Text" xml:space="preserve">
|
||||
<value>&Remove</value>
|
||||
<value>Remove</value>
|
||||
</data>
|
||||
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>484, 21</value>
|
||||
<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="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>432, 46</value>
|
||||
<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="btnShare.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>26</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=">>txtRemarks.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
@@ -154,13 +190,25 @@
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
<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=">>groupBox2.Name" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
<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>
|
||||
@@ -171,44 +219,83 @@
|
||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 21</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
<data name="btnShare.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<data name="btnShare.Text" xml:space="preserve">
|
||||
<value>Share</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 55</value>
|
||||
</data>
|
||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>127, 55</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Bottom</value>
|
||||
<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>2</value>
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>chkEnabled.Parent" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<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="groupBox2.Text" xml:space="preserve">
|
||||
<value>Subscription details</value>
|
||||
<data name="txtUrl.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 9</value>
|
||||
<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>
|
||||
@@ -216,29 +303,62 @@
|
||||
<data name=">>chkEnabled.Name" xml:space="preserve">
|
||||
<value>chkEnabled</value>
|
||||
</data>
|
||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||
<value>Zoom</value>
|
||||
</data>
|
||||
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<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="label3.Text" xml:space="preserve">
|
||||
<value>Address (url)</value>
|
||||
<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>groupBox2</value>
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.Parent" xml:space="preserve">
|
||||
<value>groupBox2</value>
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>406, 23</value>
|
||||
<value>368, 23</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -246,8 +366,17 @@
|
||||
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>btnRemove.Name" xml:space="preserve">
|
||||
<value>btnRemove</value>
|
||||
<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>
|
||||
@@ -255,26 +384,50 @@
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</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 name=">>grbMain.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>584, 110</value>
|
||||
<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="$this.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>584, 119</value>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 115</value>
|
||||
</data>
|
||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
<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="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
<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>
|
||||
@@ -282,38 +435,44 @@
|
||||
<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>groupBox2</value>
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>265, 21</value>
|
||||
</data>
|
||||
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</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=">>btnRemove.ZOrder" xml:space="preserve">
|
||||
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>groupBox2.Parent" xml:space="preserve">
|
||||
<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=">>groupBox2.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<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=">>txtRemarks.Name" xml:space="preserve">
|
||||
<value>txtRemarks</value>
|
||||
<data name=">>grbMain.Name" xml:space="preserve">
|
||||
<value>grbMain</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
<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>
|
||||
@@ -321,10 +480,10 @@
|
||||
<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>
|
||||
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>zh-Hans</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -118,6 +118,21 @@
|
||||
<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="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>
|
||||
</data>
|
||||
@@ -139,7 +154,7 @@
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>地址 (url)</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<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
|
||||
{
|
||||
@@ -35,7 +36,7 @@ namespace v2rayN.Forms
|
||||
|
||||
for (int k = config.subItem.Count - 1; k >= 0; k--)
|
||||
{
|
||||
var item = config.subItem[k];
|
||||
SubItem item = config.subItem[k];
|
||||
if (Utils.IsNullOrEmpty(item.remarks)
|
||||
&& Utils.IsNullOrEmpty(item.url))
|
||||
{
|
||||
@@ -47,9 +48,8 @@ namespace v2rayN.Forms
|
||||
}
|
||||
}
|
||||
|
||||
for (int k = 0; k < config.subItem.Count; k++)
|
||||
foreach (SubItem item in config.subItem)
|
||||
{
|
||||
var item = config.subItem[k];
|
||||
SubSettingControl control = new SubSettingControl();
|
||||
control.OnButtonClicked += Control_OnButtonClicked;
|
||||
control.subItem = item;
|
||||
@@ -69,24 +69,19 @@ 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;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
UI.Show(UIRes.I18N("OperationFailed"));
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClose_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void btnAdd_Click(object sender, EventArgs e)
|
||||
@@ -99,10 +94,12 @@ namespace v2rayN.Forms
|
||||
|
||||
private void AddSub()
|
||||
{
|
||||
var subItem = new SubItem();
|
||||
subItem.id = string.Empty;
|
||||
subItem.remarks = "remarks";
|
||||
subItem.url = "url";
|
||||
SubItem subItem = new SubItem
|
||||
{
|
||||
id = string.Empty,
|
||||
remarks = "remarks",
|
||||
url = "url"
|
||||
};
|
||||
config.subItem.Add(subItem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="panCon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>581, 569</value>
|
||||
<value>634, 401</value>
|
||||
</data>
|
||||
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
@@ -232,10 +232,10 @@
|
||||
<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>
|
||||
@@ -259,8 +259,8 @@
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>581, 629</value>
|
||||
</data>
|
||||
<value>634, 461</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Subscription settings</value>
|
||||
</data>
|
||||
|
||||
@@ -117,12 +117,15 @@
|
||||
<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 name="$this.Text" xml:space="preserve">
|
||||
<value>订阅设置</value>
|
||||
</data>
|
||||
<data name="btnAdd.Text" xml:space="preserve">
|
||||
<value>添加(&A)</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>取消(&C)</value>
|
||||
</data>
|
||||
<data name="btnOK.Text" xml:space="preserve">
|
||||
<value>确定(&O)</value>
|
||||
</data>
|
||||
@@ -143,7 +146,4 @@
|
||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>订阅设置</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,23 +1,34 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace v2rayN
|
||||
{
|
||||
class Global
|
||||
{
|
||||
#region 常量
|
||||
|
||||
/// <summary>
|
||||
/// 更新链接
|
||||
/// </summary>
|
||||
public const string UpdateUrl = @"https://github.com/2dust/v2rayN/releases";
|
||||
/// <summary>
|
||||
/// 关于链接
|
||||
/// </summary>
|
||||
//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 SagerNetCoreUrl = "https://github.com/SagerNet/v2ray-core/releases";
|
||||
public const string NUrl = @"https://github.com/2dust/v2rayN/releases";
|
||||
public const string clashCoreUrl = "https://github.com/Dreamacro/clash/releases";
|
||||
public const string clashMetaCoreUrl = "https://github.com/MetaCubeX/Clash.Meta/releases";
|
||||
public const string hysteriaCoreUrl = "https://github.com/HyNetwork/hysteria/releases";
|
||||
public const string naiveproxyCoreUrl = "https://github.com/klzgrad/naiveproxy/releases";
|
||||
public const string tuicCoreUrl = "https://github.com/EAimTY/tuic/releases";
|
||||
public const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// SpeedTestUrl
|
||||
/// </summary>
|
||||
public const string SpeedTestUrl = @"http://speedtest-sfo2.digitalocean.com/10mb.test";
|
||||
public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test";
|
||||
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
|
||||
|
||||
/// <summary>
|
||||
@@ -25,10 +36,11 @@ namespace v2rayN
|
||||
/// </summary>
|
||||
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// PromotionUrl
|
||||
/// </summary>
|
||||
public const string PromotionUrl = @"https://1.2345345.xyz/ads.html";
|
||||
public const string PromotionUrl = @"aHR0cHM6Ly85LjIzNDQ1Ni54eXovYWJjLmh0bWw=";
|
||||
|
||||
/// <summary>
|
||||
/// 本软件配置文件名
|
||||
@@ -56,10 +68,10 @@ 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>
|
||||
@@ -96,25 +108,47 @@ namespace v2rayN
|
||||
/// 阻止 tag值
|
||||
/// </summary>
|
||||
public const string blockTag = "block";
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </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";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// vmess
|
||||
/// </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://";
|
||||
@@ -122,11 +156,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
|
||||
@@ -142,25 +187,37 @@ namespace v2rayN
|
||||
/// Language
|
||||
/// </summary>
|
||||
public const string MyRegKeyLanguage = "CurrentLanguage";
|
||||
|
||||
/// <summary>
|
||||
/// Icon
|
||||
/// </summary>
|
||||
public const string CustomIconName = "v2rayN.ico";
|
||||
|
||||
public const string Loopback = "127.0.0.1";
|
||||
public const string StatisticLogOverall = "StatisticLogOverall.json";
|
||||
|
||||
public const string InboundAPITagName = "api";
|
||||
public const string InboundProxyTagName = "proxy";
|
||||
public const string InboundAPIProtocal = "dokodemo-door";
|
||||
|
||||
public enum StatisticsFreshRate
|
||||
{
|
||||
quick = 1000,
|
||||
medium = 2000,
|
||||
slow = 3000
|
||||
}
|
||||
public const string StatisticLogDirectory = "Statistics";
|
||||
public const string StatisticLogOverall = "overall.txt";
|
||||
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> ssSecuritysInSagerNet = new List<string> { "none", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "rc4", "rc4-md5", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-cfb8", "aes-192-cfb8", "aes-256-cfb8", "aes-128-ofb", "aes-192-ofb", "aes-256-ofb", "bf-cfb", "cast5-cfb", "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", "camellia-128-cfb8", "camellia-192-cfb8", "camellia-256-cfb8", "salsa20", "chacha20", "chacha20-ietf", "xchacha20" };
|
||||
public static readonly List<string> ssSecuritysInXray = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "none", "plain", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" };
|
||||
public static readonly List<string> xtlsFlows = new List<string> { "", "xtls-rprx-origin", "xtls-rprx-origin-udp443", "xtls-rprx-direct", "xtls-rprx-direct-udp443" };
|
||||
public static readonly List<string> networks = new List<string> { "tcp", "kcp", "ws", "h2", "quic", "grpc" };
|
||||
public static readonly List<string> kcpHeaderTypes = new List<string> { "srtp", "utp", "wechat-video", "dtls", "wireguard" };
|
||||
public static readonly List<string> coreTypes = new List<string> { "v2fly", "SagerNet", "Xray" , "v2fly_v5" };
|
||||
public static readonly List<string> domainMatchers = new List<string> { "linear", "mph", "" };
|
||||
public const string GrpcgunMode = "gun";
|
||||
public const string GrpcmultiMode = "multi";
|
||||
public const string CheckMark = "√";
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -169,32 +226,27 @@ namespace v2rayN
|
||||
/// <summary>
|
||||
/// 是否需要重启服务V2ray
|
||||
/// </summary>
|
||||
public static bool reloadV2ray { 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 sysAgentPort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PAC监听端口号
|
||||
/// </summary>
|
||||
public static int pacPort { get; set; }
|
||||
public static bool reloadV2ray
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public static int statePort { get; set; }
|
||||
public static int statePort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public static Job processJob
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
public static System.Threading.Mutex mutexObj
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
286
v2rayN/v2rayN/Handler/DownloadHandle.cs
Normal file
286
v2rayN/v2rayN/Handler/DownloadHandle.cs
Normal file
@@ -0,0 +1,286 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using v2rayN.Base;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
/// <summary>
|
||||
///Download
|
||||
/// </summary>
|
||||
class DownloadHandle
|
||||
{
|
||||
public event EventHandler<ResultEventArgs> UpdateCompleted;
|
||||
|
||||
public event ErrorEventHandler Error;
|
||||
|
||||
|
||||
public class ResultEventArgs : EventArgs
|
||||
{
|
||||
public bool Success;
|
||||
public string Msg;
|
||||
|
||||
public ResultEventArgs(bool success, string msg)
|
||||
{
|
||||
Success = success;
|
||||
Msg = msg;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout)
|
||||
{
|
||||
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 = $"{value} M/s".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));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
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 = $"...{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));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string> UrlRedirectAsync(string url, bool blProxy)
|
||||
{
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
WebRequestHandler webRequestHandler = new WebRequestHandler
|
||||
{
|
||||
AllowAutoRedirect = false,
|
||||
Proxy = GetWebProxy(blProxy)
|
||||
};
|
||||
HttpClient client = new HttpClient(webRequestHandler);
|
||||
|
||||
HttpResponseMessage response = await client.GetAsync(url);
|
||||
if (response.StatusCode.ToString() == "Redirect")
|
||||
{
|
||||
return response.Headers.Location.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.SaveLog("StatusCode error: " + url);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DownloadString
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
public async Task<string> DownloadStringAsync(string url, bool blProxy, string userAgent)
|
||||
{
|
||||
try
|
||||
{
|
||||
Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().enableSecurityProtocolTls13);
|
||||
var client = new HttpClient(new WebRequestHandler()
|
||||
{
|
||||
Proxy = GetWebProxy(blProxy)
|
||||
});
|
||||
|
||||
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);
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex));
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Error?.Invoke(this, new ErrorEventArgs(ex.InnerException));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int RunAvailabilityCheck(WebProxy webProxy)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (webProxy == null)
|
||||
{
|
||||
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
|
||||
webProxy = new WebProxy(Global.Loopback, httpPort);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out int responseTime);
|
||||
bool noError = Utils.IsNullOrEmpty(status);
|
||||
return noError ? responseTime : -1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
responseTime = -1;
|
||||
try
|
||||
{
|
||||
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||
myHttpWebRequest.Timeout = 30 * 1000;
|
||||
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);
|
||||
msg = ex.Message;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
private WebProxy GetWebProxy(bool blProxy)
|
||||
{
|
||||
if (!blProxy)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var httpPort = LazyConfig.Instance.GetConfig().GetLocalPort(Global.InboundHttp);
|
||||
if (!SocketCheck(Global.Loopback, httpPort))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new WebProxy(Global.Loopback, httpPort);
|
||||
}
|
||||
|
||||
private bool SocketCheck(string ip, int port)
|
||||
{
|
||||
Socket sock = null;
|
||||
try
|
||||
{
|
||||
IPAddress ipa = IPAddress.Parse(ip);
|
||||
IPEndPoint point = new IPEndPoint(ipa, port);
|
||||
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
sock.Connect(point);
|
||||
return true;
|
||||
}
|
||||
catch { }
|
||||
finally
|
||||
{
|
||||
if (sock != null)
|
||||
{
|
||||
sock.Close();
|
||||
sock.Dispose();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
187
v2rayN/v2rayN/Handler/LazyConfig.cs
Normal file
187
v2rayN/v2rayN/Handler/LazyConfig.cs
Normal file
@@ -0,0 +1,187 @@
|
||||
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 => _instance.Value;
|
||||
|
||||
public void SetConfig(ref Config config)
|
||||
{
|
||||
_config = config;
|
||||
}
|
||||
public Config GetConfig()
|
||||
{
|
||||
return _config;
|
||||
}
|
||||
|
||||
public List<string> GetShadowsocksSecuritys(VmessItem vmessItem)
|
||||
{
|
||||
if (GetCoreType(vmessItem, EConfigType.Shadowsocks) == ECoreType.v2fly)
|
||||
{
|
||||
return Global.ssSecuritys;
|
||||
}
|
||||
if (GetCoreType(vmessItem, EConfigType.Shadowsocks) == ECoreType.Xray)
|
||||
{
|
||||
return Global.ssSecuritysInXray;
|
||||
}
|
||||
|
||||
return Global.ssSecuritysInSagerNet;
|
||||
}
|
||||
|
||||
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.v2rayN,
|
||||
coreUrl = Global.NUrl,
|
||||
coreReleaseApiUrl = Global.NUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.NUrl + "/download/{0}/v2rayN.zip",
|
||||
coreDownloadUrl64 = Global.NUrl + "/download/{0}/v2rayN.zip",
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.v2fly,
|
||||
coreExes = new List<string> { "wv2ray", "v2ray" },
|
||||
arguments = "",
|
||||
coreUrl = Global.v2flyCoreUrl,
|
||||
coreReleaseApiUrl = Global.v2flyCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
match = "V2Ray",
|
||||
versionArg = "-version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.SagerNet,
|
||||
coreExes = new List<string> { "SagerNet", "v2ray" },
|
||||
arguments = "run",
|
||||
coreUrl = Global.SagerNetCoreUrl,
|
||||
coreReleaseApiUrl = Global.SagerNetCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
match = "V2Ray",
|
||||
versionArg = "version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.v2fly_v5,
|
||||
coreExes = new List<string> { "v2ray" },
|
||||
arguments = "run",
|
||||
coreUrl = Global.v2flyCoreUrl,
|
||||
coreReleaseApiUrl = Global.v2flyCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
|
||||
match = "V2Ray",
|
||||
versionArg = "version"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.Xray,
|
||||
coreExes = new List<string> { "xray" },
|
||||
arguments = "",
|
||||
coreUrl = Global.xrayCoreUrl,
|
||||
coreReleaseApiUrl = Global.xrayCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
|
||||
coreDownloadUrl64 = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip",
|
||||
match = "Xray",
|
||||
versionArg = "-version"
|
||||
});
|
||||
|
||||
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,
|
||||
coreReleaseApiUrl = Global.clashCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.clashCoreUrl + "/download/{0}/clash-windows-386-{0}.zip",
|
||||
coreDownloadUrl64 = Global.clashCoreUrl + "/download/{0}/clash-windows-amd64-{0}.zip",
|
||||
match = "v",
|
||||
versionArg = "-v"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.clash_meta,
|
||||
coreExes = new List<string> { "Clash.Meta-windows-amd64-compatible", "Clash.Meta-windows-amd64", "Clash.Meta-windows-386", "Clash.Meta", "clash" },
|
||||
arguments = "-f config.json",
|
||||
coreUrl = Global.clashMetaCoreUrl,
|
||||
coreReleaseApiUrl = Global.clashMetaCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.clashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-386-{0}.zip",
|
||||
coreDownloadUrl64 = Global.clashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-amd64-compatible-{0}.zip",
|
||||
match = "v",
|
||||
versionArg = "-v"
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.hysteria,
|
||||
coreExes = new List<string> { "hysteria-windows-amd64", "hysteria-windows-386", "hysteria" },
|
||||
arguments = "",
|
||||
coreUrl = Global.hysteriaCoreUrl,
|
||||
coreReleaseApiUrl = Global.hysteriaCoreUrl.Replace(@"https://github.com", @"https://api.github.com/repos"),
|
||||
coreDownloadUrl32 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-windows-386.exe",
|
||||
coreDownloadUrl64 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-windows-amd64.exe",
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.naiveproxy,
|
||||
coreExes = new List<string> { "naiveproxy", "naive" },
|
||||
arguments = "config.json",
|
||||
coreUrl = Global.naiveproxyCoreUrl
|
||||
});
|
||||
|
||||
coreInfos.Add(new CoreInfo
|
||||
{
|
||||
coreType = ECoreType.tuic,
|
||||
coreExes = new List<string> { "tuic-client", "tuic" },
|
||||
arguments = "-c config.json",
|
||||
coreUrl = Global.tuicCoreUrl
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
377
v2rayN/v2rayN/Handler/MainFormHandler.cs
Normal file
377
v2rayN/v2rayN/Handler/MainFormHandler.cs
Normal file
@@ -0,0 +1,377 @@
|
||||
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
|
||||
{
|
||||
public sealed class MainFormHandler
|
||||
{
|
||||
private static readonly Lazy<MainFormHandler> instance = new Lazy<MainFormHandler>(() => new MainFormHandler());
|
||||
//Action<bool, string> _updateUI;
|
||||
|
||||
//private DownloadHandle downloadHandle2;
|
||||
//private Config _config;
|
||||
//private V2rayHandler _v2rayHandler;
|
||||
//private List<int> _selecteds;
|
||||
//private Thread _workThread;
|
||||
//Action<int, string> _updateFunc;
|
||||
public static MainFormHandler Instance => instance.Value;
|
||||
|
||||
public Icon GetNotifyIcon(Config config, Icon def)
|
||||
{
|
||||
try
|
||||
{
|
||||
int index = (int)config.sysProxyType;
|
||||
|
||||
//Load from routing setting
|
||||
var createdIcon = GetNotifyIcon4Routing(config);
|
||||
if (createdIcon != null)
|
||||
{
|
||||
return createdIcon;
|
||||
}
|
||||
|
||||
//Load from local file
|
||||
var fileName = Utils.GetPath($"NotifyIcon{index + 1}.ico");
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
return new Icon(fileName);
|
||||
}
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return Properties.Resources.NotifyIcon1;
|
||||
case 1:
|
||||
return Properties.Resources.NotifyIcon2;
|
||||
case 2:
|
||||
return Properties.Resources.NotifyIcon3;
|
||||
}
|
||||
|
||||
return Properties.Resources.NotifyIcon1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return def;
|
||||
}
|
||||
}
|
||||
private Icon GetNotifyIcon4Routing(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!config.enableRoutingAdvanced)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var item = config.routings[config.routingIndex];
|
||||
if (Utils.IsNullOrEmpty(item.customIcon) || !File.Exists(item.customIcon))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
Color color = ColorTranslator.FromHtml("#3399CC");
|
||||
int index = (int)config.sysProxyType;
|
||||
if (index > 0)
|
||||
{
|
||||
color = (new[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
||||
}
|
||||
|
||||
int width = 128;
|
||||
int height = 128;
|
||||
|
||||
Bitmap bitmap = new Bitmap(width, height);
|
||||
Graphics graphics = Graphics.FromImage(bitmap);
|
||||
SolidBrush drawBrush = new SolidBrush(color);
|
||||
|
||||
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||
//graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height));
|
||||
graphics.DrawImage(new Bitmap(item.customIcon), 0, 0, width, height);
|
||||
graphics.FillEllipse(drawBrush, width / 2, width / 2, width / 2, width / 2);
|
||||
|
||||
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
|
||||
|
||||
drawBrush.Dispose();
|
||||
graphics.Dispose();
|
||||
bitmap.Dispose();
|
||||
|
||||
return createdIcon;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Export2ClientConfig(VmessItem item, Config config)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (item.configType == EConfigType.Custom)
|
||||
{
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
return;
|
||||
}
|
||||
|
||||
SaveFileDialog fileDialog = new SaveFileDialog
|
||||
{
|
||||
Filter = "Config|*.json",
|
||||
FilterIndex = 2,
|
||||
RestoreDirectory = true
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string fileName = fileDialog.FileName;
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
//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(ResUI.SaveClientConfigurationIn, fileName));
|
||||
}
|
||||
}
|
||||
|
||||
public void Export2ServerConfig(VmessItem item, Config config)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (item.configType != EConfigType.VMess
|
||||
&& item.configType != EConfigType.VLESS)
|
||||
{
|
||||
UI.Show(ResUI.NonVmessService);
|
||||
return;
|
||||
}
|
||||
|
||||
SaveFileDialog fileDialog = new SaveFileDialog
|
||||
{
|
||||
Filter = "Config|*.json",
|
||||
FilterIndex = 2,
|
||||
RestoreDirectory = true
|
||||
};
|
||||
if (fileDialog.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string fileName = fileDialog.FileName;
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
return;
|
||||
}
|
||||
//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(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 bool RestoreGuiNConfig(ref Config config)
|
||||
{
|
||||
var fileContent = string.Empty;
|
||||
using (OpenFileDialog fileDialog = new OpenFileDialog())
|
||||
{
|
||||
fileDialog.InitialDirectory = Utils.GetBackupPath("");
|
||||
fileDialog.Filter = "guiNConfig|*.json|All|*.*";
|
||||
fileDialog.FilterIndex = 2;
|
||||
fileDialog.RestoreDirectory = true;
|
||||
|
||||
if (fileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
fileContent = Utils.LoadResource(fileDialog.FileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileContent))
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
return false;
|
||||
}
|
||||
|
||||
var resConfig = Utils.FromJson<Config>(fileContent);
|
||||
if (resConfig == null)
|
||||
{
|
||||
UI.ShowWarning(ResUI.OperationFailed);
|
||||
return false;
|
||||
}
|
||||
//backup first
|
||||
BackupGuiNConfig(config, true);
|
||||
|
||||
config = resConfig;
|
||||
LazyConfig.Instance.SetConfig(ref config);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,36 +1,53 @@
|
||||
using System;
|
||||
using Microsoft.Win32;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置系统代理类
|
||||
/// </summary>
|
||||
class ProxySetting
|
||||
{
|
||||
public static bool UnsetProxy()
|
||||
{
|
||||
return SetProxy(null, null);
|
||||
}
|
||||
public static bool SetProxy(string strProxy)
|
||||
{
|
||||
return SetProxy(strProxy, null);
|
||||
return SetProxy(null, null, 1);
|
||||
}
|
||||
|
||||
public static bool SetProxy(string strProxy, string exceptions)
|
||||
public static bool SetProxy(string strProxy, string exceptions, int type)
|
||||
{
|
||||
InternetPerConnOptionList list = new InternetPerConnOptionList();
|
||||
|
||||
int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);
|
||||
int optionCount = 1;
|
||||
if (type == 1)
|
||||
{
|
||||
optionCount = 1;
|
||||
}
|
||||
else if (type == 2 || type == 4)
|
||||
{
|
||||
optionCount = Utils.IsNullOrEmpty(exceptions) ? 2 : 3;
|
||||
}
|
||||
|
||||
int m_Int = (int)PerConnFlags.PROXY_TYPE_DIRECT;
|
||||
PerConnOption m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
|
||||
if (type == 2)
|
||||
{
|
||||
m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY);
|
||||
m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
|
||||
}
|
||||
else if (type == 4)
|
||||
{
|
||||
m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL);
|
||||
m_Option = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
|
||||
}
|
||||
|
||||
//int optionCount = Utils.IsNullOrEmpty(strProxy) ? 1 : (Utils.IsNullOrEmpty(exceptions) ? 2 : 3);
|
||||
InternetConnectionOption[] options = new InternetConnectionOption[optionCount];
|
||||
// USE a proxy server ...
|
||||
options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
|
||||
options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
|
||||
//options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
|
||||
options[0].m_Value.m_Int = m_Int;
|
||||
// use THIS proxy server
|
||||
if (optionCount > 1)
|
||||
{
|
||||
options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
|
||||
options[1].m_Option = m_Option;
|
||||
options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
|
||||
// except for these addresses ...
|
||||
if (optionCount > 2)
|
||||
@@ -53,14 +70,22 @@ namespace v2rayN.Handler
|
||||
// copy the array over into that spot in memory ...
|
||||
for (int i = 0; i < options.Length; ++i)
|
||||
{
|
||||
IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
|
||||
Marshal.StructureToPtr(options[i], opt, false);
|
||||
if (Environment.Is64BitOperatingSystem)
|
||||
{
|
||||
IntPtr opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize));
|
||||
Marshal.StructureToPtr(options[i], opt, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
|
||||
Marshal.StructureToPtr(options[i], opt, false);
|
||||
}
|
||||
}
|
||||
|
||||
list.options = optionsPtr;
|
||||
|
||||
// and then make a pointer out of the whole list
|
||||
IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);
|
||||
IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((int)list.dwSize);
|
||||
Marshal.StructureToPtr(list, ipcoListPtr, false);
|
||||
|
||||
// and finally, call the API method!
|
||||
@@ -103,7 +128,7 @@ namespace v2rayN.Handler
|
||||
public InternetConnectionOptionValue m_Value;
|
||||
static InternetConnectionOption()
|
||||
{
|
||||
InternetConnectionOption.Size = Marshal.SizeOf(typeof(InternetConnectionOption));
|
||||
Size = Marshal.SizeOf(typeof(InternetConnectionOption));
|
||||
}
|
||||
|
||||
// Nested Types
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using ZXing;
|
||||
using ZXing.QrCode;
|
||||
|
||||
@@ -16,24 +15,29 @@ namespace v2rayN.Handler
|
||||
Image img = null;
|
||||
try
|
||||
{
|
||||
QrCodeEncodingOptions options = new QrCodeEncodingOptions();
|
||||
options.CharacterSet = "UTF-8";
|
||||
options.DisableECI = true; // Extended Channel Interpretation (ECI) 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。
|
||||
options.ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.M; // 纠错级别
|
||||
options.Width = 500;
|
||||
options.Height = 500;
|
||||
options.Margin = 1;
|
||||
QrCodeEncodingOptions options = new QrCodeEncodingOptions
|
||||
{
|
||||
CharacterSet = "UTF-8",
|
||||
DisableECI = true, // Extended Channel Interpretation (ECI) 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。
|
||||
ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.M, // 纠错级别
|
||||
Width = 500,
|
||||
Height = 500,
|
||||
Margin = 1
|
||||
};
|
||||
// options.Hints,更多属性,也可以在这里添加。
|
||||
|
||||
BarcodeWriter writer = new BarcodeWriter();
|
||||
writer.Format = BarcodeFormat.QR_CODE;
|
||||
writer.Options = options;
|
||||
BarcodeWriter writer = new BarcodeWriter
|
||||
{
|
||||
Format = BarcodeFormat.QR_CODE,
|
||||
Options = options
|
||||
};
|
||||
Bitmap bmp = writer.Write(strContent);
|
||||
img = (Image)bmp;
|
||||
return img;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return img;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
/// <summary>
|
||||
/// 路由规则文件处理类
|
||||
/// </summary>
|
||||
class RoutingRuleHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// Parse Pac to v2ray rule
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> ParsePac(string filePath)
|
||||
{
|
||||
string result = Utils.LoadResource(filePath);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
//取得rule
|
||||
string pattern = @"(?is)(?<=\[)(.*)(?=\])";
|
||||
Regex rgx = new Regex(pattern);
|
||||
result = rgx.Match(result).Value;
|
||||
int index = result.IndexOf("];");
|
||||
result = result.Substring(0, index);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
string[] arrPac = result.Split(',');
|
||||
List<string> lstPac = new List<string>();
|
||||
foreach (string str in arrPac)
|
||||
{
|
||||
//处理有效值
|
||||
if (Utils.IsNullOrEmpty(str)
|
||||
|| str.Length <= 3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string value = str.Replace("\",", "").Replace("\"", "").Replace(",", "").Replace("\r\n", "").Replace(" ", "");
|
||||
lstPac.Add(value);
|
||||
}
|
||||
|
||||
return lstPac;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
812
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
812
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
@@ -0,0 +1,812 @@
|
||||
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 (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
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 = $"{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 = $"{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 = $"{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 = $"{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 = $"{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)));
|
||||
}
|
||||
|
||||
dicQuery.Add("type", !Utils.IsNullOrEmpty(item.network) ? item.network : "tcp");
|
||||
|
||||
switch (item.network)
|
||||
{
|
||||
case "tcp":
|
||||
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : "none");
|
||||
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||
{
|
||||
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||
}
|
||||
break;
|
||||
case "kcp":
|
||||
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.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":
|
||||
dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : "none");
|
||||
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
|
||||
dicQuery.Add("key", Utils.UrlEncode(item.path));
|
||||
break;
|
||||
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) ?? 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) ?? 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 (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
msg = ResUI.Incorrectconfiguration;
|
||||
return null;
|
||||
}
|
||||
|
||||
return vmessItem;
|
||||
}
|
||||
|
||||
private static VmessItem ResolveVmess(string result, out string msg)
|
||||
{
|
||||
msg = string.Empty;
|
||||
var vmessItem = new 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);
|
||||
|
||||
vmessItem.security = !Utils.IsNullOrEmpty(vmessQRCode.scy) ? vmessQRCode.scy : 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,
|
||||
};
|
||||
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.UriEscaped);
|
||||
//2022-blake3
|
||||
if (rawUserInfo.Contains(":"))
|
||||
{
|
||||
string[] userInfoParts = rawUserInfo.Split(new[] { ':' }, 2);
|
||||
if (userInfoParts.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
server.security = userInfoParts[0];
|
||||
server.id = Utils.UrlDecode(userInfoParts[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// parse base64 UserInfo
|
||||
string userInfo = Utils.Base64Decode(rawUserInfo);
|
||||
string[] userInfoParts = userInfo.Split(new[] { ':' }, 2);
|
||||
if (userInfoParts.Length != 2)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
server.security = userInfoParts[0];
|
||||
server.id = userInfoParts[1];
|
||||
}
|
||||
|
||||
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
|
||||
if (queryParameters["plugin"] != null)
|
||||
{
|
||||
//obfs-host exists
|
||||
var obfsHost = queryParameters["plugin"].Split(';').FirstOrDefault(t => t.Contains("obfs-host"));
|
||||
if (queryParameters["plugin"].Contains("obfs=http") && !Utils.IsNullOrEmpty(obfsHost))
|
||||
{
|
||||
obfsHost = obfsHost.Replace("obfs-host=", "");
|
||||
server.network = Global.DefaultNetwork;
|
||||
server.headerType = Global.TcpHeaderHttp;
|
||||
server.requestHost = obfsHost;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
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[] { ':' }, 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
|
||||
}
|
||||
}
|
||||
@@ -1,86 +1,74 @@
|
||||
using Grpc.Core;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
class SpeedtestHandler
|
||||
{
|
||||
private V2rayUpdateHandle v2rayUpdateHandle2;
|
||||
private Config _config;
|
||||
private V2rayHandler _v2rayHandler;
|
||||
private List<int> _selecteds;
|
||||
private Thread _workThread;
|
||||
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)
|
||||
{
|
||||
_workThread = new Thread(new ThreadStart(RunPing));
|
||||
_workThread.Start();
|
||||
}
|
||||
if (actionType == "tcping")
|
||||
{
|
||||
_workThread = new Thread(new ThreadStart(RunTcping));
|
||||
_workThread.Start();
|
||||
}
|
||||
else if (actionType == "realping")
|
||||
{
|
||||
_workThread = new Thread(new ThreadStart(RunRealPing));
|
||||
_workThread.Start();
|
||||
}
|
||||
else if (actionType == "speedtest")
|
||||
{
|
||||
RunSpeedTest();
|
||||
}
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
try
|
||||
{
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void RunPing()
|
||||
{
|
||||
try
|
||||
{
|
||||
for (int k = 0; k < _selecteds.Count; k++)
|
||||
_selecteds.Add(new ServerTestItem()
|
||||
{
|
||||
indexId = it.indexId,
|
||||
address = it.address,
|
||||
port = it.port,
|
||||
configType = it.configType
|
||||
});
|
||||
}
|
||||
|
||||
if (actionType == ESpeedActionType.Ping)
|
||||
{
|
||||
Task.Run(RunPing);
|
||||
}
|
||||
else if (actionType == ESpeedActionType.Tcping)
|
||||
{
|
||||
Task.Run(RunTcping);
|
||||
}
|
||||
else if (actionType == ESpeedActionType.Realping)
|
||||
{
|
||||
Task.Run(RunRealPing);
|
||||
}
|
||||
else if (actionType == ESpeedActionType.Speedtest)
|
||||
{
|
||||
Task.Run(RunSpeedTestAsync);
|
||||
}
|
||||
}
|
||||
|
||||
private void RunPingSub(Action<ServerTestItem> updateFun)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var it in _selecteds.Where(it => it.configType != EConfigType.Custom))
|
||||
{
|
||||
int index = _selecteds[k];
|
||||
if (_config.vmess[index].configType == (int)EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
try
|
||||
{
|
||||
long time = Utils.Ping(_config.vmess[index].address);
|
||||
_updateFunc(index, string.Format("{0}ms", time));
|
||||
Task.Run(() => updateFun(it));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -88,8 +76,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -97,165 +84,154 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
public void RunTcping()
|
||||
|
||||
private void RunPing()
|
||||
{
|
||||
RunPingSub((ServerTestItem it) =>
|
||||
{
|
||||
long time = Utils.Ping(it.address);
|
||||
|
||||
_updateFunc(it.indexId, FormatOut(time, "ms"));
|
||||
});
|
||||
}
|
||||
|
||||
private void RunTcping()
|
||||
{
|
||||
RunPingSub((ServerTestItem it) =>
|
||||
{
|
||||
int time = GetTcpingTime(it.address, it.port);
|
||||
|
||||
_updateFunc(it.indexId, FormatOut(time, "ms"));
|
||||
});
|
||||
}
|
||||
|
||||
private void RunRealPing()
|
||||
{
|
||||
int pid = -1;
|
||||
try
|
||||
{
|
||||
for (int k = 0; k < _selecteds.Count; k++)
|
||||
string msg = string.Empty;
|
||||
|
||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||
if (pid < 0)
|
||||
{
|
||||
int index = _selecteds[k];
|
||||
if (_config.vmess[index].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;
|
||||
}
|
||||
try
|
||||
{
|
||||
var time = GetTcpingTime(_config.vmess[index].address, _config.vmess[index].port);
|
||||
_updateFunc(index, string.Format("{0}ms", time));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void RunRealPing()
|
||||
{
|
||||
try
|
||||
{
|
||||
for (int k = 0; k < _selecteds.Count; k++)
|
||||
{
|
||||
int index = _selecteds[k];
|
||||
if (_config.vmess[index].configType == (int)EConfigType.Custom)
|
||||
if (it.configType == EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
try
|
||||
tasks.Add(Task.Run(() =>
|
||||
{
|
||||
if (ConfigHandler.SetDefaultServer(ref _config, index) == 0)
|
||||
try
|
||||
{
|
||||
_v2rayHandler.LoadV2ray(_config);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
Thread.Sleep(1000 * 5);
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||
int responseTime = -1;
|
||||
string status = downloadHandle.GetRealPingTime(_config.constItem.speedPingTestUrl, webProxy, out responseTime);
|
||||
string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status;
|
||||
|
||||
int responseTime = -1;
|
||||
var status = GetRealPingTime(Global.SpeedPingTestUrl, out responseTime);
|
||||
if (!Utils.IsNullOrEmpty(status))
|
||||
{
|
||||
_updateFunc(index, string.Format("{0}", status));
|
||||
_config.GetVmessItem(it.indexId)?.SetTestResult(output);
|
||||
_updateFunc(it.indexId, output);
|
||||
}
|
||||
else
|
||||
catch (Exception ex)
|
||||
{
|
||||
_updateFunc(index, string.Format("{0}ms", responseTime));
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}));
|
||||
//Thread.Sleep(100);
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
Task.WaitAll(tasks.ToArray());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
||||
}
|
||||
}
|
||||
|
||||
private void RunSpeedTest()
|
||||
private async Task RunSpeedTestAsync()
|
||||
{
|
||||
if (_config.vmess.Count <= 0)
|
||||
string testIndexId = string.Empty;
|
||||
int pid = -1;
|
||||
|
||||
pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds);
|
||||
if (pid < 0)
|
||||
{
|
||||
_updateFunc(_selecteds[0].indexId, ResUI.OperationFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
string url = Global.SpeedTestUrl;
|
||||
testCounter = 0;
|
||||
if (v2rayUpdateHandle2 == null)
|
||||
string url = _config.constItem.speedTestUrl;
|
||||
DownloadHandle downloadHandle2 = new DownloadHandle();
|
||||
downloadHandle2.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
v2rayUpdateHandle2 = new V2rayUpdateHandle();
|
||||
v2rayUpdateHandle2.UpdateCompleted += (sender2, args) =>
|
||||
{
|
||||
if (args.Success)
|
||||
{
|
||||
_updateFunc(ItemIndex, args.Msg);
|
||||
if (ServerSpeedTestSub(testCounter, url) != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(ItemIndex, args.Msg);
|
||||
}
|
||||
};
|
||||
v2rayUpdateHandle2.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(ItemIndex, args.GetException().Message);
|
||||
if (ServerSpeedTestSub(testCounter, url) != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
};
|
||||
}
|
||||
if (ServerSpeedTestSub(testCounter, url) != 0)
|
||||
_config.GetVmessItem(testIndexId)?.SetTestResult(args.Msg);
|
||||
_updateFunc(testIndexId, args.Msg);
|
||||
};
|
||||
downloadHandle2.Error += (sender2, args) =>
|
||||
{
|
||||
return;
|
||||
_updateFunc(testIndexId, args.GetException().Message);
|
||||
};
|
||||
|
||||
var timeout = 8;
|
||||
foreach (var it in _selecteds)
|
||||
{
|
||||
if (!it.allowTest)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (it.configType == EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
testIndexId = it.indexId;
|
||||
if (_config.FindIndexId(it.indexId) < 0) continue;
|
||||
|
||||
WebProxy webProxy = new WebProxy(Global.Loopback, it.port);
|
||||
await downloadHandle2.DownloadDataAsync(url, webProxy, timeout);
|
||||
}
|
||||
|
||||
if (pid > 0) _v2rayHandler.V2rayStopPid(pid);
|
||||
}
|
||||
|
||||
private int ServerSpeedTestSub(int index, string url)
|
||||
{
|
||||
if (index >= _selecteds.Count)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ConfigHandler.SetDefaultServer(ref _config, _selecteds[index]) == 0)
|
||||
{
|
||||
_v2rayHandler.LoadV2ray(_config);
|
||||
|
||||
testCounter++;
|
||||
|
||||
v2rayUpdateHandle2.DownloadFileAsync(_config, url);
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
private int GetTcpingTime(string url, int port)
|
||||
{
|
||||
var responseTime = -1;
|
||||
int responseTime = -1;
|
||||
|
||||
try
|
||||
{
|
||||
IPHostEntry ipHostInfo = System.Net.Dns.Resolve(url);
|
||||
IPAddress ipAddress = ipHostInfo.AddressList[0];
|
||||
if (!IPAddress.TryParse(url, out IPAddress ipAddress))
|
||||
{
|
||||
IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry(url);
|
||||
ipAddress = ipHostInfo.AddressList[0];
|
||||
}
|
||||
|
||||
var timer = new Stopwatch();
|
||||
Stopwatch timer = new Stopwatch();
|
||||
timer.Start();
|
||||
|
||||
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
clientSocket.Connect(new IPEndPoint(ipAddress, port));
|
||||
IPEndPoint endPoint = new IPEndPoint(ipAddress, port);
|
||||
Socket clientSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||
|
||||
IAsyncResult result = clientSocket.BeginConnect(endPoint, null, null);
|
||||
if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5)))
|
||||
throw new TimeoutException("connect timeout (5s): " + url);
|
||||
clientSocket.EndConnect(result);
|
||||
|
||||
timer.Stop();
|
||||
responseTime = timer.Elapsed.Milliseconds;
|
||||
clientSocket.Close();
|
||||
@@ -267,40 +243,13 @@ namespace v2rayN.Handler
|
||||
return responseTime;
|
||||
}
|
||||
|
||||
private string GetRealPingTime(string url, 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 = new WebProxy(Global.Loopback, Global.sysAgentPort);
|
||||
|
||||
var 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 $"{time}{unit}".PadLeft(8, ' ');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Grpc.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Protos.Statistics;
|
||||
|
||||
@@ -13,80 +13,56 @@ namespace v2rayN.Handler
|
||||
class StatisticsHandler
|
||||
{
|
||||
private Mode.Config config_;
|
||||
|
||||
private ServerStatistics serverStatistics_;
|
||||
private Channel channel_;
|
||||
private StatsService.StatsServiceClient client_;
|
||||
private Thread workThread_;
|
||||
private bool exitFlag_;
|
||||
|
||||
Action<ulong, ulong, ulong, ulong, List<Mode.ServerStatistics>> updateFunc_;
|
||||
Action<ulong, ulong, List<ServerStatItem>> updateFunc_;
|
||||
|
||||
private bool enabled_;
|
||||
public bool Enable
|
||||
{
|
||||
get
|
||||
{
|
||||
return enabled_;
|
||||
}
|
||||
set
|
||||
{
|
||||
enabled_ = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool UpdateUI;
|
||||
|
||||
public ulong TotalUp
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public ulong TotalDown
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public List<Mode.ServerStatistics> Statistic
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public ulong Up
|
||||
public bool UpdateUI
|
||||
{
|
||||
get; private set;
|
||||
get; set;
|
||||
}
|
||||
|
||||
public ulong Down
|
||||
|
||||
public List<ServerStatItem> Statistic => serverStatistics_.server;
|
||||
|
||||
public StatisticsHandler(Mode.Config config, Action<ulong, ulong, List<ServerStatItem>> update)
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
//try
|
||||
//{
|
||||
// if (Environment.Is64BitOperatingSystem)
|
||||
// {
|
||||
// FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x64.dll"), Resources.grpc_csharp_ext_x64_dll);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x86.dll"), Resources.grpc_csharp_ext_x86_dll);
|
||||
// }
|
||||
//}
|
||||
//catch (IOException ex)
|
||||
//{
|
||||
// Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
private string logPath_;
|
||||
//}
|
||||
|
||||
private bool exitFlag_; // true to close workThread_
|
||||
|
||||
public StatisticsHandler(Mode.Config config, Action<ulong, ulong, ulong, ulong, List<Mode.ServerStatistics>> update)
|
||||
{
|
||||
config_ = config;
|
||||
enabled_ = config.enableStatistics;
|
||||
Enable = config.enableStatistics;
|
||||
UpdateUI = false;
|
||||
updateFunc_ = update;
|
||||
logPath_ = Utils.GetPath(Global.StatisticLogDirectory);
|
||||
Statistic = new List<Mode.ServerStatistics>();
|
||||
exitFlag_ = false;
|
||||
|
||||
DeleteExpiredLog();
|
||||
foreach (var server in config.vmess)
|
||||
{
|
||||
var statistic = new ServerStatistics(server.remarks, server.address, server.port, server.path, server.requestHost, 0, 0, 0, 0);
|
||||
Statistic.Add(statistic);
|
||||
}
|
||||
|
||||
LoadFromFile();
|
||||
|
||||
GrpcInit();
|
||||
|
||||
workThread_ = new Thread(new ThreadStart(Run));
|
||||
workThread_.Start();
|
||||
Task.Run(Run);
|
||||
}
|
||||
|
||||
private void GrpcInit()
|
||||
@@ -105,7 +81,6 @@ namespace v2rayN.Handler
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
exitFlag_ = true;
|
||||
channel_.ShutdownAsync();
|
||||
}
|
||||
@@ -121,7 +96,7 @@ namespace v2rayN.Handler
|
||||
{
|
||||
try
|
||||
{
|
||||
if (enabled_ && channel_.State == ChannelState.Ready)
|
||||
if (Enable && channel_.State == ChannelState.Ready)
|
||||
{
|
||||
QueryStatsResponse res = null;
|
||||
try
|
||||
@@ -130,69 +105,153 @@ namespace v2rayN.Handler
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
|
||||
if (res != null)
|
||||
{
|
||||
var addr = config_.address();
|
||||
var port = config_.port();
|
||||
var path = config_.path();
|
||||
var cur = Statistic.FindIndex(item => item.address == addr && item.port == port && item.path == path);
|
||||
ulong up = 0,
|
||||
down = 0;
|
||||
string itemId = config_.indexId;
|
||||
ServerStatItem serverStatItem = GetServerStatItem(itemId);
|
||||
|
||||
//TODO: parse output
|
||||
ParseOutput(res.Stat, out up, out down);
|
||||
ParseOutput(res.Stat, out ulong up, out ulong down);
|
||||
|
||||
Up = up;
|
||||
Down = down;
|
||||
|
||||
TotalUp += up;
|
||||
TotalDown += down;
|
||||
|
||||
if (cur != -1)
|
||||
{
|
||||
Statistic[cur].todayUp += up;
|
||||
Statistic[cur].todayDown += down;
|
||||
Statistic[cur].totalUp += up;
|
||||
Statistic[cur].totalDown += down;
|
||||
}
|
||||
serverStatItem.todayUp += up;
|
||||
serverStatItem.todayDown += down;
|
||||
serverStatItem.totalUp += up;
|
||||
serverStatItem.totalDown += down;
|
||||
|
||||
if (UpdateUI)
|
||||
updateFunc_(TotalUp, TotalDown, Up, Down, Statistic);
|
||||
{
|
||||
updateFunc_(up, down, new List<ServerStatItem> { serverStatItem });
|
||||
}
|
||||
}
|
||||
}
|
||||
Thread.Sleep(config_.statisticsFreshRate);
|
||||
Thread.Sleep(1000 * config_.statisticsFreshRate);
|
||||
channel_.ConnectAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ParseOutput(Google.Protobuf.Collections.RepeatedField<Stat> source, out ulong up, out ulong down)
|
||||
public void LoadFromFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
string result = Utils.LoadResource(Utils.GetPath(Global.StatisticLogOverall));
|
||||
if (!Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
//转成Json
|
||||
serverStatistics_ = Utils.FromJson<ServerStatistics>(result);
|
||||
}
|
||||
|
||||
if (serverStatistics_ == null)
|
||||
{
|
||||
serverStatistics_ = new ServerStatistics();
|
||||
}
|
||||
if (serverStatistics_.server == null)
|
||||
{
|
||||
serverStatistics_.server = new List<ServerStatItem>();
|
||||
}
|
||||
|
||||
long ticks = DateTime.Now.Date.Ticks;
|
||||
foreach (ServerStatItem item in serverStatistics_.server)
|
||||
{
|
||||
if (item.dateNow != ticks)
|
||||
{
|
||||
item.todayUp = 0;
|
||||
item.todayDown = 0;
|
||||
item.dateNow = ticks;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveToFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
Utils.ToJsonFile(serverStatistics_, Utils.GetPath(Global.StatisticLogOverall));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
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 });
|
||||
//}
|
||||
serverStatistics_.server = new List<ServerStatItem>();
|
||||
|
||||
// update statistic json file
|
||||
SaveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
private ServerStatItem GetServerStatItem(string itemId)
|
||||
{
|
||||
long ticks = DateTime.Now.Date.Ticks;
|
||||
int cur = Statistic.FindIndex(item => item.itemId == itemId);
|
||||
if (cur < 0)
|
||||
{
|
||||
Statistic.Add(new ServerStatItem
|
||||
{
|
||||
itemId = itemId,
|
||||
totalUp = 0,
|
||||
totalDown = 0,
|
||||
todayUp = 0,
|
||||
todayDown = 0,
|
||||
dateNow = ticks
|
||||
});
|
||||
cur = Statistic.Count - 1;
|
||||
}
|
||||
if (Statistic[cur].dateNow != ticks)
|
||||
{
|
||||
Statistic[cur].todayUp = 0;
|
||||
Statistic[cur].todayDown = 0;
|
||||
Statistic[cur].dateNow = ticks;
|
||||
}
|
||||
return Statistic[cur];
|
||||
}
|
||||
|
||||
private void ParseOutput(Google.Protobuf.Collections.RepeatedField<Stat> source, out ulong up, out ulong down)
|
||||
{
|
||||
|
||||
up = 0; down = 0;
|
||||
try
|
||||
{
|
||||
|
||||
foreach (var stat in source)
|
||||
foreach (Stat stat in source)
|
||||
{
|
||||
var name = stat.Name;
|
||||
var value = stat.Value;
|
||||
var nStr = name.Split(">>>".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
var type = "";
|
||||
string name = stat.Name;
|
||||
long value = stat.Value;
|
||||
string[] nStr = name.Split(">>>".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
string type = "";
|
||||
|
||||
name = name.Trim();
|
||||
|
||||
name = nStr[1];
|
||||
type = nStr[3];
|
||||
|
||||
if (name == Global.InboundProxyTagName)
|
||||
if (name == Global.agentTag)
|
||||
{
|
||||
if (type == "uplink")
|
||||
{
|
||||
@@ -207,219 +266,7 @@ namespace v2rayN.Handler
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveToFile()
|
||||
{
|
||||
if (!Directory.Exists(logPath_))
|
||||
{
|
||||
Directory.CreateDirectory(logPath_);
|
||||
}
|
||||
|
||||
// 总流量统计文件
|
||||
var overallPath = Path.Combine(logPath_, Global.StatisticLogOverall);
|
||||
if (!File.Exists(overallPath))
|
||||
{
|
||||
File.Create(overallPath);
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var overallWriter = new StreamWriter(overallPath))
|
||||
{
|
||||
double up_amount, down_amount;
|
||||
string up_unit, down_unit;
|
||||
|
||||
Utils.ToHumanReadable(TotalUp, out up_amount, out up_unit);
|
||||
Utils.ToHumanReadable(TotalDown, out down_amount, out down_unit);
|
||||
|
||||
overallWriter.WriteLine($"LastUpdate {DateTime.Now.ToString("yyyy-MM-dd")} {DateTime.Now.ToLongTimeString()}");
|
||||
overallWriter.WriteLine($"UP {string.Format("{0:f2}", up_amount)}{up_unit} {TotalUp}");
|
||||
overallWriter.WriteLine($"DOWN {string.Format("{0:f2}", down_amount)}{down_unit} {TotalDown}");
|
||||
foreach (var s in Statistic)
|
||||
{
|
||||
overallWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.host} {s.totalUp} {s.totalDown}");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
|
||||
// 当天流量记录文件
|
||||
var dailyPath = Path.Combine(logPath_, $"{DateTime.Now.ToString("yyyy-MM-dd")}.txt");
|
||||
if (!File.Exists(dailyPath))
|
||||
{
|
||||
File.Create(dailyPath);
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var dailyWriter = new StreamWriter(dailyPath))
|
||||
{
|
||||
dailyWriter.WriteLine($"LastUpdate {DateTime.Now.ToString("yyyy-MM-dd")} {DateTime.Now.ToLongTimeString()}");
|
||||
foreach (var s in Statistic)
|
||||
{
|
||||
dailyWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.host} {s.todayUp} {s.todayDown}");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void LoadFromFile()
|
||||
{
|
||||
if (!Directory.Exists(logPath_)) return;
|
||||
|
||||
// 总流量统计文件
|
||||
///
|
||||
/// 文件结构
|
||||
/// LastUpdate [date] [time]
|
||||
/// UP [readable string] [amount]
|
||||
/// DOWN [readable string] [amount]
|
||||
/// 每行每个数据空格分隔
|
||||
|
||||
try
|
||||
{
|
||||
Utils.SaveLog(logPath_ + Global.StatisticLogOverall);
|
||||
var overallPath = Path.Combine(logPath_, Global.StatisticLogOverall);
|
||||
if (File.Exists(overallPath))
|
||||
{
|
||||
using (var overallReader = new StreamReader(overallPath))
|
||||
{
|
||||
while (!overallReader.EndOfStream)
|
||||
{
|
||||
var line = overallReader.ReadLine();
|
||||
if (line.StartsWith("LastUpdate"))
|
||||
{
|
||||
|
||||
}
|
||||
else if (line.StartsWith("UP"))
|
||||
{
|
||||
var datas = line.Split(' ');
|
||||
if (datas.Length < 3) return;
|
||||
TotalUp = ulong.Parse(datas[2]);
|
||||
}
|
||||
else if (line.StartsWith("DOWN"))
|
||||
{
|
||||
var datas = line.Split(' ');
|
||||
if (datas.Length < 3) return;
|
||||
TotalDown = ulong.Parse(datas[2]);
|
||||
}
|
||||
else if (line.StartsWith("*"))
|
||||
{
|
||||
var datas = line.Split(' ');
|
||||
if (datas.Length < 8) return;
|
||||
var name = datas[1];
|
||||
var address = datas[2];
|
||||
var port = int.Parse(datas[3]);
|
||||
var path = datas[4];
|
||||
var host = datas[5];
|
||||
var totalUp = ulong.Parse(datas[6]);
|
||||
var totalDown = ulong.Parse(datas[7]);
|
||||
|
||||
var temp = new ServerStatistics(name, address, port, path, host, 0, 0, 0, 0);
|
||||
var index = Statistic.FindIndex(item => Utils.IsIdenticalServer(item, temp));
|
||||
if (index != -1)
|
||||
{
|
||||
Statistic[index].totalUp = totalUp;
|
||||
Statistic[index].totalDown = totalDown;
|
||||
}
|
||||
else
|
||||
{
|
||||
var s = new Mode.ServerStatistics(name, address, port, path, host, totalUp, totalDown, 0, 0);
|
||||
Statistic.Add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Utils.SaveLog(logPath_ + $"{DateTime.Now.ToString("yyyy-MM-dd")}.txt");
|
||||
var dailyPath = Path.Combine(logPath_, $"{DateTime.Now.ToString("yyyy-MM-dd")}.txt");
|
||||
if (File.Exists(dailyPath))
|
||||
{
|
||||
|
||||
using (var dailyReader = new StreamReader(dailyPath))
|
||||
{
|
||||
while (!dailyReader.EndOfStream)
|
||||
{
|
||||
var line = dailyReader.ReadLine();
|
||||
if (line.StartsWith("LastUpdate"))
|
||||
{
|
||||
|
||||
}
|
||||
else if (line.StartsWith("*"))
|
||||
{
|
||||
var datas = line.Split(' ');
|
||||
if (datas.Length < 8) return;
|
||||
var name = datas[1];
|
||||
var address = datas[2];
|
||||
var port = int.Parse(datas[3]);
|
||||
var path = datas[4];
|
||||
var host = datas[5];
|
||||
var todayUp = ulong.Parse(datas[6]);
|
||||
var todayDown = ulong.Parse(datas[7]);
|
||||
|
||||
var temp = new ServerStatistics(name, address, port, path, host, 0, 0, 0, 0);
|
||||
var index = Statistic.FindIndex(item => Utils.IsIdenticalServer(item, temp));
|
||||
if (index != -1)
|
||||
{
|
||||
Statistic[index].todayUp = todayUp;
|
||||
Statistic[index].todayDown = todayDown;
|
||||
}
|
||||
else
|
||||
{
|
||||
var s = new Mode.ServerStatistics(name, address, port, path, host, 0, 0, todayUp, todayDown);
|
||||
Statistic.Add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void DeleteExpiredLog()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Directory.Exists(logPath_)) return;
|
||||
var dirInfo = new DirectoryInfo(logPath_);
|
||||
var files = dirInfo.GetFiles();
|
||||
foreach (var file in files)
|
||||
{
|
||||
if (file.Name == "overall.txt") continue;
|
||||
var name = file.Name.Split('.')[0];
|
||||
var ft = DateTime.Parse(name);
|
||||
var ct = DateTime.Now;
|
||||
var dur = ct - ft;
|
||||
if (dur.Days > config_.CacheDays)
|
||||
{
|
||||
file.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
//Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,7 +278,7 @@ namespace v2rayN.Handler
|
||||
// TCP stack please do me a favor
|
||||
TcpListener l = new TcpListener(IPAddress.Loopback, 0);
|
||||
l.Start();
|
||||
var port = ((IPEndPoint)l.LocalEndpoint).Port;
|
||||
int port = ((IPEndPoint)l.LocalEndpoint).Port;
|
||||
l.Stop();
|
||||
return port;
|
||||
}
|
||||
|
||||
230
v2rayN/v2rayN/Handler/SysProxyHandle.cs
Normal file
230
v2rayN/v2rayN/Handler/SysProxyHandle.cs
Normal file
@@ -0,0 +1,230 @@
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.Tool;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
public static class SysProxyHandle
|
||||
{
|
||||
//private const string _userWininetConfigFile = "user-wininet.json";
|
||||
|
||||
//private static string _queryStr;
|
||||
|
||||
// In general, this won't change
|
||||
// format:
|
||||
// <flags><CR-LF>
|
||||
// <proxy-server><CR-LF>
|
||||
// <bypass-list><CR-LF>
|
||||
// <pac-url>
|
||||
private static SysproxyConfig _userSettings = null;
|
||||
|
||||
enum RET_ERRORS : int
|
||||
{
|
||||
RET_NO_ERROR = 0,
|
||||
INVALID_FORMAT = 1,
|
||||
NO_PERMISSION = 2,
|
||||
SYSCALL_FAILED = 3,
|
||||
NO_MEMORY = 4,
|
||||
INVAILD_OPTION_COUNT = 5,
|
||||
};
|
||||
|
||||
static SysProxyHandle()
|
||||
{
|
||||
try
|
||||
{
|
||||
FileManager.UncompressFile(Utils.GetTempPath("sysproxy.exe"),
|
||||
Environment.Is64BitOperatingSystem ? Resources.sysproxy64_exe : Resources.sysproxy_exe);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static bool UpdateSysProxy(Config config, bool forceDisable)
|
||||
{
|
||||
var type = config.sysProxyType;
|
||||
|
||||
if (forceDisable && type == ESysProxyType.ForcedChange)
|
||||
{
|
||||
type = ESysProxyType.ForcedClear;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// set system proxy to 1 (null) (null) (null)
|
||||
public static bool ResetIEProxy()
|
||||
{
|
||||
try
|
||||
{
|
||||
// clear user-wininet.json
|
||||
//_userSettings = new SysproxyConfig();
|
||||
//Save();
|
||||
// clear system setting
|
||||
ExecSysproxy("set 1 - - -");
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void ExecSysproxy(string arguments)
|
||||
{
|
||||
// using event to avoid hanging when redirect standard output/error
|
||||
// ref: https://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why
|
||||
// and http://blog.csdn.net/zhangweixing0/article/details/7356841
|
||||
using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
|
||||
using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false))
|
||||
{
|
||||
using (Process process = new Process())
|
||||
{
|
||||
// Configure the process using the StartInfo properties.
|
||||
process.StartInfo.FileName = Utils.GetTempPath("sysproxy.exe");
|
||||
process.StartInfo.Arguments = arguments;
|
||||
process.StartInfo.WorkingDirectory = Utils.GetTempPath();
|
||||
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.RedirectStandardError = true;
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
|
||||
// Need to provide encoding info, or output/error strings we got will be wrong.
|
||||
process.StartInfo.StandardOutputEncoding = Encoding.Unicode;
|
||||
process.StartInfo.StandardErrorEncoding = Encoding.Unicode;
|
||||
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
|
||||
StringBuilder output = new StringBuilder();
|
||||
StringBuilder error = new StringBuilder();
|
||||
|
||||
process.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data == null)
|
||||
{
|
||||
outputWaitHandle.Set();
|
||||
}
|
||||
else
|
||||
{
|
||||
output.AppendLine(e.Data);
|
||||
}
|
||||
};
|
||||
process.ErrorDataReceived += (sender, e) =>
|
||||
{
|
||||
if (e.Data == null)
|
||||
{
|
||||
errorWaitHandle.Set();
|
||||
}
|
||||
else
|
||||
{
|
||||
error.AppendLine(e.Data);
|
||||
}
|
||||
};
|
||||
try
|
||||
{
|
||||
process.Start();
|
||||
|
||||
process.BeginErrorReadLine();
|
||||
process.BeginOutputReadLine();
|
||||
|
||||
process.WaitForExit();
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception e)
|
||||
{
|
||||
|
||||
// log the arguments
|
||||
throw new Exception(process.StartInfo.Arguments);
|
||||
}
|
||||
string stderr = error.ToString();
|
||||
string stdout = output.ToString();
|
||||
|
||||
int exitCode = process.ExitCode;
|
||||
if (exitCode != (int)RET_ERRORS.RET_NO_ERROR)
|
||||
{
|
||||
throw new Exception(stderr);
|
||||
}
|
||||
|
||||
//if (arguments == "query")
|
||||
//{
|
||||
// if (stdout.IsNullOrWhiteSpace() || stdout.IsNullOrEmpty())
|
||||
// {
|
||||
// throw new Exception("failed to query wininet settings");
|
||||
// }
|
||||
// _queryStr = stdout;
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
497
v2rayN/v2rayN/Handler/UpdateHandle.cs
Normal file
497
v2rayN/v2rayN/Handler/UpdateHandle.cs
Normal file
@@ -0,0 +1,497 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Newtonsoft.Json;
|
||||
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)
|
||||
{
|
||||
Success = success;
|
||||
Msg = msg;
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckUpdateGuiN(Config config, Action<bool, string> update, bool preRelease)
|
||||
{
|
||||
_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, preRelease);
|
||||
}
|
||||
|
||||
|
||||
public void CheckUpdateCore(ECoreType type, Config config, Action<bool, string> update, bool preRelease)
|
||||
{
|
||||
_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, preRelease);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateSubscriptionProcess(Config config, string groupId, 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;
|
||||
}
|
||||
if (!Utils.IsNullOrEmpty(groupId) && item.groupId != groupId)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
var downloadHandle = new DownloadHandle();
|
||||
downloadHandle.Error += (sender2, args) =>
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{args.GetException().Message}");
|
||||
};
|
||||
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}");
|
||||
var result = await downloadHandle.DownloadStringAsync(url, blProxy, userAgent);
|
||||
if (blProxy && Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
result = await downloadHandle.DownloadStringAsync(url, false, userAgent);
|
||||
}
|
||||
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgSubscriptionDecodingFailed}");
|
||||
}
|
||||
else
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}");
|
||||
if (result.Length < 99)
|
||||
{
|
||||
_updateFunc(false, $"{hashCode}{result}");
|
||||
}
|
||||
|
||||
int ret = ConfigHandler.AddBatchServers(ref config, result, id, item.groupId.TrimEx());
|
||||
_updateFunc(false,
|
||||
ret > 0
|
||||
? $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}"
|
||||
: $"{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(Global.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, bool preRelease)
|
||||
{
|
||||
try
|
||||
{
|
||||
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
|
||||
string url = coreInfo.coreReleaseApiUrl;
|
||||
|
||||
var result = await (new DownloadHandle()).DownloadStringAsync(url, true, "");
|
||||
if (!Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
responseHandler(type, result, preRelease);
|
||||
}
|
||||
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 = $"{name}.exe";
|
||||
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 = coreInfo.versionArg;
|
||||
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 = string.Empty;
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.SagerNet:
|
||||
case ECoreType.Xray:
|
||||
case ECoreType.v2fly_v5:
|
||||
version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value;
|
||||
break;
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
version = Regex.Match(echo, $"v[0-9.]+").Groups[0].Value;
|
||||
break;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
_updateFunc(false, ex.Message);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
private void responseHandler(ECoreType type, string gitHubReleaseApi, bool preRelease)
|
||||
{
|
||||
try
|
||||
{
|
||||
var gitHubReleases = Utils.FromJson<List<GitHubRelease>>(gitHubReleaseApi);
|
||||
string version;
|
||||
if (preRelease)
|
||||
{
|
||||
version = gitHubReleases!.First().TagName;
|
||||
}
|
||||
else
|
||||
{
|
||||
version = gitHubReleases!.First(r => r.Prerelease == false).TagName;
|
||||
}
|
||||
var coreInfo = LazyConfig.Instance.GetCoreInfo(type);
|
||||
|
||||
string curVersion;
|
||||
string message;
|
||||
string url;
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.v2fly:
|
||||
case ECoreType.SagerNet:
|
||||
case ECoreType.Xray:
|
||||
case ECoreType.v2fly_v5:
|
||||
{
|
||||
curVersion = "v" + getCoreVersion(type);
|
||||
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||
url = string.Format(coreInfo.coreDownloadUrl64, version, osBit);
|
||||
break;
|
||||
}
|
||||
case ECoreType.clash:
|
||||
case ECoreType.clash_meta:
|
||||
{
|
||||
curVersion = getCoreVersion(type);
|
||||
message = string.Format(ResUI.IsLatestCore, curVersion);
|
||||
if (Environment.Is64BitProcess)
|
||||
{
|
||||
url = string.Format(coreInfo.coreDownloadUrl64, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
url = string.Format(coreInfo.coreDownloadUrl32, version);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ECoreType.v2rayN:
|
||||
{
|
||||
curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString();
|
||||
message = string.Format(ResUI.IsLatestN, curVersion);
|
||||
url = string.Format(coreInfo.coreDownloadUrl64, version);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new ArgumentException("Type");
|
||||
}
|
||||
|
||||
if (curVersion == version)
|
||||
{
|
||||
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
@@ -2,7 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Resx;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
@@ -20,15 +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>();
|
||||
lstV2ray.Add("wv2ray");
|
||||
lstV2ray.Add("v2ray");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -38,20 +38,69 @@ namespace v2rayN.Handler
|
||||
{
|
||||
if (Global.reloadV2ray)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
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 msg) != 0)
|
||||
if (V2rayConfigHandler.GenerateClientConfig(item, fileName, out string msg, out string content) != 0)
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMsg(true, msg);
|
||||
ShowMsg(false, msg);
|
||||
ShowMsg(true, $"[{config.GetGroupRemarks(item.groupId)}] {item.GetSummary()}");
|
||||
V2rayRestart();
|
||||
}
|
||||
|
||||
//start a socks service
|
||||
if (item.configType == EConfigType.Custom && item.preSocksPort > 0)
|
||||
{
|
||||
var itemSocks = new VmessItem()
|
||||
{
|
||||
configType = EConfigType.Socks,
|
||||
address = Global.Loopback,
|
||||
port = item.preSocksPort
|
||||
};
|
||||
if (V2rayConfigHandler.GenerateClientConfig(itemSocks, null, out string msg2, out string configStr) == 0)
|
||||
{
|
||||
processId = V2rayStartNew(configStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新建进程,载入V2ray配置文件字符串
|
||||
/// 返回新进程pid。
|
||||
/// </summary>
|
||||
public int LoadV2rayConfigString(Config config, List<ServerTestItem> _selecteds)
|
||||
{
|
||||
int pid = -1;
|
||||
string configStr = V2rayConfigHandler.GenerateClientSpeedtestConfigString(config, _selecteds, out string msg);
|
||||
if (configStr == "")
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
pid = V2rayStartNew(configStr);
|
||||
//V2rayRestart();
|
||||
// start with -config
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// V2ray重启
|
||||
/// </summary>
|
||||
@@ -68,27 +117,53 @@ namespace v2rayN.Handler
|
||||
{
|
||||
try
|
||||
{
|
||||
bool blExist = true;
|
||||
if (processId > 0)
|
||||
if (_process != null)
|
||||
{
|
||||
Process p1 = Process.GetProcessById(processId);
|
||||
if (p1 != null)
|
||||
{
|
||||
p1.Kill();
|
||||
blExist = false;
|
||||
}
|
||||
KillProcess(_process);
|
||||
_process.Dispose();
|
||||
_process = null;
|
||||
}
|
||||
if (blExist)
|
||||
else
|
||||
{
|
||||
foreach (string vName in lstV2ray)
|
||||
if (coreInfo == null || coreInfo.coreExes == null)
|
||||
{
|
||||
Process[] killPro = Process.GetProcessesByName(vName);
|
||||
foreach (Process p in killPro)
|
||||
return;
|
||||
}
|
||||
foreach (string vName in coreInfo.coreExes)
|
||||
{
|
||||
Process[] existing = Process.GetProcessesByName(vName);
|
||||
foreach (Process p in existing)
|
||||
{
|
||||
p.Kill();
|
||||
string path = p.MainModule.FileName;
|
||||
if (path == $"{Utils.GetPath(vName)}.exe")
|
||||
{
|
||||
KillProcess(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (processId > 0)
|
||||
{
|
||||
V2rayStopPid(processId);
|
||||
processId = 0;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// V2ray停止
|
||||
/// </summary>
|
||||
public void V2rayStopPid(int pid)
|
||||
{
|
||||
try
|
||||
{
|
||||
Process _p = Process.GetProcessById(pid);
|
||||
KillProcess(_p);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -96,50 +171,73 @@ namespace v2rayN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
private string V2rayFindexe(List<string> lstCoreTemp)
|
||||
{
|
||||
string fileName = string.Empty;
|
||||
foreach (string name in lstCoreTemp)
|
||||
{
|
||||
string vName = $"{name}.exe";
|
||||
vName = Utils.GetPath(vName);
|
||||
if (File.Exists(vName))
|
||||
{
|
||||
fileName = vName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
string msg = string.Format(ResUI.NotFoundCore, string.Join(", ", lstCoreTemp.ToArray()), coreInfo.coreUrl);
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// V2ray启动
|
||||
/// </summary>
|
||||
private void V2rayStart()
|
||||
{
|
||||
ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString()));
|
||||
ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString()));
|
||||
|
||||
try
|
||||
{
|
||||
//查找v2ray文件是否存在
|
||||
string fileName = string.Empty;
|
||||
for (int k = 0; k < lstV2ray.Count; k++)
|
||||
{
|
||||
string vName = string.Format("{0}.exe", lstV2ray[k]);
|
||||
vName = Utils.GetPath(vName);
|
||||
if (File.Exists(vName))
|
||||
{
|
||||
fileName = vName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases");
|
||||
ShowMsg(true, msg);
|
||||
return;
|
||||
}
|
||||
string fileName = V2rayFindexe(coreInfo.coreExes);
|
||||
if (fileName == "") return;
|
||||
|
||||
Process p = new Process();
|
||||
p.StartInfo.FileName = fileName;
|
||||
p.StartInfo.UseShellExecute = false;
|
||||
p.StartInfo.RedirectStandardOutput = true;
|
||||
p.StartInfo.CreateNoWindow = true;
|
||||
p.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
|
||||
Process p = new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = fileName,
|
||||
Arguments = coreInfo.arguments,
|
||||
WorkingDirectory = Utils.StartupPath(),
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
StandardOutputEncoding = Encoding.UTF8,
|
||||
StandardErrorEncoding = Encoding.UTF8
|
||||
}
|
||||
};
|
||||
p.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!String.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
string msg = e.Data + Environment.NewLine;
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
});
|
||||
};
|
||||
p.Start();
|
||||
p.PriorityClass = ProcessPriorityClass.High;
|
||||
p.BeginOutputReadLine();
|
||||
processId = p.Id;
|
||||
_process = p;
|
||||
|
||||
if (p.WaitForExit(1000))
|
||||
{
|
||||
throw new Exception(p.StandardError.ReadToEnd());
|
||||
}
|
||||
|
||||
Global.processJob.AddProcess(p.Handle);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -148,18 +246,108 @@ namespace v2rayN.Handler
|
||||
ShowMsg(true, msg);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// V2ray启动,新建进程,传入配置字符串
|
||||
/// </summary>
|
||||
private int V2rayStartNew(string configStr)
|
||||
{
|
||||
ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString()));
|
||||
|
||||
try
|
||||
{
|
||||
string fileName = V2rayFindexe(new List<string> { "xray", "wv2ray", "v2ray" });
|
||||
if (fileName == "") return -1;
|
||||
|
||||
Process p = new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = fileName,
|
||||
Arguments = "-config stdin:",
|
||||
WorkingDirectory = Utils.StartupPath(),
|
||||
UseShellExecute = false,
|
||||
RedirectStandardInput = true,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
StandardOutputEncoding = Encoding.UTF8,
|
||||
StandardErrorEncoding = Encoding.UTF8
|
||||
}
|
||||
};
|
||||
p.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!String.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
string msg = e.Data + Environment.NewLine;
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
};
|
||||
p.Start();
|
||||
p.BeginOutputReadLine();
|
||||
|
||||
p.StandardInput.Write(configStr);
|
||||
p.StandardInput.Close();
|
||||
|
||||
if (p.WaitForExit(1000))
|
||||
{
|
||||
throw new Exception(p.StandardError.ReadToEnd());
|
||||
}
|
||||
|
||||
Global.processJob.AddProcess(p.Handle);
|
||||
return p.Id;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
string msg = ex.Message;
|
||||
ShowMsg(false, msg);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 消息委托
|
||||
/// </summary>
|
||||
/// <param name="notify"></param>
|
||||
/// <param name="msg"></param>
|
||||
private void ShowMsg(bool notify, string msg)
|
||||
/// <param name="updateToTrayTooltip">是否更新托盘图标的工具提示</param>
|
||||
/// <param name="msg">输出到日志框</param>
|
||||
private void ShowMsg(bool updateToTrayTooltip, string msg)
|
||||
{
|
||||
if (ProcessEvent != null)
|
||||
ProcessEvent?.Invoke(updateToTrayTooltip, msg);
|
||||
}
|
||||
|
||||
private void KillProcess(Process p)
|
||||
{
|
||||
try
|
||||
{
|
||||
ProcessEvent(notify, msg);
|
||||
p.CloseMainWindow();
|
||||
p.WaitForExit(100);
|
||||
if (!p.HasExited)
|
||||
{
|
||||
p.Kill();
|
||||
p.WaitForExit(100);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
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,223 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using v2rayN.Mode;
|
||||
using v2rayN.Properties;
|
||||
using v2rayN.HttpProxyHandler;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace v2rayN.Handler
|
||||
{
|
||||
/// <summary>
|
||||
///Update V2ray Core
|
||||
/// </summary>
|
||||
class V2rayUpdateHandle
|
||||
{
|
||||
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
|
||||
{
|
||||
public bool Success;
|
||||
public string Msg;
|
||||
|
||||
public ResultEventArgs(bool success, string msg)
|
||||
{
|
||||
this.Success = success;
|
||||
this.Msg = msg;
|
||||
}
|
||||
}
|
||||
|
||||
private string latestUrl = "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";
|
||||
private int progressPercentage = -1;
|
||||
private bool blFirst = true;
|
||||
private long totalBytesToReceive = 0;
|
||||
private DateTime totalDatetime = new DateTime();
|
||||
|
||||
|
||||
public void AbsoluteV2rayCore(Config config)
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
|
||||
ServicePointManager.DefaultConnectionLimit = 256;
|
||||
WebRequest request = WebRequest.Create(latestUrl);
|
||||
request.BeginGetResponse(new AsyncCallback(OnResponseV2rayCore), request);
|
||||
}
|
||||
|
||||
private void OnResponseV2rayCore(IAsyncResult ar)
|
||||
{
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
|
||||
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
|
||||
string redirectUrl = response.ResponseUri.AbsoluteUri;
|
||||
string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1);
|
||||
|
||||
string osBit = string.Empty;
|
||||
if (Environment.Is64BitProcess)
|
||||
{
|
||||
osBit = "64";
|
||||
}
|
||||
else
|
||||
{
|
||||
osBit = "32";
|
||||
}
|
||||
string url = string.Format(coreURL, version, osBit);
|
||||
if (AbsoluteCompleted != null)
|
||||
{
|
||||
AbsoluteCompleted(this, new ResultEventArgs(true, url));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
if (Error != null)
|
||||
Error(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void DownloadFileAsync(Config config, string url)
|
||||
{
|
||||
try
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
|
||||
ServicePointManager.DefaultConnectionLimit = 256;
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
UpdateCompleted(this, new ResultEventArgs(false, "Downloading..."));
|
||||
}
|
||||
|
||||
progressPercentage = -1;
|
||||
|
||||
WebClientEx ws = new WebClientEx();
|
||||
ws.Proxy = new WebProxy(Global.Loopback, Global.sysAgentPort);
|
||||
|
||||
ws.DownloadFileCompleted += ws_DownloadFileCompleted;
|
||||
ws.DownloadProgressChanged += ws_DownloadProgressChanged;
|
||||
ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName));
|
||||
blFirst = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
if (Error != null)
|
||||
Error(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
|
||||
{
|
||||
if (blFirst)
|
||||
{
|
||||
totalBytesToReceive = e.TotalBytesToReceive - e.BytesReceived;
|
||||
totalDatetime = DateTime.Now;
|
||||
blFirst = false;
|
||||
}
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
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 (e.Error == null
|
||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
||||
{
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
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);
|
||||
|
||||
if (Error != null)
|
||||
Error(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DownloadString
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
public void WebDownloadString(string url)
|
||||
{
|
||||
string source = string.Empty;
|
||||
try
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
|
||||
ServicePointManager.DefaultConnectionLimit = 256;
|
||||
|
||||
WebClientEx ws = new WebClientEx();
|
||||
ws.DownloadStringCompleted += Ws_DownloadStringCompleted;
|
||||
ws.DownloadStringAsync(new Uri(url));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void Ws_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.Error == null
|
||||
|| Utils.IsNullOrEmpty(e.Error.ToString()))
|
||||
{
|
||||
string source = e.Result;
|
||||
if (UpdateCompleted != null)
|
||||
{
|
||||
UpdateCompleted(this, new ResultEventArgs(true, source));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw e.Error;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
|
||||
if (Error != null)
|
||||
Error(this, new ErrorEventArgs(ex));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,177 +0,0 @@
|
||||
using System;
|
||||
using v2rayN.Mode;
|
||||
|
||||
namespace v2rayN.HttpProxyHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// 系统代理(http)总处理
|
||||
/// 启动privoxy提供http协议
|
||||
/// 使用SysProxy设置IE系统代理或者PAC模式
|
||||
/// </summary>
|
||||
class HttpProxyHandle
|
||||
{
|
||||
private static string GetTimestamp(DateTime value)
|
||||
{
|
||||
return value.ToString("MMddHHmmssfff");
|
||||
}
|
||||
|
||||
public static void ReSetPACProxy(Config config)
|
||||
{
|
||||
if (config.listenerType == 2)
|
||||
{
|
||||
//SysProxyHandle.SetIEProxy(false, false, null, null);
|
||||
//PACServerHandle.Stop();
|
||||
}
|
||||
Update(config, false);
|
||||
}
|
||||
|
||||
public static bool Update(Config config, bool forceDisable)
|
||||
{
|
||||
int type = config.listenerType;
|
||||
|
||||
if (forceDisable)
|
||||
{
|
||||
type = 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (type != 0)
|
||||
{
|
||||
var port = Global.sysAgentPort;
|
||||
if (port <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (type == 1)
|
||||
{
|
||||
PACServerHandle.Stop();
|
||||
PACFileWatcherHandle.StopWatch();
|
||||
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}", null);
|
||||
}
|
||||
else if (type == 2)
|
||||
{
|
||||
string pacUrl = GetPacUrl();
|
||||
SysProxyHandle.SetIEProxy(true, false, null, pacUrl);
|
||||
PACServerHandle.Stop();
|
||||
PACServerHandle.Init(config);
|
||||
PACFileWatcherHandle.StartWatch(config);
|
||||
}
|
||||
else if (type == 3)
|
||||
{
|
||||
PACServerHandle.Stop();
|
||||
PACFileWatcherHandle.StopWatch();
|
||||
SysProxyHandle.SetIEProxy(false, false, null, null);
|
||||
}
|
||||
else if (type == 4)
|
||||
{
|
||||
string pacUrl = GetPacUrl();
|
||||
SysProxyHandle.SetIEProxy(false, false, null, null);
|
||||
PACServerHandle.Stop();
|
||||
PACServerHandle.Init(config);
|
||||
PACFileWatcherHandle.StartWatch(config);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SysProxyHandle.SetIEProxy(false, false, null, null);
|
||||
PACServerHandle.Stop();
|
||||
PACFileWatcherHandle.StopWatch();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启用系统代理(http)
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
public static void StartHttpAgent(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
int localPort = config.GetLocalPort("socks");
|
||||
if (localPort > 0)
|
||||
{
|
||||
PrivoxyHandler.Instance.Start(localPort, config);
|
||||
if (PrivoxyHandler.Instance.RunningPort > 0)
|
||||
{
|
||||
Global.sysAgent = true;
|
||||
Global.socksPort = localPort;
|
||||
Global.sysAgentPort = PrivoxyHandler.Instance.RunningPort;
|
||||
Global.pacPort = Global.sysAgentPort + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭系统代理
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
public static void CloseHttpAgent(Config config)
|
||||
{
|
||||
try
|
||||
{
|
||||
////开启全局代理则关闭
|
||||
//if (Global.sysAgent)
|
||||
//{
|
||||
PrivoxyHandler.Instance.Stop();
|
||||
|
||||
Global.sysAgent = false;
|
||||
Global.socksPort = 0;
|
||||
Global.sysAgentPort = 0;
|
||||
Global.pacPort = 0;
|
||||
//}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重启系统代理(http)
|
||||
/// </summary>
|
||||
/// <param name="config"></param>
|
||||
/// <param name="forced"></param>
|
||||
public static bool RestartHttpAgent(Config config, bool forced)
|
||||
{
|
||||
bool isRestart = false;
|
||||
//强制重启或者socks端口变化
|
||||
if (forced)
|
||||
{
|
||||
isRestart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
int localPort = config.GetLocalPort("socks");
|
||||
if (localPort != Global.socksPort)
|
||||
{
|
||||
isRestart = true;
|
||||
}
|
||||
}
|
||||
if (isRestart)
|
||||
{
|
||||
CloseHttpAgent(config);
|
||||
StartHttpAgent(config);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string GetPacUrl()
|
||||
{
|
||||
string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={GetTimestamp(DateTime.Now)}";
|
||||
|
||||
|
||||
return pacUrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user