From 7459ada9c008dab17e2465964636bf2278c25093 Mon Sep 17 00:00:00 2001 From: CGQAQ Date: Mon, 26 Aug 2019 17:20:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=87=8D=E5=8A=A0=E5=85=A5host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现在判定两个server是不是一样的要看address port path 和 host --- v2rayN/v2rayN/Forms/MainForm.cs | 2 +- v2rayN/v2rayN/Handler/StatisticsHandler.cs | 34 +++++++++++----------- v2rayN/v2rayN/Mode/ServerStatistics.cs | 4 ++- v2rayN/v2rayN/Tool/Utils.cs | 11 ++++++- v2rayN/v2rayN/v2rayN.csproj.user | 3 +- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs index 8717156b..c5dd94f0 100644 --- a/v2rayN/v2rayN/Forms/MainForm.cs +++ b/v2rayN/v2rayN/Forms/MainForm.cs @@ -86,7 +86,7 @@ namespace v2rayN.Forms totalDown_ = string.Empty, todayUp_ = string.Empty, todayDown_ = string.Empty; - var index = statistics.FindIndex(item_ => (config.vmess[i].address == item_.address && config.vmess[i].port == item_.port && config.vmess[i].path == item_.path)); + var index = statistics.FindIndex(item_ => Utils.IsIdenticalServer(item_, new ServerStatistics(config.vmess[i].remarks, config.vmess[i].address, config.vmess[i].port, config.vmess[i].path, config.vmess[i].requestHost, 0, 0, 0, 0))); if (index != -1) { Func human_fy = (amount) => diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs index 0d3cd907..702b255c 100644 --- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -33,8 +33,6 @@ namespace v2rayN.Handler public bool UpdateUI; - private StringBuilder outputBuilder_; - public ulong TotalUp { get; private set; } public ulong TotalDown { get; private set; } @@ -62,14 +60,12 @@ namespace v2rayN.Handler DeleteExpiredLog(); foreach (var server in config.vmess) { - var statistic = new ServerStatistics(server.remarks, server.address, server.port, server.path, 0, 0, 0, 0); + var statistic = new ServerStatistics(server.remarks, server.address, server.port, server.path, server.requestHost, 0, 0, 0, 0); Statistic.Add(statistic); } loadFromFile(); - outputBuilder_ = new StringBuilder(); - var fullPath = Utils.GetPath(cliName_); if (!File.Exists(fullPath)) @@ -211,7 +207,7 @@ namespace v2rayN.Handler overallWriter.WriteLine($"DOWN {string.Format("{0:f2}", down_amount)}{down_unit} {TotalDown}"); foreach(var s in Statistic) { - overallWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.totalUp} {s.totalDown}"); + overallWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.host} {s.totalUp} {s.totalDown}"); } } } @@ -230,7 +226,7 @@ namespace v2rayN.Handler dailyWriter.WriteLine($"LastUpdate {DateTime.Now.ToLongDateString()} {DateTime.Now.ToLongTimeString()}"); foreach (var s in Statistic) { - dailyWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.todayUp} {s.todayDown}"); + dailyWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.host} {s.todayUp} {s.todayDown}"); } } } @@ -278,15 +274,17 @@ namespace v2rayN.Handler else if (line.StartsWith("*")) { var datas = line.Split(' '); - if (datas.Length < 6) return; + if (datas.Length < 8) return; var name = datas[1]; var address = datas[2]; var port = int.Parse(datas[3]); var path = datas[4]; - var totalUp = ulong.Parse(datas[5]); - var totalDown = ulong.Parse(datas[6]); + var host = datas[5]; + var totalUp = ulong.Parse(datas[6]); + var totalDown = ulong.Parse(datas[7]); - var index = Statistic.FindIndex(item => item.address == address && item.port == port); + var temp = new ServerStatistics(name, address, port, path, host, 0, 0, 0, 0); + var index = Statistic.FindIndex(item => Utils.IsIdenticalServer(item, temp)); if (index != -1) { Statistic[index].totalUp = totalUp; @@ -294,7 +292,7 @@ namespace v2rayN.Handler } else { - var s = new Mode.ServerStatistics(name, address, port, path, totalUp, totalDown, 0, 0); + var s = new Mode.ServerStatistics(name, address, port, path, host, totalUp, totalDown, 0, 0); Statistic.Add(s); } } @@ -322,15 +320,17 @@ namespace v2rayN.Handler else if (line.StartsWith("*")) { var datas = line.Split(' '); - if (datas.Length < 6) return; + if (datas.Length < 8) return; var name = datas[1]; var address = datas[2]; var port = int.Parse(datas[3]); var path = datas[4]; - var todayUp = ulong.Parse(datas[5]); - var todayDown = ulong.Parse(datas[6]); + var host = datas[5]; + var todayUp = ulong.Parse(datas[6]); + var todayDown = ulong.Parse(datas[7]); - var index = Statistic.FindIndex(item => item.address == address && item.port == port); + var temp = new ServerStatistics(name, address, port, path, host, 0, 0, 0, 0); + var index = Statistic.FindIndex(item => Utils.IsIdenticalServer(item, temp)); if (index != -1) { Statistic[index].todayUp = todayUp; @@ -338,7 +338,7 @@ namespace v2rayN.Handler } else { - var s = new Mode.ServerStatistics(name, address, port, path, 0, 0, todayUp, todayDown); + var s = new Mode.ServerStatistics(name, address, port, path, host, 0, 0, todayUp, todayDown); Statistic.Add(s); } } diff --git a/v2rayN/v2rayN/Mode/ServerStatistics.cs b/v2rayN/v2rayN/Mode/ServerStatistics.cs index 4240e33e..27d3673c 100644 --- a/v2rayN/v2rayN/Mode/ServerStatistics.cs +++ b/v2rayN/v2rayN/Mode/ServerStatistics.cs @@ -12,18 +12,20 @@ namespace v2rayN.Mode public string address; public int port; public string path; + public string host; public ulong totalUp; public ulong totalDown; public ulong todayUp; public ulong todayDown; public ServerStatistics() { } - public ServerStatistics(string name, string addr, int port, string path, ulong totalUp, ulong totalDown, ulong todayUp, ulong todayDown) + public ServerStatistics(string name, string addr, int port, string path, string host, ulong totalUp, ulong totalDown, ulong todayUp, ulong todayDown) { this.name = name; this.address = addr; this.port = port; this.path = path; + this.host = host; this.totalUp = totalUp; this.totalDown = totalDown; this.todayUp = todayUp; diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index 21ea4727..4894b377 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -316,7 +316,7 @@ namespace v2rayN var list = new List(); foreach (var item in source) { - if(!list.Exists(i => item.address == i.address && item.port == i.port && item.path == i.path)) + if(!list.Exists(i => item.address == i.address && item.port == i.port && item.path == i.path && item.requestHost == i.requestHost)) { list.Add(item); } @@ -434,6 +434,15 @@ namespace v2rayN return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase); } + public static bool IsIdenticalServer(Mode.ServerStatistics a, Mode.ServerStatistics b) + { + return (a.address == b.address + && a.port == b.port + && a.path == b.path + && a.host == b.host + ); + } + #endregion #region 开机自动启动 diff --git a/v2rayN/v2rayN/v2rayN.csproj.user b/v2rayN/v2rayN/v2rayN.csproj.user index fee3aea9..778969a8 100644 --- a/v2rayN/v2rayN/v2rayN.csproj.user +++ b/v2rayN/v2rayN/v2rayN.csproj.user @@ -16,6 +16,7 @@ Project - /restart 1001 + + \ No newline at end of file