Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
597531b92b | ||
|
|
108ab7069b | ||
|
|
63411c5978 | ||
|
|
e6fc9e4783 | ||
|
|
57d5e02d6a | ||
|
|
e578c75545 | ||
|
|
77c5f6c583 | ||
|
|
d8ee3c3bba | ||
|
|
656451f604 | ||
|
|
9dc8cba3f0 | ||
|
|
03c4954c27 | ||
|
|
3c550e2803 | ||
|
|
52f1bdf834 | ||
|
|
c2c9c6a6db | ||
|
|
b390776219 | ||
|
|
47dce69aa4 | ||
|
|
3aeaadade6 | ||
|
|
162b3ab29c | ||
|
|
b8848823cd | ||
|
|
378f350c52 | ||
|
|
e7231d33b3 | ||
|
|
7c633374f6 |
@@ -1,101 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace v2rayN.Base
|
|
||||||
{
|
|
||||||
public class HttpWebServer
|
|
||||||
{
|
|
||||||
private HttpListener _listener;
|
|
||||||
private Func<string, string> _responderMethod;
|
|
||||||
|
|
||||||
public HttpWebServer(string[] prefixes, Func<string, string> method)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_listener = new HttpListener();
|
|
||||||
|
|
||||||
if (!HttpListener.IsSupported)
|
|
||||||
throw new NotSupportedException(
|
|
||||||
"Needs Windows XP SP2, Server 2003 or later.");
|
|
||||||
|
|
||||||
// URI prefixes are required, for example
|
|
||||||
// "http://localhost:8080/index/".
|
|
||||||
if (prefixes == null || prefixes.Length == 0)
|
|
||||||
throw new ArgumentException("prefixes");
|
|
||||||
|
|
||||||
// A responder method is required
|
|
||||||
if (method == null)
|
|
||||||
throw new ArgumentException("method");
|
|
||||||
|
|
||||||
foreach (string s in prefixes)
|
|
||||||
_listener.Prefixes.Add(s);
|
|
||||||
|
|
||||||
_responderMethod = method;
|
|
||||||
_listener.Start();
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpWebServer(Func<string, string> method, params string[] prefixes)
|
|
||||||
: this(prefixes, method) { }
|
|
||||||
|
|
||||||
public void Run()
|
|
||||||
{
|
|
||||||
ThreadPool.QueueUserWorkItem((o) =>
|
|
||||||
{
|
|
||||||
Utils.SaveLog("Webserver running...");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while (_listener.IsListening)
|
|
||||||
{
|
|
||||||
ThreadPool.QueueUserWorkItem((c) =>
|
|
||||||
{
|
|
||||||
HttpListenerContext ctx = c as HttpListenerContext;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string address = ctx.Request.LocalEndPoint.Address.ToString();
|
|
||||||
Utils.SaveLog("Webserver Request " + address);
|
|
||||||
string rstr = _responderMethod(address);
|
|
||||||
byte[] buf = Encoding.UTF8.GetBytes(rstr);
|
|
||||||
ctx.Response.StatusCode = 200;
|
|
||||||
ctx.Response.ContentType = "application/x-ns-proxy-autoconfig";
|
|
||||||
ctx.Response.ContentLength64 = buf.Length;
|
|
||||||
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
} // suppress any exceptions
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
// always close the stream
|
|
||||||
ctx.Response.OutputStream.Close();
|
|
||||||
}
|
|
||||||
}, _listener.GetContext());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
} // suppress any exceptions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Stop()
|
|
||||||
{
|
|
||||||
if (_listener != null)
|
|
||||||
{
|
|
||||||
_listener.Stop();
|
|
||||||
_listener.Close();
|
|
||||||
_listener = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace v2rayN.Base
|
|
||||||
{
|
|
||||||
public class HttpWebServerB
|
|
||||||
{
|
|
||||||
private TcpListener listener;
|
|
||||||
private int port;
|
|
||||||
private Func<string, string> _responderMethod;
|
|
||||||
|
|
||||||
public HttpWebServerB(int port, Func<string, string> method)
|
|
||||||
{
|
|
||||||
this.port = port;
|
|
||||||
this._responderMethod = method;
|
|
||||||
|
|
||||||
Thread thread = new Thread(StartListen)
|
|
||||||
{
|
|
||||||
IsBackground = true
|
|
||||||
};
|
|
||||||
thread.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Stop()
|
|
||||||
{
|
|
||||||
if (listener != null)
|
|
||||||
{
|
|
||||||
listener.Stop();
|
|
||||||
listener = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void StartListen()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
listener = new TcpListener(IPAddress.Any, port);
|
|
||||||
listener.Start();
|
|
||||||
Utils.SaveLog("WebserverB running...");
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
if (!listener.Pending())
|
|
||||||
{
|
|
||||||
Thread.Sleep(100);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
TcpClient socket = listener.AcceptTcpClient();
|
|
||||||
Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread))
|
|
||||||
{
|
|
||||||
IsBackground = true
|
|
||||||
};
|
|
||||||
thread.Start(socket);
|
|
||||||
Thread.Sleep(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
Utils.SaveLog("WebserverB start fail.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void ProcessThread(object obj)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
TcpClient socket = obj as TcpClient;
|
|
||||||
|
|
||||||
BufferedStream inputStream = new BufferedStream(socket.GetStream());
|
|
||||||
StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream()));
|
|
||||||
if (inputStream.CanRead)
|
|
||||||
{
|
|
||||||
string data = ReadStream(inputStream);
|
|
||||||
|
|
||||||
if (data.Contains("/pac/"))
|
|
||||||
{
|
|
||||||
if (_responderMethod != null)
|
|
||||||
{
|
|
||||||
string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString();
|
|
||||||
Utils.SaveLog("WebserverB Request " + address);
|
|
||||||
string pac = _responderMethod(address);
|
|
||||||
|
|
||||||
if (inputStream.CanWrite)
|
|
||||||
{
|
|
||||||
WriteStream(outputStream, pac);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outputStream.BaseStream.Flush();
|
|
||||||
inputStream = null;
|
|
||||||
outputStream = null;
|
|
||||||
socket.Close();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string ReadStream(Stream inputStream)
|
|
||||||
{
|
|
||||||
int nextchar;
|
|
||||||
string data = "";
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
nextchar = inputStream.ReadByte();
|
|
||||||
if (nextchar == '\n')
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (nextchar == '\r')
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (nextchar == -1)
|
|
||||||
{
|
|
||||||
Thread.Sleep(1);
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
data += Convert.ToChar(nextchar);
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WriteStream(StreamWriter outputStream, string pac)
|
|
||||||
{
|
|
||||||
string content_type = "application/x-ns-proxy-autoconfig";
|
|
||||||
outputStream.WriteLine("HTTP/1.1 200 OK");
|
|
||||||
outputStream.WriteLine(String.Format("Content-Type:{0}", content_type));
|
|
||||||
outputStream.WriteLine("Connection: close");
|
|
||||||
outputStream.WriteLine("");
|
|
||||||
outputStream.WriteLine(pac);
|
|
||||||
outputStream.Flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -46,5 +46,7 @@ namespace v2rayN.Base
|
|||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
18
v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
generated
18
v2rayN/v2rayN/Forms/AddServer3Form.Designer.cs
generated
@@ -55,15 +55,14 @@
|
|||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.btnClose, "btnClose");
|
|
||||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
resources.ApplyResources(this.btnClose, "btnClose");
|
||||||
this.btnClose.Name = "btnClose";
|
this.btnClose.Name = "btnClose";
|
||||||
this.btnClose.UseVisualStyleBackColor = true;
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
|
||||||
this.groupBox1.Controls.Add(this.label13);
|
this.groupBox1.Controls.Add(this.label13);
|
||||||
this.groupBox1.Controls.Add(this.cmbSecurity);
|
this.groupBox1.Controls.Add(this.cmbSecurity);
|
||||||
this.groupBox1.Controls.Add(this.txtRemarks);
|
this.groupBox1.Controls.Add(this.txtRemarks);
|
||||||
@@ -75,6 +74,7 @@
|
|||||||
this.groupBox1.Controls.Add(this.label2);
|
this.groupBox1.Controls.Add(this.label2);
|
||||||
this.groupBox1.Controls.Add(this.txtAddress);
|
this.groupBox1.Controls.Add(this.txtAddress);
|
||||||
this.groupBox1.Controls.Add(this.label1);
|
this.groupBox1.Controls.Add(this.label1);
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
@@ -85,7 +85,6 @@
|
|||||||
//
|
//
|
||||||
// cmbSecurity
|
// cmbSecurity
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
|
|
||||||
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbSecurity.FormattingEnabled = true;
|
this.cmbSecurity.FormattingEnabled = true;
|
||||||
this.cmbSecurity.Items.AddRange(new object[] {
|
this.cmbSecurity.Items.AddRange(new object[] {
|
||||||
@@ -94,9 +93,8 @@
|
|||||||
resources.GetString("cmbSecurity.Items2"),
|
resources.GetString("cmbSecurity.Items2"),
|
||||||
resources.GetString("cmbSecurity.Items3"),
|
resources.GetString("cmbSecurity.Items3"),
|
||||||
resources.GetString("cmbSecurity.Items4"),
|
resources.GetString("cmbSecurity.Items4"),
|
||||||
resources.GetString("cmbSecurity.Items5"),
|
resources.GetString("cmbSecurity.Items5")});
|
||||||
resources.GetString("cmbSecurity.Items6"),
|
resources.ApplyResources(this.cmbSecurity, "cmbSecurity");
|
||||||
resources.GetString("cmbSecurity.Items7")});
|
|
||||||
this.cmbSecurity.Name = "cmbSecurity";
|
this.cmbSecurity.Name = "cmbSecurity";
|
||||||
//
|
//
|
||||||
// txtRemarks
|
// txtRemarks
|
||||||
@@ -146,9 +144,9 @@
|
|||||||
//
|
//
|
||||||
// panel2
|
// panel2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.panel2, "panel2");
|
|
||||||
this.panel2.Controls.Add(this.btnClose);
|
this.panel2.Controls.Add(this.btnClose);
|
||||||
this.panel2.Controls.Add(this.btnOK);
|
this.panel2.Controls.Add(this.btnOK);
|
||||||
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
//
|
//
|
||||||
// btnOK
|
// btnOK
|
||||||
@@ -165,22 +163,22 @@
|
|||||||
//
|
//
|
||||||
// menuServer
|
// menuServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuServer, "menuServer");
|
|
||||||
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.MenuItem1});
|
this.MenuItem1});
|
||||||
|
resources.ApplyResources(this.menuServer, "menuServer");
|
||||||
this.menuServer.Name = "menuServer";
|
this.menuServer.Name = "menuServer";
|
||||||
//
|
//
|
||||||
// MenuItem1
|
// MenuItem1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
|
||||||
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.menuItemImportClipboard});
|
this.menuItemImportClipboard});
|
||||||
this.MenuItem1.Name = "MenuItem1";
|
this.MenuItem1.Name = "MenuItem1";
|
||||||
|
resources.ApplyResources(this.MenuItem1, "MenuItem1");
|
||||||
//
|
//
|
||||||
// menuItemImportClipboard
|
// menuItemImportClipboard
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
|
|
||||||
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
|
this.menuItemImportClipboard.Name = "menuItemImportClipboard";
|
||||||
|
resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard");
|
||||||
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
|
this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click);
|
||||||
//
|
//
|
||||||
// AddServer3Form
|
// AddServer3Form
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
ClearServer();
|
ClearServer();
|
||||||
|
|
||||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
{
|
{
|
||||||
UI.ShowWarning(msg);
|
UI.ShowWarning(msg);
|
||||||
|
|||||||
@@ -118,489 +118,483 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="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="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">
|
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>113, 12</value>
|
<value>113, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label13.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>53, 12</value>
|
<value>22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label6.Name" xml:space="preserve">
|
<data name="label13.Text" xml:space="preserve">
|
||||||
<value>label6</value>
|
<value>* Fill in manually</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cmbSecurity.Parent" xml:space="preserve">
|
<data name=">>label13.Name" xml:space="preserve">
|
||||||
<value>groupBox1</value>
|
<value>label13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>groupBox1.Type" xml:space="preserve">
|
<data name=">>label13.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=">>label5.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>547, 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>11</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>menuServer.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label13.Parent" xml:space="preserve">
|
<data name=">>label13.Parent" xml:space="preserve">
|
||||||
<value>groupBox1</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>8</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Bottom</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItem1.Text" xml:space="preserve">
|
|
||||||
<value>Import configuration file</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtPort.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>panel1.Name" xml:space="preserve">
|
|
||||||
<value>panel1</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<data name="label3.Text" xml:space="preserve">
|
|
||||||
<value>Password</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.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label2.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>menuItemImportClipboard.Name" xml:space="preserve">
|
|
||||||
<value>menuItemImportClipboard</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Fill</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label3.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuServer.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>8</value>
|
|
||||||
</data>
|
|
||||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>89, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtAddress.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>127, 27</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=">>label13.ZOrder" xml:space="preserve">
|
<data name=">>label13.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.Items" xml:space="preserve">
|
<data name="cmbSecurity.Items" xml:space="preserve">
|
||||||
<value>aes-256-cfb</value>
|
<value>aes-256-gcm</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.TabIndex" type="System.Int32, mscorlib">
|
<data name="cmbSecurity.Items1" xml:space="preserve">
|
||||||
<value>6</value>
|
<value>aes-128-gcm</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtId.TabIndex" type="System.Int32, mscorlib">
|
<data name="cmbSecurity.Items2" xml:space="preserve">
|
||||||
<value>5</value>
|
<value>chacha20-poly1305</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cmbSecurity.Items3" xml:space="preserve">
|
||||||
<value>303, 17</value>
|
<value>chacha20-ietf-poly1305</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel1.Type" xml:space="preserve">
|
<data name="cmbSecurity.Items4" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>none</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
<data name="cmbSecurity.Items5" xml:space="preserve">
|
||||||
<value>4</value>
|
<value>plain</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="txtAddress.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>359, 21</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="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>396, 17</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
|
||||||
<value>8</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>547, 60</value>
|
|
||||||
</data>
|
|
||||||
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 25</value>
|
|
||||||
</data>
|
|
||||||
<data name="label5.Text" xml:space="preserve">
|
|
||||||
<value>Encryption</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="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>162, 21</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cmbSecurity.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>127, 123</value>
|
<value>127, 123</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>127, 91</value>
|
<value>194, 20</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label5.Parent" xml:space="preserve">
|
<data name="cmbSecurity.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbSecurity.Name" xml:space="preserve">
|
||||||
|
<value>cmbSecurity</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbSecurity.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=">>cmbSecurity.Parent" xml:space="preserve">
|
||||||
<value>groupBox1</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnOK.Parent" xml:space="preserve">
|
<data name=">>cmbSecurity.ZOrder" xml:space="preserve">
|
||||||
<value>panel2</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>5</value>
|
<value>127, 154</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
<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>2</value>
|
<value>2</value>
|
||||||
</data>
|
</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, 155</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">
|
<data name="label6.Text" xml:space="preserve">
|
||||||
<value>Alias (remarks)</value>
|
<value>Alias (remarks)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtId.Parent" xml:space="preserve">
|
<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>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>12, 124</value>
|
||||||
|
</data>
|
||||||
|
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>65, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>8</value>
|
||||||
|
</data>
|
||||||
|
<data name="label5.Text" xml:space="preserve">
|
||||||
|
<value>Encryption</value>
|
||||||
|
</data>
|
||||||
<data name=">>label5.Name" xml:space="preserve">
|
<data name=">>label5.Name" xml:space="preserve">
|
||||||
<value>label5</value>
|
<value>label5</value>
|
||||||
</data>
|
</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=">>label5.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label5.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtId.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>127, 91</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>5</value>
|
||||||
|
</data>
|
||||||
<data name=">>txtId.Name" xml:space="preserve">
|
<data name=">>txtId.Name" xml:space="preserve">
|
||||||
<value>txtId</value>
|
<value>txtId</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtId.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtRemarks.Type" xml:space="preserve">
|
<data name=">>txtId.Parent" 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>12, 31</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>groupBox1.Name" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
|
||||||
<value>AddServer3Form</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>194, 21</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label2.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>127, 59</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=">>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=">>groupBox1.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>71, 12</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="label5.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>12, 124</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
|
||||||
<value>10</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtPort.Name" xml:space="preserve">
|
|
||||||
<value>txtPort</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbSecurity.Items1" xml:space="preserve">
|
|
||||||
<value>aes-128-cfb</value>
|
|
||||||
</data>
|
|
||||||
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>547, 10</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 35</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtId.ZOrder" xml:space="preserve">
|
<data name=">>txtId.ZOrder" xml:space="preserve">
|
||||||
<value>5</value>
|
<value>5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuItemImportClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>235, 22</value>
|
<value>True</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.Text" xml:space="preserve">
|
|
||||||
<value>Edit or add a [Shadowsocks] server</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnOK.Text" xml:space="preserve">
|
|
||||||
<value>&OK</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbSecurity.Items2" xml:space="preserve">
|
|
||||||
<value>chacha20</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cmbSecurity.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=">>btnClose.Name" xml:space="preserve">
|
|
||||||
<value>btnClose</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnClose.Parent" xml:space="preserve">
|
|
||||||
<value>panel2</value>
|
|
||||||
</data>
|
|
||||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>menuServer.ZOrder" xml:space="preserve">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>12, 93</value>
|
<value>12, 93</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>194, 20</value>
|
<value>53, 12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>10</value>
|
<value>4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.Items3" xml:space="preserve">
|
<data name="label3.Text" xml:space="preserve">
|
||||||
<value>chacha20-ietf</value>
|
<value>Password</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
<data name=">>label3.Name" xml:space="preserve">
|
||||||
<value>True</value>
|
<value>label3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel2.Name" xml:space="preserve">
|
<data name=">>label3.Type" xml:space="preserve">
|
||||||
<value>panel2</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>
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>label3.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||||
|
<value>6</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>127, 59</value>
|
||||||
|
</data>
|
||||||
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>194, 21</value>
|
<value>194, 21</value>
|
||||||
</data>
|
</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, 62</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="txtAddress.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>btnClose.Type" xml:space="preserve">
|
<data name=">>txtAddress.Name" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>txtAddress</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
<data name=">>txtAddress.Type" xml:space="preserve">
|
||||||
<value>6</value>
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>panel2.ZOrder" xml:space="preserve">
|
<data name=">>txtAddress.Parent" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
||||||
<value>7</value>
|
<value>9</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label13.Name" xml:space="preserve">
|
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>label13</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmbSecurity.Items4" xml:space="preserve">
|
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>aes-256-gcm</value>
|
<value>12, 31</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label6.Type" xml:space="preserve">
|
<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>
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label1.Parent" xml:space="preserve">
|
<data name=">>label1.Parent" xml:space="preserve">
|
||||||
<value>groupBox1</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>$this.Type" xml:space="preserve">
|
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||||
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>10</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label3.Name" xml:space="preserve">
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<value>label3</value>
|
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Text" xml:space="preserve">
|
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>Server port</value>
|
<value>0, 35</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.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 231</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtAddress.ZOrder" xml:space="preserve">
|
|
||||||
<value>9</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbSecurity.Items5" xml:space="preserve">
|
|
||||||
<value>aes-128-gcm</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label5.ZOrder" xml:space="preserve">
|
|
||||||
<value>4</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnClose.Text" xml:space="preserve">
|
|
||||||
<value>&Cancel</value>
|
|
||||||
</data>
|
|
||||||
<data name="label13.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
|
||||||
<value>6, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="label1.Text" xml:space="preserve">
|
|
||||||
<value>Server address</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>menuServer.Name" xml:space="preserve">
|
|
||||||
<value>menuServer</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtAddress.Name" xml:space="preserve">
|
|
||||||
<value>txtAddress</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>127, 154</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbSecurity.Items6" xml:space="preserve">
|
|
||||||
<value>chacha20-poly1305</value>
|
|
||||||
</data>
|
|
||||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>95, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label3.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name="label13.Text" xml:space="preserve">
|
|
||||||
<value>* Fill in manually</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtPort.ZOrder" xml:space="preserve">
|
|
||||||
<value>7</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label2.Name" xml:space="preserve">
|
|
||||||
<value>label2</value>
|
|
||||||
</data>
|
|
||||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>12, 62</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>547, 291</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbSecurity.Items7" xml:space="preserve">
|
|
||||||
<value>chacha20-ietf-poly1305</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>btnOK.Name" xml:space="preserve">
|
|
||||||
<value>btnOK</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cmbSecurity.Name" xml:space="preserve">
|
|
||||||
<value>cmbSecurity</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>panel2.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>547, 196</value>
|
<value>547, 196</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>75, 23</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
|
||||||
<value>6</value>
|
|
||||||
</data>
|
|
||||||
<data name="label13.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>337, 158</value>
|
|
||||||
</data>
|
|
||||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>65, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>4</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cmbSecurity.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtId.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
|
|
||||||
<value>*</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>75, 23</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuItemImportClipboard.Text" xml:space="preserve">
|
|
||||||
<value>Import URL from clipboard</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtAddress.Parent" xml:space="preserve">
|
|
||||||
<value>groupBox1</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox1.Text" xml:space="preserve">
|
<data name="groupBox1.Text" xml:space="preserve">
|
||||||
<value>Server</value>
|
<value>Server</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtRemarks.Name" xml:space="preserve">
|
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||||
<value>txtRemarks</value>
|
<value>groupBox1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||||
<value>12, 155</value>
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||||
<value>True</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtId.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||||
<value>278, 21</value>
|
<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">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
|
<value>&OK</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Name" xml:space="preserve">
|
||||||
|
<value>btnOK</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="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">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Top</value>
|
<value>Top</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
|
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>547, 10</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Name" xml:space="preserve">
|
||||||
|
<value>panel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</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>
|
||||||
|
<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>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="menuServer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>17, 17</value>
|
<value>6, 12</value>
|
||||||
</metadata>
|
</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 [Shadowsocks] 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>AddServer3Form</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
|
<value>v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -108,7 +108,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
ClearServer();
|
ClearServer();
|
||||||
|
|
||||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
{
|
{
|
||||||
UI.ShowWarning(msg);
|
UI.ShowWarning(msg);
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
ClearServer();
|
ClearServer();
|
||||||
|
|
||||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
{
|
{
|
||||||
UI.ShowWarning(msg);
|
UI.ShowWarning(msg);
|
||||||
|
|||||||
@@ -268,7 +268,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
ClearServer();
|
ClearServer();
|
||||||
|
|
||||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
{
|
{
|
||||||
UI.ShowWarning(msg);
|
UI.ShowWarning(msg);
|
||||||
|
|||||||
@@ -1318,7 +1318,7 @@
|
|||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>25</value>
|
<value>114</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
<value>6, 12</value>
|
<value>6, 12</value>
|
||||||
|
|||||||
307
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
307
v2rayN/v2rayN/Forms/MainForm.Designer.cs
generated
@@ -58,27 +58,23 @@
|
|||||||
this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuRealPingServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbTestMe = 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.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.menuExport2ClientConfig = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuExport2ClientConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuExport2ServerConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuExport2ShareUrl = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuExport2SubContent = 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.tsbServer = new System.Windows.Forms.ToolStripDropDownButton();
|
||||||
|
this.qrCodeControl = new v2rayN.Forms.QRCodeControl();
|
||||||
this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components);
|
this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components);
|
||||||
this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components);
|
this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuNotEnabledHttp = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuKeepClear = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuGlobal = 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.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuKeepPACNothing = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuServers = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
|
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -93,8 +89,6 @@
|
|||||||
this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel();
|
this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel();
|
this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
this.toolSslBlank2 = 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.toolSslBlank3 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel();
|
this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel();
|
this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
@@ -106,16 +100,16 @@
|
|||||||
this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton();
|
this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton();
|
||||||
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
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.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbReload = new System.Windows.Forms.ToolStripButton();
|
this.tsbReload = new System.Windows.Forms.ToolStripButton();
|
||||||
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton();
|
||||||
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateN = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbCheckUpdateXrayCore = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
|
this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton();
|
||||||
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
|
this.tsbAbout = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@@ -146,19 +140,17 @@
|
|||||||
//
|
//
|
||||||
// scMain.Panel1
|
// scMain.Panel1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.scMain.Panel1, "scMain.Panel1");
|
|
||||||
this.scMain.Panel1.Controls.Add(this.lvServers);
|
this.scMain.Panel1.Controls.Add(this.lvServers);
|
||||||
//
|
//
|
||||||
// scMain.Panel2
|
// scMain.Panel2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.scMain.Panel2, "scMain.Panel2");
|
|
||||||
this.scMain.Panel2.Controls.Add(this.qrCodeControl);
|
this.scMain.Panel2.Controls.Add(this.qrCodeControl);
|
||||||
this.scMain.TabStop = false;
|
this.scMain.TabStop = false;
|
||||||
//
|
//
|
||||||
// lvServers
|
// lvServers
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.lvServers, "lvServers");
|
|
||||||
this.lvServers.ContextMenuStrip = this.cmsLv;
|
this.lvServers.ContextMenuStrip = this.cmsLv;
|
||||||
|
resources.ApplyResources(this.lvServers, "lvServers");
|
||||||
this.lvServers.FullRowSelect = true;
|
this.lvServers.FullRowSelect = true;
|
||||||
this.lvServers.GridLines = true;
|
this.lvServers.GridLines = true;
|
||||||
this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||||
@@ -177,7 +169,6 @@
|
|||||||
//
|
//
|
||||||
// cmsLv
|
// cmsLv
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmsLv, "cmsLv");
|
|
||||||
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
|
this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||||
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.menuAddVmessServer,
|
this.menuAddVmessServer,
|
||||||
@@ -205,217 +196,225 @@
|
|||||||
this.menuRealPingServer,
|
this.menuRealPingServer,
|
||||||
this.menuSpeedServer,
|
this.menuSpeedServer,
|
||||||
this.tsbTestMe,
|
this.tsbTestMe,
|
||||||
|
this.menuClearServerStatistics,
|
||||||
this.toolStripSeparator6,
|
this.toolStripSeparator6,
|
||||||
this.menuExport2ClientConfig,
|
this.menuExport2ClientConfig,
|
||||||
this.menuExport2ServerConfig,
|
this.menuExport2ServerConfig,
|
||||||
this.menuExport2ShareUrl,
|
this.menuExport2ShareUrl,
|
||||||
this.menuExport2SubContent});
|
this.menuExport2SubContent});
|
||||||
this.cmsLv.Name = "cmsLv";
|
this.cmsLv.Name = "cmsLv";
|
||||||
|
this.cmsLv.OwnerItem = this.tsbServer;
|
||||||
|
resources.ApplyResources(this.cmsLv, "cmsLv");
|
||||||
//
|
//
|
||||||
// menuAddVmessServer
|
// menuAddVmessServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
|
|
||||||
this.menuAddVmessServer.Name = "menuAddVmessServer";
|
this.menuAddVmessServer.Name = "menuAddVmessServer";
|
||||||
|
resources.ApplyResources(this.menuAddVmessServer, "menuAddVmessServer");
|
||||||
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
|
this.menuAddVmessServer.Click += new System.EventHandler(this.menuAddVmessServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddVlessServer
|
// menuAddVlessServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
|
|
||||||
this.menuAddVlessServer.Name = "menuAddVlessServer";
|
this.menuAddVlessServer.Name = "menuAddVlessServer";
|
||||||
|
resources.ApplyResources(this.menuAddVlessServer, "menuAddVlessServer");
|
||||||
this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
|
this.menuAddVlessServer.Click += new System.EventHandler(this.menuAddVlessServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddShadowsocksServer
|
// menuAddShadowsocksServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
|
|
||||||
this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
|
this.menuAddShadowsocksServer.Name = "menuAddShadowsocksServer";
|
||||||
|
resources.ApplyResources(this.menuAddShadowsocksServer, "menuAddShadowsocksServer");
|
||||||
this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click);
|
this.menuAddShadowsocksServer.Click += new System.EventHandler(this.menuAddShadowsocksServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddSocksServer
|
// menuAddSocksServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
|
|
||||||
this.menuAddSocksServer.Name = "menuAddSocksServer";
|
this.menuAddSocksServer.Name = "menuAddSocksServer";
|
||||||
|
resources.ApplyResources(this.menuAddSocksServer, "menuAddSocksServer");
|
||||||
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
|
this.menuAddSocksServer.Click += new System.EventHandler(this.menuAddSocksServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddTrojanServer
|
// menuAddTrojanServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
|
|
||||||
this.menuAddTrojanServer.Name = "menuAddTrojanServer";
|
this.menuAddTrojanServer.Name = "menuAddTrojanServer";
|
||||||
|
resources.ApplyResources(this.menuAddTrojanServer, "menuAddTrojanServer");
|
||||||
this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
|
this.menuAddTrojanServer.Click += new System.EventHandler(this.menuAddTrojanServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddCustomServer
|
// menuAddCustomServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
|
|
||||||
this.menuAddCustomServer.Name = "menuAddCustomServer";
|
this.menuAddCustomServer.Name = "menuAddCustomServer";
|
||||||
|
resources.ApplyResources(this.menuAddCustomServer, "menuAddCustomServer");
|
||||||
this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click);
|
this.menuAddCustomServer.Click += new System.EventHandler(this.menuAddCustomServer_Click);
|
||||||
//
|
//
|
||||||
// menuAddServers
|
// menuAddServers
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddServers, "menuAddServers");
|
|
||||||
this.menuAddServers.Name = "menuAddServers";
|
this.menuAddServers.Name = "menuAddServers";
|
||||||
|
resources.ApplyResources(this.menuAddServers, "menuAddServers");
|
||||||
this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click);
|
this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click);
|
||||||
//
|
//
|
||||||
// menuScanScreen
|
// menuScanScreen
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
|
|
||||||
this.menuScanScreen.Name = "menuScanScreen";
|
this.menuScanScreen.Name = "menuScanScreen";
|
||||||
|
resources.ApplyResources(this.menuScanScreen, "menuScanScreen");
|
||||||
this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click);
|
this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator1
|
// toolStripSeparator1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
|
||||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
|
||||||
//
|
//
|
||||||
// menuRemoveServer
|
// menuRemoveServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
|
|
||||||
this.menuRemoveServer.Name = "menuRemoveServer";
|
this.menuRemoveServer.Name = "menuRemoveServer";
|
||||||
|
resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer");
|
||||||
this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click);
|
this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click);
|
||||||
//
|
//
|
||||||
// menuRemoveDuplicateServer
|
// menuRemoveDuplicateServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
|
|
||||||
this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
|
this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer";
|
||||||
|
resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer");
|
||||||
this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click);
|
this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click);
|
||||||
//
|
//
|
||||||
// menuCopyServer
|
// menuCopyServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
|
|
||||||
this.menuCopyServer.Name = "menuCopyServer";
|
this.menuCopyServer.Name = "menuCopyServer";
|
||||||
|
resources.ApplyResources(this.menuCopyServer, "menuCopyServer");
|
||||||
this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click);
|
this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click);
|
||||||
//
|
//
|
||||||
// menuSetDefaultServer
|
// menuSetDefaultServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
|
|
||||||
this.menuSetDefaultServer.Name = "menuSetDefaultServer";
|
this.menuSetDefaultServer.Name = "menuSetDefaultServer";
|
||||||
|
resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer");
|
||||||
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
|
this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator3
|
// toolStripSeparator3
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
|
||||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||||
//
|
//
|
||||||
// menuMoveTop
|
// menuMoveTop
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
|
|
||||||
this.menuMoveTop.Name = "menuMoveTop";
|
this.menuMoveTop.Name = "menuMoveTop";
|
||||||
|
resources.ApplyResources(this.menuMoveTop, "menuMoveTop");
|
||||||
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
|
this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click);
|
||||||
//
|
//
|
||||||
// menuMoveUp
|
// menuMoveUp
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
|
|
||||||
this.menuMoveUp.Name = "menuMoveUp";
|
this.menuMoveUp.Name = "menuMoveUp";
|
||||||
|
resources.ApplyResources(this.menuMoveUp, "menuMoveUp");
|
||||||
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
|
this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click);
|
||||||
//
|
//
|
||||||
// menuMoveDown
|
// menuMoveDown
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
|
|
||||||
this.menuMoveDown.Name = "menuMoveDown";
|
this.menuMoveDown.Name = "menuMoveDown";
|
||||||
|
resources.ApplyResources(this.menuMoveDown, "menuMoveDown");
|
||||||
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
|
this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click);
|
||||||
//
|
//
|
||||||
// menuMoveBottom
|
// menuMoveBottom
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
|
|
||||||
this.menuMoveBottom.Name = "menuMoveBottom";
|
this.menuMoveBottom.Name = "menuMoveBottom";
|
||||||
|
resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom");
|
||||||
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
|
this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click);
|
||||||
//
|
//
|
||||||
// menuSelectAll
|
// menuSelectAll
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
|
|
||||||
this.menuSelectAll.Name = "menuSelectAll";
|
this.menuSelectAll.Name = "menuSelectAll";
|
||||||
|
resources.ApplyResources(this.menuSelectAll, "menuSelectAll");
|
||||||
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
|
this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator9
|
// toolStripSeparator9
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
|
|
||||||
this.toolStripSeparator9.Name = "toolStripSeparator9";
|
this.toolStripSeparator9.Name = "toolStripSeparator9";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9");
|
||||||
//
|
//
|
||||||
// menuPingServer
|
// menuPingServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuPingServer, "menuPingServer");
|
|
||||||
this.menuPingServer.Name = "menuPingServer";
|
this.menuPingServer.Name = "menuPingServer";
|
||||||
|
resources.ApplyResources(this.menuPingServer, "menuPingServer");
|
||||||
this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click);
|
this.menuPingServer.Click += new System.EventHandler(this.menuPingServer_Click);
|
||||||
//
|
//
|
||||||
// menuTcpingServer
|
// menuTcpingServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
|
|
||||||
this.menuTcpingServer.Name = "menuTcpingServer";
|
this.menuTcpingServer.Name = "menuTcpingServer";
|
||||||
|
resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer");
|
||||||
this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click);
|
this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click);
|
||||||
//
|
//
|
||||||
// menuRealPingServer
|
// menuRealPingServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
|
|
||||||
this.menuRealPingServer.Name = "menuRealPingServer";
|
this.menuRealPingServer.Name = "menuRealPingServer";
|
||||||
|
resources.ApplyResources(this.menuRealPingServer, "menuRealPingServer");
|
||||||
this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click);
|
this.menuRealPingServer.Click += new System.EventHandler(this.menuRealPingServer_Click);
|
||||||
//
|
//
|
||||||
// menuSpeedServer
|
// menuSpeedServer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
|
|
||||||
this.menuSpeedServer.Name = "menuSpeedServer";
|
this.menuSpeedServer.Name = "menuSpeedServer";
|
||||||
|
resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer");
|
||||||
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
|
this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click);
|
||||||
//
|
//
|
||||||
// tsbTestMe
|
// tsbTestMe
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
|
|
||||||
this.tsbTestMe.Name = "tsbTestMe";
|
this.tsbTestMe.Name = "tsbTestMe";
|
||||||
|
resources.ApplyResources(this.tsbTestMe, "tsbTestMe");
|
||||||
this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click);
|
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
|
// toolStripSeparator6
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
|
|
||||||
this.toolStripSeparator6.Name = "toolStripSeparator6";
|
this.toolStripSeparator6.Name = "toolStripSeparator6";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6");
|
||||||
//
|
//
|
||||||
// menuExport2ClientConfig
|
// menuExport2ClientConfig
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
|
|
||||||
this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
|
this.menuExport2ClientConfig.Name = "menuExport2ClientConfig";
|
||||||
|
resources.ApplyResources(this.menuExport2ClientConfig, "menuExport2ClientConfig");
|
||||||
this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click);
|
this.menuExport2ClientConfig.Click += new System.EventHandler(this.menuExport2ClientConfig_Click);
|
||||||
//
|
//
|
||||||
// menuExport2ServerConfig
|
// menuExport2ServerConfig
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
|
|
||||||
this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
|
this.menuExport2ServerConfig.Name = "menuExport2ServerConfig";
|
||||||
|
resources.ApplyResources(this.menuExport2ServerConfig, "menuExport2ServerConfig");
|
||||||
this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click);
|
this.menuExport2ServerConfig.Click += new System.EventHandler(this.menuExport2ServerConfig_Click);
|
||||||
//
|
//
|
||||||
// menuExport2ShareUrl
|
// menuExport2ShareUrl
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
|
|
||||||
this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
|
this.menuExport2ShareUrl.Name = "menuExport2ShareUrl";
|
||||||
|
resources.ApplyResources(this.menuExport2ShareUrl, "menuExport2ShareUrl");
|
||||||
this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click);
|
this.menuExport2ShareUrl.Click += new System.EventHandler(this.menuExport2ShareUrl_Click);
|
||||||
//
|
//
|
||||||
// menuExport2SubContent
|
// menuExport2SubContent
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
|
|
||||||
this.menuExport2SubContent.Name = "menuExport2SubContent";
|
this.menuExport2SubContent.Name = "menuExport2SubContent";
|
||||||
|
resources.ApplyResources(this.menuExport2SubContent, "menuExport2SubContent");
|
||||||
this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click);
|
this.menuExport2SubContent.Click += new System.EventHandler(this.menuExport2SubContent_Click);
|
||||||
//
|
//
|
||||||
|
// tsbServer
|
||||||
|
//
|
||||||
|
this.tsbServer.DropDown = this.cmsLv;
|
||||||
|
this.tsbServer.Image = global::v2rayN.Properties.Resources.server;
|
||||||
|
resources.ApplyResources(this.tsbServer, "tsbServer");
|
||||||
|
this.tsbServer.Name = "tsbServer";
|
||||||
|
//
|
||||||
// qrCodeControl
|
// qrCodeControl
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
|
resources.ApplyResources(this.qrCodeControl, "qrCodeControl");
|
||||||
this.qrCodeControl.Name = "qrCodeControl";
|
this.qrCodeControl.Name = "qrCodeControl";
|
||||||
//
|
//
|
||||||
// tsbServer
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tsbServer, "tsbServer");
|
|
||||||
this.tsbServer.DropDown = this.cmsLv;
|
|
||||||
this.tsbServer.Image = global::v2rayN.Properties.Resources.server;
|
|
||||||
this.tsbServer.Name = "tsbServer";
|
|
||||||
//
|
|
||||||
// notifyMain
|
// notifyMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.notifyMain, "notifyMain");
|
|
||||||
this.notifyMain.ContextMenuStrip = this.cmsMain;
|
this.notifyMain.ContextMenuStrip = this.cmsMain;
|
||||||
|
resources.ApplyResources(this.notifyMain, "notifyMain");
|
||||||
this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick);
|
this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick);
|
||||||
//
|
//
|
||||||
// cmsMain
|
// cmsMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmsMain, "cmsMain");
|
|
||||||
this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
|
this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||||
|
resources.ApplyResources(this.cmsMain, "cmsMain");
|
||||||
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.menuSysAgentMode,
|
this.menuSysAgentMode,
|
||||||
this.menuServers,
|
this.menuServers,
|
||||||
this.menuAddServers2,
|
this.menuAddServers2,
|
||||||
this.menuScanScreen2,
|
this.menuScanScreen2,
|
||||||
this.menuCopyPACUrl,
|
|
||||||
this.menuUpdateSubscriptions,
|
this.menuUpdateSubscriptions,
|
||||||
this.toolStripSeparator2,
|
this.toolStripSeparator2,
|
||||||
this.menuExit});
|
this.menuExit});
|
||||||
@@ -426,97 +425,63 @@
|
|||||||
//
|
//
|
||||||
// menuSysAgentMode
|
// menuSysAgentMode
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
|
|
||||||
this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.menuNotEnabledHttp,
|
this.menuKeepClear,
|
||||||
this.menuGlobal,
|
this.menuGlobal,
|
||||||
this.menuGlobalPAC,
|
this.menuKeepNothing});
|
||||||
this.menuKeep,
|
|
||||||
this.menuKeepPAC,
|
|
||||||
this.menuKeepNothing,
|
|
||||||
this.menuKeepPACNothing});
|
|
||||||
this.menuSysAgentMode.Name = "menuSysAgentMode";
|
this.menuSysAgentMode.Name = "menuSysAgentMode";
|
||||||
|
resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode");
|
||||||
//
|
//
|
||||||
// menuNotEnabledHttp
|
// menuKeepClear
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp");
|
this.menuKeepClear.Name = "menuKeepClear";
|
||||||
this.menuNotEnabledHttp.Name = "menuNotEnabledHttp";
|
resources.ApplyResources(this.menuKeepClear, "menuKeepClear");
|
||||||
this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click);
|
this.menuKeepClear.Click += new System.EventHandler(this.menuKeepClear_Click);
|
||||||
//
|
//
|
||||||
// menuGlobal
|
// menuGlobal
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuGlobal, "menuGlobal");
|
|
||||||
this.menuGlobal.Name = "menuGlobal";
|
this.menuGlobal.Name = "menuGlobal";
|
||||||
|
resources.ApplyResources(this.menuGlobal, "menuGlobal");
|
||||||
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
|
this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click);
|
||||||
//
|
//
|
||||||
// menuGlobalPAC
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC");
|
|
||||||
this.menuGlobalPAC.Name = "menuGlobalPAC";
|
|
||||||
this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click);
|
|
||||||
//
|
|
||||||
// menuKeep
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.menuKeep, "menuKeep");
|
|
||||||
this.menuKeep.Name = "menuKeep";
|
|
||||||
this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click);
|
|
||||||
//
|
|
||||||
// menuKeepPAC
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC");
|
|
||||||
this.menuKeepPAC.Name = "menuKeepPAC";
|
|
||||||
this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click);
|
|
||||||
//
|
|
||||||
// menuKeepNothing
|
// menuKeepNothing
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
|
|
||||||
this.menuKeepNothing.Name = "menuKeepNothing";
|
this.menuKeepNothing.Name = "menuKeepNothing";
|
||||||
|
resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing");
|
||||||
this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
|
this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click);
|
||||||
//
|
//
|
||||||
// menuKeepPACNothing
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing");
|
|
||||||
this.menuKeepPACNothing.Name = "menuKeepPACNothing";
|
|
||||||
this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click);
|
|
||||||
//
|
|
||||||
// menuServers
|
// menuServers
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuServers, "menuServers");
|
|
||||||
this.menuServers.Name = "menuServers";
|
this.menuServers.Name = "menuServers";
|
||||||
|
resources.ApplyResources(this.menuServers, "menuServers");
|
||||||
//
|
//
|
||||||
// menuAddServers2
|
// menuAddServers2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
|
|
||||||
this.menuAddServers2.Name = "menuAddServers2";
|
this.menuAddServers2.Name = "menuAddServers2";
|
||||||
|
resources.ApplyResources(this.menuAddServers2, "menuAddServers2");
|
||||||
this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click);
|
this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click);
|
||||||
//
|
//
|
||||||
// menuScanScreen2
|
// menuScanScreen2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
|
|
||||||
this.menuScanScreen2.Name = "menuScanScreen2";
|
this.menuScanScreen2.Name = "menuScanScreen2";
|
||||||
|
resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2");
|
||||||
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
|
this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click);
|
||||||
//
|
//
|
||||||
// menuCopyPACUrl
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl");
|
|
||||||
this.menuCopyPACUrl.Name = "menuCopyPACUrl";
|
|
||||||
this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click);
|
|
||||||
//
|
|
||||||
// menuUpdateSubscriptions
|
// menuUpdateSubscriptions
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
|
|
||||||
this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
|
this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions";
|
||||||
|
resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions");
|
||||||
this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
|
this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator2
|
// toolStripSeparator2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
|
|
||||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2");
|
||||||
//
|
//
|
||||||
// menuExit
|
// menuExit
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.menuExit, "menuExit");
|
|
||||||
this.menuExit.Name = "menuExit";
|
this.menuExit.Name = "menuExit";
|
||||||
|
resources.ApplyResources(this.menuExit, "menuExit");
|
||||||
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
|
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
|
||||||
//
|
//
|
||||||
// bgwScan
|
// bgwScan
|
||||||
@@ -527,31 +492,31 @@
|
|||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
|
||||||
this.groupBox1.Controls.Add(this.scMain);
|
this.groupBox1.Controls.Add(this.scMain);
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
// groupBox2
|
// groupBox2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
|
||||||
this.groupBox2.Controls.Add(this.txtMsgBox);
|
this.groupBox2.Controls.Add(this.txtMsgBox);
|
||||||
this.groupBox2.Controls.Add(this.ssMain);
|
this.groupBox2.Controls.Add(this.ssMain);
|
||||||
|
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.groupBox2.Name = "groupBox2";
|
||||||
this.groupBox2.TabStop = false;
|
this.groupBox2.TabStop = false;
|
||||||
//
|
//
|
||||||
// txtMsgBox
|
// txtMsgBox
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.txtMsgBox, "txtMsgBox");
|
|
||||||
this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52)))));
|
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.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.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228)))));
|
||||||
this.txtMsgBox.Name = "txtMsgBox";
|
this.txtMsgBox.Name = "txtMsgBox";
|
||||||
this.txtMsgBox.ReadOnly = true;
|
this.txtMsgBox.ReadOnly = true;
|
||||||
//
|
//
|
||||||
// ssMain
|
// 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.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.toolSslSocksPortLab,
|
this.toolSslSocksPortLab,
|
||||||
this.toolSslSocksPort,
|
this.toolSslSocksPort,
|
||||||
@@ -559,11 +524,10 @@
|
|||||||
this.toolSslHttpPortLab,
|
this.toolSslHttpPortLab,
|
||||||
this.toolSslHttpPort,
|
this.toolSslHttpPort,
|
||||||
this.toolSslBlank2,
|
this.toolSslBlank2,
|
||||||
this.toolSslPacPortLab,
|
|
||||||
this.toolSslPacPort,
|
|
||||||
this.toolSslBlank3,
|
this.toolSslBlank3,
|
||||||
this.toolSslServerSpeed,
|
this.toolSslServerSpeed,
|
||||||
this.toolSslBlank4});
|
this.toolSslBlank4});
|
||||||
|
resources.ApplyResources(this.ssMain, "ssMain");
|
||||||
this.ssMain.Name = "ssMain";
|
this.ssMain.Name = "ssMain";
|
||||||
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
|
this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked);
|
||||||
//
|
//
|
||||||
@@ -574,8 +538,8 @@
|
|||||||
//
|
//
|
||||||
// toolSslSocksPort
|
// toolSslSocksPort
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
|
|
||||||
this.toolSslSocksPort.Name = "toolSslSocksPort";
|
this.toolSslSocksPort.Name = "toolSslSocksPort";
|
||||||
|
resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort");
|
||||||
//
|
//
|
||||||
// toolSslBlank1
|
// toolSslBlank1
|
||||||
//
|
//
|
||||||
@@ -590,8 +554,8 @@
|
|||||||
//
|
//
|
||||||
// toolSslHttpPort
|
// toolSslHttpPort
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
|
|
||||||
this.toolSslHttpPort.Name = "toolSslHttpPort";
|
this.toolSslHttpPort.Name = "toolSslHttpPort";
|
||||||
|
resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort");
|
||||||
//
|
//
|
||||||
// toolSslBlank2
|
// toolSslBlank2
|
||||||
//
|
//
|
||||||
@@ -599,16 +563,6 @@
|
|||||||
this.toolSslBlank2.Name = "toolSslBlank2";
|
this.toolSslBlank2.Name = "toolSslBlank2";
|
||||||
this.toolSslBlank2.Spring = true;
|
this.toolSslBlank2.Spring = true;
|
||||||
//
|
//
|
||||||
// toolSslPacPortLab
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.toolSslPacPortLab, "toolSslPacPortLab");
|
|
||||||
this.toolSslPacPortLab.Name = "toolSslPacPortLab";
|
|
||||||
//
|
|
||||||
// toolSslPacPort
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort");
|
|
||||||
this.toolSslPacPort.Name = "toolSslPacPort";
|
|
||||||
//
|
|
||||||
// toolSslBlank3
|
// toolSslBlank3
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3");
|
resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3");
|
||||||
@@ -623,8 +577,8 @@
|
|||||||
//
|
//
|
||||||
// toolSslBlank4
|
// toolSslBlank4
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
|
|
||||||
this.toolSslBlank4.Name = "toolSslBlank4";
|
this.toolSslBlank4.Name = "toolSslBlank4";
|
||||||
|
resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4");
|
||||||
//
|
//
|
||||||
// panel1
|
// panel1
|
||||||
//
|
//
|
||||||
@@ -633,7 +587,6 @@
|
|||||||
//
|
//
|
||||||
// tsMain
|
// tsMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsMain, "tsMain");
|
|
||||||
this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32);
|
this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32);
|
||||||
this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.tsbServer,
|
this.tsbServer,
|
||||||
@@ -641,7 +594,7 @@
|
|||||||
this.tsbSub,
|
this.tsbSub,
|
||||||
this.tsbQRCodeSwitch,
|
this.tsbQRCodeSwitch,
|
||||||
this.toolStripSeparator8,
|
this.toolStripSeparator8,
|
||||||
this.tsbOptionSetting,
|
this.tsbSetting,
|
||||||
this.toolStripSeparator5,
|
this.toolStripSeparator5,
|
||||||
this.tsbReload,
|
this.tsbReload,
|
||||||
this.toolStripSeparator7,
|
this.toolStripSeparator7,
|
||||||
@@ -651,60 +604,75 @@
|
|||||||
this.tsbPromotion,
|
this.tsbPromotion,
|
||||||
this.toolStripSeparator11,
|
this.toolStripSeparator11,
|
||||||
this.tsbClose});
|
this.tsbClose});
|
||||||
|
resources.ApplyResources(this.tsMain, "tsMain");
|
||||||
this.tsMain.Name = "tsMain";
|
this.tsMain.Name = "tsMain";
|
||||||
this.tsMain.TabStop = true;
|
this.tsMain.TabStop = true;
|
||||||
//
|
//
|
||||||
// toolStripSeparator4
|
// toolStripSeparator4
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
|
|
||||||
this.toolStripSeparator4.Name = "toolStripSeparator4";
|
this.toolStripSeparator4.Name = "toolStripSeparator4";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
|
||||||
//
|
//
|
||||||
// tsbSub
|
// tsbSub
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbSub, "tsbSub");
|
|
||||||
this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.tsbSubSetting,
|
this.tsbSubSetting,
|
||||||
this.tsbSubUpdate});
|
this.tsbSubUpdate});
|
||||||
this.tsbSub.Image = global::v2rayN.Properties.Resources.sub;
|
this.tsbSub.Image = global::v2rayN.Properties.Resources.sub;
|
||||||
|
resources.ApplyResources(this.tsbSub, "tsbSub");
|
||||||
this.tsbSub.Name = "tsbSub";
|
this.tsbSub.Name = "tsbSub";
|
||||||
//
|
//
|
||||||
// tsbSubSetting
|
// tsbSubSetting
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
|
|
||||||
this.tsbSubSetting.Name = "tsbSubSetting";
|
this.tsbSubSetting.Name = "tsbSubSetting";
|
||||||
|
resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting");
|
||||||
this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click);
|
this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click);
|
||||||
//
|
//
|
||||||
// tsbSubUpdate
|
// tsbSubUpdate
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
|
|
||||||
this.tsbSubUpdate.Name = "tsbSubUpdate";
|
this.tsbSubUpdate.Name = "tsbSubUpdate";
|
||||||
|
resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate");
|
||||||
this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click);
|
this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click);
|
||||||
//
|
//
|
||||||
// tsbQRCodeSwitch
|
// tsbQRCodeSwitch
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
|
|
||||||
this.tsbQRCodeSwitch.CheckOnClick = true;
|
this.tsbQRCodeSwitch.CheckOnClick = true;
|
||||||
this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black;
|
this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black;
|
||||||
this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share;
|
this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share;
|
||||||
|
resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch");
|
||||||
this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch";
|
this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch";
|
||||||
this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged);
|
this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged);
|
||||||
//
|
//
|
||||||
// toolStripSeparator8
|
// toolStripSeparator8
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8");
|
|
||||||
this.toolStripSeparator8.Name = "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.tsbSetting.Image = global::v2rayN.Properties.Resources.option;
|
||||||
|
resources.ApplyResources(this.tsbSetting, "tsbSetting");
|
||||||
|
this.tsbSetting.Name = "tsbSetting";
|
||||||
//
|
//
|
||||||
// tsbOptionSetting
|
// tsbOptionSetting
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
|
|
||||||
this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option;
|
|
||||||
this.tsbOptionSetting.Name = "tsbOptionSetting";
|
this.tsbOptionSetting.Name = "tsbOptionSetting";
|
||||||
|
resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting");
|
||||||
this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click);
|
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);
|
||||||
|
//
|
||||||
// toolStripSeparator5
|
// toolStripSeparator5
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
|
|
||||||
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5");
|
||||||
//
|
//
|
||||||
// tsbReload
|
// tsbReload
|
||||||
//
|
//
|
||||||
@@ -714,58 +682,44 @@
|
|||||||
//
|
//
|
||||||
// toolStripSeparator7
|
// toolStripSeparator7
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
|
|
||||||
this.toolStripSeparator7.Name = "toolStripSeparator7";
|
this.toolStripSeparator7.Name = "toolStripSeparator7";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7");
|
||||||
//
|
//
|
||||||
// tsbCheckUpdate
|
// tsbCheckUpdate
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
|
|
||||||
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.tsbCheckUpdateN,
|
this.tsbCheckUpdateN,
|
||||||
this.tsbCheckUpdateCore,
|
this.tsbCheckUpdateCore,
|
||||||
this.tsbCheckUpdatePACList,
|
this.tsbCheckUpdateXrayCore});
|
||||||
this.toolStripSeparator13,
|
|
||||||
this.tsbCheckClearPACList});
|
|
||||||
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
|
this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate;
|
||||||
|
resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate");
|
||||||
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
|
this.tsbCheckUpdate.Name = "tsbCheckUpdate";
|
||||||
//
|
//
|
||||||
// tsbCheckUpdateN
|
// tsbCheckUpdateN
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
|
|
||||||
this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
|
this.tsbCheckUpdateN.Name = "tsbCheckUpdateN";
|
||||||
|
resources.ApplyResources(this.tsbCheckUpdateN, "tsbCheckUpdateN");
|
||||||
this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click);
|
this.tsbCheckUpdateN.Click += new System.EventHandler(this.tsbCheckUpdateN_Click);
|
||||||
//
|
//
|
||||||
// tsbCheckUpdateCore
|
// tsbCheckUpdateCore
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
|
|
||||||
this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
|
this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore";
|
||||||
|
resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore");
|
||||||
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
|
this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click);
|
||||||
//
|
//
|
||||||
// tsbCheckUpdatePACList
|
// tsbCheckUpdateXrayCore
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList");
|
this.tsbCheckUpdateXrayCore.Name = "tsbCheckUpdateXrayCore";
|
||||||
this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList";
|
resources.ApplyResources(this.tsbCheckUpdateXrayCore, "tsbCheckUpdateXrayCore");
|
||||||
this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click);
|
this.tsbCheckUpdateXrayCore.Click += new System.EventHandler(this.tsbCheckUpdateXrayCore_Click);
|
||||||
//
|
|
||||||
// toolStripSeparator13
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13");
|
|
||||||
this.toolStripSeparator13.Name = "toolStripSeparator13";
|
|
||||||
//
|
|
||||||
// tsbCheckClearPACList
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList");
|
|
||||||
this.tsbCheckClearPACList.Name = "tsbCheckClearPACList";
|
|
||||||
this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click);
|
|
||||||
//
|
//
|
||||||
// toolStripSeparator10
|
// toolStripSeparator10
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
|
|
||||||
this.toolStripSeparator10.Name = "toolStripSeparator10";
|
this.toolStripSeparator10.Name = "toolStripSeparator10";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10");
|
||||||
//
|
//
|
||||||
// tsbHelp
|
// tsbHelp
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbHelp, "tsbHelp");
|
|
||||||
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.tsbAbout,
|
this.tsbAbout,
|
||||||
this.tsbV2rayWebsite,
|
this.tsbV2rayWebsite,
|
||||||
@@ -773,49 +727,50 @@
|
|||||||
this.tsbLanguageDef,
|
this.tsbLanguageDef,
|
||||||
this.tsbLanguageZhHans});
|
this.tsbLanguageZhHans});
|
||||||
this.tsbHelp.Image = global::v2rayN.Properties.Resources.help;
|
this.tsbHelp.Image = global::v2rayN.Properties.Resources.help;
|
||||||
|
resources.ApplyResources(this.tsbHelp, "tsbHelp");
|
||||||
this.tsbHelp.Name = "tsbHelp";
|
this.tsbHelp.Name = "tsbHelp";
|
||||||
//
|
//
|
||||||
// tsbAbout
|
// tsbAbout
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbAbout, "tsbAbout");
|
|
||||||
this.tsbAbout.Name = "tsbAbout";
|
this.tsbAbout.Name = "tsbAbout";
|
||||||
|
resources.ApplyResources(this.tsbAbout, "tsbAbout");
|
||||||
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
|
this.tsbAbout.Click += new System.EventHandler(this.tsbAbout_Click);
|
||||||
//
|
//
|
||||||
// tsbV2rayWebsite
|
// tsbV2rayWebsite
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
|
|
||||||
this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
|
this.tsbV2rayWebsite.Name = "tsbV2rayWebsite";
|
||||||
|
resources.ApplyResources(this.tsbV2rayWebsite, "tsbV2rayWebsite");
|
||||||
this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
|
this.tsbV2rayWebsite.Click += new System.EventHandler(this.tsbV2rayWebsite_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator12
|
// toolStripSeparator12
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
|
|
||||||
this.toolStripSeparator12.Name = "toolStripSeparator12";
|
this.toolStripSeparator12.Name = "toolStripSeparator12";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12");
|
||||||
//
|
//
|
||||||
// tsbLanguageDef
|
// tsbLanguageDef
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
|
|
||||||
this.tsbLanguageDef.Name = "tsbLanguageDef";
|
this.tsbLanguageDef.Name = "tsbLanguageDef";
|
||||||
|
resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef");
|
||||||
this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click);
|
this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click);
|
||||||
//
|
//
|
||||||
// tsbLanguageZhHans
|
// tsbLanguageZhHans
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans");
|
|
||||||
this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
|
this.tsbLanguageZhHans.Name = "tsbLanguageZhHans";
|
||||||
|
resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans");
|
||||||
this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click);
|
this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click);
|
||||||
//
|
//
|
||||||
// tsbPromotion
|
// tsbPromotion
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
|
|
||||||
this.tsbPromotion.ForeColor = System.Drawing.Color.Black;
|
this.tsbPromotion.ForeColor = System.Drawing.Color.Black;
|
||||||
this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion;
|
this.tsbPromotion.Image = global::v2rayN.Properties.Resources.promotion;
|
||||||
|
resources.ApplyResources(this.tsbPromotion, "tsbPromotion");
|
||||||
this.tsbPromotion.Name = "tsbPromotion";
|
this.tsbPromotion.Name = "tsbPromotion";
|
||||||
this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click);
|
this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click);
|
||||||
//
|
//
|
||||||
// toolStripSeparator11
|
// toolStripSeparator11
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
|
|
||||||
this.toolStripSeparator11.Name = "toolStripSeparator11";
|
this.toolStripSeparator11.Name = "toolStripSeparator11";
|
||||||
|
resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11");
|
||||||
//
|
//
|
||||||
// tsbClose
|
// tsbClose
|
||||||
//
|
//
|
||||||
@@ -880,7 +835,6 @@
|
|||||||
private System.Windows.Forms.ToolStripMenuItem menuExport2ServerConfig;
|
private System.Windows.Forms.ToolStripMenuItem menuExport2ServerConfig;
|
||||||
private System.Windows.Forms.ToolStrip tsMain;
|
private System.Windows.Forms.ToolStrip tsMain;
|
||||||
private System.Windows.Forms.ToolStripDropDownButton tsbServer;
|
private System.Windows.Forms.ToolStripDropDownButton tsbServer;
|
||||||
private System.Windows.Forms.ToolStripButton tsbOptionSetting;
|
|
||||||
private System.Windows.Forms.ToolStripButton tsbClose;
|
private System.Windows.Forms.ToolStripButton tsbClose;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
||||||
@@ -893,9 +847,7 @@
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode;
|
private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuGlobal;
|
private System.Windows.Forms.ToolStripMenuItem menuGlobal;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuGlobalPAC;
|
private System.Windows.Forms.ToolStripMenuItem menuKeepClear;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuKeep;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuCopyPACUrl;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer;
|
private System.Windows.Forms.ToolStripMenuItem menuAddCustomServer;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer;
|
private System.Windows.Forms.ToolStripMenuItem menuAddShadowsocksServer;
|
||||||
@@ -905,7 +857,6 @@
|
|||||||
private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate;
|
private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateN;
|
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateN;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore;
|
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdatePACList;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuAddServers;
|
private System.Windows.Forms.ToolStripMenuItem menuAddServers;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuExport2ShareUrl;
|
private System.Windows.Forms.ToolStripMenuItem menuExport2ShareUrl;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuSpeedServer;
|
private System.Windows.Forms.ToolStripMenuItem menuSpeedServer;
|
||||||
@@ -920,8 +871,6 @@
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbSubSetting;
|
private System.Windows.Forms.ToolStripMenuItem tsbSubSetting;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbSubUpdate;
|
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 menuSelectAll;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuExport2SubContent;
|
private System.Windows.Forms.ToolStripMenuItem menuExport2SubContent;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator12;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator12;
|
||||||
@@ -934,27 +883,27 @@
|
|||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslPacPort;
|
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab;
|
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed;
|
||||||
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4;
|
private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer;
|
private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuTcpingServer;
|
private System.Windows.Forms.ToolStripMenuItem menuTcpingServer;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
|
private System.Windows.Forms.ToolStripMenuItem menuRealPingServer;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp;
|
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions;
|
private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions;
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
|
private System.Windows.Forms.ToolStripMenuItem tsbV2rayWebsite;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
|
private System.Windows.Forms.ToolStripMenuItem menuKeepNothing;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem tsbTestMe;
|
private System.Windows.Forms.ToolStripMenuItem tsbTestMe;
|
||||||
private System.Windows.Forms.ToolStripButton tsbReload;
|
private System.Windows.Forms.ToolStripButton tsbReload;
|
||||||
private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch;
|
private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer;
|
private System.Windows.Forms.ToolStripMenuItem menuAddVlessServer;
|
||||||
private System.Windows.Forms.ToolStripMenuItem menuAddTrojanServer;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
v2rayHandler.V2rayStop();
|
v2rayHandler.V2rayStop();
|
||||||
|
|
||||||
HttpProxyHandle.CloseHttpAgent(config);
|
//HttpProxyHandle.CloseHttpAgent(config);
|
||||||
PACServerHandle.Stop();
|
HttpProxyHandle.UpdateSysProxy(config, true);
|
||||||
|
|
||||||
ConfigHandler.SaveConfig(ref config);
|
ConfigHandler.SaveConfig(ref config);
|
||||||
statistics?.SaveToFile();
|
statistics?.SaveToFile();
|
||||||
@@ -205,6 +205,8 @@ namespace v2rayN.Forms
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void RefreshServersView()
|
private void RefreshServersView()
|
||||||
{
|
{
|
||||||
|
int index = lvServers.SelectedIndices.Count > 0 ? lvServers.SelectedIndices[0] : -1;
|
||||||
|
|
||||||
lvServers.BeginUpdate();
|
lvServers.BeginUpdate();
|
||||||
lvServers.Items.Clear();
|
lvServers.Items.Clear();
|
||||||
|
|
||||||
@@ -222,10 +224,6 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
VmessItem item = config.vmess[k];
|
VmessItem item = config.vmess[k];
|
||||||
|
|
||||||
void _addSubItem(ListViewItem i, string name, string text)
|
|
||||||
{
|
|
||||||
i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text });
|
|
||||||
}
|
|
||||||
bool stats = statistics != null && statistics.Enable;
|
bool stats = statistics != null && statistics.Enable;
|
||||||
if (stats)
|
if (stats)
|
||||||
{
|
{
|
||||||
@@ -239,20 +237,20 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ListViewItem lvItem = new ListViewItem(def);
|
ListViewItem lvItem = new ListViewItem(def);
|
||||||
_addSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString());
|
Utils.AddSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString());
|
||||||
_addSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks);
|
Utils.AddSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks);
|
||||||
_addSubItem(lvItem, EServerColName.address.ToString(), item.address);
|
Utils.AddSubItem(lvItem, EServerColName.address.ToString(), item.address);
|
||||||
_addSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString());
|
Utils.AddSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString());
|
||||||
_addSubItem(lvItem, EServerColName.security.ToString(), item.security);
|
Utils.AddSubItem(lvItem, EServerColName.security.ToString(), item.security);
|
||||||
_addSubItem(lvItem, EServerColName.network.ToString(), item.network);
|
Utils.AddSubItem(lvItem, EServerColName.network.ToString(), item.network);
|
||||||
_addSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config));
|
Utils.AddSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config));
|
||||||
_addSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
|
Utils.AddSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult);
|
||||||
if (stats)
|
if (stats)
|
||||||
{
|
{
|
||||||
_addSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown);
|
Utils.AddSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown);
|
||||||
_addSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp);
|
Utils.AddSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp);
|
||||||
_addSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown);
|
Utils.AddSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown);
|
||||||
_addSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp);
|
Utils.AddSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k % 2 == 1) // 隔行着色
|
if (k % 2 == 1) // 隔行着色
|
||||||
@@ -270,15 +268,11 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
lvServers.EndUpdate();
|
lvServers.EndUpdate();
|
||||||
|
|
||||||
//if (lvServers.Items.Count > 0)
|
if (index >= 0 && index < lvServers.Items.Count && lvServers.Items.Count > 0)
|
||||||
//{
|
{
|
||||||
// if (lvServers.Items.Count <= testConfigIndex)
|
lvServers.Items[index].Selected = true;
|
||||||
// {
|
lvServers.EnsureVisible(index); // workaround
|
||||||
// testConfigIndex = lvServers.Items.Count - 1;
|
}
|
||||||
// }
|
|
||||||
// lvServers.Items[testConfigIndex].Selected = true;
|
|
||||||
// lvServers.Select();
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -343,29 +337,8 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void DisplayToolStatus()
|
private void DisplayToolStatus()
|
||||||
{
|
{
|
||||||
toolSslSocksPort.Text =
|
|
||||||
toolSslHttpPort.Text =
|
|
||||||
toolSslPacPort.Text = "OFF";
|
|
||||||
|
|
||||||
toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
|
toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}";
|
||||||
|
|
||||||
if (config.listenerType != (int)ListenerType.noHttpProxy)
|
|
||||||
{
|
|
||||||
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
|
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
|
||||||
if (config.listenerType == ListenerType.GlobalPac ||
|
|
||||||
config.listenerType == ListenerType.PacOpenAndClear ||
|
|
||||||
config.listenerType == ListenerType.PacOpenOnly)
|
|
||||||
{
|
|
||||||
if (PACServerHandle.IsRunning)
|
|
||||||
{
|
|
||||||
toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
toolSslPacPort.Text = UIRes.I18N("StartPacFailed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
|
notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon);
|
||||||
}
|
}
|
||||||
@@ -426,7 +399,7 @@ namespace v2rayN.Forms
|
|||||||
ConfigHandler.SaveConfig(ref config, false);
|
ConfigHandler.SaveConfig(ref config, false);
|
||||||
statistics?.SaveToFile();
|
statistics?.SaveToFile();
|
||||||
|
|
||||||
ChangePACButtonStatus(config.listenerType);
|
ChangePACButtonStatus(config.sysProxyType);
|
||||||
|
|
||||||
tsbReload.Enabled = true;
|
tsbReload.Enabled = true;
|
||||||
}
|
}
|
||||||
@@ -687,6 +660,15 @@ namespace v2rayN.Forms
|
|||||||
string result = httpProxyTest() + "ms";
|
string result = httpProxyTest() + "ms";
|
||||||
AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result));
|
AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void menuClearStatistic_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (statistics != null)
|
||||||
|
{
|
||||||
|
statistics.ClearAllServerStatistics();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int httpProxyTest()
|
private int httpProxyTest()
|
||||||
{
|
{
|
||||||
SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler);
|
SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler);
|
||||||
@@ -712,7 +694,7 @@ namespace v2rayN.Forms
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
foreach (int v in lvSelecteds)
|
foreach (int v in lvSelecteds)
|
||||||
{
|
{
|
||||||
string url = ConfigHandler.GetVmessQRCode(config, v);
|
string url = ShareHandler.GetShareUrl(config, v);
|
||||||
if (Utils.IsNullOrEmpty(url))
|
if (Utils.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -735,7 +717,7 @@ namespace v2rayN.Forms
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
foreach (int v in lvSelecteds)
|
foreach (int v in lvSelecteds)
|
||||||
{
|
{
|
||||||
string url = ConfigHandler.GetVmessQRCode(config, v);
|
string url = ShareHandler.GetShareUrl(config, v);
|
||||||
if (Utils.IsNullOrEmpty(url))
|
if (Utils.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -758,7 +740,17 @@ namespace v2rayN.Forms
|
|||||||
//刷新
|
//刷新
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
LoadV2ray();
|
LoadV2ray();
|
||||||
HttpProxyHandle.RestartHttpAgent(config, true);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tsbRoutingSetting_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
RoutingSettingForm fm = new RoutingSettingForm();
|
||||||
|
if (fm.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
//刷新
|
||||||
|
RefreshServers();
|
||||||
|
LoadV2ray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -847,7 +839,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
//刷新
|
//刷新
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
LoadV2ray();
|
//LoadV2ray();
|
||||||
UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
|
UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1020,10 +1012,11 @@ namespace v2rayN.Forms
|
|||||||
this.ShowInTaskbar = true;
|
this.ShowInTaskbar = true;
|
||||||
//this.notifyIcon1.Visible = false;
|
//this.notifyIcon1.Visible = false;
|
||||||
this.txtMsgBox.ScrollToCaret();
|
this.txtMsgBox.ScrollToCaret();
|
||||||
if (config.index >= 0 && config.index < lvServers.Items.Count)
|
//if (config.index >= 0 && config.index < lvServers.Items.Count)
|
||||||
{
|
//{
|
||||||
lvServers.EnsureVisible(config.index); // workaround
|
// lvServers.Items[config.index].Selected = true;
|
||||||
}
|
// lvServers.EnsureVisible(config.index); // workaround
|
||||||
|
//}
|
||||||
|
|
||||||
SetVisibleCore(true);
|
SetVisibleCore(true);
|
||||||
}
|
}
|
||||||
@@ -1136,7 +1129,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
//TODO: reload is not good.
|
//TODO: reload is not good.
|
||||||
RefreshServers();
|
RefreshServers();
|
||||||
LoadV2ray();
|
//LoadV2ray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void menuSelectAll_Click(object sender, EventArgs e)
|
private void menuSelectAll_Click(object sender, EventArgs e)
|
||||||
@@ -1150,56 +1143,36 @@ namespace v2rayN.Forms
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 系统代理相关
|
#region 系统代理相关
|
||||||
|
private void menuKeepClear_Click(object sender, EventArgs e)
|
||||||
private void menuCopyPACUrl_Click(object sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
Utils.SetClipboardData(HttpProxyHandle.GetPacUrl());
|
SetListenerType(ESysProxyType.ForcedClear);
|
||||||
}
|
|
||||||
|
|
||||||
private void menuNotEnabledHttp_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SetListenerType(ListenerType.noHttpProxy);
|
|
||||||
}
|
}
|
||||||
private void menuGlobal_Click(object sender, EventArgs e)
|
private void menuGlobal_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(ListenerType.GlobalHttp);
|
SetListenerType(ESysProxyType.ForcedChange);
|
||||||
}
|
|
||||||
private void menuGlobalPAC_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SetListenerType(ListenerType.GlobalPac);
|
|
||||||
}
|
|
||||||
private void menuKeep_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SetListenerType(ListenerType.HttpOpenAndClear);
|
|
||||||
}
|
|
||||||
private void menuKeepPAC_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SetListenerType(ListenerType.PacOpenAndClear);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void menuKeepNothing_Click(object sender, EventArgs e)
|
private void menuKeepNothing_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetListenerType(ListenerType.HttpOpenOnly);
|
SetListenerType(ESysProxyType.Unchanged);
|
||||||
}
|
}
|
||||||
private void menuKeepPACNothing_Click(object sender, EventArgs e)
|
private void SetListenerType(ESysProxyType type)
|
||||||
{
|
{
|
||||||
SetListenerType(ListenerType.PacOpenOnly);
|
config.sysProxyType = type;
|
||||||
}
|
|
||||||
private void SetListenerType(ListenerType type)
|
|
||||||
{
|
|
||||||
config.listenerType = type;
|
|
||||||
ChangePACButtonStatus(type);
|
ChangePACButtonStatus(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChangePACButtonStatus(ListenerType type)
|
private void ChangePACButtonStatus(ESysProxyType type)
|
||||||
{
|
{
|
||||||
if (type != ListenerType.noHttpProxy)
|
HttpProxyHandle.UpdateSysProxy(config, false);
|
||||||
{
|
//if (type != ListenerType.noHttpProxy)
|
||||||
HttpProxyHandle.RestartHttpAgent(config, false);
|
//{
|
||||||
}
|
// HttpProxyHandle.RestartHttpAgent(config, false);
|
||||||
else
|
//}
|
||||||
{
|
//else
|
||||||
HttpProxyHandle.CloseHttpAgent(config);
|
//{
|
||||||
}
|
// HttpProxyHandle.CloseHttpAgent(config);
|
||||||
|
//}
|
||||||
|
|
||||||
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
|
for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++)
|
||||||
{
|
{
|
||||||
@@ -1301,6 +1274,16 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
|
private void tsbCheckUpdateCore_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
CheckUpdateCore("v2fly");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tsbCheckUpdateXrayCore_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
CheckUpdateCore("xray");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckUpdateCore(string type)
|
||||||
{
|
{
|
||||||
DownloadHandle downloadHandle = null;
|
DownloadHandle downloadHandle = null;
|
||||||
if (downloadHandle == null)
|
if (downloadHandle == null)
|
||||||
@@ -1336,7 +1319,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
string fileName = downloadHandle.DownloadFileName;
|
string fileName = downloadHandle.DownloadFileName;
|
||||||
fileName = Utils.GetPath(fileName);
|
fileName = Utils.GetPath(fileName);
|
||||||
FileManager.ZipExtractToFile(fileName);
|
FileManager.ZipExtractToFile(fileName, config.ignoreGeoUpdateCore ? "geo" : "");
|
||||||
|
|
||||||
AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
|
AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore"));
|
||||||
|
|
||||||
@@ -1362,53 +1345,7 @@ namespace v2rayN.Forms
|
|||||||
}
|
}
|
||||||
|
|
||||||
AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore"));
|
AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore"));
|
||||||
downloadHandle.CheckUpdateAsync("Core");
|
downloadHandle.CheckUpdateAsync(type);
|
||||||
}
|
|
||||||
|
|
||||||
private void tsbCheckUpdatePACList_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
DownloadHandle pacListHandle = null;
|
|
||||||
if (pacListHandle == null)
|
|
||||||
{
|
|
||||||
pacListHandle = new DownloadHandle();
|
|
||||||
pacListHandle.UpdateCompleted += (sender2, args) =>
|
|
||||||
{
|
|
||||||
if (args.Success)
|
|
||||||
{
|
|
||||||
string result = args.Msg;
|
|
||||||
if (Utils.IsNullOrEmpty(result))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pacListHandle.GenPacFile(result);
|
|
||||||
|
|
||||||
AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AppendText(false, UIRes.I18N("MsgPACUpdateFailed"));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
pacListHandle.Error += (sender2, args) =>
|
|
||||||
{
|
|
||||||
AppendText(true, args.GetException().Message);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
AppendText(false, UIRes.I18N("MsgStartUpdatingPAC"));
|
|
||||||
pacListHandle.WebDownloadString(config.urlGFWList);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tsbCheckClearPACList_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8);
|
|
||||||
AppendText(false, UIRes.I18N("MsgSimplifyPAC"));
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog(ex.Message, ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -1570,8 +1507,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -259,6 +259,12 @@
|
|||||||
<data name="tsbTestMe.Text" xml:space="preserve">
|
<data name="tsbTestMe.Text" xml:space="preserve">
|
||||||
<value>测试当前服务状态</value>
|
<value>测试当前服务状态</value>
|
||||||
</data>
|
</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">
|
<data name="toolStripSeparator6.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>297, 6</value>
|
<value>297, 6</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -286,6 +292,12 @@
|
|||||||
<data name="menuExport2SubContent.Text" xml:space="preserve">
|
<data name="menuExport2SubContent.Text" xml:space="preserve">
|
||||||
<value>批量导出订阅内容至剪贴板(多选)</value>
|
<value>批量导出订阅内容至剪贴板(多选)</value>
|
||||||
</data>
|
</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">
|
<data name="cmsLv.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>301, 600</value>
|
<value>301, 600</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -306,62 +318,29 @@
|
|||||||
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw==
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbServer.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuKeepClear.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>73, 53</value>
|
<value>228, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbServer.Text" xml:space="preserve">
|
<data name="menuKeepClear.Text" xml:space="preserve">
|
||||||
<value> 服务器 </value>
|
<value>清除系统代理</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>196, 164</value>
|
<value>228, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuGlobal.Text" xml:space="preserve">
|
||||||
|
<value>自动配置系统代理(全局模式)</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>228, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuKeepNothing.Text" xml:space="preserve">
|
||||||
|
<value>不改变系统代理</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuSysAgentMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>195, 22</value>
|
<value>195, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
<data name="menuSysAgentMode.Text" xml:space="preserve">
|
||||||
<value>Http代理</value>
|
<value>系统代理</value>
|
||||||
</data>
|
|
||||||
<data name="menuNotEnabledHttp.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuNotEnabledHttp.Text" xml:space="preserve">
|
|
||||||
<value>关闭Http代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuGlobal.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuGlobal.Text" xml:space="preserve">
|
|
||||||
<value>开启Http代理,并自动配置系统代理(全局模式)</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuGlobalPAC.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuGlobalPAC.Text" xml:space="preserve">
|
|
||||||
<value>开启PAC,并自动配置系统代理(PAC模式)</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeep.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeep.Text" xml:space="preserve">
|
|
||||||
<value>仅开启Http代理,并清除系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepPAC.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepPAC.Text" xml:space="preserve">
|
|
||||||
<value>仅开启PAC,并清除系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepNothing.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepNothing.Text" xml:space="preserve">
|
|
||||||
<value>仅开启Http代理,不改变系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepPACNothing.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>316, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuKeepPACNothing.Text" xml:space="preserve">
|
|
||||||
<value>仅开启PAC,不改变系统代理</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuServers.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>195, 22</value>
|
<value>195, 22</value>
|
||||||
@@ -381,12 +360,6 @@
|
|||||||
<data name="menuScanScreen2.Text" xml:space="preserve">
|
<data name="menuScanScreen2.Text" xml:space="preserve">
|
||||||
<value>扫描屏幕上的二维码</value>
|
<value>扫描屏幕上的二维码</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="menuCopyPACUrl.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>195, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuCopyPACUrl.Text" xml:space="preserve">
|
|
||||||
<value>复制本地PAC网址</value>
|
|
||||||
</data>
|
|
||||||
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="menuUpdateSubscriptions.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>195, 22</value>
|
<value>195, 22</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -402,20 +375,17 @@
|
|||||||
<data name="menuExit.Text" xml:space="preserve">
|
<data name="menuExit.Text" xml:space="preserve">
|
||||||
<value>退出</value>
|
<value>退出</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="cmsMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>196, 142</value>
|
||||||
|
</data>
|
||||||
<data name="groupBox1.Text" xml:space="preserve">
|
<data name="groupBox1.Text" xml:space="preserve">
|
||||||
<value>服务器列表</value>
|
<value>服务器列表</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox2.Text" xml:space="preserve">
|
|
||||||
<value>信息</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
<data name="toolSslServerSpeed.Text" xml:space="preserve">
|
||||||
<value>网速显示未启用</value>
|
<value>网速显示未启用</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSub.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="groupBox2.Text" xml:space="preserve">
|
||||||
<value>61, 53</value>
|
<value>信息</value>
|
||||||
</data>
|
|
||||||
<data name="tsbSub.Text" xml:space="preserve">
|
|
||||||
<value> 订阅 </value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbSubSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>124, 22</value>
|
<value>124, 22</value>
|
||||||
@@ -429,6 +399,12 @@
|
|||||||
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
<data name="tsbSubUpdate.Text" xml:space="preserve">
|
||||||
<value>更新订阅</value>
|
<value>更新订阅</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tsbSub.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>61, 53</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbSub.Text" xml:space="preserve">
|
||||||
|
<value> 订阅 </value>
|
||||||
|
</data>
|
||||||
<data name="tsbQRCodeSwitch.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbQRCodeSwitch.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>52, 53</value>
|
<value>52, 53</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -436,10 +412,22 @@
|
|||||||
<value> 分享 </value>
|
<value> 分享 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbOptionSetting.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbOptionSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>76, 53</value>
|
<value>124, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbOptionSetting.Text" xml:space="preserve">
|
<data name="tsbOptionSetting.Text" xml:space="preserve">
|
||||||
<value> 参数设置 </value>
|
<value>参数设置</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbRoutingSetting.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>124, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbRoutingSetting.Text" xml:space="preserve">
|
||||||
|
<value>路由设置</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>
|
||||||
<data name="tsbReload.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="tsbReload.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
@@ -458,38 +446,35 @@
|
|||||||
<data name="tsbReload.Text" xml:space="preserve">
|
<data name="tsbReload.Text" xml:space="preserve">
|
||||||
<value> 重启服务 </value>
|
<value> 重启服务 </value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>135, 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>135, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbCheckUpdateCore.Text" xml:space="preserve">
|
||||||
|
<value>v2fly-Core</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbCheckUpdateXrayCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>135, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsbCheckUpdateXrayCore.Text" xml:space="preserve">
|
||||||
|
<value>Xray-Core</value>
|
||||||
|
</data>
|
||||||
<data name="tsbCheckUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbCheckUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>85, 53</value>
|
<value>85, 53</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdate.Text" xml:space="preserve">
|
<data name="tsbCheckUpdate.Text" xml:space="preserve">
|
||||||
<value> 检查更新 </value>
|
<value> 检查更新 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdateN.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbAbout.Text" xml:space="preserve">
|
||||||
<value>223, 22</value>
|
<value>v2rayN 项目</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbCheckUpdateN.Text" xml:space="preserve">
|
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
|
||||||
<value>v2rayN</value>
|
<value>V2Ray 官网</value>
|
||||||
</data>
|
|
||||||
<data name="tsbCheckUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>223, 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>223, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbCheckUpdatePACList.Text" xml:space="preserve">
|
|
||||||
<value>PAC</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripSeparator13.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>220, 6</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbCheckClearPACList.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>223, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbCheckClearPACList.Text" xml:space="preserve">
|
|
||||||
<value>简化PAC (请设置Core路由)</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbHelp.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbHelp.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>69, 53</value>
|
<value>69, 53</value>
|
||||||
@@ -497,12 +482,6 @@
|
|||||||
<data name="tsbHelp.Text" xml:space="preserve">
|
<data name="tsbHelp.Text" xml:space="preserve">
|
||||||
<value> 帮助 </value>
|
<value> 帮助 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsbAbout.Text" xml:space="preserve">
|
|
||||||
<value>v2rayN 项目</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbV2rayWebsite.Text" xml:space="preserve">
|
|
||||||
<value>V2Ray 官网</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsbPromotion.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsbPromotion.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>68, 53</value>
|
<value>68, 53</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
328
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
328
v2rayN/v2rayN/Forms/OptionSettingForm.Designer.cs
generated
@@ -34,12 +34,8 @@
|
|||||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
|
this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox();
|
||||||
this.label16 = new System.Windows.Forms.Label();
|
|
||||||
this.cmblistenerType = new System.Windows.Forms.ComboBox();
|
|
||||||
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
|
this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox();
|
||||||
this.chksniffingEnabled = 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.chkmuxEnabled = new System.Windows.Forms.CheckBox();
|
||||||
this.chkAllowIn2 = new System.Windows.Forms.CheckBox();
|
this.chkAllowIn2 = new System.Windows.Forms.CheckBox();
|
||||||
this.chkudpEnabled2 = new System.Windows.Forms.CheckBox();
|
this.chkudpEnabled2 = new System.Windows.Forms.CheckBox();
|
||||||
@@ -55,21 +51,9 @@
|
|||||||
this.txtlocalPort = new System.Windows.Forms.TextBox();
|
this.txtlocalPort = new System.Windows.Forms.TextBox();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
this.linkDnsObjectDoc = new System.Windows.Forms.LinkLabel();
|
||||||
this.tabControl2 = new System.Windows.Forms.TabControl();
|
this.txtremoteDNS = new System.Windows.Forms.TextBox();
|
||||||
this.tabPage3 = new System.Windows.Forms.TabPage();
|
this.label14 = new System.Windows.Forms.Label();
|
||||||
this.txtUseragent = new System.Windows.Forms.TextBox();
|
|
||||||
this.tabPage4 = new System.Windows.Forms.TabPage();
|
|
||||||
this.txtUserdirect = new System.Windows.Forms.TextBox();
|
|
||||||
this.tabPage5 = new System.Windows.Forms.TabPage();
|
|
||||||
this.txtUserblock = new System.Windows.Forms.TextBox();
|
|
||||||
this.tabPage8 = new System.Windows.Forms.TabPage();
|
|
||||||
this.cmbroutingMode = new System.Windows.Forms.ComboBox();
|
|
||||||
this.panel3 = new System.Windows.Forms.Panel();
|
|
||||||
this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
|
|
||||||
this.btnSetDefRountingRule = new System.Windows.Forms.Button();
|
|
||||||
this.labRoutingTips = new System.Windows.Forms.Label();
|
|
||||||
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
|
|
||||||
this.tabPage6 = new System.Windows.Forms.TabPage();
|
this.tabPage6 = new System.Windows.Forms.TabPage();
|
||||||
this.chkKcpcongestion = new System.Windows.Forms.CheckBox();
|
this.chkKcpcongestion = new System.Windows.Forms.CheckBox();
|
||||||
this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox();
|
this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox();
|
||||||
@@ -85,18 +69,15 @@
|
|||||||
this.txtKcpmtu = new System.Windows.Forms.TextBox();
|
this.txtKcpmtu = new System.Windows.Forms.TextBox();
|
||||||
this.label6 = new System.Windows.Forms.Label();
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
this.tabPage7 = new System.Windows.Forms.TabPage();
|
this.tabPage7 = new System.Windows.Forms.TabPage();
|
||||||
|
this.chkIgnoreGeoUpdateCore = new System.Windows.Forms.CheckBox();
|
||||||
|
this.cmbCoreType = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox();
|
this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox();
|
||||||
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
this.cbFreshrate = new System.Windows.Forms.ComboBox();
|
||||||
this.lbFreshrate = new System.Windows.Forms.Label();
|
this.lbFreshrate = new System.Windows.Forms.Label();
|
||||||
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
this.chkEnableStatistics = new System.Windows.Forms.CheckBox();
|
||||||
this.chkAllowLANConn = new System.Windows.Forms.CheckBox();
|
this.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.chkAutoRun = new System.Windows.Forms.CheckBox();
|
||||||
this.tabPage9 = new System.Windows.Forms.TabPage();
|
|
||||||
this.txtuserPacRule = new System.Windows.Forms.TextBox();
|
|
||||||
this.panel4 = new System.Windows.Forms.Panel();
|
|
||||||
this.label4 = new System.Windows.Forms.Label();
|
|
||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
this.btnOK = new System.Windows.Forms.Button();
|
this.btnOK = new System.Windows.Forms.Button();
|
||||||
this.panel1 = new System.Windows.Forms.Panel();
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
@@ -104,56 +85,41 @@
|
|||||||
this.tabPage1.SuspendLayout();
|
this.tabPage1.SuspendLayout();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
this.tabPage2.SuspendLayout();
|
this.tabPage2.SuspendLayout();
|
||||||
this.groupBox2.SuspendLayout();
|
|
||||||
this.tabControl2.SuspendLayout();
|
|
||||||
this.tabPage3.SuspendLayout();
|
|
||||||
this.tabPage4.SuspendLayout();
|
|
||||||
this.tabPage5.SuspendLayout();
|
|
||||||
this.tabPage8.SuspendLayout();
|
|
||||||
this.panel3.SuspendLayout();
|
|
||||||
this.tabPage6.SuspendLayout();
|
this.tabPage6.SuspendLayout();
|
||||||
this.tabPage7.SuspendLayout();
|
this.tabPage7.SuspendLayout();
|
||||||
this.tabPage9.SuspendLayout();
|
|
||||||
this.panel4.SuspendLayout();
|
|
||||||
this.panel2.SuspendLayout();
|
this.panel2.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// btnClose
|
// btnClose
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.btnClose, "btnClose");
|
|
||||||
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
resources.ApplyResources(this.btnClose, "btnClose");
|
||||||
this.btnClose.Name = "btnClose";
|
this.btnClose.Name = "btnClose";
|
||||||
this.btnClose.UseVisualStyleBackColor = true;
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
//
|
//
|
||||||
// tabControl1
|
// tabControl1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabControl1, "tabControl1");
|
|
||||||
this.tabControl1.Controls.Add(this.tabPage1);
|
this.tabControl1.Controls.Add(this.tabPage1);
|
||||||
this.tabControl1.Controls.Add(this.tabPage2);
|
this.tabControl1.Controls.Add(this.tabPage2);
|
||||||
this.tabControl1.Controls.Add(this.tabPage6);
|
this.tabControl1.Controls.Add(this.tabPage6);
|
||||||
this.tabControl1.Controls.Add(this.tabPage7);
|
this.tabControl1.Controls.Add(this.tabPage7);
|
||||||
this.tabControl1.Controls.Add(this.tabPage9);
|
resources.ApplyResources(this.tabControl1, "tabControl1");
|
||||||
this.tabControl1.Name = "tabControl1";
|
this.tabControl1.Name = "tabControl1";
|
||||||
this.tabControl1.SelectedIndex = 0;
|
this.tabControl1.SelectedIndex = 0;
|
||||||
//
|
//
|
||||||
// tabPage1
|
// tabPage1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabPage1, "tabPage1");
|
|
||||||
this.tabPage1.Controls.Add(this.groupBox1);
|
this.tabPage1.Controls.Add(this.groupBox1);
|
||||||
|
resources.ApplyResources(this.tabPage1, "tabPage1");
|
||||||
this.tabPage1.Name = "tabPage1";
|
this.tabPage1.Name = "tabPage1";
|
||||||
this.tabPage1.UseVisualStyleBackColor = true;
|
this.tabPage1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox1, "groupBox1");
|
|
||||||
this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
|
this.groupBox1.Controls.Add(this.chkdefAllowInsecure);
|
||||||
this.groupBox1.Controls.Add(this.label16);
|
|
||||||
this.groupBox1.Controls.Add(this.cmblistenerType);
|
|
||||||
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
|
this.groupBox1.Controls.Add(this.chksniffingEnabled2);
|
||||||
this.groupBox1.Controls.Add(this.chksniffingEnabled);
|
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.chkmuxEnabled);
|
||||||
this.groupBox1.Controls.Add(this.chkAllowIn2);
|
this.groupBox1.Controls.Add(this.chkAllowIn2);
|
||||||
this.groupBox1.Controls.Add(this.chkudpEnabled2);
|
this.groupBox1.Controls.Add(this.chkudpEnabled2);
|
||||||
@@ -168,6 +134,7 @@
|
|||||||
this.groupBox1.Controls.Add(this.label5);
|
this.groupBox1.Controls.Add(this.label5);
|
||||||
this.groupBox1.Controls.Add(this.txtlocalPort);
|
this.groupBox1.Controls.Add(this.txtlocalPort);
|
||||||
this.groupBox1.Controls.Add(this.label2);
|
this.groupBox1.Controls.Add(this.label2);
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
@@ -177,26 +144,6 @@
|
|||||||
this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
|
this.chkdefAllowInsecure.Name = "chkdefAllowInsecure";
|
||||||
this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
|
this.chkdefAllowInsecure.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label16
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.label16, "label16");
|
|
||||||
this.label16.Name = "label16";
|
|
||||||
//
|
|
||||||
// cmblistenerType
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.cmblistenerType, "cmblistenerType");
|
|
||||||
this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.cmblistenerType.FormattingEnabled = true;
|
|
||||||
this.cmblistenerType.Items.AddRange(new object[] {
|
|
||||||
resources.GetString("cmblistenerType.Items"),
|
|
||||||
resources.GetString("cmblistenerType.Items1"),
|
|
||||||
resources.GetString("cmblistenerType.Items2"),
|
|
||||||
resources.GetString("cmblistenerType.Items3"),
|
|
||||||
resources.GetString("cmblistenerType.Items4"),
|
|
||||||
resources.GetString("cmblistenerType.Items5"),
|
|
||||||
resources.GetString("cmblistenerType.Items6")});
|
|
||||||
this.cmblistenerType.Name = "cmblistenerType";
|
|
||||||
//
|
|
||||||
// chksniffingEnabled2
|
// chksniffingEnabled2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2");
|
resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2");
|
||||||
@@ -209,16 +156,6 @@
|
|||||||
this.chksniffingEnabled.Name = "chksniffingEnabled";
|
this.chksniffingEnabled.Name = "chksniffingEnabled";
|
||||||
this.chksniffingEnabled.UseVisualStyleBackColor = true;
|
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
|
// chkmuxEnabled
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled");
|
resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled");
|
||||||
@@ -240,12 +177,12 @@
|
|||||||
//
|
//
|
||||||
// cmbprotocol2
|
// cmbprotocol2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
|
|
||||||
this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbprotocol2.FormattingEnabled = true;
|
this.cmbprotocol2.FormattingEnabled = true;
|
||||||
this.cmbprotocol2.Items.AddRange(new object[] {
|
this.cmbprotocol2.Items.AddRange(new object[] {
|
||||||
resources.GetString("cmbprotocol2.Items"),
|
resources.GetString("cmbprotocol2.Items"),
|
||||||
resources.GetString("cmbprotocol2.Items1")});
|
resources.GetString("cmbprotocol2.Items1")});
|
||||||
|
resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2");
|
||||||
this.cmbprotocol2.Name = "cmbprotocol2";
|
this.cmbprotocol2.Name = "cmbprotocol2";
|
||||||
//
|
//
|
||||||
// label3
|
// label3
|
||||||
@@ -260,8 +197,8 @@
|
|||||||
//
|
//
|
||||||
// cmbprotocol
|
// cmbprotocol
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
|
|
||||||
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
resources.ApplyResources(this.cmbprotocol, "cmbprotocol");
|
||||||
this.cmbprotocol.FormattingEnabled = true;
|
this.cmbprotocol.FormattingEnabled = true;
|
||||||
this.cmbprotocol.Items.AddRange(new object[] {
|
this.cmbprotocol.Items.AddRange(new object[] {
|
||||||
resources.GetString("cmbprotocol.Items"),
|
resources.GetString("cmbprotocol.Items"),
|
||||||
@@ -287,7 +224,6 @@
|
|||||||
//
|
//
|
||||||
// cmbloglevel
|
// cmbloglevel
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
|
||||||
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cmbloglevel.FormattingEnabled = true;
|
this.cmbloglevel.FormattingEnabled = true;
|
||||||
this.cmbloglevel.Items.AddRange(new object[] {
|
this.cmbloglevel.Items.AddRange(new object[] {
|
||||||
@@ -296,6 +232,7 @@
|
|||||||
resources.GetString("cmbloglevel.Items2"),
|
resources.GetString("cmbloglevel.Items2"),
|
||||||
resources.GetString("cmbloglevel.Items3"),
|
resources.GetString("cmbloglevel.Items3"),
|
||||||
resources.GetString("cmbloglevel.Items4")});
|
resources.GetString("cmbloglevel.Items4")});
|
||||||
|
resources.ApplyResources(this.cmbloglevel, "cmbloglevel");
|
||||||
this.cmbloglevel.Name = "cmbloglevel";
|
this.cmbloglevel.Name = "cmbloglevel";
|
||||||
//
|
//
|
||||||
// label5
|
// label5
|
||||||
@@ -315,127 +252,32 @@
|
|||||||
//
|
//
|
||||||
// tabPage2
|
// tabPage2
|
||||||
//
|
//
|
||||||
|
this.tabPage2.Controls.Add(this.linkDnsObjectDoc);
|
||||||
|
this.tabPage2.Controls.Add(this.txtremoteDNS);
|
||||||
|
this.tabPage2.Controls.Add(this.label14);
|
||||||
resources.ApplyResources(this.tabPage2, "tabPage2");
|
resources.ApplyResources(this.tabPage2, "tabPage2");
|
||||||
this.tabPage2.Controls.Add(this.groupBox2);
|
|
||||||
this.tabPage2.Name = "tabPage2";
|
this.tabPage2.Name = "tabPage2";
|
||||||
this.tabPage2.UseVisualStyleBackColor = true;
|
this.tabPage2.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// groupBox2
|
// linkDnsObjectDoc
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
resources.ApplyResources(this.linkDnsObjectDoc, "linkDnsObjectDoc");
|
||||||
this.groupBox2.Controls.Add(this.tabControl2);
|
this.linkDnsObjectDoc.Name = "linkDnsObjectDoc";
|
||||||
this.groupBox2.Controls.Add(this.panel3);
|
this.linkDnsObjectDoc.TabStop = true;
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.linkDnsObjectDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDnsObjectDoc_LinkClicked);
|
||||||
this.groupBox2.TabStop = false;
|
|
||||||
//
|
//
|
||||||
// tabControl2
|
// txtremoteDNS
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabControl2, "tabControl2");
|
resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS");
|
||||||
this.tabControl2.Controls.Add(this.tabPage3);
|
this.txtremoteDNS.Name = "txtremoteDNS";
|
||||||
this.tabControl2.Controls.Add(this.tabPage4);
|
|
||||||
this.tabControl2.Controls.Add(this.tabPage5);
|
|
||||||
this.tabControl2.Controls.Add(this.tabPage8);
|
|
||||||
this.tabControl2.Name = "tabControl2";
|
|
||||||
this.tabControl2.SelectedIndex = 0;
|
|
||||||
//
|
//
|
||||||
// tabPage3
|
// label14
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabPage3, "tabPage3");
|
resources.ApplyResources(this.label14, "label14");
|
||||||
this.tabPage3.Controls.Add(this.txtUseragent);
|
this.label14.Name = "label14";
|
||||||
this.tabPage3.Name = "tabPage3";
|
|
||||||
this.tabPage3.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// txtUseragent
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txtUseragent, "txtUseragent");
|
|
||||||
this.txtUseragent.Name = "txtUseragent";
|
|
||||||
//
|
|
||||||
// tabPage4
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tabPage4, "tabPage4");
|
|
||||||
this.tabPage4.Controls.Add(this.txtUserdirect);
|
|
||||||
this.tabPage4.Name = "tabPage4";
|
|
||||||
this.tabPage4.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// txtUserdirect
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txtUserdirect, "txtUserdirect");
|
|
||||||
this.txtUserdirect.Name = "txtUserdirect";
|
|
||||||
//
|
|
||||||
// tabPage5
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tabPage5, "tabPage5");
|
|
||||||
this.tabPage5.Controls.Add(this.txtUserblock);
|
|
||||||
this.tabPage5.Name = "tabPage5";
|
|
||||||
this.tabPage5.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// txtUserblock
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txtUserblock, "txtUserblock");
|
|
||||||
this.txtUserblock.Name = "txtUserblock";
|
|
||||||
//
|
|
||||||
// tabPage8
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tabPage8, "tabPage8");
|
|
||||||
this.tabPage8.Controls.Add(this.cmbroutingMode);
|
|
||||||
this.tabPage8.Name = "tabPage8";
|
|
||||||
this.tabPage8.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// cmbroutingMode
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.cmbroutingMode, "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")});
|
|
||||||
this.cmbroutingMode.Name = "cmbroutingMode";
|
|
||||||
//
|
|
||||||
// panel3
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.panel3, "panel3");
|
|
||||||
this.panel3.Controls.Add(this.linkLabelRoutingDoc);
|
|
||||||
this.panel3.Controls.Add(this.btnSetDefRountingRule);
|
|
||||||
this.panel3.Controls.Add(this.labRoutingTips);
|
|
||||||
this.panel3.Controls.Add(this.cmbdomainStrategy);
|
|
||||||
this.panel3.Name = "panel3";
|
|
||||||
//
|
|
||||||
// linkLabelRoutingDoc
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc");
|
|
||||||
this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc";
|
|
||||||
this.linkLabelRoutingDoc.TabStop = true;
|
|
||||||
this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked);
|
|
||||||
//
|
|
||||||
// btnSetDefRountingRule
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule");
|
|
||||||
this.btnSetDefRountingRule.Name = "btnSetDefRountingRule";
|
|
||||||
this.btnSetDefRountingRule.UseVisualStyleBackColor = true;
|
|
||||||
this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click);
|
|
||||||
//
|
|
||||||
// labRoutingTips
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
|
||||||
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
|
||||||
this.labRoutingTips.Name = "labRoutingTips";
|
|
||||||
//
|
|
||||||
// cmbdomainStrategy
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.cmbdomainStrategy, "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")});
|
|
||||||
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
|
|
||||||
//
|
//
|
||||||
// tabPage6
|
// tabPage6
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabPage6, "tabPage6");
|
|
||||||
this.tabPage6.Controls.Add(this.chkKcpcongestion);
|
this.tabPage6.Controls.Add(this.chkKcpcongestion);
|
||||||
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
|
this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize);
|
||||||
this.tabPage6.Controls.Add(this.label10);
|
this.tabPage6.Controls.Add(this.label10);
|
||||||
@@ -449,6 +291,7 @@
|
|||||||
this.tabPage6.Controls.Add(this.label7);
|
this.tabPage6.Controls.Add(this.label7);
|
||||||
this.tabPage6.Controls.Add(this.txtKcpmtu);
|
this.tabPage6.Controls.Add(this.txtKcpmtu);
|
||||||
this.tabPage6.Controls.Add(this.label6);
|
this.tabPage6.Controls.Add(this.label6);
|
||||||
|
resources.ApplyResources(this.tabPage6, "tabPage6");
|
||||||
this.tabPage6.Name = "tabPage6";
|
this.tabPage6.Name = "tabPage6";
|
||||||
this.tabPage6.UseVisualStyleBackColor = true;
|
this.tabPage6.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
@@ -520,18 +363,40 @@
|
|||||||
//
|
//
|
||||||
// tabPage7
|
// tabPage7
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.tabPage7, "tabPage7");
|
this.tabPage7.Controls.Add(this.chkIgnoreGeoUpdateCore);
|
||||||
|
this.tabPage7.Controls.Add(this.cmbCoreType);
|
||||||
|
this.tabPage7.Controls.Add(this.label4);
|
||||||
this.tabPage7.Controls.Add(this.chkKeepOlderDedupl);
|
this.tabPage7.Controls.Add(this.chkKeepOlderDedupl);
|
||||||
this.tabPage7.Controls.Add(this.cbFreshrate);
|
this.tabPage7.Controls.Add(this.cbFreshrate);
|
||||||
this.tabPage7.Controls.Add(this.lbFreshrate);
|
this.tabPage7.Controls.Add(this.lbFreshrate);
|
||||||
this.tabPage7.Controls.Add(this.chkEnableStatistics);
|
this.tabPage7.Controls.Add(this.chkEnableStatistics);
|
||||||
this.tabPage7.Controls.Add(this.chkAllowLANConn);
|
this.tabPage7.Controls.Add(this.chkAllowLANConn);
|
||||||
this.tabPage7.Controls.Add(this.txturlGFWList);
|
|
||||||
this.tabPage7.Controls.Add(this.label13);
|
|
||||||
this.tabPage7.Controls.Add(this.chkAutoRun);
|
this.tabPage7.Controls.Add(this.chkAutoRun);
|
||||||
|
resources.ApplyResources(this.tabPage7, "tabPage7");
|
||||||
this.tabPage7.Name = "tabPage7";
|
this.tabPage7.Name = "tabPage7";
|
||||||
this.tabPage7.UseVisualStyleBackColor = true;
|
this.tabPage7.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
|
// chkIgnoreGeoUpdateCore
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.chkIgnoreGeoUpdateCore, "chkIgnoreGeoUpdateCore");
|
||||||
|
this.chkIgnoreGeoUpdateCore.Name = "chkIgnoreGeoUpdateCore";
|
||||||
|
this.chkIgnoreGeoUpdateCore.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// cmbCoreType
|
||||||
|
//
|
||||||
|
this.cmbCoreType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.cmbCoreType.FormattingEnabled = true;
|
||||||
|
this.cmbCoreType.Items.AddRange(new object[] {
|
||||||
|
resources.GetString("cmbCoreType.Items"),
|
||||||
|
resources.GetString("cmbCoreType.Items1")});
|
||||||
|
resources.ApplyResources(this.cmbCoreType, "cmbCoreType");
|
||||||
|
this.cmbCoreType.Name = "cmbCoreType";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label4, "label4");
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
//
|
||||||
// chkKeepOlderDedupl
|
// chkKeepOlderDedupl
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl");
|
resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl");
|
||||||
@@ -540,9 +405,9 @@
|
|||||||
//
|
//
|
||||||
// cbFreshrate
|
// cbFreshrate
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
|
||||||
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.cbFreshrate.FormattingEnabled = true;
|
this.cbFreshrate.FormattingEnabled = true;
|
||||||
|
resources.ApplyResources(this.cbFreshrate, "cbFreshrate");
|
||||||
this.cbFreshrate.Name = "cbFreshrate";
|
this.cbFreshrate.Name = "cbFreshrate";
|
||||||
//
|
//
|
||||||
// lbFreshrate
|
// lbFreshrate
|
||||||
@@ -562,52 +427,17 @@
|
|||||||
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
this.chkAllowLANConn.Name = "chkAllowLANConn";
|
||||||
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
this.chkAllowLANConn.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// txturlGFWList
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txturlGFWList, "txturlGFWList");
|
|
||||||
this.txturlGFWList.Name = "txturlGFWList";
|
|
||||||
//
|
|
||||||
// label13
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.label13, "label13");
|
|
||||||
this.label13.Name = "label13";
|
|
||||||
//
|
|
||||||
// chkAutoRun
|
// chkAutoRun
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
resources.ApplyResources(this.chkAutoRun, "chkAutoRun");
|
||||||
this.chkAutoRun.Name = "chkAutoRun";
|
this.chkAutoRun.Name = "chkAutoRun";
|
||||||
this.chkAutoRun.UseVisualStyleBackColor = true;
|
this.chkAutoRun.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// tabPage9
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.tabPage9, "tabPage9");
|
|
||||||
this.tabPage9.Controls.Add(this.txtuserPacRule);
|
|
||||||
this.tabPage9.Controls.Add(this.panel4);
|
|
||||||
this.tabPage9.Name = "tabPage9";
|
|
||||||
this.tabPage9.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// txtuserPacRule
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule");
|
|
||||||
this.txtuserPacRule.Name = "txtuserPacRule";
|
|
||||||
//
|
|
||||||
// panel4
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.panel4, "panel4");
|
|
||||||
this.panel4.Controls.Add(this.label4);
|
|
||||||
this.panel4.Name = "panel4";
|
|
||||||
//
|
|
||||||
// label4
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.label4, "label4");
|
|
||||||
this.label4.ForeColor = System.Drawing.Color.Brown;
|
|
||||||
this.label4.Name = "label4";
|
|
||||||
//
|
|
||||||
// panel2
|
// panel2
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.panel2, "panel2");
|
|
||||||
this.panel2.Controls.Add(this.btnClose);
|
this.panel2.Controls.Add(this.btnClose);
|
||||||
this.panel2.Controls.Add(this.btnOK);
|
this.panel2.Controls.Add(this.btnOK);
|
||||||
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
//
|
//
|
||||||
// btnOK
|
// btnOK
|
||||||
@@ -638,24 +468,11 @@
|
|||||||
this.groupBox1.ResumeLayout(false);
|
this.groupBox1.ResumeLayout(false);
|
||||||
this.groupBox1.PerformLayout();
|
this.groupBox1.PerformLayout();
|
||||||
this.tabPage2.ResumeLayout(false);
|
this.tabPage2.ResumeLayout(false);
|
||||||
this.groupBox2.ResumeLayout(false);
|
this.tabPage2.PerformLayout();
|
||||||
this.tabControl2.ResumeLayout(false);
|
|
||||||
this.tabPage3.ResumeLayout(false);
|
|
||||||
this.tabPage3.PerformLayout();
|
|
||||||
this.tabPage4.ResumeLayout(false);
|
|
||||||
this.tabPage4.PerformLayout();
|
|
||||||
this.tabPage5.ResumeLayout(false);
|
|
||||||
this.tabPage5.PerformLayout();
|
|
||||||
this.tabPage8.ResumeLayout(false);
|
|
||||||
this.panel3.ResumeLayout(false);
|
|
||||||
this.panel3.PerformLayout();
|
|
||||||
this.tabPage6.ResumeLayout(false);
|
this.tabPage6.ResumeLayout(false);
|
||||||
this.tabPage6.PerformLayout();
|
this.tabPage6.PerformLayout();
|
||||||
this.tabPage7.ResumeLayout(false);
|
this.tabPage7.ResumeLayout(false);
|
||||||
this.tabPage7.PerformLayout();
|
this.tabPage7.PerformLayout();
|
||||||
this.tabPage9.ResumeLayout(false);
|
|
||||||
this.tabPage9.PerformLayout();
|
|
||||||
this.panel4.ResumeLayout(false);
|
|
||||||
this.panel2.ResumeLayout(false);
|
this.panel2.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
@@ -675,9 +492,7 @@
|
|||||||
private System.Windows.Forms.Panel panel1;
|
private System.Windows.Forms.Panel panel1;
|
||||||
private System.Windows.Forms.TabControl tabControl1;
|
private System.Windows.Forms.TabControl tabControl1;
|
||||||
private System.Windows.Forms.TabPage tabPage1;
|
private System.Windows.Forms.TabPage tabPage1;
|
||||||
private System.Windows.Forms.TabPage tabPage2;
|
|
||||||
private System.Windows.Forms.Panel panel2;
|
private System.Windows.Forms.Panel panel2;
|
||||||
private System.Windows.Forms.GroupBox groupBox2;
|
|
||||||
private System.Windows.Forms.ComboBox cmbprotocol;
|
private System.Windows.Forms.ComboBox cmbprotocol;
|
||||||
private System.Windows.Forms.Label label1;
|
private System.Windows.Forms.Label label1;
|
||||||
private System.Windows.Forms.ComboBox cmbprotocol2;
|
private System.Windows.Forms.ComboBox cmbprotocol2;
|
||||||
@@ -686,14 +501,6 @@
|
|||||||
private System.Windows.Forms.CheckBox chkudpEnabled2;
|
private System.Windows.Forms.CheckBox chkudpEnabled2;
|
||||||
private System.Windows.Forms.CheckBox chkAllowIn2;
|
private System.Windows.Forms.CheckBox chkAllowIn2;
|
||||||
private System.Windows.Forms.CheckBox chkmuxEnabled;
|
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.TabPage tabPage6;
|
||||||
private System.Windows.Forms.TextBox txtKcpmtu;
|
private System.Windows.Forms.TextBox txtKcpmtu;
|
||||||
private System.Windows.Forms.Label label6;
|
private System.Windows.Forms.Label label6;
|
||||||
@@ -710,29 +517,20 @@
|
|||||||
private System.Windows.Forms.CheckBox chkKcpcongestion;
|
private System.Windows.Forms.CheckBox chkKcpcongestion;
|
||||||
private System.Windows.Forms.TabPage tabPage7;
|
private System.Windows.Forms.TabPage tabPage7;
|
||||||
private System.Windows.Forms.CheckBox chkAutoRun;
|
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 chkAllowLANConn;
|
||||||
private System.Windows.Forms.TextBox txtremoteDNS;
|
|
||||||
private System.Windows.Forms.Label label14;
|
|
||||||
private System.Windows.Forms.Panel panel3;
|
|
||||||
private System.Windows.Forms.ComboBox cmbdomainStrategy;
|
|
||||||
private System.Windows.Forms.ComboBox cmbroutingMode;
|
|
||||||
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
private System.Windows.Forms.CheckBox chksniffingEnabled;
|
||||||
private System.Windows.Forms.CheckBox chksniffingEnabled2;
|
private System.Windows.Forms.CheckBox chksniffingEnabled2;
|
||||||
private System.Windows.Forms.Button btnSetDefRountingRule;
|
|
||||||
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
private System.Windows.Forms.CheckBox chkEnableStatistics;
|
||||||
private System.Windows.Forms.ComboBox cbFreshrate;
|
private System.Windows.Forms.ComboBox cbFreshrate;
|
||||||
private System.Windows.Forms.Label lbFreshrate;
|
private System.Windows.Forms.Label lbFreshrate;
|
||||||
private System.Windows.Forms.Label label16;
|
|
||||||
private System.Windows.Forms.ComboBox cmblistenerType;
|
|
||||||
private System.Windows.Forms.TabPage tabPage8;
|
|
||||||
private System.Windows.Forms.TabPage tabPage9;
|
|
||||||
private System.Windows.Forms.TextBox txtuserPacRule;
|
|
||||||
private System.Windows.Forms.Panel panel4;
|
|
||||||
private System.Windows.Forms.Label label4;
|
|
||||||
private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
|
private System.Windows.Forms.CheckBox chkKeepOlderDedupl;
|
||||||
private System.Windows.Forms.LinkLabel linkLabelRoutingDoc;
|
|
||||||
private System.Windows.Forms.CheckBox chkdefAllowInsecure;
|
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.ComboBox cmbCoreType;
|
||||||
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.CheckBox chkIgnoreGeoUpdateCore;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using System.Windows.Forms;
|
|||||||
using v2rayN.Handler;
|
using v2rayN.Handler;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
using v2rayN.HttpProxyHandler;
|
using v2rayN.HttpProxyHandler;
|
||||||
|
using v2rayN.Mode;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
{
|
{
|
||||||
@@ -18,13 +19,9 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
InitBase();
|
InitBase();
|
||||||
|
|
||||||
InitRouting();
|
|
||||||
|
|
||||||
InitKCP();
|
InitKCP();
|
||||||
|
|
||||||
InitGUI();
|
InitGUI();
|
||||||
|
|
||||||
InitUserPAC();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -68,25 +65,10 @@ namespace v2rayN.Forms
|
|||||||
//remoteDNS
|
//remoteDNS
|
||||||
txtremoteDNS.Text = config.remoteDNS;
|
txtremoteDNS.Text = config.remoteDNS;
|
||||||
|
|
||||||
cmblistenerType.SelectedIndex = (int)config.listenerType;
|
|
||||||
|
|
||||||
chkdefAllowInsecure.Checked = config.defAllowInsecure;
|
chkdefAllowInsecure.Checked = config.defAllowInsecure;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 初始化路由设置
|
|
||||||
/// </summary>
|
|
||||||
private void InitRouting()
|
|
||||||
{
|
|
||||||
//路由
|
|
||||||
cmbdomainStrategy.Text = config.domainStrategy;
|
|
||||||
int.TryParse(config.routingMode, out int routingMode);
|
|
||||||
cmbroutingMode.SelectedIndex = routingMode;
|
|
||||||
|
|
||||||
txtUseragent.Text = Utils.List2String(config.useragent, true);
|
|
||||||
txtUserdirect.Text = Utils.List2String(config.userdirect, true);
|
|
||||||
txtUserblock.Text = Utils.List2String(config.userblock, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化KCP设置
|
/// 初始化KCP设置
|
||||||
@@ -110,16 +92,10 @@ namespace v2rayN.Forms
|
|||||||
//开机自动启动
|
//开机自动启动
|
||||||
chkAutoRun.Checked = Utils.IsAutoRun();
|
chkAutoRun.Checked = Utils.IsAutoRun();
|
||||||
|
|
||||||
//自定义GFWList
|
|
||||||
txturlGFWList.Text = config.urlGFWList;
|
|
||||||
|
|
||||||
chkAllowLANConn.Checked = config.allowLANConn;
|
chkAllowLANConn.Checked = config.allowLANConn;
|
||||||
chkEnableStatistics.Checked = config.enableStatistics;
|
chkEnableStatistics.Checked = config.enableStatistics;
|
||||||
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
chkKeepOlderDedupl.Checked = config.keepOlderDedupl;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ComboItem[] cbSource = new ComboItem[]
|
ComboItem[] cbSource = new ComboItem[]
|
||||||
{
|
{
|
||||||
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")},
|
new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")},
|
||||||
@@ -144,13 +120,9 @@ namespace v2rayN.Forms
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chkIgnoreGeoUpdateCore.Checked = config.ignoreGeoUpdateCore;
|
||||||
|
cmbCoreType.SelectedIndex = (int)config.coreType;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitUserPAC()
|
|
||||||
{
|
|
||||||
txtuserPacRule.Text = Utils.List2String(config.userPacRule, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnOK_Click(object sender, EventArgs e)
|
private void btnOK_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (SaveBase() != 0)
|
if (SaveBase() != 0)
|
||||||
@@ -158,10 +130,6 @@ namespace v2rayN.Forms
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SaveRouting() != 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SaveKCP() != 0)
|
if (SaveKCP() != 0)
|
||||||
{
|
{
|
||||||
@@ -173,11 +141,6 @@ namespace v2rayN.Forms
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SaveUserPAC() != 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ConfigHandler.SaveConfig(ref config) == 0)
|
if (ConfigHandler.SaveConfig(ref config) == 0)
|
||||||
{
|
{
|
||||||
this.DialogResult = DialogResult.OK;
|
this.DialogResult = DialogResult.OK;
|
||||||
@@ -265,36 +228,12 @@ namespace v2rayN.Forms
|
|||||||
//remoteDNS
|
//remoteDNS
|
||||||
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
config.remoteDNS = txtremoteDNS.Text.TrimEx();
|
||||||
|
|
||||||
config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex);
|
|
||||||
|
|
||||||
config.defAllowInsecure = chkdefAllowInsecure.Checked;
|
config.defAllowInsecure = chkdefAllowInsecure.Checked;
|
||||||
|
|
||||||
return 0;
|
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>
|
/// <summary>
|
||||||
/// 保存KCP设置
|
/// 保存KCP设置
|
||||||
@@ -340,9 +279,6 @@ namespace v2rayN.Forms
|
|||||||
//开机自动启动
|
//开机自动启动
|
||||||
Utils.SetAutoRun(chkAutoRun.Checked);
|
Utils.SetAutoRun(chkAutoRun.Checked);
|
||||||
|
|
||||||
//自定义GFWList
|
|
||||||
config.urlGFWList = txturlGFWList.Text.TrimEx();
|
|
||||||
|
|
||||||
config.allowLANConn = chkAllowLANConn.Checked;
|
config.allowLANConn = chkAllowLANConn.Checked;
|
||||||
|
|
||||||
bool lastEnableStatistics = config.enableStatistics;
|
bool lastEnableStatistics = config.enableStatistics;
|
||||||
@@ -350,27 +286,12 @@ namespace v2rayN.Forms
|
|||||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||||
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
|
config.keepOlderDedupl = chkKeepOlderDedupl.Checked;
|
||||||
|
|
||||||
//if(lastEnableStatistics != config.enableStatistics)
|
config.ignoreGeoUpdateCore = chkIgnoreGeoUpdateCore.Checked;
|
||||||
//{
|
config.coreType = (ECoreType)cmbCoreType.SelectedIndex;
|
||||||
// /// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application
|
|
||||||
// // Shut down the current app instance.
|
|
||||||
// Application.Exit();
|
|
||||||
|
|
||||||
// // Restart the app passing "/restart [processId]" as cmd line args
|
|
||||||
// Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id);
|
|
||||||
//}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int SaveUserPAC()
|
|
||||||
{
|
|
||||||
string userPacRule = txtuserPacRule.Text.TrimEx();
|
|
||||||
userPacRule = userPacRule.Replace("\"", "");
|
|
||||||
|
|
||||||
config.userPacRule = Utils.String2List(userPacRule);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnClose_Click(object sender, EventArgs e)
|
private void btnClose_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
this.DialogResult = DialogResult.Cancel;
|
this.DialogResult = DialogResult.Cancel;
|
||||||
@@ -388,75 +309,9 @@ namespace v2rayN.Forms
|
|||||||
chkudpEnabled2.Enabled = blAllow2;
|
chkudpEnabled2.Enabled = blAllow2;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnSetDefRountingRule_Click(object sender, EventArgs e)
|
private void linkDnsObjectDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
{
|
{
|
||||||
txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag);
|
System.Diagnostics.Process.Start("https://www.v2fly.org/config/dns.html#dnsobject");
|
||||||
txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag);
|
|
||||||
txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag);
|
|
||||||
cmbroutingMode.SelectedIndex = 3;
|
|
||||||
|
|
||||||
List<string> lstUrl = new List<string>
|
|
||||||
{
|
|
||||||
Global.CustomRoutingListUrl + Global.agentTag,
|
|
||||||
Global.CustomRoutingListUrl + Global.directTag,
|
|
||||||
Global.CustomRoutingListUrl + Global.blockTag
|
|
||||||
};
|
|
||||||
|
|
||||||
List<TextBox> lstTxt = new List<TextBox>
|
|
||||||
{
|
|
||||||
txtUseragent,
|
|
||||||
txtUserdirect,
|
|
||||||
txtUserblock
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int k = 0; k < lstUrl.Count; k++)
|
|
||||||
{
|
|
||||||
TextBox txt = lstTxt[k];
|
|
||||||
DownloadHandle downloadHandle = new DownloadHandle();
|
|
||||||
downloadHandle.UpdateCompleted += (sender2, args) =>
|
|
||||||
{
|
|
||||||
if (args.Success)
|
|
||||||
{
|
|
||||||
string result = args.Msg;
|
|
||||||
if (Utils.IsNullOrEmpty(result))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
txt.Text = result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AppendText(false, args.Msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
downloadHandle.Error += (sender2, args) =>
|
|
||||||
{
|
|
||||||
AppendText(true, args.GetException().Message);
|
|
||||||
};
|
|
||||||
|
|
||||||
downloadHandle.WebDownloadString(lstUrl[k]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void AppendText(bool notify, string text)
|
|
||||||
{
|
|
||||||
labRoutingTips.Text = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
||||||
{
|
|
||||||
System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ComboItem
|
|
||||||
{
|
|
||||||
public int ID
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
public string Text
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -120,43 +120,13 @@
|
|||||||
<data name="btnClose.Text" xml:space="preserve">
|
<data name="btnClose.Text" xml:space="preserve">
|
||||||
<value>取消(&C)</value>
|
<value>取消(&C)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage1.Text" xml:space="preserve">
|
|
||||||
<value> Core:基础设置 </value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkdefAllowInsecure.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>222, 16</value>
|
<value>336, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
|
<data name="chkdefAllowInsecure.Text" xml:space="preserve">
|
||||||
<value>底层传输安全选tls时,默认跳过证书验证(allowInsecure)</value>
|
<value>底层传输安全选tls时,默认跳过证书验证(allowInsecure)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label16.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>53, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="label16.Text" xml:space="preserve">
|
|
||||||
<value>Http代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items" xml:space="preserve">
|
|
||||||
<value>关闭Http代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items1" xml:space="preserve">
|
|
||||||
<value>开启Http代理,并自动配置系统代理(全局模式)</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items2" xml:space="preserve">
|
|
||||||
<value>开启PAC,并自动配置系统代理(PAC模式)</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items3" xml:space="preserve">
|
|
||||||
<value>仅开启Http代理,并清除系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items4" xml:space="preserve">
|
|
||||||
<value>仅开启PAC,并清除系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items5" xml:space="preserve">
|
|
||||||
<value>仅开启Http代理,不改变系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmblistenerType.Items6" xml:space="preserve">
|
|
||||||
<value>仅开启PAC,不改变系统代理</value>
|
|
||||||
</data>
|
|
||||||
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chksniffingEnabled2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>96, 16</value>
|
<value>96, 16</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -169,12 +139,6 @@
|
|||||||
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
<data name="chksniffingEnabled.Text" xml:space="preserve">
|
||||||
<value>开启流量探测</value>
|
<value>开启流量探测</value>
|
||||||
</data>
|
</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="chkmuxEnabled.Text" xml:space="preserve">
|
<data name="chkmuxEnabled.Text" xml:space="preserve">
|
||||||
<value>开启Mux多路复用(默认开启)</value>
|
<value>开启Mux多路复用(默认开启)</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -226,106 +190,50 @@
|
|||||||
<data name="label2.Text" xml:space="preserve">
|
<data name="label2.Text" xml:space="preserve">
|
||||||
<value>本地监听端口</value>
|
<value>本地监听端口</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>648, 437</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>654, 443</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage1.Text" xml:space="preserve">
|
||||||
|
<value> Core:基础设置 </value>
|
||||||
|
</data>
|
||||||
|
<data name="linkDnsObjectDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>161, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkDnsObjectDoc.Text" xml:space="preserve">
|
||||||
|
<value>支持填写DnsObject,JSON格式</value>
|
||||||
|
</data>
|
||||||
|
<data name="label14.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>191, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label14.Text" xml:space="preserve">
|
||||||
|
<value>自定义DNS(可多个,用逗号(,)隔开)</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>654, 443</value>
|
||||||
|
</data>
|
||||||
<data name="tabPage2.Text" xml:space="preserve">
|
<data name="tabPage2.Text" xml:space="preserve">
|
||||||
<value> Core:路由设置 </value>
|
<value> Core:DNS设置 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="tabPage6.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>3, 89</value>
|
<value>654, 443</value>
|
||||||
</data>
|
|
||||||
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>642, 481</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage3.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>634, 455</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage3.Text" xml:space="preserve">
|
|
||||||
<value> 1.代理的Domain或IP </value>
|
|
||||||
</data>
|
|
||||||
<data name="txtUseragent.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>628, 449</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage4.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>634, 455</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage4.Text" xml:space="preserve">
|
|
||||||
<value> 2.直连的Domain或IP </value>
|
|
||||||
</data>
|
|
||||||
<data name="txtUserdirect.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>628, 449</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage5.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>634, 455</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage5.Text" xml:space="preserve">
|
|
||||||
<value> 3.阻止的Domain或IP </value>
|
|
||||||
</data>
|
|
||||||
<data name="txtUserblock.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>628, 449</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage8.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>634, 455</value>
|
|
||||||
</data>
|
|
||||||
<data name="tabPage8.Text" xml:space="preserve">
|
|
||||||
<value> 4.预定义规则 </value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Items" xml:space="preserve">
|
|
||||||
<value>全局</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Items1" xml:space="preserve">
|
|
||||||
<value>绕过局域网地址</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Items2" xml:space="preserve">
|
|
||||||
<value>绕过大陆地址</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Items3" xml:space="preserve">
|
|
||||||
<value>绕过局域网及大陆地址</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>19, 26</value>
|
|
||||||
</data>
|
|
||||||
<data name="cmbroutingMode.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>244, 20</value>
|
|
||||||
</data>
|
|
||||||
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>642, 72</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>
|
|
||||||
<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>351, 14</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>
|
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="labRoutingTips.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>5, 49</value>
|
|
||||||
</data>
|
|
||||||
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>383, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="labRoutingTips.Text" xml:space="preserve">
|
|
||||||
<value>*设置的规则,用逗号(,)隔开;支持Domain(纯字符串/正则/子域名)和IP</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage6.Text" xml:space="preserve">
|
<data name="tabPage6.Text" xml:space="preserve">
|
||||||
<value> Core:KCP设置 </value>
|
<value> Core:KCP设置 </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage7.Text" xml:space="preserve">
|
<data name="chkIgnoreGeoUpdateCore.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value> v2rayN设置 </value>
|
<value>150, 16</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkIgnoreGeoUpdateCore.Text" xml:space="preserve">
|
||||||
|
<value>更新Core时忽略Geo文件</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>53, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Text" xml:space="preserve">
|
||||||
|
<value>Core类型</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkKeepOlderDedupl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>156, 16</value>
|
<value>156, 16</value>
|
||||||
@@ -351,27 +259,30 @@
|
|||||||
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
<data name="chkAllowLANConn.Text" xml:space="preserve">
|
||||||
<value>允许来自局域网的连接</value>
|
<value>允许来自局域网的连接</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label13.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>227, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="label13.Text" xml:space="preserve">
|
|
||||||
<value>自定义GFWList地址(不需自定义请填空白)</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkAutoRun.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>180, 16</value>
|
<value>180, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkAutoRun.Text" xml:space="preserve">
|
<data name="chkAutoRun.Text" xml:space="preserve">
|
||||||
<value>开机自动启动(可能会不成功)</value>
|
<value>开机自动启动(可能会不成功)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tabPage9.Text" xml:space="preserve">
|
<data name="tabPage7.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value> 用户PAC设置 </value>
|
<value>654, 443</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label4.Text" xml:space="preserve">
|
<data name="tabPage7.Text" xml:space="preserve">
|
||||||
<value>*设置用户PAC规则,用逗号(,)隔开</value>
|
<value> v2rayN设置 </value>
|
||||||
|
</data>
|
||||||
|
<data name="tabControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>662, 469</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.Text" xml:space="preserve">
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
<value>确定(&O)</value>
|
<value>确定(&O)</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 479</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>662, 539</value>
|
||||||
|
</data>
|
||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="$this.Text" xml:space="preserve">
|
||||||
<value>参数设置</value>
|
<value>参数设置</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace v2rayN.Forms
|
|||||||
{
|
{
|
||||||
if (Index >= 0)
|
if (Index >= 0)
|
||||||
{
|
{
|
||||||
string url = ConfigHandler.GetVmessQRCode(config, Index);
|
string url = ShareHandler.GetShareUrl(config, Index);
|
||||||
if (Utils.IsNullOrEmpty(url))
|
if (Utils.IsNullOrEmpty(url))
|
||||||
{
|
{
|
||||||
picQRCode.Image = null;
|
picQRCode.Image = null;
|
||||||
|
|||||||
234
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs
generated
Normal file
234
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.Designer.cs
generated
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
namespace v2rayN.Forms
|
||||||
|
{
|
||||||
|
partial class RoutingSettingDetailsForm
|
||||||
|
{
|
||||||
|
/// <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(RoutingSettingDetailsForm));
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel3 = new System.Windows.Forms.Panel();
|
||||||
|
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.txtRemarks = new System.Windows.Forms.TextBox();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.panel4 = new System.Windows.Forms.Panel();
|
||||||
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
|
this.btnOK = new System.Windows.Forms.Button();
|
||||||
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.txtIP = new System.Windows.Forms.TextBox();
|
||||||
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.txtDomain = new System.Windows.Forms.TextBox();
|
||||||
|
this.panel3.SuspendLayout();
|
||||||
|
this.panel4.SuspendLayout();
|
||||||
|
this.panel2.SuspendLayout();
|
||||||
|
this.groupBox2.SuspendLayout();
|
||||||
|
this.groupBox1.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// panel1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.panel1, "panel1");
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
//
|
||||||
|
// panel3
|
||||||
|
//
|
||||||
|
this.panel3.Controls.Add(this.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.Controls.Add(this.txtRemarks);
|
||||||
|
this.panel3.Controls.Add(this.label2);
|
||||||
|
resources.ApplyResources(this.panel3, "panel3");
|
||||||
|
this.panel3.Name = "panel3";
|
||||||
|
//
|
||||||
|
// clbProtocol
|
||||||
|
//
|
||||||
|
this.clbProtocol.CheckOnClick = true;
|
||||||
|
resources.ApplyResources(this.clbProtocol, "clbProtocol");
|
||||||
|
this.clbProtocol.FormattingEnabled = true;
|
||||||
|
this.clbProtocol.Items.AddRange(new object[] {
|
||||||
|
resources.GetString("clbProtocol.Items"),
|
||||||
|
resources.GetString("clbProtocol.Items1"),
|
||||||
|
resources.GetString("clbProtocol.Items2")});
|
||||||
|
this.clbProtocol.MultiColumn = true;
|
||||||
|
this.clbProtocol.Name = "clbProtocol";
|
||||||
|
//
|
||||||
|
// label3
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label3, "label3");
|
||||||
|
this.label3.Name = "label3";
|
||||||
|
//
|
||||||
|
// txtPort
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtPort, "txtPort");
|
||||||
|
this.txtPort.Name = "txtPort";
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label1, "label1");
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
//
|
||||||
|
// labRoutingTips
|
||||||
|
//
|
||||||
|
this.labRoutingTips.ForeColor = System.Drawing.Color.Brown;
|
||||||
|
resources.ApplyResources(this.labRoutingTips, "labRoutingTips");
|
||||||
|
this.labRoutingTips.Name = "labRoutingTips";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label4, "label4");
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
//
|
||||||
|
// cmbOutboundTag
|
||||||
|
//
|
||||||
|
this.cmbOutboundTag.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.cmbOutboundTag.FormattingEnabled = true;
|
||||||
|
this.cmbOutboundTag.Items.AddRange(new object[] {
|
||||||
|
resources.GetString("cmbOutboundTag.Items"),
|
||||||
|
resources.GetString("cmbOutboundTag.Items1"),
|
||||||
|
resources.GetString("cmbOutboundTag.Items2")});
|
||||||
|
resources.ApplyResources(this.cmbOutboundTag, "cmbOutboundTag");
|
||||||
|
this.cmbOutboundTag.Name = "cmbOutboundTag";
|
||||||
|
//
|
||||||
|
// txtRemarks
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtRemarks, "txtRemarks");
|
||||||
|
this.txtRemarks.Name = "txtRemarks";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label2, "label2");
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
//
|
||||||
|
// panel4
|
||||||
|
//
|
||||||
|
this.panel4.Controls.Add(this.btnClose);
|
||||||
|
this.panel4.Controls.Add(this.btnOK);
|
||||||
|
resources.ApplyResources(this.panel4, "panel4");
|
||||||
|
this.panel4.Name = "panel4";
|
||||||
|
//
|
||||||
|
// btnClose
|
||||||
|
//
|
||||||
|
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
resources.ApplyResources(this.btnClose, "btnClose");
|
||||||
|
this.btnClose.Name = "btnClose";
|
||||||
|
this.btnClose.UseVisualStyleBackColor = true;
|
||||||
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
|
//
|
||||||
|
// btnOK
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.btnOK, "btnOK");
|
||||||
|
this.btnOK.Name = "btnOK";
|
||||||
|
this.btnOK.UseVisualStyleBackColor = true;
|
||||||
|
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||||
|
//
|
||||||
|
// panel2
|
||||||
|
//
|
||||||
|
this.panel2.Controls.Add(this.groupBox2);
|
||||||
|
this.panel2.Controls.Add(this.groupBox1);
|
||||||
|
resources.ApplyResources(this.panel2, "panel2");
|
||||||
|
this.panel2.Name = "panel2";
|
||||||
|
//
|
||||||
|
// groupBox2
|
||||||
|
//
|
||||||
|
this.groupBox2.Controls.Add(this.txtIP);
|
||||||
|
resources.ApplyResources(this.groupBox2, "groupBox2");
|
||||||
|
this.groupBox2.Name = "groupBox2";
|
||||||
|
this.groupBox2.TabStop = false;
|
||||||
|
//
|
||||||
|
// txtIP
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtIP, "txtIP");
|
||||||
|
this.txtIP.Name = "txtIP";
|
||||||
|
//
|
||||||
|
// groupBox1
|
||||||
|
//
|
||||||
|
this.groupBox1.Controls.Add(this.txtDomain);
|
||||||
|
resources.ApplyResources(this.groupBox1, "groupBox1");
|
||||||
|
this.groupBox1.Name = "groupBox1";
|
||||||
|
this.groupBox1.TabStop = false;
|
||||||
|
//
|
||||||
|
// txtDomain
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtDomain, "txtDomain");
|
||||||
|
this.txtDomain.Name = "txtDomain";
|
||||||
|
//
|
||||||
|
// RoutingSettingDetailsForm
|
||||||
|
//
|
||||||
|
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 = "RoutingSettingDetailsForm";
|
||||||
|
this.Load += new System.EventHandler(this.RoutingSettingDetailsForm_Load);
|
||||||
|
this.panel3.ResumeLayout(false);
|
||||||
|
this.panel3.PerformLayout();
|
||||||
|
this.panel4.ResumeLayout(false);
|
||||||
|
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.TextBox txtRemarks;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
131
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs
Normal file
131
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.cs
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using v2rayN.Base;
|
||||||
|
using v2rayN.Handler;
|
||||||
|
using v2rayN.Mode;
|
||||||
|
|
||||||
|
namespace v2rayN.Forms
|
||||||
|
{
|
||||||
|
public partial class RoutingSettingDetailsForm : BaseForm
|
||||||
|
{
|
||||||
|
public int EditIndex
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
protected RulesItem routingItem = null;
|
||||||
|
|
||||||
|
public RoutingSettingDetailsForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RoutingSettingDetailsForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (EditIndex >= 0)
|
||||||
|
{
|
||||||
|
routingItem = config.rules[EditIndex];
|
||||||
|
BindingData();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
routingItem = new RulesItem();
|
||||||
|
ClearBind();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EndBindingData()
|
||||||
|
{
|
||||||
|
if (routingItem != null)
|
||||||
|
{
|
||||||
|
routingItem.remarks = txtRemarks.Text.TrimEx();
|
||||||
|
routingItem.port = txtPort.Text.TrimEx();
|
||||||
|
routingItem.outboundTag = cmbOutboundTag.Text;
|
||||||
|
routingItem.domain = Utils.String2List(txtDomain.Text);
|
||||||
|
routingItem.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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
routingItem.protocol = protocol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void BindingData()
|
||||||
|
{
|
||||||
|
if (routingItem != null)
|
||||||
|
{
|
||||||
|
txtRemarks.Text = routingItem.remarks ?? string.Empty;
|
||||||
|
txtPort.Text = routingItem.port ?? string.Empty;
|
||||||
|
cmbOutboundTag.Text = routingItem.outboundTag;
|
||||||
|
txtDomain.Text = Utils.List2String(routingItem.domain, true);
|
||||||
|
txtIP.Text = Utils.List2String(routingItem.ip, true);
|
||||||
|
|
||||||
|
if (routingItem.protocol != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < clbProtocol.Items.Count; i++)
|
||||||
|
{
|
||||||
|
if (routingItem.protocol.Contains(clbProtocol.Items[i].ToString()))
|
||||||
|
{
|
||||||
|
clbProtocol.SetItemChecked(i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void ClearBind()
|
||||||
|
{
|
||||||
|
txtRemarks.Text = string.Empty;
|
||||||
|
txtPort.Text = string.Empty;
|
||||||
|
cmbOutboundTag.Text = Global.agentTag;
|
||||||
|
txtDomain.Text = string.Empty;
|
||||||
|
txtIP.Text = string.Empty;
|
||||||
|
}
|
||||||
|
private void btnOK_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
EndBindingData();
|
||||||
|
var hasRule = false;
|
||||||
|
if (routingItem.domain != null && routingItem.domain.Count > 0)
|
||||||
|
{
|
||||||
|
hasRule = true;
|
||||||
|
}
|
||||||
|
if (routingItem.ip != null && routingItem.ip.Count > 0)
|
||||||
|
{
|
||||||
|
hasRule = true;
|
||||||
|
}
|
||||||
|
if (routingItem.protocol != null && routingItem.protocol.Count > 0)
|
||||||
|
{
|
||||||
|
hasRule = true;
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(routingItem.port))
|
||||||
|
{
|
||||||
|
hasRule = true;
|
||||||
|
}
|
||||||
|
if (!hasRule)
|
||||||
|
{
|
||||||
|
UI.ShowWarning(string.Format(UIRes.I18N("RoutingRuleDetailRequiredTips"), "Port/Protocol/Domain/IP"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ConfigHandler.AddRoutingRule(ref config, routingItem, EditIndex) == 0)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClose_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.Cancel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
723
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx
Normal file
723
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.resx
Normal file
@@ -0,0 +1,723 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Top</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>742, 10</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="panel1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>7</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Name" xml:space="preserve">
|
||||||
|
<value>panel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.ColumnWidth" type="System.Int32, mscorlib">
|
||||||
|
<value>80</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.Items" xml:space="preserve">
|
||||||
|
<value>http</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.Items1" xml:space="preserve">
|
||||||
|
<value>tls</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.Items2" xml:space="preserve">
|
||||||
|
<value>bittorrent</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>347, 43</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>245, 20</value>
|
||||||
|
</data>
|
||||||
|
<data name="clbProtocol.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>39</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clbProtocol.Name" xml:space="preserve">
|
||||||
|
<value>clbProtocol</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clbProtocol.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clbProtocol.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>clbProtocol.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>274, 47</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>53, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>36</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Text" xml:space="preserve">
|
||||||
|
<value>Protocol</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Name" xml:space="preserve">
|
||||||
|
<value>label3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>84, 43</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>166, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtPort.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>35</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtPort.Name" xml:space="preserve">
|
||||||
|
<value>txtPort</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtPort.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtPort.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtPort.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>19, 47</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>29, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>34</value>
|
||||||
|
</data>
|
||||||
|
<data name="label1.Text" xml:space="preserve">
|
||||||
|
<value>Port</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.Name" xml:space="preserve">
|
||||||
|
<value>label1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="labRoutingTips.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="labRoutingTips.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>19, 82</value>
|
||||||
|
</data>
|
||||||
|
<data name="labRoutingTips.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>598, 16</value>
|
||||||
|
</data>
|
||||||
|
<data name="labRoutingTips.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>33</value>
|
||||||
|
</data>
|
||||||
|
<data name="labRoutingTips.Text" xml:space="preserve">
|
||||||
|
<value>*Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA></value>
|
||||||
|
</data>
|
||||||
|
<data name=">>labRoutingTips.Name" xml:space="preserve">
|
||||||
|
<value>labRoutingTips</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>labRoutingTips.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>labRoutingTips.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>labRoutingTips.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>274, 20</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>47, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>32</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Text" xml:space="preserve">
|
||||||
|
<value>Out Tag</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label4.Name" xml:space="preserve">
|
||||||
|
<value>label4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label4.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label4.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.Items" xml:space="preserve">
|
||||||
|
<value>proxy</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.Items1" xml:space="preserve">
|
||||||
|
<value>direct</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.Items2" xml:space="preserve">
|
||||||
|
<value>block</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>347, 16</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>119, 20</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbOutboundTag.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>31</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbOutboundTag.Name" xml:space="preserve">
|
||||||
|
<value>cmbOutboundTag</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbOutboundTag.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbOutboundTag.Parent" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbOutboundTag.ZOrder" xml:space="preserve">
|
||||||
|
<value>6</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>84, 16</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>166, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>30</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>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||||
|
<value>7</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>19, 20</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>29</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>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
|
<value>8</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Top</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel3.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 10</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>742, 111</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel3.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>8</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel3.Name" xml:space="preserve">
|
||||||
|
<value>panel3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel3.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel3.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Name" xml:space="preserve">
|
||||||
|
<value>btnClose</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||||
|
<value>panel4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Name" xml:space="preserve">
|
||||||
|
<value>btnOK</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||||
|
<value>panel4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel4.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Bottom</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel4.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 516</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel4.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>742, 60</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel4.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>10</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel4.Name" xml:space="preserve">
|
||||||
|
<value>panel4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel4.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel4.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel4.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>504, 15</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Text" xml:space="preserve">
|
||||||
|
<value>&Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Name" xml:space="preserve">
|
||||||
|
<value>btnClose</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||||
|
<value>panel4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>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>411, 15</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
|
<value>&OK</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Name" xml:space="preserve">
|
||||||
|
<value>btnOK</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||||
|
<value>panel4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Name" xml:space="preserve">
|
||||||
|
<value>groupBox2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 121</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>742, 395</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>11</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Name" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Name" xml:space="preserve">
|
||||||
|
<value>txtIP</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>392, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>350, 395</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox2.Text" xml:space="preserve">
|
||||||
|
<value>IP</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Name" xml:space="preserve">
|
||||||
|
<value>groupBox2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox2.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtIP.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtIP.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 17</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtIP.Multiline" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtIP.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>344, 375</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtIP.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>25</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Name" xml:space="preserve">
|
||||||
|
<value>txtIP</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtIP.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Name" xml:space="preserve">
|
||||||
|
<value>txtDomain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Left</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>392, 395</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="groupBox1.Text" xml:space="preserve">
|
||||||
|
<value>Domain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Name" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>groupBox1.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtDomain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtDomain.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 17</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtDomain.Multiline" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>386, 375</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtDomain.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Name" xml:space="preserve">
|
||||||
|
<value>txtDomain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.Parent" xml:space="preserve">
|
||||||
|
<value>groupBox1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtDomain.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
|
<value>6, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>742, 576</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>RoutingSettingDetailsForm</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>RoutingSettingDetailsForm</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>
|
||||||
145
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx
Normal file
145
v2rayN/v2rayN/Forms/RoutingSettingDetailsForm.zh-Hans.resx
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<?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="labRoutingTips.Text" xml:space="preserve">
|
||||||
|
<value>*设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代</value>
|
||||||
|
</data>
|
||||||
|
<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>71, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label4.Text" xml:space="preserve">
|
||||||
|
<value>OutboundTag</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="btnClose.Text" xml:space="preserve">
|
||||||
|
<value>取消(&C)</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
|
<value>确定(&O)</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>路由规则详情设置</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
316
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
316
v2rayN/v2rayN/Forms/RoutingSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
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.btnOK = new System.Windows.Forms.Button();
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.cmbdomainStrategy = new System.Windows.Forms.ComboBox();
|
||||||
|
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.menuImportRulesFromPreset = 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.linkLabelRoutingDoc);
|
||||||
|
this.panel1.Controls.Add(this.cmbdomainStrategy);
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.cmbdomainStrategy, "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")});
|
||||||
|
this.cmbdomainStrategy.Name = "cmbdomainStrategy";
|
||||||
|
//
|
||||||
|
// 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.menuImportRulesFromPreset,
|
||||||
|
this.menuImportRulesFromFile,
|
||||||
|
this.menuImportRulesFromClipboard,
|
||||||
|
this.menuImportRulesFromUrl});
|
||||||
|
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||||
|
//
|
||||||
|
// menuImportRulesFromPreset
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.menuImportRulesFromPreset, "menuImportRulesFromPreset");
|
||||||
|
this.menuImportRulesFromPreset.Name = "menuImportRulesFromPreset";
|
||||||
|
this.menuImportRulesFromPreset.Click += new System.EventHandler(this.menuImportRulesFromPreset_Click);
|
||||||
|
//
|
||||||
|
// 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);
|
||||||
|
//
|
||||||
|
// RoutingSettingForm
|
||||||
|
//
|
||||||
|
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 = "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.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 System.Windows.Forms.LinkLabel linkLabelRoutingDoc;
|
||||||
|
private System.Windows.Forms.ComboBox cmbdomainStrategy;
|
||||||
|
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 menuImportRulesFromPreset;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromFile;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromClipboard;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem menuExportSelectedRules;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem menuImportRulesFromUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
331
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
331
v2rayN/v2rayN/Forms/RoutingSettingForm.cs
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using v2rayN.Base;
|
||||||
|
using v2rayN.Handler;
|
||||||
|
using v2rayN.Mode;
|
||||||
|
|
||||||
|
namespace v2rayN.Forms
|
||||||
|
{
|
||||||
|
public partial class RoutingSettingForm : BaseForm
|
||||||
|
{
|
||||||
|
private List<int> lvSelecteds = new List<int>();
|
||||||
|
public RoutingSettingForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RoutingSettingForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
cmbdomainStrategy.Text = config.domainStrategy;
|
||||||
|
|
||||||
|
if (config.rules == null)
|
||||||
|
{
|
||||||
|
config.rules = new List<RulesItem>();
|
||||||
|
}
|
||||||
|
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.Columns.Add("", 30);
|
||||||
|
lvRoutings.Columns.Add(UIRes.I18N("LvAlias"), 100);
|
||||||
|
lvRoutings.Columns.Add("outboundTag", 80);
|
||||||
|
lvRoutings.Columns.Add("port", 80);
|
||||||
|
lvRoutings.Columns.Add("protocol", 100);
|
||||||
|
lvRoutings.Columns.Add("domain", 160);
|
||||||
|
lvRoutings.Columns.Add("ip", 160);
|
||||||
|
|
||||||
|
lvRoutings.EndUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshRoutingsView()
|
||||||
|
{
|
||||||
|
lvRoutings.BeginUpdate();
|
||||||
|
lvRoutings.Items.Clear();
|
||||||
|
|
||||||
|
for (int k = 0; k < config.rules.Count; k++)
|
||||||
|
{
|
||||||
|
var item = config.rules[k];
|
||||||
|
|
||||||
|
ListViewItem lvItem = new ListViewItem("");
|
||||||
|
Utils.AddSubItem(lvItem, "remarks", item.remarks);
|
||||||
|
Utils.AddSubItem(lvItem, "outboundTag", item.outboundTag);
|
||||||
|
Utils.AddSubItem(lvItem, "port", item.port);
|
||||||
|
Utils.AddSubItem(lvItem, "protocol", Utils.List2String(item.protocol));
|
||||||
|
Utils.AddSubItem(lvItem, "domain", Utils.List2String(item.domain));
|
||||||
|
Utils.AddSubItem(lvItem, "ip", Utils.List2String(item.ip));
|
||||||
|
|
||||||
|
if (lvItem != null) lvRoutings.Items.Add(lvItem);
|
||||||
|
}
|
||||||
|
lvRoutings.EndUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnOK_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
config.domainStrategy = cmbdomainStrategy.Text;
|
||||||
|
|
||||||
|
if (ConfigHandler.SaveRoutingRulesItem(ref config) == 0)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UI.ShowWarning(UIRes.I18N("OperationFailed"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClose_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.Cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 RoutingSettingDetailsForm();
|
||||||
|
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(UIRes.I18N("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(UIRes.I18N("PleaseSelectRules"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ConfigHandler.MoveRoutingRule(ref config, 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 RoutingSettingDetailsForm();
|
||||||
|
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(UIRes.I18N("RemoveRules")) == DialogResult.No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int k = lvSelecteds.Count - 1; k >= 0; k--)
|
||||||
|
{
|
||||||
|
config.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(config.rules[v]);
|
||||||
|
}
|
||||||
|
if (lst.Count > 0)
|
||||||
|
{
|
||||||
|
Utils.SetClipboardData(Utils.ToJson(lst));
|
||||||
|
UI.Show(UIRes.I18N("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 menuImportRulesFromPreset_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var rules = Utils.GetEmbedText(Global.CustomRoutingFileName + "rules");
|
||||||
|
if (ConfigHandler.AddBatchRoutingRules(ref config, rules) == 0)
|
||||||
|
{
|
||||||
|
RefreshRoutingsView();
|
||||||
|
UI.Show(UIRes.I18N("OperationSuccess"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (ConfigHandler.AddBatchRoutingRules(ref config, result) == 0)
|
||||||
|
{
|
||||||
|
RefreshRoutingsView();
|
||||||
|
UI.Show(UIRes.I18N("OperationSuccess"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void menuImportRulesFromClipboard_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string clipboardData = Utils.GetClipboardData();
|
||||||
|
if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0)
|
||||||
|
{
|
||||||
|
RefreshRoutingsView();
|
||||||
|
UI.Show(UIRes.I18N("OperationSuccess"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void menuImportRulesFromUrl_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var fm = new RoutingSubSettingForm();
|
||||||
|
if (fm.ShowDialog() != DialogResult.OK)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var url = fm.Url;
|
||||||
|
DownloadHandle downloadHandle = new DownloadHandle();
|
||||||
|
string clipboardData = downloadHandle.WebDownloadStringSync(url);
|
||||||
|
if (ConfigHandler.AddBatchRoutingRules(ref config, clipboardData) == 0)
|
||||||
|
{
|
||||||
|
RefreshRoutingsView();
|
||||||
|
UI.Show(UIRes.I18N("OperationSuccess"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
611
v2rayN/v2rayN/Forms/RoutingSettingForm.resx
Normal file
611
v2rayN/v2rayN/Forms/RoutingSettingForm.resx
Normal file
@@ -0,0 +1,611 @@
|
|||||||
|
<?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=">>panel2.ZOrder" xml:space="preserve">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbdomainStrategy.Name" xml:space="preserve">
|
||||||
|
<value>cmbdomainStrategy</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="menuMoveDown.Text" xml:space="preserve">
|
||||||
|
<value>Down (D)</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>765, 25</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=">>cmbdomainStrategy.Parent" xml:space="preserve">
|
||||||
|
<value>panel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel1.Name" xml:space="preserve">
|
||||||
|
<value>panel1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuServer.Parent" xml:space="preserve">
|
||||||
|
<value>$this</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=">>menuImportRulesFromPreset.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.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</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=">>cmbdomainStrategy.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="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<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="linkLabelRoutingDoc.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>6, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tabControl2.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkLabelRoutingDoc.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</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>Routing Settings</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuRemove.Text" xml:space="preserve">
|
||||||
|
<value>Remove selected</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tabPage2.Name" xml:space="preserve">
|
||||||
|
<value>tabPage2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuExportSelectedRules.Name" xml:space="preserve">
|
||||||
|
<value>menuExportSelectedRules</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="linkLabelRoutingDoc.Text" xml:space="preserve">
|
||||||
|
<value>Domain strategy</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=">>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>757, 511</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tabControl2.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
|
<value>6, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbdomainStrategy.Items2" xml:space="preserve">
|
||||||
|
<value>IPOnDemand</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="tabControl2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuExportSelectedRules.Text" xml:space="preserve">
|
||||||
|
<value>Export Selected Rules</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuServer.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>765, 60</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>95, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuServer.Name" xml:space="preserve">
|
||||||
|
<value>menuServer</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem1.Text" xml:space="preserve">
|
||||||
|
<value>Import Rules</value>
|
||||||
|
</data>
|
||||||
|
<data name="MenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>120, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkLabelRoutingDoc.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>19</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromUrl.Text" xml:space="preserve">
|
||||||
|
<value>Import Rules From Url</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabelRoutingDoc.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</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=">>menuMoveDown.Name" xml:space="preserve">
|
||||||
|
<value>menuMoveDown</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbdomainStrategy.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>165, 20</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuImportRulesFromFile.Name" xml:space="preserve">
|
||||||
|
<value>menuImportRulesFromFile</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuAdd.Text" xml:space="preserve">
|
||||||
|
<value>Add</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromPreset.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>247, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||||
|
<value>toolStripSeparator3</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkLabelRoutingDoc.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>lvRoutings.Parent" xml:space="preserve">
|
||||||
|
<value>tabPage2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>toolStripMenuItem1.Name" xml:space="preserve">
|
||||||
|
<value>toolStripMenuItem1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuMoveBottom.Name" xml:space="preserve">
|
||||||
|
<value>menuMoveBottom</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuImportRulesFromUrl.Name" xml:space="preserve">
|
||||||
|
<value>menuImportRulesFromUrl</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkLabelRoutingDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>95, 12</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>765, 537</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>RoutingSettingForm</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Name" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromPreset.Text" xml:space="preserve">
|
||||||
|
<value>Import Rules From Preset</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.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="lvRoutings.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>12</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="cmbdomainStrategy.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>116, 17</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabControl2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>14</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=">>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=">>menuAdd.Name" xml:space="preserve">
|
||||||
|
<value>menuAdd</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabControl2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 76</value>
|
||||||
|
</data>
|
||||||
|
<data name="cmbdomainStrategy.Items1" xml:space="preserve">
|
||||||
|
<value>IPIfNonMatch</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromFile.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="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>765, 51</value>
|
||||||
|
</data>
|
||||||
|
<data name="lvRoutings.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>751, 505</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuSelectAll.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>202, 22</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=">>menuImportRulesFromPreset.Name" xml:space="preserve">
|
||||||
|
<value>menuImportRulesFromPreset</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
|
<value>&OK</value>
|
||||||
|
</data>
|
||||||
|
<data name="linkLabelRoutingDoc.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||||
|
<value>0, 0, 0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>247, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Parent" xml:space="preserve">
|
||||||
|
<value>$this</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="cmbdomainStrategy.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>16</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="cmbdomainStrategy.Items" xml:space="preserve">
|
||||||
|
<value>AsIs</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="menuMoveBottom.Text" xml:space="preserve">
|
||||||
|
<value>Move to bottom (B)</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=">>linkLabelRoutingDoc.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=">>tabPage2.Parent" xml:space="preserve">
|
||||||
|
<value>tabControl2</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, 613</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="menuSelectAll.Text" xml:space="preserve">
|
||||||
|
<value>Select All (Ctrl+A)</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnClose.Text" xml:space="preserve">
|
||||||
|
<value>&Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>199, 6</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="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>linkLabelRoutingDoc.Parent" xml:space="preserve">
|
||||||
|
<value>panel1</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=">>linkLabelRoutingDoc.Name" xml:space="preserve">
|
||||||
|
<value>linkLabelRoutingDoc</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuMoveUp.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>202, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>menuRemove.Name" xml:space="preserve">
|
||||||
|
<value>menuRemove</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>765, 673</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="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cmbdomainStrategy.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>0</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=">>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="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>568, 17</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="cmsLv.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</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>
|
||||||
|
</root>
|
||||||
267
v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
Normal file
267
v2rayN/v2rayN/Forms/RoutingSettingForm.zh-Hans.resx
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
<?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="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="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>785, 60</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="panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>785, 51</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>92, 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, 505</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>777, 511</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabPage2.Text" xml:space="preserve">
|
||||||
|
<value>路由规则列表</value>
|
||||||
|
</data>
|
||||||
|
<data name="tabControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>785, 537</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromPreset.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>184, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromPreset.Text" xml:space="preserve">
|
||||||
|
<value>从预设中导入规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromFile.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>184, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromFile.Text" xml:space="preserve">
|
||||||
|
<value>从文件中导入规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromClipboard.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>184, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromClipboard.Text" xml:space="preserve">
|
||||||
|
<value>从剪贴板中导入规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>184, 22</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuImportRulesFromUrl.Text" xml:space="preserve">
|
||||||
|
<value>从Url中导入规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>92, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="toolStripMenuItem1.Text" xml:space="preserve">
|
||||||
|
<value>导入路由规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="menuServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>785, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>785, 673</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>路由设置</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
106
v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs
generated
Normal file
106
v2rayN/v2rayN/Forms/RoutingSubSettingForm.Designer.cs
generated
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
namespace v2rayN.Forms
|
||||||
|
{
|
||||||
|
partial class RoutingSubSettingForm
|
||||||
|
{
|
||||||
|
/// <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(RoutingSubSettingForm));
|
||||||
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
|
this.btnOK = new System.Windows.Forms.Button();
|
||||||
|
this.panCon = new System.Windows.Forms.Panel();
|
||||||
|
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||||
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
|
this.panel2.SuspendLayout();
|
||||||
|
this.panCon.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// panel2
|
||||||
|
//
|
||||||
|
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);
|
||||||
|
//
|
||||||
|
// panCon
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.panCon, "panCon");
|
||||||
|
this.panCon.Controls.Add(this.txtUrl);
|
||||||
|
this.panCon.Controls.Add(this.label3);
|
||||||
|
this.panCon.Name = "panCon";
|
||||||
|
//
|
||||||
|
// txtUrl
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.txtUrl, "txtUrl");
|
||||||
|
this.txtUrl.Name = "txtUrl";
|
||||||
|
//
|
||||||
|
// label3
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label3, "label3");
|
||||||
|
this.label3.Name = "label3";
|
||||||
|
//
|
||||||
|
// RoutingSubSettingForm
|
||||||
|
//
|
||||||
|
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.Name = "RoutingSubSettingForm";
|
||||||
|
this.Load += new System.EventHandler(this.RoutingSubSettingForm_Load);
|
||||||
|
this.panel2.ResumeLayout(false);
|
||||||
|
this.panCon.ResumeLayout(false);
|
||||||
|
this.panCon.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Panel panel2;
|
||||||
|
private System.Windows.Forms.Button btnClose;
|
||||||
|
private System.Windows.Forms.Button btnOK;
|
||||||
|
private System.Windows.Forms.Panel panCon;
|
||||||
|
private System.Windows.Forms.TextBox txtUrl;
|
||||||
|
private System.Windows.Forms.Label label3;
|
||||||
|
}
|
||||||
|
}
|
||||||
61
v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs
Normal file
61
v2rayN/v2rayN/Forms/RoutingSubSettingForm.cs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
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;
|
||||||
|
using v2rayN.Handler;
|
||||||
|
using v2rayN.Mode;
|
||||||
|
|
||||||
|
namespace v2rayN.Forms
|
||||||
|
{
|
||||||
|
public partial class RoutingSubSettingForm : BaseForm
|
||||||
|
{
|
||||||
|
public string Url;
|
||||||
|
public RoutingSubSettingForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RoutingSubSettingForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (config.ruleSubItem == null)
|
||||||
|
{
|
||||||
|
config.ruleSubItem = new List<SubItem>();
|
||||||
|
}
|
||||||
|
if (config.ruleSubItem.Count <= 0)
|
||||||
|
{
|
||||||
|
config.ruleSubItem.Add(new SubItem
|
||||||
|
{
|
||||||
|
remarks = "def",
|
||||||
|
url = Global.CustomRoutingListUrl + "custom_routing_rules"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
txtUrl.Text = config.ruleSubItem[0].url;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnOK_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var url = txtUrl.Text.Trim();
|
||||||
|
|
||||||
|
if (Utils.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Url = url;
|
||||||
|
config.ruleSubItem[0].url = url;
|
||||||
|
ConfigHandler.SaveRuleSubItem(ref config);
|
||||||
|
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClose_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.Cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
300
v2rayN/v2rayN/Forms/RoutingSubSettingForm.resx
Normal file
300
v2rayN/v2rayN/Forms/RoutingSubSettingForm.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>
|
||||||
|
<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>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>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Bottom</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 166</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>545, 60</value>
|
||||||
|
</data>
|
||||||
|
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>8</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Name" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>panel2.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>83, 19</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>450, 113</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>25</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||||
|
<value>txtUrl</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtUrl.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtUrl.Parent" xml:space="preserve">
|
||||||
|
<value>panCon</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtUrl.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</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, 19</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>23, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Text" xml:space="preserve">
|
||||||
|
<value>Url</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>panCon</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</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>545, 166</value>
|
||||||
|
</data>
|
||||||
|
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>11</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>
|
||||||
|
<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>545, 226</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>RoutingSubSetting</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>RoutingSubSettingForm</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>
|
||||||
133
v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx
Normal file
133
v2rayN/v2rayN/Forms/RoutingSubSettingForm.zh-Hans.resx
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<?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="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="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>65, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Text" xml:space="preserve">
|
||||||
|
<value>地址 (url)</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
53
v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs
generated
53
v2rayN/v2rayN/Forms/SubSettingControl.Designer.cs
generated
@@ -29,27 +29,38 @@
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl));
|
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.btnShare = new System.Windows.Forms.Button();
|
||||||
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
this.chkEnabled = new System.Windows.Forms.CheckBox();
|
||||||
this.btnRemove = new System.Windows.Forms.Button();
|
this.btnRemove = new System.Windows.Forms.Button();
|
||||||
this.txtUrl = new System.Windows.Forms.TextBox();
|
this.txtUrl = new System.Windows.Forms.TextBox();
|
||||||
this.txtRemarks = new System.Windows.Forms.TextBox();
|
this.txtRemarks = new System.Windows.Forms.TextBox();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
this.label3 = 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();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupBox2
|
// grbMain
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.groupBox2, "groupBox2");
|
resources.ApplyResources(this.grbMain, "grbMain");
|
||||||
this.groupBox2.Controls.Add(this.chkEnabled);
|
this.grbMain.Controls.Add(this.btnShare);
|
||||||
this.groupBox2.Controls.Add(this.btnRemove);
|
this.grbMain.Controls.Add(this.chkEnabled);
|
||||||
this.groupBox2.Controls.Add(this.txtUrl);
|
this.grbMain.Controls.Add(this.btnRemove);
|
||||||
this.groupBox2.Controls.Add(this.txtRemarks);
|
this.grbMain.Controls.Add(this.txtUrl);
|
||||||
this.groupBox2.Controls.Add(this.label2);
|
this.grbMain.Controls.Add(this.txtRemarks);
|
||||||
this.groupBox2.Controls.Add(this.label3);
|
this.grbMain.Controls.Add(this.label2);
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.grbMain.Controls.Add(this.label3);
|
||||||
this.groupBox2.TabStop = false;
|
this.grbMain.Name = "grbMain";
|
||||||
|
this.grbMain.TabStop = false;
|
||||||
|
//
|
||||||
|
// btnShare
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.btnShare, "btnShare");
|
||||||
|
this.btnShare.Name = "btnShare";
|
||||||
|
this.btnShare.UseVisualStyleBackColor = true;
|
||||||
|
this.btnShare.Click += new System.EventHandler(this.btnShare_Click);
|
||||||
//
|
//
|
||||||
// chkEnabled
|
// chkEnabled
|
||||||
//
|
//
|
||||||
@@ -87,27 +98,37 @@
|
|||||||
resources.ApplyResources(this.label3, "label3");
|
resources.ApplyResources(this.label3, "label3");
|
||||||
this.label3.Name = "label3";
|
this.label3.Name = "label3";
|
||||||
//
|
//
|
||||||
|
// picQRCode
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.picQRCode, "picQRCode");
|
||||||
|
this.picQRCode.Name = "picQRCode";
|
||||||
|
this.picQRCode.TabStop = false;
|
||||||
|
//
|
||||||
// SubSettingControl
|
// SubSettingControl
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
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.Name = "SubSettingControl";
|
||||||
this.Load += new System.EventHandler(this.SubSettingControl_Load);
|
this.Load += new System.EventHandler(this.SubSettingControl_Load);
|
||||||
this.groupBox2.ResumeLayout(false);
|
this.grbMain.ResumeLayout(false);
|
||||||
this.groupBox2.PerformLayout();
|
this.grbMain.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.GroupBox groupBox2;
|
private System.Windows.Forms.GroupBox grbMain;
|
||||||
private System.Windows.Forms.TextBox txtUrl;
|
private System.Windows.Forms.TextBox txtUrl;
|
||||||
private System.Windows.Forms.TextBox txtRemarks;
|
private System.Windows.Forms.TextBox txtRemarks;
|
||||||
private System.Windows.Forms.Label label2;
|
private System.Windows.Forms.Label label2;
|
||||||
private System.Windows.Forms.Label label3;
|
private System.Windows.Forms.Label label3;
|
||||||
private System.Windows.Forms.Button btnRemove;
|
private System.Windows.Forms.Button btnRemove;
|
||||||
private System.Windows.Forms.CheckBox chkEnabled;
|
private System.Windows.Forms.CheckBox chkEnabled;
|
||||||
|
private System.Windows.Forms.Button btnShare;
|
||||||
|
private System.Windows.Forms.PictureBox picQRCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
using v2rayN.Handler;
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
|
||||||
namespace v2rayN.Forms
|
namespace v2rayN.Forms
|
||||||
@@ -11,7 +12,10 @@ namespace v2rayN.Forms
|
|||||||
public event ChangeEventHandler OnButtonClicked;
|
public event ChangeEventHandler OnButtonClicked;
|
||||||
|
|
||||||
|
|
||||||
public SubItem subItem { get; set; }
|
public SubItem subItem
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
public SubSettingControl()
|
public SubSettingControl()
|
||||||
{
|
{
|
||||||
@@ -20,6 +24,7 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
private void SubSettingControl_Load(object sender, EventArgs e)
|
private void SubSettingControl_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
this.Height = grbMain.Height;
|
||||||
BindingSub();
|
BindingSub();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,5 +61,23 @@ namespace v2rayN.Forms
|
|||||||
|
|
||||||
OnButtonClicked?.Invoke(sender, e);
|
OnButtonClicked?.Invoke(sender, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void btnShare_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (this.Height <= grbMain.Height)
|
||||||
|
{
|
||||||
|
if (Utils.IsNullOrEmpty(subItem.url))
|
||||||
|
{
|
||||||
|
picQRCode.Image = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
picQRCode.Image = QRCodeHelper.GetQRCode(subItem.url);
|
||||||
|
this.Height = grbMain.Height + 200;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Height = grbMain.Height;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,123 +118,270 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
|
||||||
<value>6, 12</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib">
|
|
||||||
<value>zh-Hans</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>584, 119</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>484, 21</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>75, 23</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>24</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnRemove.Text" xml:space="preserve">
|
|
||||||
<value>&Remove</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>406, 23</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>60, 16</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>25</value>
|
|
||||||
</data>
|
|
||||||
<data name="chkEnabled.Text" xml:space="preserve">
|
|
||||||
<value>Enable</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Bottom</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 9</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>584, 110</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>10</value>
|
|
||||||
</data>
|
|
||||||
<data name="groupBox2.Text" xml:space="preserve">
|
|
||||||
<value>Subscription details</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">
|
<data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>txtUrl.Parent" xml:space="preserve">
|
||||||
<value>12, 25</value>
|
<value>grbMain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<value>47, 12</value>
|
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>60, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
<data name=">>txtUrl.Name" xml:space="preserve">
|
||||||
<value>10</value>
|
<value>txtUrl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Text" xml:space="preserve">
|
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||||
<value>Remarks</value>
|
<value>6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
<data name=">>picQRCode.Name" xml:space="preserve">
|
||||||
<value>True</value>
|
<value>picQRCode</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name=">>btnShare.Type" xml:space="preserve">
|
||||||
<value>NoControl</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="btnRemove.Text" xml:space="preserve">
|
||||||
<value>12, 55</value>
|
<value>Remove</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>txtRemarks.Name" xml:space="preserve">
|
||||||
<value>83, 12</value>
|
<value>txtRemarks</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<value>0</value>
|
<data name="btnRemove.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>24</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.Text" xml:space="preserve">
|
<data name=">>grbMain.Name" xml:space="preserve">
|
||||||
<value>Address (url)</value>
|
<value>grbMain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>127, 21</value>
|
<value>SubSettingControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="picQRCode.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
|
||||||
<value>265, 21</value>
|
<value>Zoom</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
<data name="grbMain.Text" xml:space="preserve">
|
||||||
<value>11</value>
|
<value>Subscription details</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="btnShare.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>127, 55</value>
|
<value>26</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>
|
||||||
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
<data name="txtUrl.Multiline" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>txtRemarks.Parent" xml:space="preserve">
|
||||||
<value>432, 46</value>
|
<value>grbMain</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="txtRemarks.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>232, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="grbMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Top</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||||
|
<value>6, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Name" xml:space="preserve">
|
||||||
|
<value>label3</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>127, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnShare.Text" xml:space="preserve">
|
||||||
|
<value>Share</value>
|
||||||
|
</data>
|
||||||
|
<data name="picQRCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>619, 200</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>chkEnabled.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>12, 55</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnShare.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="picQRCode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>grbMain.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name="picQRCode.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>25</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>127, 55</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>3</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>chkEnabled.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>47, 12</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnRemove.Name" xml:space="preserve">
|
||||||
|
<value>btnRemove</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtUrl.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkEnabled.Text" xml:space="preserve">
|
||||||
|
<value>Enable</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>chkEnabled.Name" xml:space="preserve">
|
||||||
|
<value>chkEnabled</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>txtRemarks.ZOrder" xml:space="preserve">
|
||||||
|
<value>4</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="picQRCode.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 110</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnShare.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnRemove.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</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="grbMain.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>10</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
<data name="txtUrl.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>23</value>
|
<value>23</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>label2.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnRemove.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkEnabled.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>368, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="chkEnabled.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="grbMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>0, 0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>picQRCode.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>picQRCode.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label2.Name" xml:space="preserve">
|
||||||
|
<value>label2</value>
|
||||||
|
</data>
|
||||||
|
<data name="grbMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>619, 110</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnShare.Name" xml:space="preserve">
|
||||||
|
<value>btnShare</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnShare.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</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>619, 310</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtRemarks.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>11</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>
|
||||||
|
<data name="picQRCode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="txtUrl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>473, 46</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>12, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnRemove.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Parent" xml:space="preserve">
|
||||||
|
<value>grbMain</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>grbMain.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="label3.Text" xml:space="preserve">
|
||||||
|
<value>Address (url)</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>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=">>$this.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>picQRCode.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnRemove.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>525, 21</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=">>chkEnabled.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label3.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>10</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>zh-Hans</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
||||||
@@ -117,18 +117,18 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<data name="btnShare.Text" xml:space="preserve">
|
||||||
<data name="btnRemove.Text" xml:space="preserve">
|
<value>分享</value>
|
||||||
<value>移除</value>
|
|
||||||
</data>
|
</data>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkEnabled.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>48, 16</value>
|
<value>48, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkEnabled.Text" xml:space="preserve">
|
<data name="chkEnabled.Text" xml:space="preserve">
|
||||||
<value>启用</value>
|
<value>启用</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="groupBox2.Text" xml:space="preserve">
|
<data name="btnRemove.Text" xml:space="preserve">
|
||||||
<value>订阅详情</value>
|
<value>移除</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>29, 12</value>
|
<value>29, 12</value>
|
||||||
@@ -142,4 +142,7 @@
|
|||||||
<data name="label3.Text" xml:space="preserve">
|
<data name="label3.Text" xml:space="preserve">
|
||||||
<value>地址 (url)</value>
|
<value>地址 (url)</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="grbMain.Text" xml:space="preserve">
|
||||||
|
<value>订阅详情</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -118,19 +118,61 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<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" />
|
<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" />
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>6, 12</value>
|
<value>4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="btnClose.Text" xml:space="preserve">
|
||||||
<value>581, 629</value>
|
<value>&Cancel</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
<data name=">>btnClose.Name" xml:space="preserve">
|
||||||
|
<value>btnClose</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.Parent" xml:space="preserve">
|
||||||
|
<value>panel2</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnClose.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="panCon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Subscription settings</value>
|
<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, 569</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>
|
||||||
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
@@ -147,20 +189,17 @@
|
|||||||
<data name="btnAdd.Text" xml:space="preserve">
|
<data name="btnAdd.Text" xml:space="preserve">
|
||||||
<value>&Add</value>
|
<value>&Add</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name=">>btnAdd.Name" xml:space="preserve">
|
||||||
<value>NoControl</value>
|
<value>btnAdd</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>btnAdd.Type" xml:space="preserve">
|
||||||
<value>448, 17</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>btnAdd.Parent" xml:space="preserve">
|
||||||
<value>75, 23</value>
|
<value>panel2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="btnClose.TabIndex" type="System.Int32, mscorlib">
|
<data name=">>btnAdd.ZOrder" xml:space="preserve">
|
||||||
<value>4</value>
|
<value>0</value>
|
||||||
</data>
|
|
||||||
<data name="btnClose.Text" xml:space="preserve">
|
|
||||||
<value>&Cancel</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
@@ -177,20 +216,17 @@
|
|||||||
<data name="btnOK.Text" xml:space="preserve">
|
<data name="btnOK.Text" xml:space="preserve">
|
||||||
<value>&OK</value>
|
<value>&OK</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panCon.AutoScroll" type="System.Boolean, mscorlib">
|
<data name=">>btnOK.Name" xml:space="preserve">
|
||||||
<value>True</value>
|
<value>btnOK</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panCon.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name=">>btnOK.Type" xml:space="preserve">
|
||||||
<value>Fill</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panCon.Location" type="System.Drawing.Point, System.Drawing">
|
<data name=">>btnOK.Parent" xml:space="preserve">
|
||||||
<value>0, 0</value>
|
<value>panel2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panCon.Size" type="System.Drawing.Size, System.Drawing">
|
<data name=">>btnOK.ZOrder" xml:space="preserve">
|
||||||
<value>581, 569</value>
|
<value>2</value>
|
||||||
</data>
|
|
||||||
<data name="panCon.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>10</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Bottom</value>
|
<value>Bottom</value>
|
||||||
@@ -199,9 +235,39 @@
|
|||||||
<value>0, 569</value>
|
<value>0, 569</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>581, 60</value>
|
<value>614, 60</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>7</value>
|
<value>7</value>
|
||||||
</data>
|
</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, 629</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Text" xml:space="preserve">
|
||||||
|
<value>Subscription settings</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
|
<value>SubSettingForm</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>$this.Type" xml:space="preserve">
|
||||||
|
<value>v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -9,6 +9,9 @@ namespace v2rayN
|
|||||||
public const string v2rayWebsiteUrl = @"https://www.v2fly.org/";
|
public const string v2rayWebsiteUrl = @"https://www.v2fly.org/";
|
||||||
public const string AboutUrl = @"https://github.com/2dust/v2rayN";
|
public const string AboutUrl = @"https://github.com/2dust/v2rayN";
|
||||||
public const string UpdateUrl = AboutUrl + @"/releases";
|
public const string UpdateUrl = AboutUrl + @"/releases";
|
||||||
|
public const string v2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases";
|
||||||
|
public const string xrayCoreUrl = "https://github.com/XTLS/Xray-core/releases";
|
||||||
|
public const string NUrl = @"https://github.com/2dust/v2rayN/releases";
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -23,7 +26,6 @@ namespace v2rayN
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
|
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
|
||||||
|
|
||||||
public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// PromotionUrl
|
/// PromotionUrl
|
||||||
@@ -56,10 +58,7 @@ namespace v2rayN
|
|||||||
/// v2ray配置Httpresponse文件名
|
/// v2ray配置Httpresponse文件名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt";
|
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 CustomRoutingFileName = "v2rayN.Sample.custom_routing_";
|
||||||
|
|
||||||
@@ -161,11 +160,6 @@ namespace v2rayN
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string trojanProtocolLite = "trojan";
|
public const string trojanProtocolLite = "trojan";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// pac
|
|
||||||
/// </summary>
|
|
||||||
public const string pacFILE = "pac.txt";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// email
|
/// email
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -195,6 +189,7 @@ namespace v2rayN
|
|||||||
|
|
||||||
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 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 const string RoutingRuleComma = "<COMMA>";
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 全局变量
|
#region 全局变量
|
||||||
@@ -231,13 +226,6 @@ namespace v2rayN
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// PAC端口
|
|
||||||
/// </summary>
|
|
||||||
public static int pacPort
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -87,21 +87,9 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
config.domainStrategy = "IPIfNonMatch";
|
config.domainStrategy = "IPIfNonMatch";
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(config.routingMode))
|
if (config.rules == null)
|
||||||
{
|
{
|
||||||
config.routingMode = "0";
|
config.rules = new List<RulesItem>();
|
||||||
}
|
|
||||||
if (config.useragent == null)
|
|
||||||
{
|
|
||||||
config.useragent = new List<string>();
|
|
||||||
}
|
|
||||||
if (config.userdirect == null)
|
|
||||||
{
|
|
||||||
config.userdirect = new List<string>();
|
|
||||||
}
|
|
||||||
if (config.userblock == null)
|
|
||||||
{
|
|
||||||
config.userblock = new List<string>();
|
|
||||||
}
|
}
|
||||||
//kcp
|
//kcp
|
||||||
if (config.kcpItem == null)
|
if (config.kcpItem == null)
|
||||||
@@ -139,10 +127,6 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
config.speedPingTestUrl = Global.SpeedPingTestUrl;
|
config.speedPingTestUrl = Global.SpeedPingTestUrl;
|
||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(config.urlGFWList))
|
|
||||||
{
|
|
||||||
config.urlGFWList = Global.GFWLIST_URL;
|
|
||||||
}
|
|
||||||
//if (Utils.IsNullOrEmpty(config.remoteDNS))
|
//if (Utils.IsNullOrEmpty(config.remoteDNS))
|
||||||
//{
|
//{
|
||||||
// config.remoteDNS = "1.1.1.1";
|
// config.remoteDNS = "1.1.1.1";
|
||||||
@@ -152,9 +136,9 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
config.subItem = new List<SubItem>();
|
config.subItem = new List<SubItem>();
|
||||||
}
|
}
|
||||||
if (config.userPacRule == null)
|
if (config.ruleSubItem == null)
|
||||||
{
|
{
|
||||||
config.userPacRule = new List<string>();
|
config.ruleSubItem = new List<SubItem>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config == null
|
if (config == null
|
||||||
@@ -299,7 +283,8 @@ namespace v2rayN.Handler
|
|||||||
path = config.vmess[index].path,
|
path = config.vmess[index].path,
|
||||||
streamSecurity = config.vmess[index].streamSecurity,
|
streamSecurity = config.vmess[index].streamSecurity,
|
||||||
allowInsecure = config.vmess[index].allowInsecure,
|
allowInsecure = config.vmess[index].allowInsecure,
|
||||||
configType = config.vmess[index].configType
|
configType = config.vmess[index].configType,
|
||||||
|
flow = config.vmess[index].flow
|
||||||
};
|
};
|
||||||
|
|
||||||
config.vmess.Insert(index + 1, vmessItem); // 插入到下一项
|
config.vmess.Insert(index + 1, vmessItem); // 插入到下一项
|
||||||
@@ -358,100 +343,6 @@ namespace v2rayN.Handler
|
|||||||
Utils.ToJsonFile(config, Utils.GetPath(configRes));
|
Utils.ToJsonFile(config, Utils.GetPath(configRes));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得服务器QRCode配置
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="config"></param>
|
|
||||||
/// <param name="index"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static string GetVmessQRCode(Config config, int index)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string url = string.Empty;
|
|
||||||
|
|
||||||
VmessItem vmessItem = config.vmess[index];
|
|
||||||
if (vmessItem.configType == (int)EConfigType.Vmess)
|
|
||||||
{
|
|
||||||
VmessQRCode vmessQRCode = new VmessQRCode
|
|
||||||
{
|
|
||||||
v = vmessItem.configVersion.ToString(),
|
|
||||||
ps = vmessItem.remarks.TrimEx(), //备注也许很长 ;
|
|
||||||
add = vmessItem.address,
|
|
||||||
port = vmessItem.port.ToString(),
|
|
||||||
id = vmessItem.id,
|
|
||||||
aid = vmessItem.alterId.ToString(),
|
|
||||||
net = vmessItem.network,
|
|
||||||
type = vmessItem.headerType,
|
|
||||||
host = vmessItem.requestHost,
|
|
||||||
path = vmessItem.path,
|
|
||||||
tls = vmessItem.streamSecurity
|
|
||||||
};
|
|
||||||
|
|
||||||
url = Utils.ToJson(vmessQRCode);
|
|
||||||
url = Utils.Base64Encode(url);
|
|
||||||
url = string.Format("{0}{1}", Global.vmessProtocol, url);
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (vmessItem.configType == (int)EConfigType.Shadowsocks)
|
|
||||||
{
|
|
||||||
string remark = string.Empty;
|
|
||||||
if (!Utils.IsNullOrEmpty(vmessItem.remarks))
|
|
||||||
{
|
|
||||||
remark = "#" + WebUtility.UrlEncode(vmessItem.remarks);
|
|
||||||
}
|
|
||||||
url = string.Format("{0}:{1}@{2}:{3}",
|
|
||||||
vmessItem.security,
|
|
||||||
vmessItem.id,
|
|
||||||
vmessItem.address,
|
|
||||||
vmessItem.port);
|
|
||||||
url = Utils.Base64Encode(url);
|
|
||||||
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
|
|
||||||
}
|
|
||||||
else if (vmessItem.configType == (int)EConfigType.Socks)
|
|
||||||
{
|
|
||||||
string remark = string.Empty;
|
|
||||||
if (!Utils.IsNullOrEmpty(vmessItem.remarks))
|
|
||||||
{
|
|
||||||
remark = "#" + WebUtility.UrlEncode(vmessItem.remarks);
|
|
||||||
}
|
|
||||||
url = string.Format("{0}:{1}@{2}:{3}",
|
|
||||||
vmessItem.security,
|
|
||||||
vmessItem.id,
|
|
||||||
vmessItem.address,
|
|
||||||
vmessItem.port);
|
|
||||||
url = Utils.Base64Encode(url);
|
|
||||||
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
|
|
||||||
}
|
|
||||||
else if (vmessItem.configType == (int)EConfigType.Trojan)
|
|
||||||
{
|
|
||||||
string remark = string.Empty;
|
|
||||||
if (!Utils.IsNullOrEmpty(vmessItem.remarks))
|
|
||||||
{
|
|
||||||
remark = "#" + WebUtility.UrlEncode(vmessItem.remarks);
|
|
||||||
}
|
|
||||||
string query = string.Empty;
|
|
||||||
if (!Utils.IsNullOrEmpty(vmessItem.requestHost))
|
|
||||||
{
|
|
||||||
query = string.Format("?sni={0}", vmessItem.requestHost);
|
|
||||||
}
|
|
||||||
url = string.Format("{0}@{1}:{2}",
|
|
||||||
vmessItem.id,
|
|
||||||
vmessItem.address,
|
|
||||||
vmessItem.port);
|
|
||||||
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 移动服务器
|
/// 移动服务器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -638,6 +529,12 @@ namespace v2rayN.Handler
|
|||||||
vmessItem.id = vmessItem.id.TrimEx();
|
vmessItem.id = vmessItem.id.TrimEx();
|
||||||
vmessItem.security = vmessItem.security.TrimEx();
|
vmessItem.security = vmessItem.security.TrimEx();
|
||||||
|
|
||||||
|
var securitys = new HashSet<string>() { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" };
|
||||||
|
if (!securitys.Contains(vmessItem.security))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
//修改
|
//修改
|
||||||
@@ -843,7 +740,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(str, out string msg);
|
VmessItem vmessItem = ShareHandler.ImportFromClipboardConfig(str, out string msg);
|
||||||
if (vmessItem == null)
|
if (vmessItem == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@@ -877,6 +774,13 @@ namespace v2rayN.Handler
|
|||||||
countServers++;
|
countServers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (vmessItem.configType == (int)EConfigType.VLESS)
|
||||||
|
{
|
||||||
|
if (AddVlessServer(ref config, vmessItem, -1) == 0)
|
||||||
|
{
|
||||||
|
countServers++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return countServers;
|
return countServers;
|
||||||
}
|
}
|
||||||
@@ -1080,5 +984,180 @@ namespace v2rayN.Handler
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// SaveRoutingItem
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int SaveRoutingRulesItem(ref Config config)
|
||||||
|
{
|
||||||
|
if (config.rules == null)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (RulesItem sub in config.rules)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
Global.reloadV2ray = true;
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// AddRoutingRulesItem
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <param name="index"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int AddRoutingRule(ref Config config, RulesItem item, int index)
|
||||||
|
{
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
config.rules[index] = item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
config.rules.Add(item);
|
||||||
|
}
|
||||||
|
Global.reloadV2ray = true;
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// AddBatchRoutingRules
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <param name="clipboardData"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int AddBatchRoutingRules(ref Config config, string clipboardData)
|
||||||
|
{
|
||||||
|
if (Utils.IsNullOrEmpty(clipboardData))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var lstRules = Utils.FromJson<List<RulesItem>>(clipboardData);
|
||||||
|
if (lstRules == null)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
config.rules.Clear();
|
||||||
|
foreach (var item in lstRules)
|
||||||
|
{
|
||||||
|
config.rules.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
Global.reloadV2ray = true;
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// MoveRoutingRule
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <param name="index"></param>
|
||||||
|
/// <param name="eMove"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int MoveRoutingRule(ref Config config, int index, EMove eMove)
|
||||||
|
{
|
||||||
|
int count = config.rules.Count;
|
||||||
|
if (index < 0 || index > config.rules.Count - 1)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
switch (eMove)
|
||||||
|
{
|
||||||
|
case EMove.Top:
|
||||||
|
{
|
||||||
|
if (index == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var item = Utils.DeepCopy(config.rules[index]);
|
||||||
|
config.rules.RemoveAt(index);
|
||||||
|
config.rules.Insert(0, item);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EMove.Up:
|
||||||
|
{
|
||||||
|
if (index == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var item = Utils.DeepCopy(config.rules[index]);
|
||||||
|
config.rules.RemoveAt(index);
|
||||||
|
config.rules.Insert(index - 1, item);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case EMove.Down:
|
||||||
|
{
|
||||||
|
if (index == count - 1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var item = Utils.DeepCopy(config.rules[index]);
|
||||||
|
config.rules.RemoveAt(index);
|
||||||
|
config.rules.Insert(index + 1, item);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EMove.Bottom:
|
||||||
|
{
|
||||||
|
if (index == count - 1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
var item = Utils.DeepCopy(config.rules[index]);
|
||||||
|
config.rules.RemoveAt(index);
|
||||||
|
config.rules.Add(item);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Global.reloadV2ray = true;
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// SaveRuleSubItem
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int SaveRuleSubItem(ref Config config)
|
||||||
|
{
|
||||||
|
if (config.ruleSubItem == null || config.ruleSubItem.Count <= 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (SubItem sub in config.ruleSubItem)
|
||||||
|
{
|
||||||
|
if (Utils.IsNullOrEmpty(sub.id))
|
||||||
|
{
|
||||||
|
sub.id = Utils.GetGUID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ToJsonFile(config);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,10 +52,12 @@ namespace v2rayN.Handler
|
|||||||
|
|
||||||
#region Check for updates
|
#region Check for updates
|
||||||
|
|
||||||
private readonly string nLatestUrl = "https://github.com/2dust/v2rayN/releases/latest";
|
private readonly string nLatestUrl = Global.NUrl + "/latest";
|
||||||
private const string nUrl = "https://github.com/2dust/v2rayN/releases/download/{0}/v2rayN.zip";
|
private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip";
|
||||||
private readonly string coreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest";
|
private readonly string v2flyCoreLatestUrl = Global.v2flyCoreUrl + "/latest";
|
||||||
private const string coreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip";
|
private const string v2flyCoreUrl = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip";
|
||||||
|
private readonly string xrayCoreLatestUrl = Global.xrayCoreUrl + "/latest";
|
||||||
|
private const string xrayCoreUrl = Global.xrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip";
|
||||||
|
|
||||||
public async void CheckUpdateAsync(string type)
|
public async void CheckUpdateAsync(string type)
|
||||||
{
|
{
|
||||||
@@ -67,9 +69,13 @@ namespace v2rayN.Handler
|
|||||||
HttpClient httpClient = new HttpClient(webRequestHandler);
|
HttpClient httpClient = new HttpClient(webRequestHandler);
|
||||||
|
|
||||||
string url;
|
string url;
|
||||||
if (type == "Core")
|
if (type == "v2fly")
|
||||||
{
|
{
|
||||||
url = coreLatestUrl;
|
url = v2flyCoreLatestUrl;
|
||||||
|
}
|
||||||
|
else if (type == "xray")
|
||||||
|
{
|
||||||
|
url = xrayCoreLatestUrl;
|
||||||
}
|
}
|
||||||
else if (type == "v2rayN")
|
else if (type == "v2rayN")
|
||||||
{
|
{
|
||||||
@@ -94,14 +100,26 @@ namespace v2rayN.Handler
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取V2RayCore版本
|
/// 获取V2RayCore版本
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string getV2rayVersion()
|
public string getCoreVersion(string type)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string filePath = Utils.GetPath("V2ray.exe");
|
var core = string.Empty;
|
||||||
|
var match = string.Empty;
|
||||||
|
if (type == "v2fly")
|
||||||
|
{
|
||||||
|
core = "v2ray.exe";
|
||||||
|
match = "V2Ray";
|
||||||
|
}
|
||||||
|
else if (type == "xray")
|
||||||
|
{
|
||||||
|
core = "xray.exe";
|
||||||
|
match = "Xray";
|
||||||
|
}
|
||||||
|
string filePath = Utils.GetPath(core);
|
||||||
if (!File.Exists(filePath))
|
if (!File.Exists(filePath))
|
||||||
{
|
{
|
||||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases");
|
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"");
|
||||||
//ShowMsg(true, msg);
|
//ShowMsg(true, msg);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@@ -117,10 +135,9 @@ namespace v2rayN.Handler
|
|||||||
p.Start();
|
p.Start();
|
||||||
p.WaitForExit(5000);
|
p.WaitForExit(5000);
|
||||||
string echo = p.StandardOutput.ReadToEnd();
|
string echo = p.StandardOutput.ReadToEnd();
|
||||||
string version = Regex.Match(echo, "V2Ray ([0-9.]+) \\(").Groups[1].Value;
|
string version = Regex.Match(echo, $"{match} ([0-9.]+) \\(").Groups[1].Value;
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
Utils.SaveLog(ex.Message, ex);
|
||||||
@@ -136,12 +153,19 @@ namespace v2rayN.Handler
|
|||||||
string curVersion;
|
string curVersion;
|
||||||
string message;
|
string message;
|
||||||
string url;
|
string url;
|
||||||
if (type == "Core")
|
if (type == "v2fly")
|
||||||
{
|
{
|
||||||
curVersion = "v" + getV2rayVersion();
|
curVersion = "v" + getCoreVersion(type);
|
||||||
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
||||||
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||||
url = string.Format(coreUrl, version, osBit);
|
url = string.Format(v2flyCoreUrl, version, osBit);
|
||||||
|
}
|
||||||
|
else if (type == "xray")
|
||||||
|
{
|
||||||
|
curVersion = "v" + getCoreVersion(type);
|
||||||
|
message = string.Format(UIRes.I18N("IsLatestCore"), curVersion);
|
||||||
|
string osBit = Environment.Is64BitProcess ? "64" : "32";
|
||||||
|
url = string.Format(xrayCoreUrl, version, osBit);
|
||||||
}
|
}
|
||||||
else if (type == "v2rayN")
|
else if (type == "v2rayN")
|
||||||
{
|
{
|
||||||
@@ -242,8 +266,8 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
((WebClientEx)sender).Dispose();
|
((WebClientEx)sender).Dispose();
|
||||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||||
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##"));
|
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
|
||||||
UpdateCompleted(this, new ResultEventArgs(true, speed));
|
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,8 +276,8 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
|
|
||||||
TimeSpan ts = (DateTime.Now - totalDatetime);
|
TimeSpan ts = (DateTime.Now - totalDatetime);
|
||||||
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##"));
|
string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.0"));
|
||||||
UpdateCompleted(this, new ResultEventArgs(true, speed));
|
UpdateCompleted(this, new ResultEventArgs(true, speed.PadLeft(8, ' ')));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -313,47 +337,24 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
public string WebDownloadStringSync(string url)
|
||||||
|
|
||||||
#region PAC
|
|
||||||
|
|
||||||
public string GenPacFile(string result)
|
|
||||||
{
|
{
|
||||||
|
string source = string.Empty;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8);
|
Utils.SetSecurityProtocol();
|
||||||
List<string> lines = ParsePacResult(result);
|
|
||||||
string abpContent = Utils.UnGzip(Resources.abp_js);
|
WebClientEx ws = new WebClientEx();
|
||||||
abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented));
|
|
||||||
File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8);
|
return ws.DownloadString(new Uri(url));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Utils.SaveLog(ex.Message, ex);
|
Utils.SaveLog(ex.Message, ex);
|
||||||
return ex.Message;
|
|
||||||
}
|
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<string> ParsePacResult(string response)
|
|
||||||
{
|
|
||||||
IEnumerable<char> IgnoredLineBegins = new[] { '!', '[' };
|
|
||||||
|
|
||||||
byte[] bytes = Convert.FromBase64String(response);
|
|
||||||
string content = Encoding.UTF8.GetString(bytes);
|
|
||||||
List<string> valid_lines = new List<string>();
|
|
||||||
using (StringReader sr = new StringReader(content))
|
|
||||||
{
|
|
||||||
foreach (string line in sr.NonWhiteSpaceLines())
|
|
||||||
{
|
|
||||||
if (line.BeginWithAny(IgnoredLineBegins))
|
|
||||||
continue;
|
|
||||||
valid_lines.Add(line);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return valid_lines;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace v2rayN.Handler
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Color color = ColorTranslator.FromHtml("#3399CC");
|
Color color = ColorTranslator.FromHtml("#3399CC");
|
||||||
int index = (int)config.listenerType;
|
int index = (int)config.sysProxyType;
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
{
|
{
|
||||||
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1];
|
||||||
|
|||||||
683
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
683
v2rayN/v2rayN/Handler/ShareHandler.cs
Normal file
@@ -0,0 +1,683 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
namespace v2rayN.Handler
|
||||||
|
{
|
||||||
|
class ShareHandler
|
||||||
|
{
|
||||||
|
|
||||||
|
#region GetShareUrl
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// GetShareUrl
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config"></param>
|
||||||
|
/// <param name="index"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetShareUrl(Config config, int index)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string url = string.Empty;
|
||||||
|
|
||||||
|
VmessItem item = config.vmess[index];
|
||||||
|
if (item.configType == (int)EConfigType.Vmess)
|
||||||
|
{
|
||||||
|
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(),
|
||||||
|
net = item.network,
|
||||||
|
type = item.headerType,
|
||||||
|
host = item.requestHost,
|
||||||
|
path = item.path,
|
||||||
|
tls = item.streamSecurity
|
||||||
|
};
|
||||||
|
|
||||||
|
url = Utils.ToJson(vmessQRCode);
|
||||||
|
url = Utils.Base64Encode(url);
|
||||||
|
url = string.Format("{0}{1}", Global.vmessProtocol, url);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (item.configType == (int)EConfigType.Shadowsocks)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark);
|
||||||
|
}
|
||||||
|
else if (item.configType == (int)EConfigType.Socks)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark);
|
||||||
|
}
|
||||||
|
else if (item.configType == (int)EConfigType.Trojan)
|
||||||
|
{
|
||||||
|
string remark = string.Empty;
|
||||||
|
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||||
|
{
|
||||||
|
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||||
|
}
|
||||||
|
string query = string.Empty;
|
||||||
|
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||||
|
{
|
||||||
|
query = string.Format("?sni={0}", Utils.UrlEncode(item.requestHost));
|
||||||
|
}
|
||||||
|
url = string.Format("{0}@{1}:{2}",
|
||||||
|
item.id,
|
||||||
|
item.address,
|
||||||
|
item.port);
|
||||||
|
url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark);
|
||||||
|
}
|
||||||
|
else if (item.configType == (int)EConfigType.VLESS)
|
||||||
|
{
|
||||||
|
string remark = string.Empty;
|
||||||
|
if (!Utils.IsNullOrEmpty(item.remarks))
|
||||||
|
{
|
||||||
|
remark = "#" + Utils.UrlEncode(item.remarks);
|
||||||
|
}
|
||||||
|
var dicQuery = new Dictionary<string, string>();
|
||||||
|
if (!Utils.IsNullOrEmpty(item.flow))
|
||||||
|
{
|
||||||
|
dicQuery.Add("flow", item.flow);
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.security))
|
||||||
|
{
|
||||||
|
dicQuery.Add("encryption", item.security);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("encryption", "none");
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.streamSecurity))
|
||||||
|
{
|
||||||
|
dicQuery.Add("security", item.streamSecurity);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("security", "none");
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.network))
|
||||||
|
{
|
||||||
|
dicQuery.Add("type", item.network);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("type", "tcp");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (item.network)
|
||||||
|
{
|
||||||
|
case "tcp":
|
||||||
|
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", item.headerType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", "none");
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||||
|
{
|
||||||
|
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "kcp":
|
||||||
|
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", item.headerType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", "none");
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.path))
|
||||||
|
{
|
||||||
|
dicQuery.Add("seed", Utils.UrlEncode(item.path));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "ws":
|
||||||
|
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||||
|
{
|
||||||
|
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.path))
|
||||||
|
{
|
||||||
|
dicQuery.Add("path", Utils.UrlEncode(item.path));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "http":
|
||||||
|
case "h2":
|
||||||
|
dicQuery["type"] = "http";
|
||||||
|
if (!Utils.IsNullOrEmpty(item.requestHost))
|
||||||
|
{
|
||||||
|
dicQuery.Add("host", Utils.UrlEncode(item.requestHost));
|
||||||
|
}
|
||||||
|
if (!Utils.IsNullOrEmpty(item.path))
|
||||||
|
{
|
||||||
|
dicQuery.Add("path", Utils.UrlEncode(item.path));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "quic":
|
||||||
|
if (!Utils.IsNullOrEmpty(item.headerType))
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", item.headerType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dicQuery.Add("headerType", "none");
|
||||||
|
}
|
||||||
|
dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost));
|
||||||
|
dicQuery.Add("key", Utils.UrlEncode(item.path));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray());
|
||||||
|
|
||||||
|
url = string.Format("{0}@{1}:{2}",
|
||||||
|
item.id,
|
||||||
|
item.address,
|
||||||
|
item.port);
|
||||||
|
url = string.Format("{0}{1}{2}{3}", Global.vlessProtocol, url, query, remark);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#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 = UIRes.I18N("FailedReadConfiguration");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.StartsWith(Global.vmessProtocol))
|
||||||
|
{
|
||||||
|
int indexSplit = result.IndexOf("?");
|
||||||
|
if (indexSplit > 0)
|
||||||
|
{
|
||||||
|
vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vmessItem.configType = (int)EConfigType.Vmess;
|
||||||
|
result = result.Substring(Global.vmessProtocol.Length);
|
||||||
|
result = Utils.Base64Decode(result);
|
||||||
|
|
||||||
|
//转成Json
|
||||||
|
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
|
||||||
|
if (vmessQRCode == null)
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("FailedConversionConfiguration");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
vmessItem.security = Global.DefaultSecurity;
|
||||||
|
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);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigHandler.UpgradeServerVersion(ref vmessItem);
|
||||||
|
}
|
||||||
|
else if (result.StartsWith(Global.ssProtocol))
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
||||||
|
|
||||||
|
vmessItem = ResolveSSLegacy(result);
|
||||||
|
if (vmessItem == null)
|
||||||
|
{
|
||||||
|
vmessItem = ResolveSip002(result);
|
||||||
|
}
|
||||||
|
if (vmessItem == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
vmessItem.configType = (int)EConfigType.Shadowsocks;
|
||||||
|
}
|
||||||
|
else if (result.StartsWith(Global.socksProtocol))
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
||||||
|
|
||||||
|
vmessItem.configType = (int)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];
|
||||||
|
}
|
||||||
|
else if (result.StartsWith(Global.trojanProtocol))
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
||||||
|
|
||||||
|
vmessItem.configType = (int)EConfigType.Trojan;
|
||||||
|
|
||||||
|
Uri uri = new Uri(result);
|
||||||
|
vmessItem.address = uri.IdnHost;
|
||||||
|
vmessItem.port = uri.Port;
|
||||||
|
vmessItem.id = uri.UserInfo;
|
||||||
|
|
||||||
|
var qurery = HttpUtility.ParseQueryString(uri.Query);
|
||||||
|
vmessItem.requestHost = qurery["sni"] ?? "";
|
||||||
|
|
||||||
|
var remarks = uri.Fragment.Replace("#", "");
|
||||||
|
if (Utils.IsNullOrEmpty(remarks))
|
||||||
|
{
|
||||||
|
vmessItem.remarks = "NONE";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vmessItem.remarks = Utils.UrlDecode(remarks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (result.StartsWith(Global.vlessProtocol))
|
||||||
|
{
|
||||||
|
vmessItem = ResolveStdVLESS(result);
|
||||||
|
|
||||||
|
ConfigHandler.UpgradeServerVersion(ref vmessItem);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("NonvmessOrssProtocol");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
msg = UIRes.I18N("Incorrectconfiguration");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vmessItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static VmessItem ResolveVmess4Kitsunebi(string result)
|
||||||
|
{
|
||||||
|
VmessItem vmessItem = new VmessItem
|
||||||
|
{
|
||||||
|
configType = (int)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";
|
||||||
|
vmessItem.alterId = 0;
|
||||||
|
|
||||||
|
return vmessItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static VmessItem ResolveSip002(string result)
|
||||||
|
{
|
||||||
|
Uri parsedUrl;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
parsedUrl = new Uri(result);
|
||||||
|
}
|
||||||
|
catch (UriFormatException)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
VmessItem server = new VmessItem
|
||||||
|
{
|
||||||
|
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||||
|
address = parsedUrl.IdnHost,
|
||||||
|
port = parsedUrl.Port,
|
||||||
|
};
|
||||||
|
|
||||||
|
// parse base64 UserInfo
|
||||||
|
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
|
||||||
|
string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64
|
||||||
|
string userInfo;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
userInfo = Encoding.UTF8.GetString(Convert.FromBase64String(
|
||||||
|
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')));
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
||||||
|
if (userInfoParts.Length != 2)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
server.security = userInfoParts[0];
|
||||||
|
server.id = userInfoParts[1];
|
||||||
|
|
||||||
|
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
|
||||||
|
if (queryParameters["plugin"] != null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly Regex UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase);
|
||||||
|
private static readonly Regex DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
private static VmessItem ResolveSSLegacy(string result)
|
||||||
|
{
|
||||||
|
var match = UrlFinder.Match(result);
|
||||||
|
if (!match.Success)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
VmessItem server = new VmessItem();
|
||||||
|
var base64 = match.Groups["base64"].Value.TrimEnd('/');
|
||||||
|
var tag = match.Groups["tag"].Value;
|
||||||
|
if (!Utils.IsNullOrEmpty(tag))
|
||||||
|
{
|
||||||
|
server.remarks = Utils.UrlDecode(tag);
|
||||||
|
}
|
||||||
|
Match details;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String(
|
||||||
|
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))));
|
||||||
|
}
|
||||||
|
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})-(?<alterId>[0-9]+)$");
|
||||||
|
|
||||||
|
private static VmessItem ResolveStdVmess(string result)
|
||||||
|
{
|
||||||
|
VmessItem i = new VmessItem
|
||||||
|
{
|
||||||
|
configType = (int)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 (!int.TryParse(m.Groups["alterId"].Value, out int aid))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
i.alterId = aid;
|
||||||
|
|
||||||
|
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 ResolveStdVLESS(string result)
|
||||||
|
{
|
||||||
|
VmessItem item = new VmessItem
|
||||||
|
{
|
||||||
|
configType = (int)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.flow = query["flow"] ?? "";
|
||||||
|
item.security = query["encryption"] ?? "none";
|
||||||
|
item.streamSecurity = query["security"] ?? "";
|
||||||
|
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;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -289,7 +289,7 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
return "Timeout";
|
return "Timeout";
|
||||||
}
|
}
|
||||||
return string.Format("{0}{1}", time, unit).PadLeft(6, ' ');
|
return string.Format("{0}{1}", time, unit).PadLeft(8, ' ');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ namespace v2rayN.Handler
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ServerStatItem> Statistic
|
public List<ServerStatItem> Statistic
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -191,6 +192,25 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ClearAllServerStatistics()
|
||||||
|
{
|
||||||
|
if (serverStatistics_ != null)
|
||||||
|
{
|
||||||
|
foreach (var item in serverStatistics_.server)
|
||||||
|
{
|
||||||
|
item.todayUp = 0;
|
||||||
|
item.todayDown = 0;
|
||||||
|
item.totalUp = 0;
|
||||||
|
item.totalDown = 0;
|
||||||
|
// update ui display to zero
|
||||||
|
updateFunc_(0, 0, new List<ServerStatItem> { item });
|
||||||
|
}
|
||||||
|
|
||||||
|
// update statistic json file
|
||||||
|
SaveToFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ServerStatItem GetServerStatItem(string itemId)
|
private ServerStatItem GetServerStatItem(string itemId)
|
||||||
{
|
{
|
||||||
long ticks = DateTime.Now.Date.Ticks;
|
long ticks = DateTime.Now.Date.Ticks;
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Web;
|
|
||||||
using v2rayN.Base;
|
|
||||||
using v2rayN.Mode;
|
using v2rayN.Mode;
|
||||||
|
|
||||||
namespace v2rayN.Handler
|
namespace v2rayN.Handler
|
||||||
@@ -84,7 +78,7 @@ namespace v2rayN.Handler
|
|||||||
// TODO: 统计配置
|
// TODO: 统计配置
|
||||||
statistic(config, ref v2rayConfig);
|
statistic(config, ref v2rayConfig);
|
||||||
|
|
||||||
Utils.ToJsonFile(v2rayConfig, fileName);
|
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||||
|
|
||||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
|
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
|
||||||
}
|
}
|
||||||
@@ -152,7 +146,7 @@ namespace v2rayN.Handler
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Inbounds inbound = v2rayConfig.inbounds[0];
|
Inbounds inbound = v2rayConfig.inbounds[0];
|
||||||
//端口
|
inbound.tag = Global.InboundSocks;
|
||||||
inbound.port = config.inbound[0].localPort;
|
inbound.port = config.inbound[0].localPort;
|
||||||
inbound.protocol = config.inbound[0].protocol;
|
inbound.protocol = config.inbound[0].protocol;
|
||||||
if (config.allowLANConn)
|
if (config.allowLANConn)
|
||||||
@@ -163,9 +157,17 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
inbound.listen = Global.Loopback;
|
inbound.listen = Global.Loopback;
|
||||||
}
|
}
|
||||||
//开启udp
|
//udp
|
||||||
inbound.settings.udp = config.inbound[0].udpEnabled;
|
inbound.settings.udp = config.inbound[0].udpEnabled;
|
||||||
inbound.sniffing.enabled = config.inbound[0].sniffingEnabled;
|
inbound.sniffing.enabled = config.inbound[0].sniffingEnabled;
|
||||||
|
|
||||||
|
//http
|
||||||
|
Inbounds inbound2 = v2rayConfig.inbounds[1];
|
||||||
|
inbound2.tag = Global.InboundHttp;
|
||||||
|
inbound2.port = config.GetLocalPort(Global.InboundHttp);
|
||||||
|
inbound2.protocol = Global.InboundHttp;
|
||||||
|
inbound2.listen = inbound.listen;
|
||||||
|
inbound2.settings.allowTransparent = false;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@@ -188,88 +190,9 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
v2rayConfig.routing.domainStrategy = config.domainStrategy;
|
v2rayConfig.routing.domainStrategy = config.domainStrategy;
|
||||||
|
|
||||||
//自定义
|
foreach (var item in config.rules)
|
||||||
//需代理
|
|
||||||
routingUserRule(config.useragent, Global.agentTag, ref v2rayConfig);
|
|
||||||
//直连
|
|
||||||
routingUserRule(config.userdirect, Global.directTag, ref v2rayConfig);
|
|
||||||
//阻止
|
|
||||||
routingUserRule(config.userblock, Global.blockTag, ref v2rayConfig);
|
|
||||||
|
|
||||||
|
|
||||||
switch (config.routingMode)
|
|
||||||
{
|
{
|
||||||
case "0":
|
routingUserRule(item, ref v2rayConfig);
|
||||||
break;
|
|
||||||
case "1":
|
|
||||||
routingGeo("ip", "private", Global.directTag, ref v2rayConfig);
|
|
||||||
break;
|
|
||||||
case "2":
|
|
||||||
routingGeo("", "cn", Global.directTag, ref v2rayConfig);
|
|
||||||
break;
|
|
||||||
case "3":
|
|
||||||
routingGeo("ip", "private", Global.directTag, ref v2rayConfig);
|
|
||||||
routingGeo("", "cn", Global.directTag, ref v2rayConfig);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
private static int routingUserRule(List<string> userRule, string tag, ref V2rayConfig v2rayConfig)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (userRule != null
|
|
||||||
&& userRule.Count > 0)
|
|
||||||
{
|
|
||||||
//Domain
|
|
||||||
RulesItem rulesDomain = new RulesItem
|
|
||||||
{
|
|
||||||
type = "field",
|
|
||||||
outboundTag = tag,
|
|
||||||
domain = new List<string>()
|
|
||||||
};
|
|
||||||
|
|
||||||
//IP
|
|
||||||
RulesItem rulesIP = new RulesItem
|
|
||||||
{
|
|
||||||
type = "field",
|
|
||||||
outboundTag = tag,
|
|
||||||
ip = new List<string>()
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (string u in userRule)
|
|
||||||
{
|
|
||||||
string url = u.TrimEx();
|
|
||||||
if (Utils.IsNullOrEmpty(url))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (Utils.IsIP(url) || url.StartsWith("geoip:"))
|
|
||||||
{
|
|
||||||
rulesIP.ip.Add(url);
|
|
||||||
}
|
|
||||||
else if (Utils.IsDomain(url)
|
|
||||||
|| url.StartsWith("geosite:")
|
|
||||||
|| url.StartsWith("regexp:")
|
|
||||||
|| url.StartsWith("domain:")
|
|
||||||
|| url.StartsWith("full:"))
|
|
||||||
{
|
|
||||||
rulesDomain.domain.Add(url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (rulesDomain.domain.Count > 0)
|
|
||||||
{
|
|
||||||
v2rayConfig.routing.rules.Add(rulesDomain);
|
|
||||||
}
|
|
||||||
if (rulesIP.ip.Count > 0)
|
|
||||||
{
|
|
||||||
v2rayConfig.routing.rules.Add(rulesIP);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -278,38 +201,93 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
private static int routingUserRule(RulesItem rules, ref V2rayConfig v2rayConfig)
|
||||||
|
|
||||||
private static int routingGeo(string ipOrDomain, string code, string tag, ref V2rayConfig v2rayConfig)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!Utils.IsNullOrEmpty(code))
|
if (rules == null)
|
||||||
{
|
{
|
||||||
//IP
|
return 0;
|
||||||
if (ipOrDomain == "ip" || ipOrDomain == "")
|
}
|
||||||
|
if (Utils.IsNullOrEmpty(rules.port))
|
||||||
{
|
{
|
||||||
RulesItem rulesItem = new RulesItem
|
rules.port = null;
|
||||||
|
}
|
||||||
|
if (rules.domain != null && rules.domain.Count == 0)
|
||||||
{
|
{
|
||||||
type = "field",
|
rules.domain = null;
|
||||||
outboundTag = Global.directTag,
|
}
|
||||||
ip = new List<string>()
|
if (rules.ip != null && rules.ip.Count == 0)
|
||||||
};
|
{
|
||||||
rulesItem.ip.Add($"geoip:{code}");
|
rules.ip = null;
|
||||||
|
}
|
||||||
v2rayConfig.routing.rules.Add(rulesItem);
|
if (rules.protocol != null && rules.protocol.Count == 0)
|
||||||
|
{
|
||||||
|
rules.protocol = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ipOrDomain == "domain" || ipOrDomain == "")
|
var hasDomainIp = false;
|
||||||
|
if (rules.domain != null && rules.domain.Count > 0)
|
||||||
{
|
{
|
||||||
RulesItem rulesItem = new RulesItem
|
var it = Utils.DeepCopy(rules);
|
||||||
|
it.ip = null;
|
||||||
|
it.type = "field";
|
||||||
|
for (int k = 0; k < it.domain.Count; k++)
|
||||||
{
|
{
|
||||||
type = "field",
|
it.domain[k] = it.domain[k].Replace(Global.RoutingRuleComma, ",");
|
||||||
outboundTag = Global.directTag,
|
}
|
||||||
domain = new List<string>()
|
//if (Utils.IsNullOrEmpty(it.port))
|
||||||
};
|
//{
|
||||||
rulesItem.domain.Add($"geosite:{code}");
|
// it.port = null;
|
||||||
v2rayConfig.routing.rules.Add(rulesItem);
|
//}
|
||||||
|
//if (it.protocol != null && it.protocol.Count == 0)
|
||||||
|
//{
|
||||||
|
// it.protocol = null;
|
||||||
|
//}
|
||||||
|
v2rayConfig.routing.rules.Add(it);
|
||||||
|
hasDomainIp = true;
|
||||||
|
}
|
||||||
|
if (rules.ip != null && rules.ip.Count > 0)
|
||||||
|
{
|
||||||
|
var it = Utils.DeepCopy(rules);
|
||||||
|
it.domain = null;
|
||||||
|
it.type = "field";
|
||||||
|
//if (Utils.IsNullOrEmpty(it.port))
|
||||||
|
//{
|
||||||
|
// it.port = null;
|
||||||
|
//}
|
||||||
|
//if (it.protocol != null && it.protocol.Count == 0)
|
||||||
|
//{
|
||||||
|
// it.protocol = null;
|
||||||
|
//}
|
||||||
|
v2rayConfig.routing.rules.Add(it);
|
||||||
|
hasDomainIp = true;
|
||||||
|
}
|
||||||
|
if (!hasDomainIp)
|
||||||
|
{
|
||||||
|
if (!Utils.IsNullOrEmpty(rules.port))
|
||||||
|
{
|
||||||
|
var it = Utils.DeepCopy(rules);
|
||||||
|
//it.domain = null;
|
||||||
|
//it.ip = null;
|
||||||
|
//if (it.protocol != null && it.protocol.Count == 0)
|
||||||
|
//{
|
||||||
|
// it.protocol = null;
|
||||||
|
//}
|
||||||
|
it.type = "field";
|
||||||
|
v2rayConfig.routing.rules.Add(it);
|
||||||
|
}
|
||||||
|
else if (rules.protocol != null && rules.protocol.Count > 0)
|
||||||
|
{
|
||||||
|
var it = Utils.DeepCopy(rules);
|
||||||
|
//it.domain = null;
|
||||||
|
//it.ip = null;
|
||||||
|
//if (Utils.IsNullOrEmpty(it.port))
|
||||||
|
//{
|
||||||
|
// it.port = null;
|
||||||
|
//}
|
||||||
|
it.type = "field";
|
||||||
|
v2rayConfig.routing.rules.Add(it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -488,7 +466,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
usersItem.flow = config.flow();
|
usersItem.flow = config.flow().Replace("splice", "direct");
|
||||||
}
|
}
|
||||||
|
|
||||||
outbound.mux.enabled = false;
|
outbound.mux.enabled = false;
|
||||||
@@ -625,7 +603,6 @@ namespace v2rayN.Handler
|
|||||||
case "ws":
|
case "ws":
|
||||||
WsSettings wsSettings = new WsSettings
|
WsSettings wsSettings = new WsSettings
|
||||||
{
|
{
|
||||||
connectionReuse = true
|
|
||||||
};
|
};
|
||||||
|
|
||||||
string path = config.path();
|
string path = config.path();
|
||||||
@@ -689,7 +666,6 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
TcpSettings tcpSettings = new TcpSettings
|
TcpSettings tcpSettings = new TcpSettings
|
||||||
{
|
{
|
||||||
connectionReuse = true,
|
|
||||||
header = new Header
|
header = new Header
|
||||||
{
|
{
|
||||||
type = config.headerType()
|
type = config.headerType()
|
||||||
@@ -746,6 +722,14 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var obj = Utils.ParseJson(config.remoteDNS);
|
||||||
|
if (obj != null && obj.ContainsKey("servers"))
|
||||||
|
{
|
||||||
|
v2rayConfig.dns = obj;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
List<string> servers = new List<string>();
|
List<string> servers = new List<string>();
|
||||||
|
|
||||||
string[] arrDNS = config.remoteDNS.Split(',');
|
string[] arrDNS = config.remoteDNS.Split(',');
|
||||||
@@ -762,6 +746,7 @@ namespace v2rayN.Handler
|
|||||||
servers = servers
|
servers = servers
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -785,8 +770,8 @@ namespace v2rayN.Handler
|
|||||||
apiObj.services = services.ToList();
|
apiObj.services = services.ToList();
|
||||||
v2rayConfig.api = apiObj;
|
v2rayConfig.api = apiObj;
|
||||||
|
|
||||||
policySystemSetting.statsInboundDownlink = true;
|
policySystemSetting.statsOutboundDownlink = true;
|
||||||
policySystemSetting.statsInboundUplink = true;
|
policySystemSetting.statsOutboundUplink = true;
|
||||||
policyObj.system = policySystemSetting;
|
policyObj.system = policySystemSetting;
|
||||||
v2rayConfig.policy = policyObj;
|
v2rayConfig.policy = policyObj;
|
||||||
|
|
||||||
@@ -919,7 +904,7 @@ namespace v2rayN.Handler
|
|||||||
//传出设置
|
//传出设置
|
||||||
ServerOutbound(config, ref v2rayConfig);
|
ServerOutbound(config, ref v2rayConfig);
|
||||||
|
|
||||||
Utils.ToJsonFile(v2rayConfig, fileName);
|
Utils.ToJsonFile(v2rayConfig, fileName, false);
|
||||||
|
|
||||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
|
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
|
||||||
}
|
}
|
||||||
@@ -1297,179 +1282,6 @@ namespace v2rayN.Handler
|
|||||||
return vmessItem;
|
return vmessItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <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 = UIRes.I18N("FailedReadConfiguration");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.StartsWith(Global.vmessProtocol))
|
|
||||||
{
|
|
||||||
int indexSplit = result.IndexOf("?");
|
|
||||||
if (indexSplit > 0)
|
|
||||||
{
|
|
||||||
vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vmessItem.configType = (int)EConfigType.Vmess;
|
|
||||||
result = result.Substring(Global.vmessProtocol.Length);
|
|
||||||
result = Utils.Base64Decode(result);
|
|
||||||
|
|
||||||
//转成Json
|
|
||||||
VmessQRCode vmessQRCode = Utils.FromJson<VmessQRCode>(result);
|
|
||||||
if (vmessQRCode == null)
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("FailedConversionConfiguration");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
vmessItem.security = Global.DefaultSecurity;
|
|
||||||
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);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigHandler.UpgradeServerVersion(ref vmessItem);
|
|
||||||
}
|
|
||||||
else if (result.StartsWith(Global.ssProtocol))
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
|
||||||
|
|
||||||
vmessItem = ResolveSSLegacy(result);
|
|
||||||
if (vmessItem == null)
|
|
||||||
{
|
|
||||||
vmessItem = ResolveSip002(result);
|
|
||||||
}
|
|
||||||
if (vmessItem == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
vmessItem.configType = (int)EConfigType.Shadowsocks;
|
|
||||||
}
|
|
||||||
else if (result.StartsWith(Global.socksProtocol))
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
|
||||||
|
|
||||||
vmessItem.configType = (int)EConfigType.Socks;
|
|
||||||
result = result.Substring(Global.socksProtocol.Length);
|
|
||||||
//remark
|
|
||||||
int indexRemark = result.IndexOf("#");
|
|
||||||
if (indexRemark > 0)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
vmessItem.remarks = WebUtility.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];
|
|
||||||
}
|
|
||||||
else if (result.StartsWith(Global.trojanProtocol))
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("ConfigurationFormatIncorrect");
|
|
||||||
|
|
||||||
vmessItem.configType = (int)EConfigType.Trojan;
|
|
||||||
|
|
||||||
Uri uri = new Uri(result);
|
|
||||||
vmessItem.address = uri.IdnHost;
|
|
||||||
vmessItem.port = uri.Port;
|
|
||||||
vmessItem.id = uri.UserInfo;
|
|
||||||
|
|
||||||
var qurery = HttpUtility.ParseQueryString(uri.Query);
|
|
||||||
vmessItem.requestHost = qurery["sni"] ?? "";
|
|
||||||
|
|
||||||
var remarks = uri.Fragment.Replace("#", "");
|
|
||||||
if (Utils.IsNullOrEmpty(remarks))
|
|
||||||
{
|
|
||||||
vmessItem.remarks = "NONE";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vmessItem.remarks = WebUtility.UrlDecode(remarks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("NonvmessOrssProtocol");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
msg = UIRes.I18N("Incorrectconfiguration");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return vmessItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 导出为客户端配置
|
/// 导出为客户端配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1494,216 +1306,6 @@ namespace v2rayN.Handler
|
|||||||
return GenerateServerConfig(config, fileName, out msg);
|
return GenerateServerConfig(config, fileName, out msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static VmessItem ResolveVmess4Kitsunebi(string result)
|
|
||||||
{
|
|
||||||
VmessItem vmessItem = new VmessItem
|
|
||||||
{
|
|
||||||
configType = (int)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";
|
|
||||||
vmessItem.alterId = 0;
|
|
||||||
|
|
||||||
return vmessItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static VmessItem ResolveSip002(string result)
|
|
||||||
{
|
|
||||||
Uri parsedUrl;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
parsedUrl = new Uri(result);
|
|
||||||
}
|
|
||||||
catch (UriFormatException)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
VmessItem server = new VmessItem
|
|
||||||
{
|
|
||||||
remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
|
||||||
address = parsedUrl.IdnHost,
|
|
||||||
port = parsedUrl.Port,
|
|
||||||
};
|
|
||||||
|
|
||||||
// parse base64 UserInfo
|
|
||||||
string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped);
|
|
||||||
string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64
|
|
||||||
string userInfo;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
userInfo = Encoding.UTF8.GetString(Convert.FromBase64String(
|
|
||||||
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')));
|
|
||||||
}
|
|
||||||
catch (FormatException)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2);
|
|
||||||
if (userInfoParts.Length != 2)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
server.security = userInfoParts[0];
|
|
||||||
server.id = userInfoParts[1];
|
|
||||||
|
|
||||||
NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query);
|
|
||||||
if (queryParameters["plugin"] != null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly Regex UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase);
|
|
||||||
private static readonly Regex DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase);
|
|
||||||
|
|
||||||
private static VmessItem ResolveSSLegacy(string result)
|
|
||||||
{
|
|
||||||
var match = UrlFinder.Match(result);
|
|
||||||
if (!match.Success)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
VmessItem server = new VmessItem();
|
|
||||||
var base64 = match.Groups["base64"].Value.TrimEnd('/');
|
|
||||||
var tag = match.Groups["tag"].Value;
|
|
||||||
if (!tag.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
Match details;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String(
|
|
||||||
base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))));
|
|
||||||
}
|
|
||||||
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})-(?<alterId>[0-9]+)$");
|
|
||||||
|
|
||||||
private static VmessItem ResolveStdVmess(string result)
|
|
||||||
{
|
|
||||||
VmessItem i = new VmessItem
|
|
||||||
{
|
|
||||||
configType = (int)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 (!int.TryParse(m.Groups["alterId"].Value, out int aid))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
i.alterId = aid;
|
|
||||||
|
|
||||||
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 = h1;
|
|
||||||
i.path = p1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "http":
|
|
||||||
i.network = "h2";
|
|
||||||
string p2 = q["path"] ?? "/";
|
|
||||||
string h2 = q["host"] ?? "";
|
|
||||||
i.requestHost = 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 = s;
|
|
||||||
i.path = k;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Gen speedtest config
|
#region Gen speedtest config
|
||||||
@@ -1745,7 +1347,7 @@ namespace v2rayN.Handler
|
|||||||
//routing(config, ref v2rayConfig);
|
//routing(config, ref v2rayConfig);
|
||||||
dns(configCopy, ref v2rayConfig);
|
dns(configCopy, ref v2rayConfig);
|
||||||
|
|
||||||
v2rayConfig.inbounds.RemoveAt(0); // Remove "proxy" service for speedtest, avoiding port conflicts.
|
v2rayConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts.
|
||||||
|
|
||||||
int httpPort = configCopy.GetLocalPort("speedtest");
|
int httpPort = configCopy.GetLocalPort("speedtest");
|
||||||
foreach (int index in selecteds)
|
foreach (int index in selecteds)
|
||||||
|
|||||||
@@ -22,17 +22,13 @@ namespace v2rayN.Handler
|
|||||||
{
|
{
|
||||||
private static string v2rayConfigRes = Global.v2rayConfigFileName;
|
private static string v2rayConfigRes = Global.v2rayConfigFileName;
|
||||||
private List<string> lstV2ray;
|
private List<string> lstV2ray;
|
||||||
|
private string coreUrl;
|
||||||
public event ProcessDelegate ProcessEvent;
|
public event ProcessDelegate ProcessEvent;
|
||||||
//private int processId = 0;
|
//private int processId = 0;
|
||||||
private Process _process;
|
private Process _process;
|
||||||
|
|
||||||
public V2rayHandler()
|
public V2rayHandler()
|
||||||
{
|
{
|
||||||
lstV2ray = new List<string>
|
|
||||||
{
|
|
||||||
"wv2ray",
|
|
||||||
"v2ray"
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -40,6 +36,24 @@ namespace v2rayN.Handler
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void LoadV2ray(Config config)
|
public void LoadV2ray(Config config)
|
||||||
{
|
{
|
||||||
|
if (config.coreType == ECoreType.v2fly_core)
|
||||||
|
{
|
||||||
|
lstV2ray = new List<string>
|
||||||
|
{
|
||||||
|
"wv2ray",
|
||||||
|
"v2ray"
|
||||||
|
};
|
||||||
|
coreUrl = Global.v2flyCoreUrl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lstV2ray = new List<string>
|
||||||
|
{
|
||||||
|
"xray"
|
||||||
|
};
|
||||||
|
coreUrl = Global.xrayCoreUrl;
|
||||||
|
}
|
||||||
|
|
||||||
if (Global.reloadV2ray)
|
if (Global.reloadV2ray)
|
||||||
{
|
{
|
||||||
string fileName = Utils.GetPath(v2rayConfigRes);
|
string fileName = Utils.GetPath(v2rayConfigRes);
|
||||||
@@ -158,10 +172,11 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string V2rayFindexe() {
|
private string V2rayFindexe()
|
||||||
|
{
|
||||||
//查找v2ray文件是否存在
|
//查找v2ray文件是否存在
|
||||||
string fileName = string.Empty;
|
string fileName = string.Empty;
|
||||||
lstV2ray.Reverse();
|
//lstV2ray.Reverse();
|
||||||
foreach (string name in lstV2ray)
|
foreach (string name in lstV2ray)
|
||||||
{
|
{
|
||||||
string vName = string.Format("{0}.exe", name);
|
string vName = string.Format("{0}.exe", name);
|
||||||
@@ -174,7 +189,7 @@ namespace v2rayN.Handler
|
|||||||
}
|
}
|
||||||
if (Utils.IsNullOrEmpty(fileName))
|
if (Utils.IsNullOrEmpty(fileName))
|
||||||
{
|
{
|
||||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases");
|
string msg = string.Format(UIRes.I18N("NotFoundCore"), coreUrl);
|
||||||
ShowMsg(false, msg);
|
ShowMsg(false, msg);
|
||||||
}
|
}
|
||||||
return fileName;
|
return fileName;
|
||||||
|
|||||||
@@ -10,23 +10,20 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
{
|
{
|
||||||
noHttpProxy = 0,
|
noHttpProxy = 0,
|
||||||
GlobalHttp = 1,
|
GlobalHttp = 1,
|
||||||
GlobalPac = 2,
|
HttpOpenAndClear = 2,
|
||||||
HttpOpenAndClear = 3,
|
HttpOpenOnly = 3,
|
||||||
PacOpenAndClear = 4,
|
|
||||||
HttpOpenOnly = 5,
|
|
||||||
PacOpenOnly = 6
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 系统代理(http)总处理
|
/// 系统代理(http)总处理
|
||||||
/// 启动privoxy提供http协议
|
/// 启动privoxy提供http协议
|
||||||
/// 设置IE系统代理或者PAC模式
|
/// 设置IE系统代理
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class HttpProxyHandle
|
class HttpProxyHandle
|
||||||
{
|
{
|
||||||
private static bool Update(Config config, bool forceDisable)
|
private static bool Update(Config config, bool forceDisable)
|
||||||
{
|
{
|
||||||
ListenerType type = config.listenerType;
|
// ListenerType type = config.listenerType;
|
||||||
|
var type = ListenerType.noHttpProxy;
|
||||||
if (forceDisable)
|
if (forceDisable)
|
||||||
{
|
{
|
||||||
type = ListenerType.noHttpProxy;
|
type = ListenerType.noHttpProxy;
|
||||||
@@ -43,47 +40,21 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
}
|
}
|
||||||
if (type == ListenerType.GlobalHttp)
|
if (type == ListenerType.GlobalHttp)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
|
||||||
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
|
//ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2);
|
||||||
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
||||||
}
|
}
|
||||||
else if (type == ListenerType.GlobalPac)
|
|
||||||
{
|
|
||||||
string pacUrl = GetPacUrl();
|
|
||||||
//ProxySetting.SetProxy(pacUrl, "", 4);
|
|
||||||
SysProxyHandle.SetIEProxy(true, false, pacUrl);
|
|
||||||
//PACServerHandle.Stop();
|
|
||||||
PACServerHandle.Init(config);
|
|
||||||
}
|
|
||||||
else if (type == ListenerType.HttpOpenAndClear)
|
else if (type == ListenerType.HttpOpenAndClear)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
|
||||||
SysProxyHandle.ResetIEProxy();
|
SysProxyHandle.ResetIEProxy();
|
||||||
}
|
}
|
||||||
else if (type == ListenerType.PacOpenAndClear)
|
|
||||||
{
|
|
||||||
string pacUrl = GetPacUrl();
|
|
||||||
SysProxyHandle.ResetIEProxy();
|
|
||||||
//PACServerHandle.Stop();
|
|
||||||
PACServerHandle.Init(config);
|
|
||||||
}
|
|
||||||
else if (type == ListenerType.HttpOpenOnly)
|
else if (type == ListenerType.HttpOpenOnly)
|
||||||
{
|
{
|
||||||
//PACServerHandle.Stop();
|
|
||||||
//SysProxyHandle.ResetIEProxy();
|
//SysProxyHandle.ResetIEProxy();
|
||||||
}
|
}
|
||||||
else if (type == ListenerType.PacOpenOnly)
|
|
||||||
{
|
|
||||||
string pacUrl = GetPacUrl();
|
|
||||||
//SysProxyHandle.ResetIEProxy();
|
|
||||||
//PACServerHandle.Stop();
|
|
||||||
PACServerHandle.Init(config);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SysProxyHandle.ResetIEProxy();
|
SysProxyHandle.ResetIEProxy();
|
||||||
//PACServerHandle.Stop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -110,7 +81,6 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
Global.sysAgent = true;
|
Global.sysAgent = true;
|
||||||
Global.socksPort = localPort;
|
Global.socksPort = localPort;
|
||||||
Global.httpPort = PrivoxyHandler.Instance.RunningPort;
|
Global.httpPort = PrivoxyHandler.Instance.RunningPort;
|
||||||
Global.pacPort = config.GetLocalPort("pac");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,10 +97,10 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly)
|
//if (config.listenerType != ListenerType.HttpOpenOnly)
|
||||||
{
|
//{
|
||||||
Update(config, true);
|
// Update(config, true);
|
||||||
}
|
//}
|
||||||
|
|
||||||
PrivoxyHandler.Instance.Stop();
|
PrivoxyHandler.Instance.Stop();
|
||||||
|
|
||||||
@@ -151,11 +121,11 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
public static void RestartHttpAgent(Config config, bool forced)
|
public static void RestartHttpAgent(Config config, bool forced)
|
||||||
{
|
{
|
||||||
bool isRestart = false;
|
bool isRestart = false;
|
||||||
if (config.listenerType == ListenerType.noHttpProxy)
|
//if (config.listenerType == ListenerType.noHttpProxy)
|
||||||
{
|
//{
|
||||||
// 关闭http proxy时,直接返回
|
// // 关闭http proxy时,直接返回
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
//强制重启或者socks端口变化
|
//强制重启或者socks端口变化
|
||||||
if (forced)
|
if (forced)
|
||||||
{
|
{
|
||||||
@@ -177,10 +147,40 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
Update(config, false);
|
Update(config, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetPacUrl()
|
public static bool UpdateSysProxy(Config config, bool forceDisable)
|
||||||
{
|
{
|
||||||
string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}";
|
var type = config.sysProxyType;
|
||||||
return pacUrl;
|
|
||||||
|
if (forceDisable)
|
||||||
|
{
|
||||||
|
type = ESysProxyType.ForcedClear;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Global.httpPort = config.GetLocalPort(Global.InboundHttp);
|
||||||
|
int port = Global.httpPort;
|
||||||
|
if (port <= 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (type == ESysProxyType.ForcedChange)
|
||||||
|
{
|
||||||
|
SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}");
|
||||||
|
}
|
||||||
|
else if (type == ESysProxyType.ForcedClear)
|
||||||
|
{
|
||||||
|
SysProxyHandle.ResetIEProxy();
|
||||||
|
}
|
||||||
|
else if (type == ESysProxyType.Unchanged)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Utils.SaveLog(ex.Message, ex);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,209 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using v2rayN.Mode;
|
|
||||||
using v2rayN.Properties;
|
|
||||||
using v2rayN.Tool;
|
|
||||||
using v2rayN.Base;
|
|
||||||
|
|
||||||
namespace v2rayN.HttpProxyHandler
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 提供PAC功能支持
|
|
||||||
/// </summary>
|
|
||||||
class PACServerHandle
|
|
||||||
{
|
|
||||||
private static int pacPort = 0;
|
|
||||||
private static HttpWebServer server;
|
|
||||||
private static HttpWebServerB serverB;
|
|
||||||
private static Config _config;
|
|
||||||
|
|
||||||
public static bool IsRunning
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (pacPort > 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Init(Config config)
|
|
||||||
{
|
|
||||||
_config = config;
|
|
||||||
Global.pacPort = config.GetLocalPort("pac");
|
|
||||||
|
|
||||||
if (InitServer("*"))
|
|
||||||
{
|
|
||||||
pacPort = Global.pacPort;
|
|
||||||
}
|
|
||||||
//else if (InitServer(Global.Loopback))
|
|
||||||
//{
|
|
||||||
// pacPort = Global.pacPort;
|
|
||||||
//}
|
|
||||||
else if (InitServerB(Global.Loopback))
|
|
||||||
{
|
|
||||||
pacPort = Global.pacPort;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Utils.SaveLog("Webserver init failed ");
|
|
||||||
pacPort = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool InitServer(string address)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (pacPort != Global.pacPort)
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
server.Stop();
|
|
||||||
server = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (server == null)
|
|
||||||
{
|
|
||||||
string prefixes = string.Format("http://{0}:{1}/pac/", address, Global.pacPort);
|
|
||||||
Utils.SaveLog("Webserver prefixes " + prefixes);
|
|
||||||
|
|
||||||
server = new HttpWebServer(SendResponse, prefixes);
|
|
||||||
server.Run();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Utils.SaveLog("Webserver at " + address);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog("Webserver InitServer " + ex.Message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool InitServerB(string address)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (pacPort != Global.pacPort)
|
|
||||||
{
|
|
||||||
if (serverB != null)
|
|
||||||
{
|
|
||||||
serverB.Stop();
|
|
||||||
serverB = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (serverB == null)
|
|
||||||
{
|
|
||||||
serverB = new HttpWebServerB(Global.pacPort, SendResponse);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Utils.SaveLog("WebserverB at " + address);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog("WebserverB InitServer " + ex.Message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string SendResponse(string address)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string pac = GetPacList(address);
|
|
||||||
return pac;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog("Webserver SendResponse " + ex.Message);
|
|
||||||
return ex.Message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Stop()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
server.Stop();
|
|
||||||
server = null;
|
|
||||||
}
|
|
||||||
if (serverB != null)
|
|
||||||
{
|
|
||||||
serverB.Stop();
|
|
||||||
serverB = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Utils.SaveLog("Webserver Stop " + ex.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
//try
|
|
||||||
//{
|
|
||||||
// if (httpWebServer == null)
|
|
||||||
// {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// foreach (var key in httpWebServer.Keys)
|
|
||||||
// {
|
|
||||||
// Utils.SaveLog("Webserver Stop " + key.ToString());
|
|
||||||
// ((HttpWebServer)httpWebServer[key]).Stop();
|
|
||||||
// }
|
|
||||||
// httpWebServer.Clear();
|
|
||||||
//}
|
|
||||||
//catch (Exception ex)
|
|
||||||
//{
|
|
||||||
// Utils.SaveLog("Webserver Stop " + ex.Message);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string GetPacList(string address)
|
|
||||||
{
|
|
||||||
int port = Global.httpPort;
|
|
||||||
if (port <= 0)
|
|
||||||
{
|
|
||||||
return "No port";
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
List<string> lstProxy = new List<string>
|
|
||||||
{
|
|
||||||
string.Format("PROXY {0}:{1};", address, port)
|
|
||||||
};
|
|
||||||
string proxy = string.Join("", lstProxy.ToArray());
|
|
||||||
|
|
||||||
string strPacfile = Utils.GetPath(Global.pacFILE);
|
|
||||||
if (!File.Exists(strPacfile))
|
|
||||||
{
|
|
||||||
FileManager.UncompressFile(strPacfile, Resources.pac_txt);
|
|
||||||
}
|
|
||||||
string pac = File.ReadAllText(strPacfile, Encoding.UTF8);
|
|
||||||
pac = pac.Replace("__PROXY__", proxy);
|
|
||||||
|
|
||||||
if (_config.userPacRule.Count > 0)
|
|
||||||
{
|
|
||||||
string keyWords = "var rules = [";
|
|
||||||
if (pac.IndexOf(keyWords) >= 0)
|
|
||||||
{
|
|
||||||
string userPac = string.Join($"\",{Environment.NewLine}\"", _config.userPacRule.ToArray());
|
|
||||||
userPac = string.Format("\"{0}\",", userPac);
|
|
||||||
pac = pac.Replace(keyWords, keyWords + userPac);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pac;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return "No pac content";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -74,7 +74,7 @@ namespace v2rayN.HttpProxyHandler
|
|||||||
if (_process == null)
|
if (_process == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
string privoxyConfig = Resources.privoxy_conf;
|
string privoxyConfig = "";//Resources.privoxy_conf;
|
||||||
RunningPort = config.GetLocalPort(Global.InboundHttp);
|
RunningPort = config.GetLocalPort(Global.InboundHttp);
|
||||||
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
|
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
|
||||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
|
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
|
||||||
|
|||||||
14
v2rayN/v2rayN/Mode/ComboItem.cs
Normal file
14
v2rayN/v2rayN/Mode/ComboItem.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
namespace v2rayN.Mode
|
||||||
|
{
|
||||||
|
class ComboItem
|
||||||
|
{
|
||||||
|
public int ID
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,39 +67,6 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 路由模式
|
|
||||||
/// </summary>
|
|
||||||
public string routingMode
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户自定义需代理的网址或ip
|
|
||||||
/// </summary>
|
|
||||||
public List<string> useragent
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户自定义直连的网址或ip
|
|
||||||
/// </summary>
|
|
||||||
public List<string> userdirect
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户自定义阻止的网址或ip
|
|
||||||
/// </summary>
|
|
||||||
public List<string> userblock
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// KcpItem
|
/// KcpItem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -109,9 +76,9 @@ namespace v2rayN.Mode
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 监听状态
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ListenerType listenerType
|
public ESysProxyType sysProxyType
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
@@ -130,13 +97,6 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// 自定义GFWList url
|
|
||||||
/// </summary>
|
|
||||||
public string urlGFWList
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 允许来自局域网的连接
|
/// 允许来自局域网的连接
|
||||||
@@ -201,8 +161,20 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
public List<RulesItem> rules
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public List<SubItem> ruleSubItem
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
public List<string> userPacRule
|
public ECoreType coreType
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
public bool ignoreGeoUpdateCore
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
@@ -317,10 +289,7 @@ namespace v2rayN.Mode
|
|||||||
{
|
{
|
||||||
return GetLocalPort(Global.InboundSocks) + 1;
|
return GetLocalPort(Global.InboundSocks) + 1;
|
||||||
}
|
}
|
||||||
else if (protocol == "pac")
|
|
||||||
{
|
|
||||||
return GetLocalPort(Global.InboundSocks) + 2;
|
|
||||||
}
|
|
||||||
else if (protocol == "speedtest")
|
else if (protocol == "speedtest")
|
||||||
{
|
{
|
||||||
return GetLocalPort(Global.InboundSocks) + 103;
|
return GetLocalPort(Global.InboundSocks) + 103;
|
||||||
|
|||||||
9
v2rayN/v2rayN/Mode/ECoreType.cs
Normal file
9
v2rayN/v2rayN/Mode/ECoreType.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
namespace v2rayN.Mode
|
||||||
|
{
|
||||||
|
public enum ECoreType
|
||||||
|
{
|
||||||
|
v2fly_core = 0,
|
||||||
|
Xray_core = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
10
v2rayN/v2rayN/Mode/ESysProxyType.cs
Normal file
10
v2rayN/v2rayN/Mode/ESysProxyType.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
namespace v2rayN.Mode
|
||||||
|
{
|
||||||
|
public enum ESysProxyType
|
||||||
|
{
|
||||||
|
ForcedClear = 0,
|
||||||
|
ForcedChange = 1,
|
||||||
|
Unchanged = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
27
v2rayN/v2rayN/Mode/RulesItem.cs
Normal file
27
v2rayN/v2rayN/Mode/RulesItem.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace v2rayN.Mode
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class RulesItem
|
||||||
|
{
|
||||||
|
public string remarks { get; set; }
|
||||||
|
|
||||||
|
public string type { get; set; }
|
||||||
|
|
||||||
|
public string port { get; set; }
|
||||||
|
|
||||||
|
public List<string> inboundTag { get; set; }
|
||||||
|
|
||||||
|
public string outboundTag { get; set; }
|
||||||
|
|
||||||
|
public List<string> ip { get; set; }
|
||||||
|
|
||||||
|
public List<string> domain { get; set; }
|
||||||
|
|
||||||
|
public List<string> protocol { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -35,7 +35,7 @@ namespace v2rayN.Mode
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// DNS 配置
|
/// DNS 配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dns dns { get; set; }
|
public object dns { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 路由配置
|
/// 路由配置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -57,8 +57,8 @@ namespace v2rayN.Mode
|
|||||||
|
|
||||||
public class SystemPolicy
|
public class SystemPolicy
|
||||||
{
|
{
|
||||||
public bool statsInboundUplink;
|
public bool statsOutboundUplink;
|
||||||
public bool statsInboundDownlink;
|
public bool statsOutboundDownlink;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Log
|
public class Log
|
||||||
@@ -139,6 +139,8 @@ namespace v2rayN.Mode
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string decryption { get; set; }
|
public string decryption { get; set; }
|
||||||
|
|
||||||
|
public bool allowTransparent { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UsersItem
|
public class UsersItem
|
||||||
@@ -321,34 +323,6 @@ namespace v2rayN.Mode
|
|||||||
public List<string> servers { get; set; }
|
public List<string> servers { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RulesItem
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public string type { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public string port { get; set; }
|
|
||||||
|
|
||||||
public List<string> inboundTag { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public string outboundTag { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public List<string> ip { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public List<string> domain { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Routing
|
public class Routing
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -421,10 +395,6 @@ namespace v2rayN.Mode
|
|||||||
|
|
||||||
public class TcpSettings
|
public class TcpSettings
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// 是否重用 TCP 连接
|
|
||||||
/// </summary>
|
|
||||||
public bool connectionReuse { get; set; }
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据包头部伪装设置
|
/// 数据包头部伪装设置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -489,11 +459,6 @@ namespace v2rayN.Mode
|
|||||||
|
|
||||||
public class WsSettings
|
public class WsSettings
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public bool connectionReuse { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
|
|||||||
// 方法是按如下所示使用“*”:
|
// 方法是按如下所示使用“*”:
|
||||||
//[assembly: AssemblyVersion("1.0.*")]
|
//[assembly: AssemblyVersion("1.0.*")]
|
||||||
//[assembly: AssemblyVersion("1.0.0")]
|
//[assembly: AssemblyVersion("1.0.0")]
|
||||||
[assembly: AssemblyFileVersion("3.27")]
|
[assembly: AssemblyFileVersion("4.6")]
|
||||||
|
|||||||
39
v2rayN/v2rayN/Properties/Resources.Designer.cs
generated
39
v2rayN/v2rayN/Properties/Resources.Designer.cs
generated
@@ -19,7 +19,7 @@ namespace v2rayN.Properties {
|
|||||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources {
|
||||||
@@ -70,16 +70,6 @@ namespace v2rayN.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 查找 System.Byte[] 类型的本地化资源。
|
|
||||||
/// </summary>
|
|
||||||
internal static byte[] abp_js {
|
|
||||||
get {
|
|
||||||
object obj = ResourceManager.GetObject("abp_js", resourceCulture);
|
|
||||||
return ((byte[])(obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -130,33 +120,6 @@ namespace v2rayN.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 查找 System.Byte[] 类型的本地化资源。
|
|
||||||
/// </summary>
|
|
||||||
internal static byte[] pac_txt {
|
|
||||||
get {
|
|
||||||
object obj = ResourceManager.GetObject("pac_txt", resourceCulture);
|
|
||||||
return ((byte[])(obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__
|
|
||||||
///toggle 0
|
|
||||||
///logfile v2ray_privoxy.log
|
|
||||||
///show-on-task-bar 0
|
|
||||||
///activity-animation 0
|
|
||||||
///forward-socks5 / 127.0.0.1:__SOCKS_PORT__ .
|
|
||||||
///max-client-connections 2048
|
|
||||||
///hide-console
|
|
||||||
/// 的本地化字符串。
|
|
||||||
/// </summary>
|
|
||||||
internal static string privoxy_conf {
|
|
||||||
get {
|
|
||||||
return ResourceManager.GetString("privoxy_conf", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找 System.Byte[] 类型的本地化资源。
|
/// 查找 System.Byte[] 类型的本地化资源。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -151,21 +151,12 @@
|
|||||||
<data name="sysproxy64_exe" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="sysproxy64_exe" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\resources\sysproxy64.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>..\resources\sysproxy64.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="privoxy_conf" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\resources\privoxy_conf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
|
||||||
</data>
|
|
||||||
<data name="minimize" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="minimize" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pac_txt" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\Resources\pac.txt.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="abp_js" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\Resources\abp.js.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name="share" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="share" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,8 +0,0 @@
|
|||||||
listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__
|
|
||||||
toggle 0
|
|
||||||
logfile v2ray_privoxy.log
|
|
||||||
show-on-task-bar 0
|
|
||||||
activity-animation 0
|
|
||||||
forward-socks5 / 127.0.0.1:__SOCKS_PORT__ .
|
|
||||||
max-client-connections 2048
|
|
||||||
hide-console
|
|
||||||
36
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
36
v2rayN/v2rayN/Resx/ResUI.Designer.cs
generated
@@ -627,6 +627,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Operation success 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string OperationSuccess {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("OperationSuccess", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 Please Fill Remarks 的本地化字符串。
|
/// 查找类似 Please Fill Remarks 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -654,6 +663,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Please select rules 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string PleaseSelectRules {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("PleaseSelectRules", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 Please select the server first 的本地化字符串。
|
/// 查找类似 Please select the server first 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -681,6 +699,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Are you sure to remove the rules? 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string RemoveRules {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("RemoveRules", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 Are you sure to remove the server? 的本地化字符串。
|
/// 查找类似 Are you sure to remove the server? 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -690,6 +717,15 @@ namespace v2rayN.Resx {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 {0},One of the required. 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
internal static string RoutingRuleDetailRequiredTips {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("RoutingRuleDetailRequiredTips", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 The client configuration file is saved at: {0} 的本地化字符串。
|
/// 查找类似 The client configuration file is saved at: {0} 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -361,4 +361,16 @@
|
|||||||
<data name="TestMeOutput" xml:space="preserve">
|
<data name="TestMeOutput" xml:space="preserve">
|
||||||
<value>The ping of current service: {0}</value>
|
<value>The ping of current service: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OperationSuccess" xml:space="preserve">
|
||||||
|
<value>Operation success</value>
|
||||||
|
</data>
|
||||||
|
<data name="PleaseSelectRules" xml:space="preserve">
|
||||||
|
<value>Please select rules</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemoveRules" xml:space="preserve">
|
||||||
|
<value>Are you sure to remove the rules?</value>
|
||||||
|
</data>
|
||||||
|
<data name="RoutingRuleDetailRequiredTips" xml:space="preserve">
|
||||||
|
<value>{0},One of the required.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -361,4 +361,16 @@
|
|||||||
<data name="TestMeOutput" xml:space="preserve">
|
<data name="TestMeOutput" xml:space="preserve">
|
||||||
<value>当前服务的真连接延迟: {0}</value>
|
<value>当前服务的真连接延迟: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OperationSuccess" xml:space="preserve">
|
||||||
|
<value>操作成功</value>
|
||||||
|
</data>
|
||||||
|
<data name="PleaseSelectRules" xml:space="preserve">
|
||||||
|
<value>请先选择规则</value>
|
||||||
|
</data>
|
||||||
|
<data name="RemoveRules" xml:space="preserve">
|
||||||
|
<value>是否确定移除规则?</value>
|
||||||
|
</data>
|
||||||
|
<data name="RoutingRuleDetailRequiredTips" xml:space="preserve">
|
||||||
|
<value>{0},必填其中一项.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
|||||||
var proxy = "__PROXY__";
|
|
||||||
|
|
||||||
function FindProxyForURL(url, host) {
|
|
||||||
return proxy;
|
|
||||||
}
|
|
||||||
@@ -1,17 +1,11 @@
|
|||||||
{
|
{
|
||||||
"log": {
|
|
||||||
"access": "",
|
|
||||||
"error": "",
|
|
||||||
"loglevel": "error"
|
|
||||||
},
|
|
||||||
"log": {
|
"log": {
|
||||||
"access": "Vaccess.log",
|
"access": "Vaccess.log",
|
||||||
"error": "Verror.log",
|
"error": "Verror.log",
|
||||||
"loglevel": "warning"
|
"loglevel": "warning"
|
||||||
},
|
},
|
||||||
"inbounds": [
|
"inbounds": [{
|
||||||
{
|
"tag": "tag1",
|
||||||
"tag": "proxy",
|
|
||||||
"port": 10808,
|
"port": 10808,
|
||||||
"protocol": "socks",
|
"protocol": "socks",
|
||||||
"listen": "127.0.0.1",
|
"listen": "127.0.0.1",
|
||||||
@@ -26,6 +20,22 @@
|
|||||||
"tls"
|
"tls"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "tag2",
|
||||||
|
"port": 10809,
|
||||||
|
"protocol": "socks",
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"settings": {
|
||||||
|
"allowTransparent": false
|
||||||
|
},
|
||||||
|
"sniffing": {
|
||||||
|
"enabled": true,
|
||||||
|
"destOverride": [
|
||||||
|
"http",
|
||||||
|
"tls"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"outbounds": [{
|
"outbounds": [{
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
geosite:category-ads,
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
domain:12306.com,
|
|
||||||
domain:51ym.me,
|
|
||||||
domain:52pojie.cn,
|
|
||||||
domain:8686c.com,
|
|
||||||
domain:abercrombie.com,
|
|
||||||
domain:adobesc.com,
|
|
||||||
domain:air-matters.com,
|
|
||||||
domain:air-matters.io,
|
|
||||||
domain:airtable.com,
|
|
||||||
domain:akadns.net,
|
|
||||||
domain:apache.org,
|
|
||||||
domain:api.crisp.chat,
|
|
||||||
domain:api.termius.com,
|
|
||||||
domain:appshike.com,
|
|
||||||
domain:appstore.com,
|
|
||||||
domain:aweme.snssdk.com,
|
|
||||||
domain:bababian.com,
|
|
||||||
domain:battle.net,
|
|
||||||
domain:beatsbydre.com,
|
|
||||||
domain:bet365.com,
|
|
||||||
domain:bilibili.cn,
|
|
||||||
domain:ccgslb.com,
|
|
||||||
domain:ccgslb.net,
|
|
||||||
domain:chunbo.com,
|
|
||||||
domain:chunboimg.com,
|
|
||||||
domain:clashroyaleapp.com,
|
|
||||||
domain:cloudsigma.com,
|
|
||||||
domain:cloudxns.net,
|
|
||||||
domain:cmfu.com,
|
|
||||||
domain:culturedcode.com,
|
|
||||||
domain:dct-cloud.com,
|
|
||||||
domain:didialift.com,
|
|
||||||
domain:douyutv.com,
|
|
||||||
domain:duokan.com,
|
|
||||||
domain:dytt8.net,
|
|
||||||
domain:easou.com,
|
|
||||||
domain:ecitic.net,
|
|
||||||
domain:eclipse.org,
|
|
||||||
domain:eudic.net,
|
|
||||||
domain:ewqcxz.com,
|
|
||||||
domain:fir.im,
|
|
||||||
domain:frdic.com,
|
|
||||||
domain:fresh-ideas.cc,
|
|
||||||
domain:godic.net,
|
|
||||||
domain:goodread.com,
|
|
||||||
domain:haibian.com,
|
|
||||||
domain:hdslb.net,
|
|
||||||
domain:hollisterco.com,
|
|
||||||
domain:hongxiu.com,
|
|
||||||
domain:hxcdn.net,
|
|
||||||
domain:images.unsplash.com,
|
|
||||||
domain:img4me.com,
|
|
||||||
domain:ipify.org,
|
|
||||||
domain:ixdzs.com,
|
|
||||||
domain:jd.hk,
|
|
||||||
domain:jianshuapi.com,
|
|
||||||
domain:jomodns.com,
|
|
||||||
domain:jsboxbbs.com,
|
|
||||||
domain:knewone.com,
|
|
||||||
domain:kuaidi100.com,
|
|
||||||
domain:lemicp.com,
|
|
||||||
domain:letvcloud.com,
|
|
||||||
domain:lizhi.io,
|
|
||||||
domain:localizecdn.com,
|
|
||||||
domain:lucifr.com,
|
|
||||||
domain:luoo.net,
|
|
||||||
domain:mai.tn,
|
|
||||||
domain:maven.org,
|
|
||||||
domain:miwifi.com,
|
|
||||||
domain:moji.com,
|
|
||||||
domain:moke.com,
|
|
||||||
domain:mtalk.google.com,
|
|
||||||
domain:mxhichina.com,
|
|
||||||
domain:myqcloud.com,
|
|
||||||
domain:myunlu.com,
|
|
||||||
domain:netease.com,
|
|
||||||
domain:nfoservers.com,
|
|
||||||
domain:nssurge.com,
|
|
||||||
domain:nuomi.com,
|
|
||||||
domain:ourdvs.com,
|
|
||||||
domain:overcast.fm,
|
|
||||||
domain:paypal.com,
|
|
||||||
domain:paypalobjects.com,
|
|
||||||
domain:pgyer.com,
|
|
||||||
domain:qdaily.com,
|
|
||||||
domain:qdmm.com,
|
|
||||||
domain:qin.io,
|
|
||||||
domain:qingmang.me,
|
|
||||||
domain:qingmang.mobi,
|
|
||||||
domain:qqurl.com,
|
|
||||||
domain:rarbg.to,
|
|
||||||
domain:rrmj.tv,
|
|
||||||
domain:ruguoapp.com,
|
|
||||||
domain:sm.ms,
|
|
||||||
domain:snwx.com,
|
|
||||||
domain:soku.com,
|
|
||||||
domain:startssl.com,
|
|
||||||
domain:store.steampowered.com,
|
|
||||||
domain:symcd.com,
|
|
||||||
domain:teamviewer.com,
|
|
||||||
domain:tmzvps.com,
|
|
||||||
domain:trello.com,
|
|
||||||
domain:trellocdn.com,
|
|
||||||
domain:ttmeiju.com,
|
|
||||||
domain:udache.com,
|
|
||||||
domain:uxengine.net,
|
|
||||||
domain:weather.bjango.com,
|
|
||||||
domain:weather.com,
|
|
||||||
domain:webqxs.com,
|
|
||||||
domain:weico.cc,
|
|
||||||
domain:wenku8.net,
|
|
||||||
domain:werewolf.53site.com,
|
|
||||||
domain:windowsupdate.com,
|
|
||||||
domain:wkcdn.com,
|
|
||||||
domain:workflowy.com,
|
|
||||||
domain:xdrig.com,
|
|
||||||
domain:xiaojukeji.com,
|
|
||||||
domain:xiaomi.net,
|
|
||||||
domain:xiaomicp.com,
|
|
||||||
domain:ximalaya.com,
|
|
||||||
domain:xitek.com,
|
|
||||||
domain:xmcdn.com,
|
|
||||||
domain:xslb.net,
|
|
||||||
domain:xteko.com,
|
|
||||||
domain:yach.me,
|
|
||||||
domain:yixia.com,
|
|
||||||
domain:yunjiasu-cdn.net,
|
|
||||||
domain:zealer.com,
|
|
||||||
domain:zgslb.net,
|
|
||||||
domain:zimuzu.tv,
|
|
||||||
domain:zmz002.com,
|
|
||||||
domain:samsungdm.com,
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
geosite:google,
|
|
||||||
geosite:github,
|
|
||||||
geosite:netflix,
|
|
||||||
geosite:steam,
|
|
||||||
geosite:telegram,
|
|
||||||
geosite:tumblr,
|
|
||||||
geosite:speedtest,
|
|
||||||
geosite:bbc,
|
|
||||||
domain:gvt1.com,
|
|
||||||
domain:textnow.com,
|
|
||||||
domain:twitch.tv,
|
|
||||||
domain:wikileaks.org,
|
|
||||||
domain:naver.com,
|
|
||||||
91.108.4.0/22,
|
|
||||||
91.108.8.0/22,
|
|
||||||
91.108.12.0/22,
|
|
||||||
91.108.20.0/22,
|
|
||||||
91.108.36.0/23,
|
|
||||||
91.108.38.0/23,
|
|
||||||
91.108.56.0/22,
|
|
||||||
149.154.160.0/20,
|
|
||||||
149.154.164.0/22,
|
|
||||||
149.154.172.0/22,
|
|
||||||
74.125.0.0/16,
|
|
||||||
173.194.0.0/16,
|
|
||||||
172.217.0.0/16,
|
|
||||||
216.58.200.0/24,
|
|
||||||
216.58.220.0/24,
|
|
||||||
91.108.56.116,
|
|
||||||
91.108.56.0/24,
|
|
||||||
109.239.140.0/24,
|
|
||||||
149.154.167.0/24,
|
|
||||||
149.154.175.0/24,
|
|
||||||
28
v2rayN/v2rayN/Sample/custom_routing_rules
Normal file
28
v2rayN/v2rayN/Sample/custom_routing_rules
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
[{
|
||||||
|
"remarks": "block",
|
||||||
|
"outboundTag": "block",
|
||||||
|
"domain": [
|
||||||
|
"geosite:category-ads-all"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"remarks": "direct",
|
||||||
|
"outboundTag": "direct",
|
||||||
|
"domain": [
|
||||||
|
"geosite:cn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"remarks": "direct",
|
||||||
|
"outboundTag": "direct",
|
||||||
|
"ip": [
|
||||||
|
"geoip:private",
|
||||||
|
"geoip:cn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"remarks": "proxy",
|
||||||
|
"port": "0-65535",
|
||||||
|
"outboundTag": "proxy"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace v2rayN
|
|
||||||
{
|
|
||||||
class CDateTime
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 设置本地系统时间
|
|
||||||
/// </summary>
|
|
||||||
public static void SetLocalTime()
|
|
||||||
{
|
|
||||||
using (WebClient wc = new WebClient())
|
|
||||||
{
|
|
||||||
string url = "";
|
|
||||||
string result = string.Empty;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
wc.Encoding = Encoding.UTF8;
|
|
||||||
wc.DownloadStringCompleted += wc_DownloadStringCompleted;
|
|
||||||
wc.DownloadStringAsync(new Uri(url));
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string result = e.Result;
|
|
||||||
if (Utils.IsNullOrEmpty(result))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
EWebTime webTime = Utils.FromJson<EWebTime>(result);
|
|
||||||
if (webTime != null
|
|
||||||
&& webTime.result != null
|
|
||||||
&& webTime.result.stime != null
|
|
||||||
&& !Utils.IsNullOrEmpty(webTime.result.stime))
|
|
||||||
{
|
|
||||||
DateTime dtWeb = GetTimeFromLinux(webTime.result.stime);
|
|
||||||
|
|
||||||
SYSTEMTIME st = new SYSTEMTIME();
|
|
||||||
st.FromDateTime(dtWeb);
|
|
||||||
|
|
||||||
//调用Win32 API设置系统时间
|
|
||||||
Win32API.SetLocalTime(ref st);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 时间戳转为C#格式时间
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="timeStamp"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private static DateTime GetTimeFromLinux(string timeStamp)
|
|
||||||
{
|
|
||||||
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
|
|
||||||
long lTime = long.Parse(timeStamp + "0000000");
|
|
||||||
TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public struct SYSTEMTIME
|
|
||||||
{
|
|
||||||
public ushort wYear;
|
|
||||||
public ushort wMonth;
|
|
||||||
public ushort wDayOfWeek;
|
|
||||||
public ushort wDay;
|
|
||||||
public ushort wHour;
|
|
||||||
public ushort wMinute;
|
|
||||||
public ushort wSecond;
|
|
||||||
public ushort wMilliseconds;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 从System.DateTime转换。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="time">System.DateTime类型的时间。</param>
|
|
||||||
public void FromDateTime(DateTime time)
|
|
||||||
{
|
|
||||||
wYear = (ushort)time.Year;
|
|
||||||
wMonth = (ushort)time.Month;
|
|
||||||
wDayOfWeek = (ushort)time.DayOfWeek;
|
|
||||||
wDay = (ushort)time.Day;
|
|
||||||
wHour = (ushort)time.Hour;
|
|
||||||
wMinute = (ushort)time.Minute;
|
|
||||||
wSecond = (ushort)time.Second;
|
|
||||||
wMilliseconds = (ushort)time.Millisecond;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 转换为System.DateTime类型。
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public DateTime ToDateTime()
|
|
||||||
{
|
|
||||||
return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 静态方法。转换为System.DateTime类型。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="time">SYSTEMTIME类型的时间。</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static DateTime ToDateTime(SYSTEMTIME time)
|
|
||||||
{
|
|
||||||
return time.ToDateTime();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Win32API
|
|
||||||
{
|
|
||||||
[DllImport("Kernel32.dll")]
|
|
||||||
public static extern bool SetLocalTime(ref SYSTEMTIME Time);
|
|
||||||
[DllImport("Kernel32.dll")]
|
|
||||||
public static extern void GetLocalTime(ref SYSTEMTIME Time);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class WTResult
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public string stime { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EWebTime
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public WTResult result { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public int error_code { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public string reason { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ namespace v2rayN.Tool
|
|||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static bool ZipExtractToFile(string fileName)
|
public static bool ZipExtractToFile(string fileName, string ignoredName)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -82,6 +82,10 @@ namespace v2rayN.Tool
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (!Utils.IsNullOrEmpty(ignoredName) && entry.Name.Contains(ignoredName))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
entry.ExtractToFile(Utils.GetPath(entry.Name), true);
|
entry.ExtractToFile(Utils.GetPath(entry.Name), true);
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
|
|||||||
@@ -19,13 +19,14 @@ using ZXing.Common;
|
|||||||
using ZXing.QrCode;
|
using ZXing.QrCode;
|
||||||
using System.Security.Principal;
|
using System.Security.Principal;
|
||||||
using v2rayN.Base;
|
using v2rayN.Base;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
namespace v2rayN
|
namespace v2rayN
|
||||||
{
|
{
|
||||||
class Utils
|
class Utils
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
#region 资源Json操作
|
#region 资源Json操作
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -119,16 +120,22 @@ namespace v2rayN
|
|||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
/// <param name="filePath"></param>
|
/// <param name="filePath"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static int ToJsonFile(Object obj, string filePath)
|
public static int ToJsonFile(Object obj, string filePath, bool nullValue = true)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (StreamWriter file = File.CreateText(filePath))
|
using (StreamWriter file = File.CreateText(filePath))
|
||||||
{
|
{
|
||||||
//JsonSerializer serializer = new JsonSerializer();
|
JsonSerializer serializer;
|
||||||
JsonSerializer serializer = new JsonSerializer() { Formatting = Formatting.Indented };
|
if (nullValue)
|
||||||
//JsonSerializer serializer = new JsonSerializer() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore };
|
{
|
||||||
|
serializer = new JsonSerializer() { Formatting = Formatting.Indented };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
serializer = new JsonSerializer() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore };
|
||||||
|
}
|
||||||
|
|
||||||
serializer.Serialize(file, obj);
|
serializer.Serialize(file, obj);
|
||||||
}
|
}
|
||||||
@@ -140,6 +147,19 @@ namespace v2rayN
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static JObject ParseJson(string strJson)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JObject obj = JObject.Parse(strJson);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 转换函数
|
#region 转换函数
|
||||||
@@ -350,6 +370,14 @@ namespace v2rayN
|
|||||||
result = list;
|
result = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string UrlEncode(string url)
|
||||||
|
{
|
||||||
|
return HttpUtility.UrlEncode(url);
|
||||||
|
}
|
||||||
|
public static string UrlDecode(string url)
|
||||||
|
{
|
||||||
|
return HttpUtility.UrlDecode(url);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -782,6 +810,10 @@ namespace v2rayN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void AddSubItem(ListViewItem i, string name, string text)
|
||||||
|
{
|
||||||
|
i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text });
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region TempPath
|
#region TempPath
|
||||||
|
|||||||
@@ -125,12 +125,32 @@
|
|||||||
<Compile Include="Forms\BaseServerForm.Designer.cs">
|
<Compile Include="Forms\BaseServerForm.Designer.cs">
|
||||||
<DependentUpon>BaseServerForm.cs</DependentUpon>
|
<DependentUpon>BaseServerForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSettingDetailsForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSettingDetailsForm.Designer.cs">
|
||||||
|
<DependentUpon>RoutingSettingDetailsForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSubSettingForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSubSettingForm.Designer.cs">
|
||||||
|
<DependentUpon>RoutingSubSettingForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Handler\ShareHandler.cs" />
|
||||||
|
<Compile Include="Mode\ComboItem.cs" />
|
||||||
<Compile Include="Forms\MainForm.cs">
|
<Compile Include="Forms\MainForm.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Forms\MainForm.Designer.cs">
|
<Compile Include="Forms\MainForm.Designer.cs">
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSettingForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Forms\RoutingSettingForm.Designer.cs">
|
||||||
|
<DependentUpon>RoutingSettingForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Forms\SubSettingForm.cs">
|
<Compile Include="Forms\SubSettingForm.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -165,18 +185,18 @@
|
|||||||
<Compile Include="Handler\SpeedtestHandler.cs" />
|
<Compile Include="Handler\SpeedtestHandler.cs" />
|
||||||
<Compile Include="Handler\StatisticsHandler.cs" />
|
<Compile Include="Handler\StatisticsHandler.cs" />
|
||||||
<Compile Include="Handler\DownloadHandle.cs" />
|
<Compile Include="Handler\DownloadHandle.cs" />
|
||||||
<Compile Include="Base\HttpWebServer.cs" />
|
|
||||||
<Compile Include="Base\HttpWebServerB.cs" />
|
|
||||||
<Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
|
<Compile Include="HttpProxyHandler\PrivoxyHandler.cs" />
|
||||||
<Compile Include="HttpProxyHandler\PACServerHandle.cs" />
|
|
||||||
<Compile Include="HttpProxyHandler\ProxySetting.cs" />
|
<Compile Include="HttpProxyHandler\ProxySetting.cs" />
|
||||||
<Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
|
<Compile Include="HttpProxyHandler\HttpProxyHandle.cs" />
|
||||||
<Compile Include="Base\WebClientEx.cs">
|
<Compile Include="Base\WebClientEx.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="HttpProxyHandler\SysProxyHandle.cs" />
|
<Compile Include="HttpProxyHandler\SysProxyHandle.cs" />
|
||||||
|
<Compile Include="Mode\ECoreType.cs" />
|
||||||
|
<Compile Include="Mode\ESysProxyType.cs" />
|
||||||
<Compile Include="Mode\EMove.cs" />
|
<Compile Include="Mode\EMove.cs" />
|
||||||
<Compile Include="Mode\EServerColName.cs" />
|
<Compile Include="Mode\EServerColName.cs" />
|
||||||
|
<Compile Include="Mode\RulesItem.cs" />
|
||||||
<Compile Include="Mode\ServerStatistics.cs" />
|
<Compile Include="Mode\ServerStatistics.cs" />
|
||||||
<Compile Include="Mode\SysproxyConfig.cs" />
|
<Compile Include="Mode\SysproxyConfig.cs" />
|
||||||
<Compile Include="Mode\EConfigType.cs" />
|
<Compile Include="Mode\EConfigType.cs" />
|
||||||
@@ -287,6 +307,20 @@
|
|||||||
<DependentUpon>QRCodeControl.cs</DependentUpon>
|
<DependentUpon>QRCodeControl.cs</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSettingDetailsForm.resx">
|
||||||
|
<DependentUpon>RoutingSettingDetailsForm.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSettingDetailsForm.zh-Hans.resx">
|
||||||
|
<DependentUpon>RoutingSettingDetailsForm.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSubSettingForm.resx">
|
||||||
|
<DependentUpon>RoutingSubSettingForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSubSettingForm.zh-Hans.resx">
|
||||||
|
<DependentUpon>RoutingSubSettingForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Forms\SubSettingControl.resx">
|
<EmbeddedResource Include="Forms\SubSettingControl.resx">
|
||||||
<DependentUpon>SubSettingControl.cs</DependentUpon>
|
<DependentUpon>SubSettingControl.cs</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@@ -294,6 +328,13 @@
|
|||||||
<EmbeddedResource Include="Forms\SubSettingControl.zh-Hans.resx">
|
<EmbeddedResource Include="Forms\SubSettingControl.zh-Hans.resx">
|
||||||
<DependentUpon>SubSettingControl.cs</DependentUpon>
|
<DependentUpon>SubSettingControl.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSettingForm.resx">
|
||||||
|
<DependentUpon>RoutingSettingForm.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Forms\RoutingSettingForm.zh-Hans.resx">
|
||||||
|
<DependentUpon>RoutingSettingForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Forms\SubSettingForm.resx">
|
<EmbeddedResource Include="Forms\SubSettingForm.resx">
|
||||||
<DependentUpon>SubSettingForm.cs</DependentUpon>
|
<DependentUpon>SubSettingForm.cs</DependentUpon>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@@ -341,14 +382,10 @@
|
|||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
<EmbeddedResource Include="Sample\custom_routing_block" />
|
|
||||||
<EmbeddedResource Include="Sample\custom_routing_direct" />
|
|
||||||
<EmbeddedResource Include="Sample\custom_routing_proxy" />
|
|
||||||
<None Include="Resources\sysproxy.exe.gz" />
|
<None Include="Resources\sysproxy.exe.gz" />
|
||||||
<None Include="Resources\sysproxy64.exe.gz" />
|
<None Include="Resources\sysproxy64.exe.gz" />
|
||||||
|
<EmbeddedResource Include="Sample\custom_routing_rules" />
|
||||||
<Protobuf Include="Protos\Statistics.proto" />
|
<Protobuf Include="Protos\Statistics.proto" />
|
||||||
<None Include="Resources\abp.js.gz" />
|
|
||||||
<None Include="Resources\pac.txt.gz" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="Resx\ResUI.zh-Hans.resx">
|
<EmbeddedResource Include="Resx\ResUI.zh-Hans.resx">
|
||||||
@@ -411,13 +448,11 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\share.png" />
|
<None Include="Resources\share.png" />
|
||||||
<None Include="Resources\promotion.png" />
|
<None Include="Resources\promotion.png" />
|
||||||
<EmbeddedResource Include="Sample\BlankPac.txt" />
|
|
||||||
<None Include="Resources\sub.png" />
|
<None Include="Resources\sub.png" />
|
||||||
<None Include="Resources\checkupdate.png" />
|
<None Include="Resources\checkupdate.png" />
|
||||||
<None Include="Resources\about.png" />
|
<None Include="Resources\about.png" />
|
||||||
<Content Include="Resources\help.png" />
|
<Content Include="Resources\help.png" />
|
||||||
<None Include="Resources\notify.png" />
|
<None Include="Resources\notify.png" />
|
||||||
<Content Include="Resources\privoxy_conf.txt" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Google.Protobuf">
|
<PackageReference Include="Google.Protobuf">
|
||||||
|
|||||||
Reference in New Issue
Block a user