@@ -1,3 +1,9 @@ | |||||
2.0.7 2014-11-11 | |||||
- Use OpenSSL for now | |||||
2.0.6 2014-11-10 | |||||
- Minor bug fixes | |||||
2.0.5 2014-11-09 | 2.0.5 2014-11-09 | ||||
- Fix QRCode size | - Fix QRCode size | ||||
- Share over LAN option | - Share over LAN option | ||||
@@ -70,7 +70,7 @@ namespace Shadowsocks.Controller | |||||
{ | { | ||||
Socket listener = (Socket)ar.AsyncState; | Socket listener = (Socket)ar.AsyncState; | ||||
Socket conn = listener.EndAccept(ar); | Socket conn = listener.EndAccept(ar); | ||||
conn.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); | |||||
conn.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); | |||||
listener.BeginAccept( | listener.BeginAccept( | ||||
new AsyncCallback(AcceptCallback), | new AsyncCallback(AcceptCallback), | ||||
@@ -103,15 +103,14 @@ namespace Shadowsocks.Controller | |||||
public const int RecvSize = 16384; | public const int RecvSize = 16384; | ||||
public const int BufferSize = RecvSize + 32; | public const int BufferSize = RecvSize + 32; | ||||
// remote receive buffer | // remote receive buffer | ||||
public byte[] remoteRecvBuffer = new byte[RecvSize]; | |||||
private byte[] remoteRecvBuffer = new byte[RecvSize]; | |||||
// remote send buffer | // remote send buffer | ||||
public byte[] remoteSendBuffer = new byte[BufferSize]; | |||||
private byte[] remoteSendBuffer = new byte[BufferSize]; | |||||
// connection receive buffer | // connection receive buffer | ||||
public byte[] connetionRecvBuffer = new byte[RecvSize]; | |||||
private byte[] connetionRecvBuffer = new byte[RecvSize]; | |||||
// connection send buffer | // connection send buffer | ||||
public byte[] connetionSendBuffer = new byte[BufferSize]; | |||||
private byte[] connetionSendBuffer = new byte[BufferSize]; | |||||
// Received data string. | // Received data string. | ||||
public StringBuilder sb = new StringBuilder(); | |||||
private bool connectionShutdown = false; | private bool connectionShutdown = false; | ||||
private bool remoteShutdown = false; | private bool remoteShutdown = false; | ||||
@@ -134,7 +133,7 @@ namespace Shadowsocks.Controller | |||||
remote = new Socket(ipAddress.AddressFamily, | remote = new Socket(ipAddress.AddressFamily, | ||||
SocketType.Stream, ProtocolType.Tcp); | SocketType.Stream, ProtocolType.Tcp); | ||||
remote.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); | |||||
remote.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); | |||||
// Connect to the remote endpoint. | // Connect to the remote endpoint. | ||||
remote.BeginConnect(remoteEP, | remote.BeginConnect(remoteEP, | ||||
@@ -238,6 +237,7 @@ namespace Shadowsocks.Controller | |||||
{ | { | ||||
// reject socks 4 | // reject socks 4 | ||||
response = new byte[]{ 0, 91 }; | response = new byte[]{ 0, 91 }; | ||||
Console.WriteLine("socks 5 protocol error"); | |||||
} | } | ||||
connection.BeginSend(response, 0, response.Length, 0, new AsyncCallback(HandshakeSendCallback), null); | connection.BeginSend(response, 0, response.Length, 0, new AsyncCallback(HandshakeSendCallback), null); | ||||
} | } | ||||
@@ -289,6 +289,7 @@ namespace Shadowsocks.Controller | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
Console.WriteLine("failed to recv data in handshakeReceive2Callback"); | |||||
this.Close(); | this.Close(); | ||||
} | } | ||||
} | } | ||||
@@ -60,9 +60,9 @@ namespace Shadowsocks.Controller | |||||
_process.Kill(); | _process.Kill(); | ||||
_process.WaitForExit(); | _process.WaitForExit(); | ||||
} | } | ||||
catch (InvalidOperationException) | |||||
catch (Exception e) | |||||
{ | { | ||||
// do nothing | |||||
Console.WriteLine(e.ToString()); | |||||
} | } | ||||
_process = null; | _process = null; | ||||
} | } | ||||
@@ -10,7 +10,7 @@ namespace Shadowsocks.Encrypt | |||||
return new TableEncryptor(method, password); | return new TableEncryptor(method, password); | ||||
} | } | ||||
return new PolarSSLEncryptor(method, password); | |||||
return new OpenSSLEncryptor(method, password); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -0,0 +1,45 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Runtime.InteropServices; | |||||
using System.Text; | |||||
namespace Shadowsocks.Encrypt | |||||
{ | |||||
public class OpenSSL | |||||
{ | |||||
const string DLLNAME = "libeay32"; | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static void OpenSSL_add_all_ciphers(); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static IntPtr EVP_md5(); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int EVP_BytesToKey(IntPtr type, IntPtr md, IntPtr salt, byte[] data, int datal, int count, byte[] key, byte[] iv); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int RAND_bytes(byte[] buf, int num); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static IntPtr EVP_get_cipherbyname(byte[] name); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static IntPtr EVP_CIPHER_CTX_new(); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int EVP_CipherInit_ex(IntPtr ctx, IntPtr type, IntPtr impl, byte[] key, byte[] iv, int enc); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int EVP_CIPHER_CTX_cleanup(IntPtr a); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int EVP_CIPHER_CTX_free(IntPtr a); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static int EVP_CipherUpdate(IntPtr ctx, byte[] outb, out int outl, byte[] inb, int inl); | |||||
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] | |||||
public extern static IntPtr MD5(byte[] d, long n, byte[] md); | |||||
} | |||||
} |
@@ -0,0 +1,170 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Runtime.InteropServices; | |||||
using System.Text; | |||||
namespace Shadowsocks.Encrypt | |||||
{ | |||||
public class OpenSSLEncryptor | |||||
: EncryptorBase, IDisposable | |||||
{ | |||||
static Dictionary<string, int[]> ciphers = new Dictionary<string, int[]> { | |||||
{"aes-128-cfb", new int[]{16, 16}}, | |||||
{"aes-192-cfb", new int[]{24, 16}}, | |||||
{"aes-256-cfb", new int[]{32, 16}}, | |||||
{"bf-cfb", new int[]{16, 8}}, | |||||
{"rc4", new int[]{16, 0}}, | |||||
{"rc4-md5", new int[]{16, 16}}, | |||||
}; | |||||
static OpenSSLEncryptor() | |||||
{ | |||||
OpenSSL.OpenSSL_add_all_ciphers(); | |||||
} | |||||
public OpenSSLEncryptor(string method, string password) | |||||
: base(method, password) | |||||
{ | |||||
InitKey(method, password); | |||||
} | |||||
static byte[] tempbuf = new byte[32768]; | |||||
public override void Encrypt(byte[] buf, int length, byte[] outbuf, out int outlength) | |||||
{ | |||||
if (_encryptCtx == IntPtr.Zero) | |||||
{ | |||||
OpenSSL.RAND_bytes(outbuf, ivLen); | |||||
InitCipher(ref _encryptCtx, outbuf, true); | |||||
outlength = length + ivLen; | |||||
OpenSSL.EVP_CipherUpdate(_encryptCtx, tempbuf, out outlength, buf, length); | |||||
outlength = length + ivLen; | |||||
Buffer.BlockCopy(tempbuf, 0, outbuf, ivLen, outlength); | |||||
} | |||||
else | |||||
{ | |||||
outlength = length; | |||||
OpenSSL.EVP_CipherUpdate(_encryptCtx, outbuf, out outlength, buf, length); | |||||
} | |||||
} | |||||
public override void Decrypt(byte[] buf, int length, byte[] outbuf, out int outlength) | |||||
{ | |||||
if (_decryptCtx == IntPtr.Zero) | |||||
{ | |||||
InitCipher(ref _decryptCtx, buf, false); | |||||
outlength = length - ivLen; | |||||
Buffer.BlockCopy(buf, ivLen, tempbuf, 0, length - ivLen); | |||||
OpenSSL.EVP_CipherUpdate(_decryptCtx, outbuf, out outlength, tempbuf, length - ivLen); | |||||
} | |||||
else | |||||
{ | |||||
outlength = length; | |||||
OpenSSL.EVP_CipherUpdate(_decryptCtx, outbuf, out outlength, buf, length); | |||||
} | |||||
} | |||||
private static readonly Dictionary<string, byte[]> CachedKeys = new Dictionary<string, byte[]>(); | |||||
private byte[] _key; | |||||
private IntPtr _encryptCtx; | |||||
private IntPtr _decryptCtx; | |||||
private IntPtr _cipher; | |||||
private string _method; | |||||
private int keyLen; | |||||
private int ivLen; | |||||
private void InitKey(string method, string password) | |||||
{ | |||||
method = method.ToLower(); | |||||
_method = method; | |||||
string k = method + ":" + password; | |||||
if (method == "rc4-md5") | |||||
{ | |||||
method = "rc4"; | |||||
} | |||||
_cipher = OpenSSL.EVP_get_cipherbyname(System.Text.Encoding.UTF8.GetBytes(method)); | |||||
if (_cipher == null) | |||||
{ | |||||
throw new Exception("method not found"); | |||||
} | |||||
keyLen = ciphers[_method][0]; | |||||
ivLen = ciphers[_method][1]; | |||||
if (CachedKeys.ContainsKey(k)) | |||||
{ | |||||
_key = CachedKeys[k]; | |||||
} | |||||
else | |||||
{ | |||||
byte[] passbuf = Encoding.UTF8.GetBytes(password); | |||||
_key = new byte[32]; | |||||
byte[] iv = new byte[16]; | |||||
OpenSSL.EVP_BytesToKey(_cipher, OpenSSL.EVP_md5(), IntPtr.Zero, passbuf, passbuf.Length, 1, _key, iv); | |||||
CachedKeys[k] = _key; | |||||
} | |||||
} | |||||
private void InitCipher(ref IntPtr ctx, byte[] iv, bool isCipher) | |||||
{ | |||||
ctx = OpenSSL.EVP_CIPHER_CTX_new(); | |||||
int enc = isCipher ? 1 : 0; | |||||
byte[] realkey; | |||||
IntPtr r = IntPtr.Zero; | |||||
if (_method == "rc4-md5") | |||||
{ | |||||
byte[] temp = new byte[keyLen + ivLen]; | |||||
realkey = new byte[keyLen]; | |||||
Array.Copy(_key, 0, temp, 0, keyLen); | |||||
Array.Copy(iv, 0, temp, keyLen, ivLen); | |||||
r = OpenSSL.MD5(temp, keyLen + ivLen, null); | |||||
Marshal.Copy(r, realkey, 0, keyLen); | |||||
} | |||||
else | |||||
{ | |||||
realkey = _key; | |||||
} | |||||
OpenSSL.EVP_CipherInit_ex(ctx, _cipher, IntPtr.Zero, realkey, iv, enc); | |||||
} | |||||
#region IDisposable | |||||
private bool _disposed; | |||||
public override void Dispose() | |||||
{ | |||||
Dispose(true); | |||||
GC.SuppressFinalize(this); | |||||
} | |||||
~OpenSSLEncryptor() | |||||
{ | |||||
Dispose(false); | |||||
} | |||||
protected virtual void Dispose(bool disposing) | |||||
{ | |||||
if (!_disposed) | |||||
{ | |||||
if (disposing) | |||||
{ | |||||
} | |||||
if (_encryptCtx.ToInt64() != 0) | |||||
{ | |||||
OpenSSL.EVP_CIPHER_CTX_cleanup(_encryptCtx); | |||||
OpenSSL.EVP_CIPHER_CTX_free(_encryptCtx); | |||||
_encryptCtx = IntPtr.Zero; | |||||
} | |||||
if (_decryptCtx.ToInt64() != 0) | |||||
{ | |||||
OpenSSL.EVP_CIPHER_CTX_cleanup(_decryptCtx); | |||||
OpenSSL.EVP_CIPHER_CTX_free(_decryptCtx); | |||||
_decryptCtx = IntPtr.Zero; | |||||
} | |||||
_disposed = true; | |||||
} | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -36,10 +36,10 @@ namespace Shadowsocks | |||||
return; | return; | ||||
} | } | ||||
string tempPath = Path.GetTempPath(); | string tempPath = Path.GetTempPath(); | ||||
string dllPath = tempPath + "/polarssl.dll"; | |||||
string dllPath = tempPath + "/libeay32.dll"; | |||||
try | try | ||||
{ | { | ||||
FileManager.UncompressFile(dllPath, Resources.polarssl_dll); | |||||
FileManager.UncompressFile(dllPath, Resources.libeay32_dll); | |||||
} | } | ||||
catch (IOException e) | catch (IOException e) | ||||
{ | { | ||||
@@ -47,7 +47,9 @@ namespace Shadowsocks | |||||
} | } | ||||
LoadLibrary(dllPath); | LoadLibrary(dllPath); | ||||
#if !DEBUG | |||||
Logging.OpenLogFile(); | Logging.OpenLogFile(); | ||||
#endif | |||||
Application.EnableVisualStyles(); | Application.EnableVisualStyles(); | ||||
Application.SetCompatibleTextRenderingDefault(false); | Application.SetCompatibleTextRenderingDefault(false); | ||||
ShadowsocksController controller = new ShadowsocksController(); | ShadowsocksController controller = new ShadowsocksController(); | ||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | |||||
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, | // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, | ||||
// 方法是按如下所示使用“*”: | // 方法是按如下所示使用“*”: | ||||
// [assembly: AssemblyVersion("1.0.*")] | // [assembly: AssemblyVersion("1.0.*")] | ||||
[assembly: AssemblyVersion("2.0.6")] | |||||
[assembly: AssemblyVersion("2.0.7")] | |||||
// [assembly: AssemblyFileVersion("2.0.0")] | // [assembly: AssemblyFileVersion("2.0.0")] |
@@ -63,6 +63,16 @@ namespace Shadowsocks.Properties { | |||||
/// <summary> | /// <summary> | ||||
/// Looks up a localized resource of type System.Byte[]. | /// Looks up a localized resource of type System.Byte[]. | ||||
/// </summary> | /// </summary> | ||||
internal static byte[] libeay32_dll { | |||||
get { | |||||
object obj = ResourceManager.GetObject("libeay32_dll", resourceCulture); | |||||
return ((byte[])(obj)); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// Looks up a localized resource of type System.Byte[]. | |||||
/// </summary> | |||||
internal static byte[] polarssl_dll { | internal static byte[] polarssl_dll { | ||||
get { | get { | ||||
object obj = ResourceManager.GetObject("polarssl_dll", resourceCulture); | object obj = ResourceManager.GetObject("polarssl_dll", resourceCulture); | ||||
@@ -104,5 +114,45 @@ namespace Shadowsocks.Properties { | |||||
return ((byte[])(obj)); | return ((byte[])(obj)); | ||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// Looks up a localized resource of type System.Drawing.Bitmap. | |||||
/// </summary> | |||||
internal static System.Drawing.Bitmap ss16 { | |||||
get { | |||||
object obj = ResourceManager.GetObject("ss16", resourceCulture); | |||||
return ((System.Drawing.Bitmap)(obj)); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// Looks up a localized resource of type System.Drawing.Bitmap. | |||||
/// </summary> | |||||
internal static System.Drawing.Bitmap ss20 { | |||||
get { | |||||
object obj = ResourceManager.GetObject("ss20", resourceCulture); | |||||
return ((System.Drawing.Bitmap)(obj)); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// Looks up a localized resource of type System.Drawing.Bitmap. | |||||
/// </summary> | |||||
internal static System.Drawing.Bitmap ss24 { | |||||
get { | |||||
object obj = ResourceManager.GetObject("ss24", resourceCulture); | |||||
return ((System.Drawing.Bitmap)(obj)); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// Looks up a localized resource of type System.Drawing.Bitmap. | |||||
/// </summary> | |||||
internal static System.Drawing.Bitmap ssw128 { | |||||
get { | |||||
object obj = ResourceManager.GetObject("ssw128", resourceCulture); | |||||
return ((System.Drawing.Bitmap)(obj)); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -118,6 +118,9 @@ | |||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
</resheader> | </resheader> | ||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||||
<data name="libeay32_dll" type="System.Resources.ResXFileRef, System.Windows.Forms"> | |||||
<value>..\Data\libeay32.dll.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||||
</data> | |||||
<data name="polarssl_dll" type="System.Resources.ResXFileRef, System.Windows.Forms"> | <data name="polarssl_dll" type="System.Resources.ResXFileRef, System.Windows.Forms"> | ||||
<value>..\Data\polarssl.dll.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | <value>..\Data\polarssl.dll.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
</data> | </data> | ||||
@@ -130,4 +133,16 @@ | |||||
<data name="proxy_pac_txt" type="System.Resources.ResXFileRef, System.Windows.Forms"> | <data name="proxy_pac_txt" type="System.Resources.ResXFileRef, System.Windows.Forms"> | ||||
<value>..\Data\proxy.pac.txt.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | <value>..\Data\proxy.pac.txt.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
</data> | </data> | ||||
<data name="ss16" type="System.Resources.ResXFileRef, System.Windows.Forms"> | |||||
<value>..\Resources\ss16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> | |||||
</data> | |||||
<data name="ss20" type="System.Resources.ResXFileRef, System.Windows.Forms"> | |||||
<value>..\Resources\ss20.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> | |||||
</data> | |||||
<data name="ss24" type="System.Resources.ResXFileRef, System.Windows.Forms"> | |||||
<value>..\Resources\ss24.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> | |||||
</data> | |||||
<data name="ssw128" type="System.Resources.ResXFileRef, System.Windows.Forms"> | |||||
<value>..\Resources\ssw128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> | |||||
</data> | |||||
</root> | </root> |
@@ -29,7 +29,6 @@ | |||||
private void InitializeComponent() | private void InitializeComponent() | ||||
{ | { | ||||
this.components = new System.ComponentModel.Container(); | this.components = new System.ComponentModel.Container(); | ||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); | |||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); | ||||
this.RemarksTextBox = new System.Windows.Forms.TextBox(); | this.RemarksTextBox = new System.Windows.Forms.TextBox(); | ||||
this.label6 = new System.Windows.Forms.Label(); | this.label6 = new System.Windows.Forms.Label(); | ||||
@@ -91,10 +90,10 @@ | |||||
this.tableLayoutPanel1.Controls.Add(this.PasswordTextBox, 1, 2); | this.tableLayoutPanel1.Controls.Add(this.PasswordTextBox, 1, 2); | ||||
this.tableLayoutPanel1.Controls.Add(this.label5, 0, 3); | this.tableLayoutPanel1.Controls.Add(this.label5, 0, 3); | ||||
this.tableLayoutPanel1.Controls.Add(this.EncryptionSelect, 1, 3); | this.tableLayoutPanel1.Controls.Add(this.EncryptionSelect, 1, 3); | ||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(8, 21); | |||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(5); | |||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 31); | |||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(7, 7, 7, 7); | |||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; | this.tableLayoutPanel1.Name = "tableLayoutPanel1"; | ||||
this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); | |||||
this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(7, 7, 7, 7); | |||||
this.tableLayoutPanel1.RowCount = 6; | this.tableLayoutPanel1.RowCount = 6; | ||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||||
@@ -102,15 +101,16 @@ | |||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); | ||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(242, 167); | |||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(360, 232); | |||||
this.tableLayoutPanel1.TabIndex = 0; | this.tableLayoutPanel1.TabIndex = 0; | ||||
// | // | ||||
// RemarksTextBox | // RemarksTextBox | ||||
// | // | ||||
this.RemarksTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | this.RemarksTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | ||||
this.RemarksTextBox.Location = new System.Drawing.Point(74, 139); | |||||
this.RemarksTextBox.Location = new System.Drawing.Point(110, 194); | |||||
this.RemarksTextBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.RemarksTextBox.Name = "RemarksTextBox"; | this.RemarksTextBox.Name = "RemarksTextBox"; | ||||
this.RemarksTextBox.Size = new System.Drawing.Size(160, 20); | |||||
this.RemarksTextBox.Size = new System.Drawing.Size(238, 26); | |||||
this.RemarksTextBox.TabIndex = 10; | this.RemarksTextBox.TabIndex = 10; | ||||
this.RemarksTextBox.WordWrap = false; | this.RemarksTextBox.WordWrap = false; | ||||
// | // | ||||
@@ -118,9 +118,10 @@ | |||||
// | // | ||||
this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label6.AutoSize = true; | this.label6.AutoSize = true; | ||||
this.label6.Location = new System.Drawing.Point(19, 142); | |||||
this.label6.Location = new System.Drawing.Point(27, 197); | |||||
this.label6.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label6.Name = "label6"; | this.label6.Name = "label6"; | ||||
this.label6.Size = new System.Drawing.Size(49, 13); | |||||
this.label6.Size = new System.Drawing.Size(73, 20); | |||||
this.label6.TabIndex = 9; | this.label6.TabIndex = 9; | ||||
this.label6.Text = "Remarks"; | this.label6.Text = "Remarks"; | ||||
// | // | ||||
@@ -128,9 +129,10 @@ | |||||
// | // | ||||
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label1.AutoSize = true; | this.label1.AutoSize = true; | ||||
this.label1.Location = new System.Drawing.Point(17, 11); | |||||
this.label1.Location = new System.Drawing.Point(26, 15); | |||||
this.label1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label1.Name = "label1"; | this.label1.Name = "label1"; | ||||
this.label1.Size = new System.Drawing.Size(51, 13); | |||||
this.label1.Size = new System.Drawing.Size(74, 20); | |||||
this.label1.TabIndex = 0; | this.label1.TabIndex = 0; | ||||
this.label1.Text = "Server IP"; | this.label1.Text = "Server IP"; | ||||
// | // | ||||
@@ -138,18 +140,20 @@ | |||||
// | // | ||||
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label2.AutoSize = true; | this.label2.AutoSize = true; | ||||
this.label2.Location = new System.Drawing.Point(8, 37); | |||||
this.label2.Location = new System.Drawing.Point(12, 51); | |||||
this.label2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label2.Name = "label2"; | this.label2.Name = "label2"; | ||||
this.label2.Size = new System.Drawing.Size(60, 13); | |||||
this.label2.Size = new System.Drawing.Size(88, 20); | |||||
this.label2.TabIndex = 1; | this.label2.TabIndex = 1; | ||||
this.label2.Text = "Server Port"; | this.label2.Text = "Server Port"; | ||||
// | // | ||||
// ProxyPortTextBox | // ProxyPortTextBox | ||||
// | // | ||||
this.ProxyPortTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | this.ProxyPortTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | ||||
this.ProxyPortTextBox.Location = new System.Drawing.Point(74, 113); | |||||
this.ProxyPortTextBox.Location = new System.Drawing.Point(110, 158); | |||||
this.ProxyPortTextBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.ProxyPortTextBox.Name = "ProxyPortTextBox"; | this.ProxyPortTextBox.Name = "ProxyPortTextBox"; | ||||
this.ProxyPortTextBox.Size = new System.Drawing.Size(160, 20); | |||||
this.ProxyPortTextBox.Size = new System.Drawing.Size(238, 26); | |||||
this.ProxyPortTextBox.TabIndex = 4; | this.ProxyPortTextBox.TabIndex = 4; | ||||
this.ProxyPortTextBox.WordWrap = false; | this.ProxyPortTextBox.WordWrap = false; | ||||
// | // | ||||
@@ -157,9 +161,10 @@ | |||||
// | // | ||||
this.label4.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label4.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label4.AutoSize = true; | this.label4.AutoSize = true; | ||||
this.label4.Location = new System.Drawing.Point(13, 116); | |||||
this.label4.Location = new System.Drawing.Point(20, 161); | |||||
this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label4.Name = "label4"; | this.label4.Name = "label4"; | ||||
this.label4.Size = new System.Drawing.Size(55, 13); | |||||
this.label4.Size = new System.Drawing.Size(80, 20); | |||||
this.label4.TabIndex = 3; | this.label4.TabIndex = 3; | ||||
this.label4.Text = "Proxy Port"; | this.label4.Text = "Proxy Port"; | ||||
// | // | ||||
@@ -167,37 +172,41 @@ | |||||
// | // | ||||
this.label3.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label3.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label3.AutoSize = true; | this.label3.AutoSize = true; | ||||
this.label3.Location = new System.Drawing.Point(15, 63); | |||||
this.label3.Location = new System.Drawing.Point(22, 87); | |||||
this.label3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label3.Name = "label3"; | this.label3.Name = "label3"; | ||||
this.label3.Size = new System.Drawing.Size(53, 13); | |||||
this.label3.Size = new System.Drawing.Size(78, 20); | |||||
this.label3.TabIndex = 2; | this.label3.TabIndex = 2; | ||||
this.label3.Text = "Password"; | this.label3.Text = "Password"; | ||||
// | // | ||||
// IPTextBox | // IPTextBox | ||||
// | // | ||||
this.IPTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | this.IPTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | ||||
this.IPTextBox.Location = new System.Drawing.Point(74, 8); | |||||
this.IPTextBox.Location = new System.Drawing.Point(110, 12); | |||||
this.IPTextBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.IPTextBox.Name = "IPTextBox"; | this.IPTextBox.Name = "IPTextBox"; | ||||
this.IPTextBox.Size = new System.Drawing.Size(160, 20); | |||||
this.IPTextBox.Size = new System.Drawing.Size(238, 26); | |||||
this.IPTextBox.TabIndex = 0; | this.IPTextBox.TabIndex = 0; | ||||
this.IPTextBox.WordWrap = false; | this.IPTextBox.WordWrap = false; | ||||
// | // | ||||
// ServerPortTextBox | // ServerPortTextBox | ||||
// | // | ||||
this.ServerPortTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | this.ServerPortTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | ||||
this.ServerPortTextBox.Location = new System.Drawing.Point(74, 34); | |||||
this.ServerPortTextBox.Location = new System.Drawing.Point(110, 48); | |||||
this.ServerPortTextBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.ServerPortTextBox.Name = "ServerPortTextBox"; | this.ServerPortTextBox.Name = "ServerPortTextBox"; | ||||
this.ServerPortTextBox.Size = new System.Drawing.Size(160, 20); | |||||
this.ServerPortTextBox.Size = new System.Drawing.Size(238, 26); | |||||
this.ServerPortTextBox.TabIndex = 1; | this.ServerPortTextBox.TabIndex = 1; | ||||
this.ServerPortTextBox.WordWrap = false; | this.ServerPortTextBox.WordWrap = false; | ||||
// | // | ||||
// PasswordTextBox | // PasswordTextBox | ||||
// | // | ||||
this.PasswordTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | this.PasswordTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); | ||||
this.PasswordTextBox.Location = new System.Drawing.Point(74, 60); | |||||
this.PasswordTextBox.Location = new System.Drawing.Point(110, 84); | |||||
this.PasswordTextBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.PasswordTextBox.Name = "PasswordTextBox"; | this.PasswordTextBox.Name = "PasswordTextBox"; | ||||
this.PasswordTextBox.PasswordChar = '*'; | this.PasswordTextBox.PasswordChar = '*'; | ||||
this.PasswordTextBox.Size = new System.Drawing.Size(160, 20); | |||||
this.PasswordTextBox.Size = new System.Drawing.Size(238, 26); | |||||
this.PasswordTextBox.TabIndex = 2; | this.PasswordTextBox.TabIndex = 2; | ||||
this.PasswordTextBox.WordWrap = false; | this.PasswordTextBox.WordWrap = false; | ||||
// | // | ||||
@@ -205,9 +214,10 @@ | |||||
// | // | ||||
this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right; | this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right; | ||||
this.label5.AutoSize = true; | this.label5.AutoSize = true; | ||||
this.label5.Location = new System.Drawing.Point(11, 90); | |||||
this.label5.Location = new System.Drawing.Point(16, 124); | |||||
this.label5.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); | |||||
this.label5.Name = "label5"; | this.label5.Name = "label5"; | ||||
this.label5.Size = new System.Drawing.Size(57, 13); | |||||
this.label5.Size = new System.Drawing.Size(84, 20); | |||||
this.label5.TabIndex = 8; | this.label5.TabIndex = 8; | ||||
this.label5.Text = "Encryption"; | this.label5.Text = "Encryption"; | ||||
// | // | ||||
@@ -218,7 +228,7 @@ | |||||
this.EncryptionSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; | this.EncryptionSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; | ||||
this.EncryptionSelect.FormattingEnabled = true; | this.EncryptionSelect.FormattingEnabled = true; | ||||
this.EncryptionSelect.ImeMode = System.Windows.Forms.ImeMode.NoControl; | this.EncryptionSelect.ImeMode = System.Windows.Forms.ImeMode.NoControl; | ||||
this.EncryptionSelect.ItemHeight = 13; | |||||
this.EncryptionSelect.ItemHeight = 20; | |||||
this.EncryptionSelect.Items.AddRange(new object[] { | this.EncryptionSelect.Items.AddRange(new object[] { | ||||
"table", | "table", | ||||
"rc4-md5", | "rc4-md5", | ||||
@@ -227,16 +237,15 @@ | |||||
"aes-128-cfb", | "aes-128-cfb", | ||||
"bf-cfb", | "bf-cfb", | ||||
"rc4"}); | "rc4"}); | ||||
this.EncryptionSelect.Location = new System.Drawing.Point(74, 86); | |||||
this.EncryptionSelect.Location = new System.Drawing.Point(110, 120); | |||||
this.EncryptionSelect.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.EncryptionSelect.Name = "EncryptionSelect"; | this.EncryptionSelect.Name = "EncryptionSelect"; | ||||
this.EncryptionSelect.Size = new System.Drawing.Size(160, 21); | |||||
this.EncryptionSelect.Size = new System.Drawing.Size(238, 28); | |||||
this.EncryptionSelect.TabIndex = 3; | this.EncryptionSelect.TabIndex = 3; | ||||
// | // | ||||
// notifyIcon1 | // notifyIcon1 | ||||
// | // | ||||
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); | |||||
this.notifyIcon1.Text = "Shadowsocks"; | this.notifyIcon1.Text = "Shadowsocks"; | ||||
this.notifyIcon1.Visible = true; | |||||
this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick); | this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick); | ||||
// | // | ||||
// panel2 | // panel2 | ||||
@@ -244,7 +253,8 @@ | |||||
this.panel2.Anchor = System.Windows.Forms.AnchorStyles.Top; | this.panel2.Anchor = System.Windows.Forms.AnchorStyles.Top; | ||||
this.panel2.AutoSize = true; | this.panel2.AutoSize = true; | ||||
this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; | this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; | ||||
this.panel2.Location = new System.Drawing.Point(164, 175); | |||||
this.panel2.Location = new System.Drawing.Point(246, 263); | |||||
this.panel2.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.panel2.Name = "panel2"; | this.panel2.Name = "panel2"; | ||||
this.panel2.Size = new System.Drawing.Size(0, 0); | this.panel2.Size = new System.Drawing.Size(0, 0); | ||||
this.panel2.TabIndex = 1; | this.panel2.TabIndex = 1; | ||||
@@ -252,9 +262,10 @@ | |||||
// OKButton | // OKButton | ||||
// | // | ||||
this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; | this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; | ||||
this.OKButton.Location = new System.Drawing.Point(4, 4); | |||||
this.OKButton.Location = new System.Drawing.Point(6, 6); | |||||
this.OKButton.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.OKButton.Name = "OKButton"; | this.OKButton.Name = "OKButton"; | ||||
this.OKButton.Size = new System.Drawing.Size(75, 23); | |||||
this.OKButton.Size = new System.Drawing.Size(113, 35); | |||||
this.OKButton.TabIndex = 8; | this.OKButton.TabIndex = 8; | ||||
this.OKButton.Text = "OK"; | this.OKButton.Text = "OK"; | ||||
this.OKButton.UseVisualStyleBackColor = true; | this.OKButton.UseVisualStyleBackColor = true; | ||||
@@ -263,9 +274,10 @@ | |||||
// MyCancelButton | // MyCancelButton | ||||
// | // | ||||
this.MyCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; | this.MyCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; | ||||
this.MyCancelButton.Location = new System.Drawing.Point(86, 4); | |||||
this.MyCancelButton.Location = new System.Drawing.Point(130, 6); | |||||
this.MyCancelButton.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.MyCancelButton.Name = "MyCancelButton"; | this.MyCancelButton.Name = "MyCancelButton"; | ||||
this.MyCancelButton.Size = new System.Drawing.Size(75, 23); | |||||
this.MyCancelButton.Size = new System.Drawing.Size(113, 35); | |||||
this.MyCancelButton.TabIndex = 9; | this.MyCancelButton.TabIndex = 9; | ||||
this.MyCancelButton.Text = "Cancel"; | this.MyCancelButton.Text = "Cancel"; | ||||
this.MyCancelButton.UseVisualStyleBackColor = true; | this.MyCancelButton.UseVisualStyleBackColor = true; | ||||
@@ -277,10 +289,10 @@ | |||||
this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; | this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; | ||||
this.panel1.Controls.Add(this.MyCancelButton); | this.panel1.Controls.Add(this.MyCancelButton); | ||||
this.panel1.Controls.Add(this.OKButton); | this.panel1.Controls.Add(this.OKButton); | ||||
this.panel1.Location = new System.Drawing.Point(313, 247); | |||||
this.panel1.Location = new System.Drawing.Point(469, 371); | |||||
this.panel1.Margin = new System.Windows.Forms.Padding(0); | this.panel1.Margin = new System.Windows.Forms.Padding(0); | ||||
this.panel1.Name = "panel1"; | this.panel1.Name = "panel1"; | ||||
this.panel1.Size = new System.Drawing.Size(164, 30); | |||||
this.panel1.Size = new System.Drawing.Size(248, 46); | |||||
this.panel1.TabIndex = 1; | this.panel1.TabIndex = 1; | ||||
// | // | ||||
// contextMenu1 | // contextMenu1 | ||||
@@ -373,17 +385,18 @@ | |||||
this.panel3.AutoSize = true; | this.panel3.AutoSize = true; | ||||
this.panel3.Controls.Add(this.DeleteButton); | this.panel3.Controls.Add(this.DeleteButton); | ||||
this.panel3.Controls.Add(this.AddButton); | this.panel3.Controls.Add(this.AddButton); | ||||
this.panel3.Location = new System.Drawing.Point(12, 220); | |||||
this.panel3.Location = new System.Drawing.Point(18, 330); | |||||
this.panel3.Margin = new System.Windows.Forms.Padding(0); | this.panel3.Margin = new System.Windows.Forms.Padding(0); | ||||
this.panel3.Name = "panel3"; | this.panel3.Name = "panel3"; | ||||
this.panel3.Size = new System.Drawing.Size(192, 30); | |||||
this.panel3.Size = new System.Drawing.Size(288, 46); | |||||
this.panel3.TabIndex = 5; | this.panel3.TabIndex = 5; | ||||
// | // | ||||
// DeleteButton | // DeleteButton | ||||
// | // | ||||
this.DeleteButton.Location = new System.Drawing.Point(100, 4); | |||||
this.DeleteButton.Location = new System.Drawing.Point(150, 6); | |||||
this.DeleteButton.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.DeleteButton.Name = "DeleteButton"; | this.DeleteButton.Name = "DeleteButton"; | ||||
this.DeleteButton.Size = new System.Drawing.Size(89, 23); | |||||
this.DeleteButton.Size = new System.Drawing.Size(133, 35); | |||||
this.DeleteButton.TabIndex = 7; | this.DeleteButton.TabIndex = 7; | ||||
this.DeleteButton.Text = "&Delete"; | this.DeleteButton.Text = "&Delete"; | ||||
this.DeleteButton.UseVisualStyleBackColor = true; | this.DeleteButton.UseVisualStyleBackColor = true; | ||||
@@ -391,9 +404,10 @@ | |||||
// | // | ||||
// AddButton | // AddButton | ||||
// | // | ||||
this.AddButton.Location = new System.Drawing.Point(4, 4); | |||||
this.AddButton.Location = new System.Drawing.Point(6, 6); | |||||
this.AddButton.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.AddButton.Name = "AddButton"; | this.AddButton.Name = "AddButton"; | ||||
this.AddButton.Size = new System.Drawing.Size(89, 23); | |||||
this.AddButton.Size = new System.Drawing.Size(133, 35); | |||||
this.AddButton.TabIndex = 6; | this.AddButton.TabIndex = 6; | ||||
this.AddButton.Text = "&Add"; | this.AddButton.Text = "&Add"; | ||||
this.AddButton.UseVisualStyleBackColor = true; | this.AddButton.UseVisualStyleBackColor = true; | ||||
@@ -402,9 +416,11 @@ | |||||
// ServerGroupBox | // ServerGroupBox | ||||
// | // | ||||
this.ServerGroupBox.Controls.Add(this.tableLayoutPanel1); | this.ServerGroupBox.Controls.Add(this.tableLayoutPanel1); | ||||
this.ServerGroupBox.Location = new System.Drawing.Point(222, 12); | |||||
this.ServerGroupBox.Location = new System.Drawing.Point(334, 18); | |||||
this.ServerGroupBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.ServerGroupBox.Name = "ServerGroupBox"; | this.ServerGroupBox.Name = "ServerGroupBox"; | ||||
this.ServerGroupBox.Size = new System.Drawing.Size(255, 205); | |||||
this.ServerGroupBox.Padding = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.ServerGroupBox.Size = new System.Drawing.Size(383, 307); | |||||
this.ServerGroupBox.TabIndex = 6; | this.ServerGroupBox.TabIndex = 6; | ||||
this.ServerGroupBox.TabStop = false; | this.ServerGroupBox.TabStop = false; | ||||
this.ServerGroupBox.Text = "Server"; | this.ServerGroupBox.Text = "Server"; | ||||
@@ -412,27 +428,29 @@ | |||||
// ServersListBox | // ServersListBox | ||||
// | // | ||||
this.ServersListBox.FormattingEnabled = true; | this.ServersListBox.FormattingEnabled = true; | ||||
this.ServersListBox.Location = new System.Drawing.Point(12, 12); | |||||
this.ServersListBox.ItemHeight = 20; | |||||
this.ServersListBox.Location = new System.Drawing.Point(18, 18); | |||||
this.ServersListBox.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.ServersListBox.Name = "ServersListBox"; | this.ServersListBox.Name = "ServersListBox"; | ||||
this.ServersListBox.Size = new System.Drawing.Size(192, 186); | |||||
this.ServersListBox.Size = new System.Drawing.Size(286, 264); | |||||
this.ServersListBox.TabIndex = 5; | this.ServersListBox.TabIndex = 5; | ||||
this.ServersListBox.SelectedIndexChanged += new System.EventHandler(this.ServersListBox_SelectedIndexChanged); | this.ServersListBox.SelectedIndexChanged += new System.EventHandler(this.ServersListBox_SelectedIndexChanged); | ||||
// | // | ||||
// ConfigForm | // ConfigForm | ||||
// | // | ||||
this.AcceptButton = this.OKButton; | this.AcceptButton = this.OKButton; | ||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); | |||||
this.AutoScaleDimensions = new System.Drawing.SizeF(144F, 144F); | |||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; | ||||
this.AutoSize = true; | this.AutoSize = true; | ||||
this.CancelButton = this.MyCancelButton; | this.CancelButton = this.MyCancelButton; | ||||
this.ClientSize = new System.Drawing.Size(489, 286); | |||||
this.ClientSize = new System.Drawing.Size(733, 430); | |||||
this.Controls.Add(this.ServersListBox); | this.Controls.Add(this.ServersListBox); | ||||
this.Controls.Add(this.ServerGroupBox); | this.Controls.Add(this.ServerGroupBox); | ||||
this.Controls.Add(this.panel1); | this.Controls.Add(this.panel1); | ||||
this.Controls.Add(this.panel3); | this.Controls.Add(this.panel3); | ||||
this.Controls.Add(this.panel2); | this.Controls.Add(this.panel2); | ||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; | ||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); | |||||
this.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); | |||||
this.MaximizeBox = false; | this.MaximizeBox = false; | ||||
this.MinimizeBox = false; | this.MinimizeBox = false; | ||||
this.Name = "ConfigForm"; | this.Name = "ConfigForm"; | ||||
@@ -7,6 +7,7 @@ using System.Windows.Forms; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using Shadowsocks.Controller; | using Shadowsocks.Controller; | ||||
using Shadowsocks.Model; | using Shadowsocks.Model; | ||||
using Shadowsocks.Properties; | |||||
namespace Shadowsocks.View | namespace Shadowsocks.View | ||||
{ | { | ||||
@@ -23,6 +24,7 @@ namespace Shadowsocks.View | |||||
public ConfigForm(ShadowsocksController controller) | public ConfigForm(ShadowsocksController controller) | ||||
{ | { | ||||
InitializeComponent(); | InitializeComponent(); | ||||
LoadTrayIcon(); | |||||
notifyIcon1.ContextMenu = contextMenu1; | notifyIcon1.ContextMenu = contextMenu1; | ||||
this.controller = controller; | this.controller = controller; | ||||
@@ -37,6 +39,32 @@ namespace Shadowsocks.View | |||||
LoadCurrentConfiguration(); | LoadCurrentConfiguration(); | ||||
} | } | ||||
private void LoadTrayIcon() | |||||
{ | |||||
int dpi; | |||||
Graphics graphics = this.CreateGraphics(); | |||||
dpi = (int)graphics.DpiX; | |||||
graphics.Dispose(); | |||||
Bitmap icon = null; | |||||
if (dpi < 97) | |||||
{ | |||||
// dpi = 96; | |||||
icon = Resources.ss16; | |||||
} | |||||
else if (dpi < 121) | |||||
{ | |||||
// dpi = 120; | |||||
icon = Resources.ss20; | |||||
} | |||||
else | |||||
{ | |||||
icon = Resources.ss24; | |||||
} | |||||
notifyIcon1.Icon = Icon.FromHandle(icon.GetHicon()); | |||||
notifyIcon1.Visible = true; | |||||
this.Icon = Icon.FromHandle(Resources.ssw128.GetHicon()); | |||||
} | |||||
private void controller_ConfigChanged(object sender, EventArgs e) | private void controller_ConfigChanged(object sender, EventArgs e) | ||||
{ | { | ||||
LoadCurrentConfiguration(); | LoadCurrentConfiguration(); | ||||
@@ -120,127 +120,7 @@ | |||||
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||||
<value>17, 17</value> | <value>17, 17</value> | ||||
</metadata> | </metadata> | ||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> | |||||
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||||
<value> | |||||
AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA | |||||
AAD///8B////Af///wH///8B////Af///wH///8BBAQIcf///wH///8B////Af///wH///8B////Af// | |||||
/wH///8B////Af///wH///8B////Af///wH///8B////ARQUF/8EBAgx////Af///wH///8B////Af// | |||||
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wFycnT/Kysuz////wH///8B////Af// | |||||
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BUlJV/zY2Oe8EBAgx////AQQE | |||||
CFEEBAifBAQIMf///wH///8B////Af///wH///8B////Af///wH///8B////AQQECGEEBAhhMjI1r3Jy | |||||
dP+xsbL/4ODg/wQECIH///8B////Af///wH///8B////Af///wEEBAgxBAQIcQQECCEVFRjv0NDR//// | |||||
//////////////////8yMjWv////Af///wH///8BBAQIIQQECI9eXmDfoaGi/8DAwf8XFxvPBAQIQWJi | |||||
Zf//////////////////////aGhr7////wH///8BBAQIgTMzNv/g4OD/////////////////7+/w/z4+ | |||||
Qc8EBAiPoaGi/////////////////6Ghov8EBAgx////Af///wEEBAhBLi4xv6Ghov////////////// | |||||
///v7/D/WFha7wQECL/AwMH////////////g4OD/BAQIcf///wH///8B////Af///wEEBAhBLi4xv6Gh | |||||
ov////////////////9ycnT/FBQX/9DQ0f///////////zIyNa////8B////Af///wH///8B////Af// | |||||
/wEEBAhBLi4xv6Ghov///////////6Ghov8jIyf/7+/w//////9YWFrv////Af///wH///8B////Af// | |||||
/wH///8B////Af///wEEBAhBLi4xv6Ghov//////wMDB/2JiZf//////kZGT/wQECCH///8B////Af// | |||||
/wH///8B////Af///wH///8B////Af///wEEBAhBLi4xv6Ghov///////////9DQ0f8EBAhh////Af// | |||||
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wEEBAhBLi4xv6Ghov//////HR0hn/// | |||||
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEEBAhBLi4xvygo | |||||
K9////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// | |||||
/wEEBAhBAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA | |||||
//8AAP//AAD//w== | |||||
</value> | |||||
</data> | |||||
<metadata name="contextMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | <metadata name="contextMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||||
<value>146, 19</value> | <value>146, 19</value> | ||||
</metadata> | </metadata> | ||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||||
<value> | |||||
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 | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB/HH+/fRn/xYownwAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw4Uof799Gf/Afhv/zJdHTAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDhSh/v30Z/799 | |||||
Gf/ChCXj6NGuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOF | |||||
KH/Dhijjxowzg9asbCgAAAAAAAAAAAAAAAAAAAAA8ePNCMuVRETGjDSXxYgt4925hBQAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAA4MGRGAAAAAAAAAAAAAAAAAAAAADevIgQypRCXMSHLKfChCXzv30Z/799Gf+/fRn/yZE9UAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANeubyDJkDtwxIcqu8GBIPu/fRn/v30Z/799Gf+/fRn/v30Z/799 | |||||
Gf/GizGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | |||||
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 | |||||
4AH///gB///+Af///4H////g////+P////7///// | |||||
</value> | |||||
</data> | |||||
</root> | </root> |
@@ -0,0 +1,16 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > | |||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> | |||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> | |||||
<security> | |||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> | |||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> | |||||
</requestedPrivileges> | |||||
</security> | |||||
</trustInfo> | |||||
<asmv3:application> | |||||
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> | |||||
<dpiAware>true</dpiAware> | |||||
</asmv3:windowsSettings> | |||||
</asmv3:application> | |||||
</assembly> |
@@ -58,6 +58,9 @@ | |||||
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> | <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> | ||||
<Prefer32Bit>false</Prefer32Bit> | <Prefer32Bit>false</Prefer32Bit> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup> | |||||
<ApplicationManifest>app.manifest</ApplicationManifest> | |||||
</PropertyGroup> | |||||
<ItemGroup> | <ItemGroup> | ||||
<Reference Include="System" /> | <Reference Include="System" /> | ||||
<Reference Include="System.Data" /> | <Reference Include="System.Data" /> | ||||
@@ -73,6 +76,8 @@ | |||||
<Compile Include="Controller\UpdateChecker.cs" /> | <Compile Include="Controller\UpdateChecker.cs" /> | ||||
<Compile Include="Encrypt\EncryptorBase.cs" /> | <Compile Include="Encrypt\EncryptorBase.cs" /> | ||||
<Compile Include="Encrypt\EncryptorFactory.cs" /> | <Compile Include="Encrypt\EncryptorFactory.cs" /> | ||||
<Compile Include="Encrypt\OpenSSL.cs" /> | |||||
<Compile Include="Encrypt\OpenSSLEncryptor.cs" /> | |||||
<Compile Include="Encrypt\PolarSSL.cs" /> | <Compile Include="Encrypt\PolarSSL.cs" /> | ||||
<Compile Include="Encrypt\PolarSSLEncryptor.cs" /> | <Compile Include="Encrypt\PolarSSLEncryptor.cs" /> | ||||
<Compile Include="Encrypt\TableEncryptor.cs" /> | <Compile Include="Encrypt\TableEncryptor.cs" /> | ||||
@@ -116,6 +121,10 @@ | |||||
<DependentUpon>QRCodeForm.cs</DependentUpon> | <DependentUpon>QRCodeForm.cs</DependentUpon> | ||||
</EmbeddedResource> | </EmbeddedResource> | ||||
<None Include="app.config" /> | <None Include="app.config" /> | ||||
<None Include="app.manifest"> | |||||
<SubType>Designer</SubType> | |||||
</None> | |||||
<None Include="Data\libeay32.dll.gz" /> | |||||
<None Include="Data\polarssl.dll.gz" /> | <None Include="Data\polarssl.dll.gz" /> | ||||
<None Include="Data\polipo.exe.gz" /> | <None Include="Data\polipo.exe.gz" /> | ||||
<None Include="Properties\Settings.settings"> | <None Include="Properties\Settings.settings"> | ||||
@@ -130,6 +139,10 @@ | |||||
<None Include="Data\proxy.pac.txt.gz" /> | <None Include="Data\proxy.pac.txt.gz" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="Resources\ss20.png" /> | |||||
<None Include="Resources\ss16.png" /> | |||||
<None Include="Resources\ss24.png" /> | |||||
<None Include="Resources\ssw128.png" /> | |||||
<Content Include="shadowsocks.ico" /> | <Content Include="shadowsocks.ico" /> | ||||
<None Include="Data\polipo_config.txt" /> | <None Include="Data\polipo_config.txt" /> | ||||
</ItemGroup> | </ItemGroup> | ||||