From ce6d4964bea432c1969d76cb465f0468ece1585d Mon Sep 17 00:00:00 2001 From: clowwindy Date: Fri, 7 Nov 2014 21:46:27 +0800 Subject: [PATCH] PAC edit --- shadowsocks-csharp/Controller/Local.cs | 33 ++++++++----- shadowsocks-csharp/Controller/PACServer.cs | 45 +++++++++++++----- .../Controller/ShadowsocksController.cs | 25 ++++++++-- shadowsocks-csharp/Data/polarssl.dll.gz | Bin 17274 -> 18561 bytes .../Encrypt/PolarSSLEncryptor.cs | 4 +- shadowsocks-csharp/Model/Config.cs | 5 +- shadowsocks-csharp/Program.cs | 13 +++-- .../View/ConfigForm.Designer.cs | 15 ++++-- shadowsocks-csharp/View/ConfigForm.cs | 14 ++++++ 9 files changed, 118 insertions(+), 36 deletions(-) diff --git a/shadowsocks-csharp/Controller/Local.cs b/shadowsocks-csharp/Controller/Local.cs index 693cc03a..bc6fa9fb 100755 --- a/shadowsocks-csharp/Controller/Local.cs +++ b/shadowsocks-csharp/Controller/Local.cs @@ -22,22 +22,29 @@ namespace shadowsocks_csharp.Controller public void Start() { + try + { + // Create a TCP/IP socket. + listener = new Socket(AddressFamily.InterNetwork, + SocketType.Stream, ProtocolType.Tcp); + IPEndPoint localEndPoint = new IPEndPoint(0, config.local_port); - // Create a TCP/IP socket. - listener = new Socket(AddressFamily.InterNetwork, - SocketType.Stream, ProtocolType.Tcp); - IPEndPoint localEndPoint = new IPEndPoint(0, config.local_port); - - // Bind the socket to the local endpoint and listen for incoming connections. - listener.Bind(localEndPoint); - listener.Listen(100); + // Bind the socket to the local endpoint and listen for incoming connections. + listener.Bind(localEndPoint); + listener.Listen(100); - // Start an asynchronous socket to listen for connections. - Console.WriteLine("Shadowsocks started"); - listener.BeginAccept( - new AsyncCallback(AcceptCallback), - listener); + // Start an asynchronous socket to listen for connections. + Console.WriteLine("Shadowsocks started"); + listener.BeginAccept( + new AsyncCallback(AcceptCallback), + listener); + } + catch(SocketException) + { + listener.Close(); + throw; + } } diff --git a/shadowsocks-csharp/Controller/PACServer.cs b/shadowsocks-csharp/Controller/PACServer.cs index 92f420e0..c5d8f7d3 100755 --- a/shadowsocks-csharp/Controller/PACServer.cs +++ b/shadowsocks-csharp/Controller/PACServer.cs @@ -11,6 +11,8 @@ namespace shadowsocks_csharp.Controller { class PACServer { + private static string PAC_FILE = "pac.txt"; + Socket listener; public void Start() { @@ -28,6 +30,19 @@ namespace shadowsocks_csharp.Controller listener); } + public string TouchPACFile() + { + if (File.Exists(PAC_FILE)) + { + return PAC_FILE; + } + else + { + FileManager.UncompressFile(PAC_FILE, Resources.proxy_pac_txt); + return PAC_FILE; + } + } + public void AcceptCallback(IAsyncResult ar) { @@ -51,21 +66,29 @@ namespace shadowsocks_csharp.Controller private string getPACContent() { // TODO try pac.txt in current directory - byte[] pacGZ = Resources.proxy_pac_txt; - - byte[] buffer = new byte[1024 * 1024]; // builtin pac gzip size: maximum 1M - int n; - - using (GZipStream input = new GZipStream(new MemoryStream(pacGZ), - CompressionMode.Decompress, false)) + + if (File.Exists(PAC_FILE)) { - n = input.Read(buffer, 0, buffer.Length); - if (n == 0) + return File.ReadAllText(PAC_FILE, Encoding.UTF8); + } + else + { + byte[] pacGZ = Resources.proxy_pac_txt; + byte[] buffer = new byte[1024 * 1024]; // builtin pac gzip size: maximum 1M + int n; + + using (GZipStream input = new GZipStream(new MemoryStream(pacGZ), + CompressionMode.Decompress, false)) { - throw new IOException("can not decompress pac"); + n = input.Read(buffer, 0, buffer.Length); + if (n == 0) + { + throw new IOException("can not decompress pac"); + } + return System.Text.Encoding.UTF8.GetString(buffer, 0, n); } - return System.Text.Encoding.UTF8.GetString(buffer, 0, n); } + } private void receiveCallback(IAsyncResult ar) diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index fe89a619..32042d48 100755 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -23,8 +23,15 @@ namespace shadowsocks_csharp.Controller public string Path; } + public class ErrorEventArgs : EventArgs + { + public string Error; + } + public event EventHandler ConfigChanged; public event EventHandler EnableStatusChanged; + + public event EventHandler LocalFailToStart; // when user clicked Edit PAC, and PAC file has already created public event EventHandler PACFileReadyToOpen; @@ -35,9 +42,16 @@ namespace shadowsocks_csharp.Controller polipoRunner = new PolipoRunner(); polipoRunner.Start(config); local = new Local(config); - local.Start(); - pacServer = new PACServer(); - pacServer.Start(); + try + { + local.Start(); + pacServer = new PACServer(); + pacServer.Start(); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } updateSystemProxy(); } @@ -93,6 +107,11 @@ namespace shadowsocks_csharp.Controller public void TouchPACFile() { + string pacFilename = pacServer.TouchPACFile(); + if (PACFileReadyToOpen != null) + { + PACFileReadyToOpen(this, new PathEventArgs() { Path = pacFilename }); + } } private void updateSystemProxy() diff --git a/shadowsocks-csharp/Data/polarssl.dll.gz b/shadowsocks-csharp/Data/polarssl.dll.gz index 7963932bae91ee0955d75a566b2532bb28e23cde..1010242ef73fd149b2f1c016fbae9fc253a32507 100755 GIT binary patch literal 18561 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 z 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