mirror of https://github.com/2dust/v2rayN
up speedtest
parent
d5c69c7838
commit
5aee97320b
|
@ -328,7 +328,7 @@ namespace v2rayN.Forms
|
|||
|
||||
if (config.sysAgentEnabled)
|
||||
{
|
||||
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.sysAgentPort}";
|
||||
toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}";
|
||||
if (config.listenerType == 2 || config.listenerType == 4)
|
||||
{
|
||||
if (PACServerHandle.IsRunning)
|
||||
|
@ -1252,7 +1252,7 @@ namespace v2rayN.Forms
|
|||
{
|
||||
if (isChecked)
|
||||
{
|
||||
if (HttpProxyHandle.RestartHttpAgent(config, true))
|
||||
if (HttpProxyHandle.RestartHttpAgent(config, false))
|
||||
{
|
||||
ChangePACButtonStatus(config.listenerType);
|
||||
}
|
||||
|
@ -1299,7 +1299,7 @@ namespace v2rayN.Forms
|
|||
}
|
||||
else
|
||||
{
|
||||
downloadHandle.DownloadFileAsync(config, url, false);
|
||||
downloadHandle.DownloadFileAsync(config, url, null);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace v2rayN.Forms
|
|||
chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled;
|
||||
|
||||
txtlocalPort2.Text = "socks + 1";
|
||||
cmbprotocol2.Text = "http";
|
||||
cmbprotocol2.Text = Global.InboundHttp;
|
||||
|
||||
if (config.inbound.Count > 1)
|
||||
{
|
||||
|
|
|
@ -102,6 +102,13 @@ namespace v2rayN
|
|||
/// </summary>
|
||||
public const string StreamSecurity = "tls";
|
||||
|
||||
public const string InboundSocks = "socks";
|
||||
public const string InboundHttp = "http";
|
||||
public const string Loopback = "127.0.0.1";
|
||||
public const string InboundAPITagName = "api";
|
||||
public const string InboundAPIProtocal = "dokodemo-door";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// vmess
|
||||
/// </summary>
|
||||
|
@ -147,12 +154,6 @@ namespace v2rayN
|
|||
/// </summary>
|
||||
public const string CustomIconName = "v2rayN.ico";
|
||||
|
||||
public const string Loopback = "127.0.0.1";
|
||||
|
||||
public const string InboundAPITagName = "api";
|
||||
public const string InboundProxyTagName = "proxy";
|
||||
public const string InboundAPIProtocal = "dokodemo-door";
|
||||
|
||||
public enum StatisticsFreshRate
|
||||
{
|
||||
quick = 1000,
|
||||
|
@ -177,17 +178,17 @@ namespace v2rayN
|
|||
public static bool sysAgent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// socks端口号
|
||||
/// socks端口
|
||||
/// </summary>
|
||||
public static int socksPort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 全局代理端口(http)
|
||||
/// http端口
|
||||
/// </summary>
|
||||
public static int sysAgentPort { get; set; }
|
||||
public static int httpPort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PAC监听端口号
|
||||
/// PAC端口
|
||||
/// </summary>
|
||||
public static int pacPort { get; set; }
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ namespace v2rayN.Handler
|
|||
{
|
||||
config.inbound = new List<InItem>();
|
||||
InItem inItem = new InItem();
|
||||
inItem.protocol = "socks";
|
||||
inItem.protocol = Global.InboundSocks;
|
||||
inItem.localPort = 10808;
|
||||
inItem.udpEnabled = true;
|
||||
inItem.sniffingEnabled = true;
|
||||
|
@ -76,7 +76,7 @@ namespace v2rayN.Handler
|
|||
//http协议不由core提供,只保留socks
|
||||
if (config.inbound.Count > 0)
|
||||
{
|
||||
config.inbound[0].protocol = "socks";
|
||||
config.inbound[0].protocol = Global.InboundSocks;
|
||||
}
|
||||
}
|
||||
//路由规则
|
||||
|
|
|
@ -87,7 +87,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
|
||||
|
||||
public void DownloadFileAsync(Config config, string url, bool blProxy)
|
||||
public void DownloadFileAsync(Config config, string url, WebProxy webProxy)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -101,9 +101,9 @@ namespace v2rayN.Handler
|
|||
progressPercentage = -1;
|
||||
|
||||
WebClientEx ws = new WebClientEx();
|
||||
if (blProxy)
|
||||
if (webProxy != null)
|
||||
{
|
||||
ws.Proxy = new WebProxy(Global.Loopback, Global.sysAgentPort);
|
||||
ws.Proxy = webProxy;// new WebProxy(Global.Loopback, Global.httpPort);
|
||||
}
|
||||
|
||||
ws.DownloadFileCompleted += ws_DownloadFileCompleted;
|
||||
|
|
|
@ -88,7 +88,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
Thread.Sleep(100);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -119,7 +119,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
Thread.Sleep(100);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -132,6 +132,12 @@ namespace v2rayN.Handler
|
|||
{
|
||||
try
|
||||
{
|
||||
string msg = string.Empty;
|
||||
|
||||
Global.reloadV2ray = true;
|
||||
_v2rayHandler.LoadV2ray(_config, _selecteds);
|
||||
|
||||
var httpPort = _config.GetLocalPort("speedtest");
|
||||
for (int k = 0; k < _selecteds.Count; k++)
|
||||
{
|
||||
int index = _selecteds[k];
|
||||
|
@ -139,20 +145,12 @@ namespace v2rayN.Handler
|
|||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (ConfigHandler.SetDefaultServer(ref _config, index) == 0)
|
||||
{
|
||||
_v2rayHandler.LoadV2ray(_config);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
Thread.Sleep(1000 * 5);
|
||||
|
||||
var webProxy = new WebProxy(Global.Loopback, httpPort + index);
|
||||
int responseTime = -1;
|
||||
var status = GetRealPingTime(Global.SpeedPingTestUrl, out responseTime);
|
||||
var status = GetRealPingTime(Global.SpeedPingTestUrl, webProxy, out responseTime);
|
||||
if (!Utils.IsNullOrEmpty(status))
|
||||
{
|
||||
_updateFunc(index, string.Format("{0}", status));
|
||||
|
@ -166,9 +164,12 @@ namespace v2rayN.Handler
|
|||
{
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
}
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
|
||||
Thread.Sleep(1);
|
||||
Global.reloadV2ray = true;
|
||||
_v2rayHandler.LoadV2ray(_config);
|
||||
Thread.Sleep(100);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -184,6 +185,9 @@ namespace v2rayN.Handler
|
|||
return;
|
||||
}
|
||||
|
||||
Global.reloadV2ray = true;
|
||||
_v2rayHandler.LoadV2ray(_config, _selecteds);
|
||||
|
||||
string url = Global.SpeedTestUrl;
|
||||
testCounter = 0;
|
||||
if (downloadHandle2 == null)
|
||||
|
@ -213,6 +217,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (ServerSpeedTestSub(testCounter, url) != 0)
|
||||
{
|
||||
return;
|
||||
|
@ -223,23 +228,19 @@ namespace v2rayN.Handler
|
|||
{
|
||||
if (index >= _selecteds.Count)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ConfigHandler.SetDefaultServer(ref _config, _selecteds[index]) == 0)
|
||||
{
|
||||
Global.reloadV2ray = true;
|
||||
_v2rayHandler.LoadV2ray(_config);
|
||||
|
||||
testCounter++;
|
||||
|
||||
downloadHandle2.DownloadFileAsync(_config, url,true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
var httpPort = _config.GetLocalPort("speedtest");
|
||||
index = _selecteds[index];
|
||||
|
||||
testCounter++;
|
||||
var webProxy = new WebProxy(Global.Loopback, httpPort + index);
|
||||
downloadHandle2.DownloadFileAsync(_config, url, webProxy);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int GetTcpingTime(string url, int port)
|
||||
|
@ -267,7 +268,7 @@ namespace v2rayN.Handler
|
|||
return responseTime;
|
||||
}
|
||||
|
||||
private string GetRealPingTime(string url, out int responseTime)
|
||||
private string GetRealPingTime(string url, WebProxy webProxy, out int responseTime)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
responseTime = -1;
|
||||
|
@ -276,7 +277,7 @@ namespace v2rayN.Handler
|
|||
{
|
||||
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
||||
myHttpWebRequest.Timeout = 5000;
|
||||
myHttpWebRequest.Proxy = new WebProxy(Global.Loopback, Global.sysAgentPort);
|
||||
myHttpWebRequest.Proxy = webProxy;//new WebProxy(Global.Loopback, Global.httpPort);
|
||||
|
||||
var timer = new Stopwatch();
|
||||
timer.Start();
|
||||
|
|
|
@ -192,7 +192,7 @@ namespace v2rayN.Handler
|
|||
name = nStr[1];
|
||||
type = nStr[3];
|
||||
|
||||
if (name == Global.InboundProxyTagName)
|
||||
if (name == Global.agentTag)
|
||||
{
|
||||
if (type == "uplink")
|
||||
{
|
||||
|
|
|
@ -1365,5 +1365,90 @@ namespace v2rayN.Handler
|
|||
|
||||
#endregion
|
||||
|
||||
#region Gen speedtest config
|
||||
|
||||
|
||||
public static int GenerateClientSpeedtestConfig(Config config, List<int> selecteds, string fileName, out string msg)
|
||||
{
|
||||
msg = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
if (config == null
|
||||
|| config.index < 0
|
||||
|| config.vmess.Count <= 0
|
||||
|| config.index > config.vmess.Count - 1
|
||||
)
|
||||
{
|
||||
msg = UIRes.I18N("CheckServerSettings");
|
||||
return -1;
|
||||
}
|
||||
|
||||
msg = UIRes.I18N("InitialConfiguration");
|
||||
|
||||
string result = Utils.GetEmbedText(SampleClient);
|
||||
if (Utils.IsNullOrEmpty(result))
|
||||
{
|
||||
msg = UIRes.I18N("FailedGetDefaultConfiguration");
|
||||
return -1;
|
||||
}
|
||||
|
||||
V2rayConfig v2rayConfig = Utils.FromJson<V2rayConfig>(result);
|
||||
if (v2rayConfig == null)
|
||||
{
|
||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
||||
return -1;
|
||||
}
|
||||
|
||||
log(config, ref v2rayConfig, false);
|
||||
//routing(config, ref v2rayConfig);
|
||||
dns(config, ref v2rayConfig);
|
||||
|
||||
|
||||
var httpPort = config.GetLocalPort("speedtest");
|
||||
for (int k = 0; k < selecteds.Count; k++)
|
||||
{
|
||||
int index = selecteds[k];
|
||||
if (config.vmess[index].configType == (int)EConfigType.Custom)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
config.index = index;
|
||||
|
||||
var inbound = new Inbounds();
|
||||
inbound.listen = Global.Loopback;
|
||||
inbound.port = httpPort + index;
|
||||
inbound.protocol = Global.InboundHttp;
|
||||
inbound.tag = Global.InboundHttp + inbound.port.ToString();
|
||||
v2rayConfig.inbounds.Add(inbound);
|
||||
|
||||
|
||||
var v2rayConfigCopy = Utils.FromJson<V2rayConfig>(result);
|
||||
outbound(config, ref v2rayConfigCopy);
|
||||
v2rayConfigCopy.outbounds[0].tag = Global.agentTag + inbound.port.ToString();
|
||||
v2rayConfig.outbounds.Add(v2rayConfigCopy.outbounds[0]);
|
||||
|
||||
var rule = new Mode.RulesItem();
|
||||
rule.inboundTag = inbound.tag;
|
||||
rule.outboundTag = v2rayConfigCopy.outbounds[0].tag;
|
||||
rule.type = "field";
|
||||
v2rayConfig.routing.rules.Add(rule);
|
||||
}
|
||||
|
||||
Utils.ToJsonFile(v2rayConfig, fileName);
|
||||
|
||||
msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
msg = UIRes.I18N("FailedGenDefaultConfiguration");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,27 @@ namespace v2rayN.Handler
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 载入V2ray
|
||||
/// </summary>
|
||||
public void LoadV2ray(Config config, List<int> _selecteds)
|
||||
{
|
||||
if (Global.reloadV2ray)
|
||||
{
|
||||
string msg = string.Empty;
|
||||
string fileName = Utils.GetPath(v2rayConfigRes);
|
||||
if (V2rayConfigHandler.GenerateClientSpeedtestConfig(config, _selecteds, fileName, out msg) != 0)
|
||||
{
|
||||
ShowMsg(false, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowMsg(true, msg);
|
||||
V2rayRestart();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// V2ray重启
|
||||
/// </summary>
|
||||
|
@ -118,7 +139,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
}
|
||||
if (Utils.IsNullOrEmpty(fileName))
|
||||
{
|
||||
{
|
||||
string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2ray/v2ray-core/releases");
|
||||
ShowMsg(true, msg);
|
||||
return;
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
{
|
||||
if (type != 0)
|
||||
{
|
||||
var port = Global.sysAgentPort;
|
||||
var port = Global.httpPort;
|
||||
if (port <= 0)
|
||||
{
|
||||
return false;
|
||||
|
@ -74,7 +74,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
{
|
||||
try
|
||||
{
|
||||
int localPort = config.GetLocalPort("socks");
|
||||
int localPort = config.GetLocalPort(Global.InboundSocks);
|
||||
if (localPort > 0)
|
||||
{
|
||||
PrivoxyHandler.Instance.Start(localPort, config);
|
||||
|
@ -82,8 +82,8 @@ namespace v2rayN.HttpProxyHandler
|
|||
{
|
||||
Global.sysAgent = true;
|
||||
Global.socksPort = localPort;
|
||||
Global.sysAgentPort = PrivoxyHandler.Instance.RunningPort;
|
||||
Global.pacPort = Global.sysAgentPort + 1;
|
||||
Global.httpPort = PrivoxyHandler.Instance.RunningPort;
|
||||
Global.pacPort = config.GetLocalPort("pac");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -100,16 +100,12 @@ namespace v2rayN.HttpProxyHandler
|
|||
{
|
||||
try
|
||||
{
|
||||
////开启全局代理则关闭
|
||||
//if (Global.sysAgent)
|
||||
//{
|
||||
PrivoxyHandler.Instance.Stop();
|
||||
|
||||
Global.sysAgent = false;
|
||||
Global.socksPort = 0;
|
||||
Global.sysAgentPort = 0;
|
||||
Global.httpPort = 0;
|
||||
Global.pacPort = 0;
|
||||
//}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
@ -131,7 +127,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
}
|
||||
else
|
||||
{
|
||||
int localPort = config.GetLocalPort("socks");
|
||||
int localPort = config.GetLocalPort(Global.InboundSocks);
|
||||
if (localPort != Global.socksPort)
|
||||
{
|
||||
isRestart = true;
|
||||
|
|
|
@ -67,7 +67,6 @@ namespace v2rayN.HttpProxyHandler
|
|||
server = new HttpWebServer(SendResponse, prefixes);
|
||||
server.Run();
|
||||
|
||||
//pacPort = Global.pacPort;
|
||||
}
|
||||
}
|
||||
Utils.SaveLog("Webserver at " + address);
|
||||
|
@ -95,7 +94,6 @@ namespace v2rayN.HttpProxyHandler
|
|||
if (serverB == null)
|
||||
{
|
||||
serverB = new HttpWebServerB(Global.pacPort, SendResponse);
|
||||
//pacPort = Global.pacPort;
|
||||
}
|
||||
}
|
||||
Utils.SaveLog("WebserverB at " + address);
|
||||
|
@ -159,7 +157,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
|
||||
private static string GetPacList(string address)
|
||||
{
|
||||
var port = Global.sysAgentPort;
|
||||
var port = Global.httpPort;
|
||||
if (port <= 0)
|
||||
{
|
||||
return "No port";
|
||||
|
|
|
@ -24,8 +24,6 @@ namespace v2rayN.HttpProxyHandler
|
|||
private static string _uniqueConfigFile;
|
||||
private static Job _privoxyJob;
|
||||
private Process _process;
|
||||
private int _runningPort;
|
||||
private bool _isRunning;
|
||||
|
||||
static PrivoxyHandler()
|
||||
{
|
||||
|
@ -66,18 +64,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
|
||||
public int RunningPort
|
||||
{
|
||||
get
|
||||
{
|
||||
return _runningPort;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsRunning
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isRunning;
|
||||
}
|
||||
get; set;
|
||||
}
|
||||
|
||||
public void Start(int localPort, Config config)
|
||||
|
@ -90,9 +77,9 @@ namespace v2rayN.HttpProxyHandler
|
|||
KillProcess(p);
|
||||
}
|
||||
string privoxyConfig = Resources.privoxy_conf;
|
||||
_runningPort = GetFreePort(localPort);
|
||||
RunningPort = config.GetLocalPort(Global.InboundHttp);
|
||||
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString());
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", _runningPort.ToString());
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString());
|
||||
if (config.allowLANConn)
|
||||
{
|
||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0");
|
||||
|
@ -123,7 +110,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
* when ss exit unexpectedly, this process will be forced killed by system.
|
||||
*/
|
||||
_privoxyJob.AddProcess(_process.Handle);
|
||||
_isRunning = true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,7 +121,7 @@ namespace v2rayN.HttpProxyHandler
|
|||
KillProcess(_process);
|
||||
_process.Dispose();
|
||||
_process = null;
|
||||
_isRunning = false;
|
||||
RunningPort = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,25 +178,5 @@ namespace v2rayN.HttpProxyHandler
|
|||
}
|
||||
}
|
||||
|
||||
private int GetFreePort(int localPort)
|
||||
{
|
||||
int defaultPort = 8123;
|
||||
try
|
||||
{
|
||||
//// TCP stack please do me a favor
|
||||
//TcpListener l = new TcpListener(IPAddress.Loopback, 0);
|
||||
//l.Start();
|
||||
//var port = ((IPEndPoint)l.LocalEndpoint).Port;
|
||||
//l.Stop();
|
||||
//return port;
|
||||
return localPort + 1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// in case access denied
|
||||
Utils.SaveLog(ex.Message, ex);
|
||||
return defaultPort;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,93 +13,147 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
/// 本地监听
|
||||
/// </summary>
|
||||
public List<InItem> inbound { get; set; }
|
||||
public List<InItem> inbound
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许日志
|
||||
/// </summary>
|
||||
public bool logEnabled { get; set; }
|
||||
public bool logEnabled
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 日志等级
|
||||
/// </summary>
|
||||
public string loglevel { get; set; }
|
||||
public string loglevel
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 活动配置序号
|
||||
/// </summary>
|
||||
public int index { get; set; }
|
||||
public int index
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// vmess服务器信息
|
||||
/// </summary>
|
||||
public List<VmessItem> vmess { get; set; }
|
||||
public List<VmessItem> vmess
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许Mux多路复用
|
||||
/// </summary>
|
||||
public bool muxEnabled { get; set; }
|
||||
public bool muxEnabled
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 域名解析策略
|
||||
/// </summary>
|
||||
public string domainStrategy { get; set; }
|
||||
public string domainStrategy
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 路由模式
|
||||
/// </summary>
|
||||
public string routingMode { get; set; }
|
||||
public string routingMode
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义需代理的网址或ip
|
||||
/// </summary>
|
||||
public List<string> useragent { get; set; }
|
||||
public List<string> useragent
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义直连的网址或ip
|
||||
/// </summary>
|
||||
public List<string> userdirect { get; set; }
|
||||
public List<string> userdirect
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户自定义阻止的网址或ip
|
||||
/// </summary>
|
||||
public List<string> userblock { get; set; }
|
||||
public List<string> userblock
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// KcpItem
|
||||
/// </summary>
|
||||
public KcpItem kcpItem { get; set; }
|
||||
public KcpItem kcpItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 启用Http代理
|
||||
/// </summary>
|
||||
public bool sysAgentEnabled { get; set; }
|
||||
public bool sysAgentEnabled
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 监听状态 0-不改变 1-全局 2-PAC
|
||||
/// </summary>
|
||||
public int listenerType { get; set; }
|
||||
public int listenerType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自定义GFWList url
|
||||
/// </summary>
|
||||
public string urlGFWList { get; set; }
|
||||
public string urlGFWList
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许来自局域网的连接
|
||||
/// </summary>
|
||||
public bool allowLANConn { get; set; }
|
||||
public bool allowLANConn
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启用实时网速和流量统计
|
||||
/// </summary>
|
||||
public bool enableStatistics { get; set; }
|
||||
public bool enableStatistics
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 视图刷新率
|
||||
/// </summary>
|
||||
public int statisticsFreshRate { get; set; }
|
||||
public int statisticsFreshRate
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 统计数据缓存天数 [0, 30]
|
||||
|
@ -107,9 +161,13 @@ namespace v2rayN.Mode
|
|||
/// * 无论如何不会关闭总流量的缓存
|
||||
/// </summary>
|
||||
private uint cacheDays;
|
||||
public uint CacheDays {
|
||||
get { return cacheDays; }
|
||||
set
|
||||
public uint CacheDays
|
||||
{
|
||||
get
|
||||
{
|
||||
return cacheDays;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value < 0) cacheDays = 0;
|
||||
else if (value > 30) cacheDays = 30;
|
||||
|
@ -120,15 +178,24 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
/// 自定义远程DNS
|
||||
/// </summary>
|
||||
public string remoteDNS { get; set; }
|
||||
public string remoteDNS
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 订阅
|
||||
/// </summary>
|
||||
public List<SubItem> subItem { get; set; }
|
||||
public List<SubItem> subItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// UI
|
||||
/// </summary>
|
||||
public UIItem uiItem { get; set; }
|
||||
public UIItem uiItem
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
#region 函数
|
||||
|
||||
|
@ -236,6 +303,19 @@ namespace v2rayN.Mode
|
|||
|
||||
public int GetLocalPort(string protocol)
|
||||
{
|
||||
if (protocol == Global.InboundHttp)
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 1;
|
||||
}
|
||||
else if (protocol == "pac")
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 2;
|
||||
}
|
||||
else if (protocol == "speedtest")
|
||||
{
|
||||
return GetLocalPort(Global.InboundSocks) + 103;
|
||||
}
|
||||
|
||||
int localPort = 0;
|
||||
foreach (InItem inItem in inbound)
|
||||
{
|
||||
|
@ -352,77 +432,125 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
/// 版本(现在=2)
|
||||
/// </summary>
|
||||
public int configVersion { get; set; }
|
||||
public int configVersion
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 远程服务器地址
|
||||
/// </summary>
|
||||
public string address { get; set; }
|
||||
public string address
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 远程服务器端口
|
||||
/// </summary>
|
||||
public int port { get; set; }
|
||||
public int port
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 远程服务器ID
|
||||
/// </summary>
|
||||
public string id { get; set; }
|
||||
public string id
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 远程服务器额外ID
|
||||
/// </summary>
|
||||
public int alterId { get; set; }
|
||||
public int alterId
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 本地安全策略
|
||||
/// </summary>
|
||||
public string security { get; set; }
|
||||
public string security
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// tcp,kcp,ws
|
||||
/// </summary>
|
||||
public string network { get; set; }
|
||||
public string network
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
/// 备注或别名
|
||||
/// </summary>
|
||||
public string remarks { get; set; }
|
||||
public string remarks
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 伪装类型
|
||||
/// </summary>
|
||||
public string headerType { get; set; }
|
||||
public string headerType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 伪装的域名
|
||||
/// </summary>
|
||||
public string requestHost { get; set; }
|
||||
public string requestHost
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ws h2 path
|
||||
/// </summary>
|
||||
public string path { get; set; }
|
||||
public string path
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 底层传输安全
|
||||
/// </summary>
|
||||
public string streamSecurity { get; set; }
|
||||
public string streamSecurity
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否允许不安全连接(用于客户端)
|
||||
/// </summary>
|
||||
public string allowInsecure { get; set; }
|
||||
public string allowInsecure
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// config type(1=normal,2=custom)
|
||||
/// </summary>
|
||||
public int configType { get; set; }
|
||||
public int configType
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string testResult { get; set; }
|
||||
public string testResult
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SubItem id
|
||||
/// </summary>
|
||||
public string subid { get; set; }
|
||||
public string subid
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
|
@ -431,17 +559,26 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
/// 本地监听端口
|
||||
/// </summary>
|
||||
public int localPort { get; set; }
|
||||
public int localPort
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 协议,默认为socks
|
||||
/// </summary>
|
||||
public string protocol { get; set; }
|
||||
public string protocol
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许udp
|
||||
/// </summary>
|
||||
public bool udpEnabled { get; set; }
|
||||
public bool udpEnabled
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开启流量探测
|
||||
|
@ -455,31 +592,52 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int mtu { get; set; }
|
||||
public int mtu
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int tti { get; set; }
|
||||
public int tti
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int uplinkCapacity { get; set; }
|
||||
public int uplinkCapacity
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int downlinkCapacity { get; set; }
|
||||
public int downlinkCapacity
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public bool congestion { get; set; }
|
||||
public bool congestion
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int readBufferSize { get; set; }
|
||||
public int readBufferSize
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int writeBufferSize { get; set; }
|
||||
public int writeBufferSize
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -489,17 +647,26 @@ namespace v2rayN.Mode
|
|||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string id { get; set; }
|
||||
public string id
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string remarks { get; set; }
|
||||
public string remarks
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// url
|
||||
/// </summary>
|
||||
public string url { get; set; }
|
||||
public string url
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// enable
|
||||
|
|
Loading…
Reference in New Issue