diff --git a/shadowsocks-csharp/Controller/I18N.cs b/shadowsocks-csharp/Controller/I18N.cs index 76c51749..c99d0f14 100755 --- a/shadowsocks-csharp/Controller/I18N.cs +++ b/shadowsocks-csharp/Controller/I18N.cs @@ -12,7 +12,7 @@ namespace Shadowsocks.Controller static I18N() { Strings = new Dictionary(); - + if (System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag.ToLowerInvariant().StartsWith("zh")) { string[] lines = Regex.Split(Resources.cn, "\r\n|\r|\n"); diff --git a/shadowsocks-csharp/Controller/Logging.cs b/shadowsocks-csharp/Controller/Logging.cs index 354df7a5..126dab70 100755 --- a/shadowsocks-csharp/Controller/Logging.cs +++ b/shadowsocks-csharp/Controller/Logging.cs @@ -21,7 +21,7 @@ namespace Shadowsocks.Controller sw.AutoFlush = true; Console.SetOut(sw); Console.SetError(sw); - + return true; } catch (IOException e) @@ -71,7 +71,6 @@ namespace Shadowsocks.Controller Console.WriteLine(e); } } - } // Simply extended System.IO.StreamWriter for adding timestamp workaround diff --git a/shadowsocks-csharp/Controller/Service/Listener.cs b/shadowsocks-csharp/Controller/Service/Listener.cs index f14bc79c..fe59fe98 100644 --- a/shadowsocks-csharp/Controller/Service/Listener.cs +++ b/shadowsocks-csharp/Controller/Service/Listener.cs @@ -77,7 +77,6 @@ namespace Shadowsocks.Controller _udpSocket.Bind(localEndPoint); _tcpSocket.Listen(1024); - // Start an asynchronous socket to listen for connections. Console.WriteLine("Shadowsocks started"); _tcpSocket.BeginAccept( @@ -185,7 +184,6 @@ namespace Shadowsocks.Controller } } - private void ReceiveCallback(IAsyncResult ar) { object[] state = (object[])ar.AsyncState; diff --git a/shadowsocks-csharp/Controller/Service/PACServer.cs b/shadowsocks-csharp/Controller/Service/PACServer.cs index e915681e..f8fc80e8 100644 --- a/shadowsocks-csharp/Controller/Service/PACServer.cs +++ b/shadowsocks-csharp/Controller/Service/PACServer.cs @@ -86,7 +86,6 @@ namespace Shadowsocks.Controller } } - public string TouchPACFile() { if (File.Exists(PAC_FILE)) diff --git a/shadowsocks-csharp/Controller/Service/PolipoRunner.cs b/shadowsocks-csharp/Controller/Service/PolipoRunner.cs index 9581e05f..3b3a5a4c 100644 --- a/shadowsocks-csharp/Controller/Service/PolipoRunner.cs +++ b/shadowsocks-csharp/Controller/Service/PolipoRunner.cs @@ -147,7 +147,6 @@ namespace Shadowsocks.Controller [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam); - public void RefreshTrayArea() { IntPtr systemTrayContainerHandle = FindWindow("Shell_TrayWnd", null); @@ -164,7 +163,6 @@ namespace Shadowsocks.Controller RefreshTrayArea(notificationAreaHandle); } - private static void RefreshTrayArea(IntPtr windowHandle) { const uint wmMousemove = 0x0200; diff --git a/shadowsocks-csharp/Controller/Service/PortForwarder.cs b/shadowsocks-csharp/Controller/Service/PortForwarder.cs index e0b05aea..63848079 100644 --- a/shadowsocks-csharp/Controller/Service/PortForwarder.cs +++ b/shadowsocks-csharp/Controller/Service/PortForwarder.cs @@ -103,7 +103,6 @@ namespace Shadowsocks.Controller } } - private void StartPipe(IAsyncResult ar) { if (_closed) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index c750f644..bf0497d4 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -111,7 +111,7 @@ namespace Shadowsocks.Controller private bool connectionShutdown = false; private bool remoteShutdown = false; private bool closed = false; - + private object encryptionLock = new object(); private object decryptionLock = new object(); @@ -195,7 +195,6 @@ namespace Shadowsocks.Controller } } - private void HandshakeReceive() { if (closed) @@ -265,7 +264,7 @@ namespace Shadowsocks.Controller try { int bytesRead = connection.EndReceive(ar); - + if (bytesRead >= 3) { command = connetionRecvBuffer[1]; @@ -315,7 +314,6 @@ namespace Shadowsocks.Controller private void ReadAll(IAsyncResult ar) { - if (closed) { return; @@ -390,7 +388,6 @@ namespace Shadowsocks.Controller } IPEndPoint remoteEP = new IPEndPoint(ipAddress, server.server_port); - remote = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); remote.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); @@ -592,7 +589,6 @@ namespace Shadowsocks.Controller } remote.BeginSend(connetionSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeRemoteSendCallback), null); - IStrategy strategy = controller.GetCurrentStrategy(); if (strategy != null) { @@ -651,5 +647,4 @@ namespace Shadowsocks.Controller } } } - } diff --git a/shadowsocks-csharp/Controller/Service/UDPRelay.cs b/shadowsocks-csharp/Controller/Service/UDPRelay.cs index 83a8c5b2..a0662dd2 100644 --- a/shadowsocks-csharp/Controller/Service/UDPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/UDPRelay.cs @@ -108,9 +108,11 @@ namespace Shadowsocks.Controller } catch (ObjectDisposedException) { + // TODO: handle the ObjectDisposedException } catch (Exception) { + // TODO: need more think about handle other Exceptions, or should remove this catch(). } finally { @@ -124,9 +126,11 @@ namespace Shadowsocks.Controller } catch (ObjectDisposedException) { + // TODO: handle the ObjectDisposedException } catch (Exception) { + // TODO: need more think about handle other Exceptions, or should remove this catch(). } finally { @@ -134,6 +138,8 @@ namespace Shadowsocks.Controller } } } + + // cc by-sa 3.0 http://stackoverflow.com/a/3719378/1124054 class LRUCache where V : UDPRelay.UDPHandler { @@ -196,5 +202,4 @@ namespace Shadowsocks.Controller public K key; public V value; } - } diff --git a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs index 22aa2916..9a3f832c 100644 --- a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs +++ b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs @@ -53,7 +53,6 @@ namespace Shadowsocks.Controller { return CompareVersion(ParseVersionFromURL(x), ParseVersionFromURL(y)); } - } private static string ParseVersionFromURL(string url) diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index b02771f1..2e2f5528 100755 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -39,7 +39,7 @@ namespace Shadowsocks.Controller public event EventHandler EnableStatusChanged; public event EventHandler EnableGlobalChanged; public event EventHandler ShareOverLANStatusChanged; - + // when user clicked Edit PAC, and PAC file has already created public event EventHandler PACFileReadyToOpen; public event EventHandler UserRuleFileReadyToOpen; @@ -363,14 +363,12 @@ namespace Shadowsocks.Controller Util.Utils.ReleaseMemory(true); } - protected void SaveConfig(Configuration newConfig) { Configuration.Save(newConfig); Reload(); } - private void UpdateSystemProxy() { if (_config.enabled) diff --git a/shadowsocks-csharp/Controller/Strategy/IStrategy.cs b/shadowsocks-csharp/Controller/Strategy/IStrategy.cs index ca3036fb..36962e4e 100644 --- a/shadowsocks-csharp/Controller/Strategy/IStrategy.cs +++ b/shadowsocks-csharp/Controller/Strategy/IStrategy.cs @@ -14,17 +14,17 @@ namespace Shadowsocks.Controller.Strategy /* * IStrategy - * + * * Subclasses must be thread-safe */ public interface IStrategy { string Name { get; } - + string ID { get; } /* - * Called when servers need to be reloaded, i.e. new configuration saved + * Called when servers need to be reloaded, i.e. new configuration saved */ void ReloadServers(); diff --git a/shadowsocks-csharp/Controller/Strategy/SimplyChooseByStatisticsStrategy.cs b/shadowsocks-csharp/Controller/Strategy/SimplyChooseByStatisticsStrategy.cs index dc098b8b..0cdfcfc5 100644 --- a/shadowsocks-csharp/Controller/Strategy/SimplyChooseByStatisticsStrategy.cs +++ b/shadowsocks-csharp/Controller/Strategy/SimplyChooseByStatisticsStrategy.cs @@ -112,7 +112,7 @@ namespace Shadowsocks.Controller.Strategy ).Aggregate((result1, result2) => result1.score > result2.score ? result1 : result2); if (_controller.GetCurrentStrategy().ID == ID && _currentServer != bestResult.server) //output when enabled - { + { Console.WriteLine("Switch to server: {0} by package loss:{1}", bestResult.server.FriendlyName(), 1 - bestResult.score); } _currentServer = bestResult.server; diff --git a/shadowsocks-csharp/Data/cn.txt b/shadowsocks-csharp/Data/cn.txt index fd09606d..b4217a85 100644 --- a/shadowsocks-csharp/Data/cn.txt +++ b/shadowsocks-csharp/Data/cn.txt @@ -42,8 +42,8 @@ Remarks=备注 OK=确定 Cancel=取消 New server=未配置的服务器 -Move &Up=上移 -Move D&own=下移 +Move &Up=上移(&U) +Move D&own=下移(&O) # QRCode Form diff --git a/shadowsocks-csharp/Encryption/IVEncryptor.cs b/shadowsocks-csharp/Encryption/IVEncryptor.cs index 0a59a0df..32948d6b 100755 --- a/shadowsocks-csharp/Encryption/IVEncryptor.cs +++ b/shadowsocks-csharp/Encryption/IVEncryptor.cs @@ -26,7 +26,6 @@ namespace Shadowsocks.Encryption protected int keyLen; protected int ivLen; - public IVEncryptor(string method, string password) : base(method, password) { diff --git a/shadowsocks-csharp/Encryption/PolarSSL.cs b/shadowsocks-csharp/Encryption/PolarSSL.cs index 93b662a8..f5c2626d 100755 --- a/shadowsocks-csharp/Encryption/PolarSSL.cs +++ b/shadowsocks-csharp/Encryption/PolarSSL.cs @@ -49,7 +49,6 @@ namespace Shadowsocks.Encryption [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] public extern static int aes_crypt_cfb128(IntPtr ctx, int mode, int length, ref int iv_off, byte[] iv, byte[] input, byte[] output); - public const int ARC4_CTX_SIZE = 264; [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] diff --git a/shadowsocks-csharp/Encryption/TableEncryptor.cs b/shadowsocks-csharp/Encryption/TableEncryptor.cs index 3dd526d4..db0a7db0 100644 --- a/shadowsocks-csharp/Encryption/TableEncryptor.cs +++ b/shadowsocks-csharp/Encryption/TableEncryptor.cs @@ -41,7 +41,6 @@ namespace Shadowsocks.Encryption outlength = length; } - public override void Decrypt(byte[] buf, int length, byte[] outbuf, out int outlength) { byte[] result = new byte[length]; @@ -100,7 +99,6 @@ namespace Shadowsocks.Encryption return sorted; } - public override void Dispose() { } diff --git a/shadowsocks-csharp/View/ConfigForm.cs b/shadowsocks-csharp/View/ConfigForm.cs index 6e4e98ef..d7d5c1f3 100755 --- a/shadowsocks-csharp/View/ConfigForm.cs +++ b/shadowsocks-csharp/View/ConfigForm.cs @@ -18,7 +18,7 @@ namespace Shadowsocks.View // this is a copy of configuration that we are working on private Configuration _modifiedConfiguration; - private int _oldSelectedIndex = -1; + private int _lastSelectedIndex = -1; public ConfigForm(ShadowsocksController controller) { @@ -72,7 +72,7 @@ namespace Shadowsocks.View { try { - if (_oldSelectedIndex == -1 || _oldSelectedIndex >= _modifiedConfiguration.configs.Count) + if (_lastSelectedIndex == -1 || _lastSelectedIndex >= _modifiedConfiguration.configs.Count) { return true; } @@ -87,7 +87,7 @@ namespace Shadowsocks.View int localPort = int.Parse(ProxyPortTextBox.Text); Configuration.CheckServer(server); Configuration.CheckLocalPort(localPort); - _modifiedConfiguration.configs[_oldSelectedIndex] = server; + _modifiedConfiguration.configs[_lastSelectedIndex] = server; _modifiedConfiguration.localPort = localPort; return true; @@ -131,12 +131,12 @@ namespace Shadowsocks.View { _modifiedConfiguration = controller.GetConfigurationCopy(); LoadConfiguration(_modifiedConfiguration); - _oldSelectedIndex = _modifiedConfiguration.index; - if (_oldSelectedIndex < 0) + _lastSelectedIndex = _modifiedConfiguration.index; + if (_lastSelectedIndex < 0) { - _oldSelectedIndex = 0; + _lastSelectedIndex = 0; } - ServersListBox.SelectedIndex = _oldSelectedIndex; + ServersListBox.SelectedIndex = _lastSelectedIndex; UpdateMoveUpAndDownButton(); LoadSelectedServer(); } @@ -148,7 +148,11 @@ namespace Shadowsocks.View private void ServersListBox_SelectedIndexChanged(object sender, EventArgs e) { - if (_oldSelectedIndex == ServersListBox.SelectedIndex) + if (!ServersListBox.CanSelect) + { + return; + } + if (_lastSelectedIndex == ServersListBox.SelectedIndex) { // we are moving back to oldSelectedIndex or doing a force move return; @@ -156,12 +160,13 @@ namespace Shadowsocks.View if (!SaveOldSelectedServer()) { // why this won't cause stack overflow? - ServersListBox.SelectedIndex = _oldSelectedIndex; + ServersListBox.SelectedIndex = _lastSelectedIndex; return; } + ServersListBox.Items[_lastSelectedIndex] = _modifiedConfiguration.configs[_lastSelectedIndex].FriendlyName(); UpdateMoveUpAndDownButton(); LoadSelectedServer(); - _oldSelectedIndex = ServersListBox.SelectedIndex; + _lastSelectedIndex = ServersListBox.SelectedIndex; } private void AddButton_Click(object sender, EventArgs e) @@ -174,29 +179,30 @@ namespace Shadowsocks.View _modifiedConfiguration.configs.Add(server); LoadConfiguration(_modifiedConfiguration); ServersListBox.SelectedIndex = _modifiedConfiguration.configs.Count - 1; - _oldSelectedIndex = ServersListBox.SelectedIndex; + _lastSelectedIndex = ServersListBox.SelectedIndex; } private void DeleteButton_Click(object sender, EventArgs e) { - _oldSelectedIndex = ServersListBox.SelectedIndex; - if (_oldSelectedIndex >= 0 && _oldSelectedIndex < _modifiedConfiguration.configs.Count) + _lastSelectedIndex = ServersListBox.SelectedIndex; + if (_lastSelectedIndex >= 0 && _lastSelectedIndex < _modifiedConfiguration.configs.Count) { - _modifiedConfiguration.configs.RemoveAt(_oldSelectedIndex); + _modifiedConfiguration.configs.RemoveAt(_lastSelectedIndex); } - if (_oldSelectedIndex >= _modifiedConfiguration.configs.Count) + if (_lastSelectedIndex >= _modifiedConfiguration.configs.Count) { // can be -1 - _oldSelectedIndex = _modifiedConfiguration.configs.Count - 1; + _lastSelectedIndex = _modifiedConfiguration.configs.Count - 1; } - ServersListBox.SelectedIndex = _oldSelectedIndex; + ServersListBox.SelectedIndex = _lastSelectedIndex; LoadConfiguration(_modifiedConfiguration); - ServersListBox.SelectedIndex = _oldSelectedIndex; + ServersListBox.SelectedIndex = _lastSelectedIndex; LoadSelectedServer(); } private void OKButton_Click(object sender, EventArgs e) { + Server server = controller.GetCurrentServer(); if (!SaveOldSelectedServer()) { return; @@ -206,9 +212,8 @@ namespace Shadowsocks.View MessageBox.Show(I18N.GetString("Please add at least one server")); return; } - int index = _modifiedConfiguration.index; controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort); - controller.SelectServerIndex(index); + controller.SelectServerIndex(_modifiedConfiguration.configs.IndexOf(server)); this.Close(); } @@ -238,9 +243,11 @@ namespace Shadowsocks.View _modifiedConfiguration.index += step; ServersListBox.BeginUpdate(); - _oldSelectedIndex = index + step; + ServersListBox.Enabled = false; + _lastSelectedIndex = index + step; ServersListBox.Items.Remove(item); ServersListBox.Items.Insert(index + step, item); + ServersListBox.Enabled = true; ServersListBox.SelectedIndex = index + step; ServersListBox.EndUpdate(); @@ -290,6 +297,5 @@ namespace Shadowsocks.View MoveConfigItem(+1); // +1 means move forward } } - } } diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 5081ec35..c8a4c0eb 100755 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -18,7 +18,7 @@ namespace Shadowsocks.View // yes this is just a menu view controller // when config form is closed, it moves away from RAM // and it should just do anything related to the config form - + private ShadowsocksController controller; private UpdateChecker updateChecker; @@ -520,17 +520,17 @@ namespace Shadowsocks.View Process.Start(_urlToOpen); } - private void AutoStartupItem_Click(object sender, EventArgs e) { - AutoStartupItem.Checked = !AutoStartupItem.Checked; - if (!AutoStartup.Set(AutoStartupItem.Checked)) { - MessageBox.Show(I18N.GetString("Failed to update registry")); - } - } + private void AutoStartupItem_Click(object sender, EventArgs e) { + AutoStartupItem.Checked = !AutoStartupItem.Checked; + if (!AutoStartup.Set(AutoStartupItem.Checked)) { + MessageBox.Show(I18N.GetString("Failed to update registry")); + } + } - private void AvailabilityStatisticsItem_Click(object sender, EventArgs e) { - AvailabilityStatistics.Checked = !AvailabilityStatistics.Checked; + private void AvailabilityStatisticsItem_Click(object sender, EventArgs e) { + AvailabilityStatistics.Checked = !AvailabilityStatistics.Checked; controller.ToggleAvailabilityStatistics(AvailabilityStatistics.Checked); - } + } private void LocalPACItem_Click(object sender, EventArgs e) { diff --git a/shadowsocks-csharp/View/QRCodeSplashForm.cs b/shadowsocks-csharp/View/QRCodeSplashForm.cs index ac9828e4..3bf48888 100755 --- a/shadowsocks-csharp/View/QRCodeSplashForm.cs +++ b/shadowsocks-csharp/View/QRCodeSplashForm.cs @@ -242,7 +242,6 @@ namespace Shadowsocks.View SetBitmap(bitmap, 255); } - /// Changes the current bitmap with a custom opacity level. Here is where all happens! public void SetBitmap(Bitmap bitmap, byte opacity) { @@ -288,7 +287,6 @@ namespace Shadowsocks.View } } - protected override CreateParams CreateParams { get