@@ -238,7 +238,7 @@ namespace Shadowsocks.Controller | |||
{ | |||
AppendRecord(server.Identifier(), record); | |||
} | |||
logger.Debug($"Ping {server.FriendlyName()} {e.RoundtripTime.Count} times, {(100 - record.PackageLoss * 100)}% packages loss, min {record.MinResponse} ms, max {record.MaxResponse} ms, avg {record.AverageResponse} ms"); | |||
logger.Debug($"Ping {server} {e.RoundtripTime.Count} times, {(100 - record.PackageLoss * 100)}% packages loss, min {record.MinResponse} ms, max {record.MaxResponse} ms, avg {record.AverageResponse} ms"); | |||
if (Interlocked.Decrement(ref state.counter) == 0) | |||
{ | |||
Save(); | |||
@@ -450,7 +450,7 @@ namespace Shadowsocks.Controller | |||
{ | |||
try | |||
{ | |||
logger.Debug($"Ping {server.FriendlyName()}"); | |||
logger.Debug($"Ping {server}"); | |||
if (ip == null) | |||
{ | |||
ip = Dns.GetHostAddresses(server.server) | |||
@@ -466,7 +466,7 @@ namespace Shadowsocks.Controller | |||
} | |||
catch (Exception e) | |||
{ | |||
logger.Error($"An exception occured while eveluating {server.FriendlyName()}"); | |||
logger.Error($"An exception occured while eveluating {server}"); | |||
logger.LogUsefulException(e); | |||
FireCompleted(e, userstate); | |||
} | |||
@@ -478,19 +478,19 @@ namespace Shadowsocks.Controller | |||
{ | |||
if (e.Reply.Status == IPStatus.Success) | |||
{ | |||
logger.Debug($"Ping {server.FriendlyName()} {e.Reply.RoundtripTime} ms"); | |||
logger.Debug($"Ping {server} {e.Reply.RoundtripTime} ms"); | |||
RoundtripTime.Add((int?)e.Reply.RoundtripTime); | |||
} | |||
else | |||
{ | |||
logger.Debug($"Ping {server.FriendlyName()} timeout"); | |||
logger.Debug($"Ping {server} timeout"); | |||
RoundtripTime.Add(null); | |||
} | |||
TestNext(e.UserState); | |||
} | |||
catch (Exception ex) | |||
{ | |||
logger.Error($"An exception occured while eveluating {server.FriendlyName()}"); | |||
logger.Error($"An exception occured while eveluating {server}"); | |||
logger.LogUsefulException(ex); | |||
FireCompleted(ex, e.UserState); | |||
} | |||
@@ -803,7 +803,7 @@ namespace Shadowsocks.Controller | |||
AsyncSession session = timer.Session; | |||
Server server = timer.Server; | |||
OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); | |||
Logger.Info($"{server.FriendlyName()} timed out"); | |||
Logger.Info($"{server.ToString()} timed out"); | |||
session.Remote.Close(); | |||
Close(); | |||
} | |||
@@ -830,7 +830,7 @@ namespace Shadowsocks.Controller | |||
_destConnected = true; | |||
Logger.Debug($"Socket connected to ss server: {_server.FriendlyName()}"); | |||
Logger.Debug($"Socket connected to ss server: {_server.ToString()}"); | |||
TimeSpan latency = DateTime.Now - _startConnectTime; | |||
@@ -114,7 +114,7 @@ namespace Shadowsocks.Controller.Strategy | |||
100 * 1000 * Math.Min(5 * 60, (now - status.lastFailure).TotalSeconds) | |||
-2 * 5 * (Math.Min(2000, status.latency.TotalMilliseconds) / (1 + (now - status.lastTimeDetectLatency).TotalSeconds / 30 / 10) + | |||
-0.5 * 200 * Math.Min(5, (status.lastRead - status.lastWrite).TotalSeconds)); | |||
logger.Debug(String.Format("server: {0} latency:{1} score: {2}", status.server.FriendlyName(), status.latency, status.score)); | |||
logger.Debug(String.Format("server: {0} latency:{1} score: {2}", status.server.ToString(), status.latency, status.score)); | |||
} | |||
ServerStatus max = null; | |||
foreach (var status in servers) | |||
@@ -136,14 +136,14 @@ namespace Shadowsocks.Controller.Strategy | |||
if (_currentServer == null || max.score - _currentServer.score > 200) | |||
{ | |||
_currentServer = max; | |||
logger.Info($"HA switching to server: {_currentServer.server.FriendlyName()}"); | |||
logger.Info($"HA switching to server: {_currentServer.server.ToString()}"); | |||
} | |||
} | |||
} | |||
public void UpdateLatency(Model.Server server, TimeSpan latency) | |||
{ | |||
logger.Debug($"latency: {server.FriendlyName()} {latency}"); | |||
logger.Debug($"latency: {server.ToString()} {latency}"); | |||
ServerStatus status; | |||
if (_serverStatus.TryGetValue(server, out status)) | |||
@@ -155,7 +155,7 @@ namespace Shadowsocks.Controller.Strategy | |||
public void UpdateLastRead(Model.Server server) | |||
{ | |||
logger.Debug($"last read: {server.FriendlyName()}"); | |||
logger.Debug($"last read: {server.ToString()}"); | |||
ServerStatus status; | |||
if (_serverStatus.TryGetValue(server, out status)) | |||
@@ -166,7 +166,7 @@ namespace Shadowsocks.Controller.Strategy | |||
public void UpdateLastWrite(Model.Server server) | |||
{ | |||
logger.Debug($"last write: {server.FriendlyName()}"); | |||
logger.Debug($"last write: {server.ToString()}"); | |||
ServerStatus status; | |||
if (_serverStatus.TryGetValue(server, out status)) | |||
@@ -177,7 +177,7 @@ namespace Shadowsocks.Controller.Strategy | |||
public void SetFailure(Model.Server server) | |||
{ | |||
logger.Debug($"failure: {server.FriendlyName()}"); | |||
logger.Debug($"failure: {server.ToString()}"); | |||
ServerStatus status; | |||
if (_serverStatus.TryGetValue(server, out status)) | |||
@@ -109,7 +109,7 @@ namespace Shadowsocks.Controller.Strategy | |||
var bestResult = serversWithStatistics | |||
.Aggregate((server1, server2) => server1.score > server2.score ? server1 : server2); | |||
LogWhenEnabled($"Switch to server: {bestResult.server.FriendlyName()} by statistics: score {bestResult.score}"); | |||
LogWhenEnabled($"Switch to server: {bestResult.server.ToString()} by statistics: score {bestResult.score}"); | |||
_currentServer = bestResult.server; | |||
} | |||
catch (Exception e) | |||
@@ -147,7 +147,7 @@ namespace Shadowsocks.Controller.Strategy | |||
public void SetFailure(Server server) | |||
{ | |||
logger.Debug($"failure: {server.FriendlyName()}"); | |||
logger.Debug($"failure: {server.ToString()}"); | |||
} | |||
public void UpdateLastRead(Server server) | |||
@@ -15,9 +15,8 @@ namespace Shadowsocks.Model | |||
public const int DefaultPort = 8388; | |||
#region ParseLegacyURL | |||
public static readonly Regex | |||
UrlFinder = new Regex(@"ss://(?<base64>[A-Za-z0-9+-/=_]+)(?:#(?<tag>\S+))?", RegexOptions.IgnoreCase), | |||
DetailsParser = new Regex(@"^((?<method>.+?):(?<password>.*)@(?<hostname>.+?):(?<port>\d+?))$", RegexOptions.IgnoreCase); | |||
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); | |||
#endregion ParseLegacyURL | |||
private const int DefaultServerTimeoutSec = 5; | |||
@@ -44,7 +43,7 @@ namespace Shadowsocks.Model | |||
return server == o2.server && server_port == o2.server_port; | |||
} | |||
public string FriendlyName() | |||
public override string ToString() | |||
{ | |||
if (server.IsNullOrEmpty()) | |||
{ | |||
@@ -427,7 +427,7 @@ namespace Shadowsocks.View | |||
ServersListBox.Items.Clear(); | |||
foreach (Server server in configuration.configs) | |||
{ | |||
ServersListBox.Items.Add(server.FriendlyName()); | |||
ServersListBox.Items.Add(server.ToString()); | |||
} | |||
} | |||
@@ -502,7 +502,7 @@ namespace Shadowsocks.View | |||
} | |||
if (_lastSelectedIndex >= 0 && _lastSelectedIndex < _modifiedConfiguration.configs.Count) | |||
{ | |||
ServersListBox.Items[_lastSelectedIndex] = _modifiedConfiguration.configs[_lastSelectedIndex].FriendlyName(); | |||
ServersListBox.Items[_lastSelectedIndex] = _modifiedConfiguration.configs[_lastSelectedIndex].ToString(); | |||
} | |||
UpdateButtons(); | |||
LoadSelectedServerDetails(); | |||
@@ -172,7 +172,7 @@ namespace Shadowsocks.View | |||
} | |||
else | |||
{ | |||
serverInfo = config.GetCurrentServer().FriendlyName(); | |||
serverInfo = config.GetCurrentServer().ToString(); | |||
} | |||
// show more info by hacking the P/Invoke declaration for NOTIFYICONDATA inside Windows Forms | |||
string text = I18N.GetString("Shadowsocks") + " " + UpdateChecker.Version + "\n" + | |||
@@ -478,7 +478,7 @@ namespace Shadowsocks.View | |||
{ | |||
if (Configuration.ChecksServer(server)) | |||
{ | |||
MenuItem item = new MenuItem(server.FriendlyName()); | |||
MenuItem item = new MenuItem(server.ToString()); | |||
item.Tag = configuration.configs.FindIndex(s => s == server); | |||
item.Click += AServerItem_Click; | |||
items.Add(strategyCount + serverCount, item); | |||
@@ -67,7 +67,7 @@ namespace Shadowsocks.View | |||
var servers = Configuration.Load(); | |||
var serverDatas = servers.configs.Select( | |||
server => | |||
new KeyValuePair<string, string>(ShadowsocksController.GetServerURL(server), server.FriendlyName()) | |||
new KeyValuePair<string, string>(ShadowsocksController.GetServerURL(server), server.ToString()) | |||
).ToList(); | |||
listBox1.DataSource = serverDatas; | |||