Browse Source

pac proxy toggle

tags/2.3
clowwindy 10 years ago
parent
commit
1c4efbdb64
10 changed files with 103 additions and 2600 deletions
  1. +4
    -1
      shadowsocks-csharp/Config.cs
  2. +48
    -60
      shadowsocks-csharp/Form1.Designer.cs
  3. +18
    -4
      shadowsocks-csharp/Form1.cs
  4. +3
    -3
      shadowsocks-csharp/Form1.resx
  5. +23
    -1
      shadowsocks-csharp/PACServer.cs
  6. +4
    -25
      shadowsocks-csharp/Properties/Resources.Designer.cs
  7. +2
    -2
      shadowsocks-csharp/Properties/Resources.resx
  8. +0
    -2504
      shadowsocks-csharp/proxy.pac.txt
  9. BIN
      shadowsocks-csharp/proxy.pac.txt.gz
  10. +1
    -0
      shadowsocks-csharp/shadowsocks-csharp.csproj

+ 4
- 1
shadowsocks-csharp/Config.cs View File

@@ -10,6 +10,7 @@ namespace shadowsocks_csharp
[Serializable]
public class Config
{
public bool enabled;
public string server;
public int server_port;
public int local_port;
@@ -51,6 +52,7 @@ namespace shadowsocks_csharp
local_port = 1080,
password = "barfoo!",
method = "table",
enabled = true,
isDefault = true
};
}
@@ -68,7 +70,8 @@ namespace shadowsocks_csharp
server_port = config.server_port,
local_port = config.local_port,
password = config.password,
method = config.method
method = config.method,
enabled = config.enabled
});
sw.Write(jsonString);
sw.Flush();


+ 48
- 60
shadowsocks-csharp/Form1.Designer.cs View File

@@ -42,18 +42,17 @@
this.textBox3 = new System.Windows.Forms.TextBox();
this.textBox4 = new System.Windows.Forms.TextBox();
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ConfigItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.QuitItem = new System.Windows.Forms.ToolStripMenuItem();
this.panel2 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.EnableItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.enableItem = new System.Windows.Forms.MenuItem();
this.aboutItem = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.quitItem = new System.Windows.Forms.MenuItem();
this.configItem = new System.Windows.Forms.MenuItem();
this.tableLayoutPanel1.SuspendLayout();
this.contextMenuStrip1.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
@@ -192,50 +191,11 @@
//
// notifyIcon1
//
this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "shadowsocks";
this.notifyIcon1.Visible = true;
this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
//
// contextMenuStrip1
//
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.EnableItem,
this.ConfigItem,
this.aboutToolStripMenuItem,
this.toolStripSeparator2,
this.QuitItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.contextMenuStrip1.Size = new System.Drawing.Size(153, 120);
//
// ConfigItem
//
this.ConfigItem.Name = "ConfigItem";
this.ConfigItem.Size = new System.Drawing.Size(152, 22);
this.ConfigItem.Text = "Config";
this.ConfigItem.Click += new System.EventHandler(this.Config_Click);
//
// aboutToolStripMenuItem
//
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.aboutToolStripMenuItem.Text = "About";
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6);
//
// QuitItem
//
this.QuitItem.Name = "QuitItem";
this.QuitItem.Size = new System.Drawing.Size(152, 22);
this.QuitItem.Text = "Quit";
this.QuitItem.Click += new System.EventHandler(this.Quit_Click);
//
// panel2
//
this.panel2.Anchor = System.Windows.Forms.AnchorStyles.Top;
@@ -280,14 +240,43 @@
this.panel1.Size = new System.Drawing.Size(164, 30);
this.panel1.TabIndex = 1;
//
// EnableItem
// contextMenu1
//
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.enableItem,
this.configItem,
this.aboutItem,
this.menuItem3,
this.quitItem});
//
// enableItem
//
this.enableItem.Index = 0;
this.enableItem.Text = "Enable";
this.enableItem.Click += new System.EventHandler(this.EnableItem_Click);
//
// aboutItem
//
this.aboutItem.Index = 2;
this.aboutItem.Text = "About";
this.aboutItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
//
// menuItem3
//
this.menuItem3.Index = 3;
this.menuItem3.Text = "-";
//
// quitItem
//
this.quitItem.Index = 4;
this.quitItem.Text = "Quit";
this.quitItem.Click += new System.EventHandler(this.Quit_Click);
//
// configItem
//
this.EnableItem.Checked = true;
this.EnableItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.EnableItem.Name = "EnableItem";
this.EnableItem.Size = new System.Drawing.Size(152, 22);
this.EnableItem.Text = "Enable";
this.EnableItem.Click += new System.EventHandler(this.EnableItem_Click);
this.configItem.Index = 1;
this.configItem.Text = "Options...";
this.configItem.Click += new System.EventHandler(this.Config_Click);
//
// Form1
//
@@ -309,7 +298,6 @@
this.Load += new System.EventHandler(this.Form1_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.contextMenuStrip1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@@ -328,18 +316,18 @@
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.NotifyIcon notifyIcon1;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ConfigItem;
private System.Windows.Forms.ToolStripMenuItem QuitItem;
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.ToolStripMenuItem EnableItem;
private System.Windows.Forms.ContextMenu contextMenu1;
private System.Windows.Forms.MenuItem enableItem;
private System.Windows.Forms.MenuItem aboutItem;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem quitItem;
private System.Windows.Forms.MenuItem configItem;
}
}

+ 18
- 4
shadowsocks-csharp/Form1.cs View File

@@ -19,9 +19,11 @@ namespace shadowsocks_csharp
{
config = Config.Load();
InitializeComponent();
notifyIcon1.ContextMenu = contextMenu1;
enableItem.Checked = config.enabled;
configToTextBox();
}
private void showWindow()
{
this.Opacity = 1;
@@ -49,6 +51,7 @@ namespace shadowsocks_csharp
}
pacServer = new PACServer();
pacServer.Start();
updateSystemProxy();
}
private void reload(Config config)
@@ -120,6 +123,10 @@ namespace shadowsocks_csharp
{
if (local != null) local.Stop();
if (polipoRunner != null) polipoRunner.Stop();
if (config.enabled)
{
SystemProxy.Disable();
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
@@ -132,10 +139,9 @@ namespace shadowsocks_csharp
showWindow();
}
private void EnableItem_Click(object sender, EventArgs e)
private void updateSystemProxy()
{
EnableItem.Checked = !EnableItem.Checked;
if (EnableItem.Checked)
if (config.enabled)
{
SystemProxy.Enable();
}
@@ -145,5 +151,13 @@ namespace shadowsocks_csharp
}
}
private void EnableItem_Click(object sender, EventArgs e)
{
enableItem.Checked = !enableItem.Checked;
config.enabled = enableItem.Checked;
Config.Save(config);
updateSystemProxy();
}
}
}

+ 3
- 3
shadowsocks-csharp/Form1.resx View File

@@ -120,9 +120,6 @@
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>130, 17</value>
</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>
@@ -148,6 +145,9 @@
//8AAP//AAD//w==
</value>
</data>
<metadata name="contextMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>146, 19</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA


+ 23
- 1
shadowsocks-csharp/PACServer.cs View File

@@ -1,6 +1,8 @@
using shadowsocks_csharp.Properties;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Sockets;
using System.Text;
@@ -46,6 +48,26 @@ namespace shadowsocks_csharp
}
}
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))
{
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);
}
}
private void receiveCallback(IAsyncResult ar)
{
Socket conn = (Socket)ar.AsyncState;
@@ -53,7 +75,7 @@ namespace shadowsocks_csharp
{
int bytesRead = conn.EndReceive(ar);
string pac = Resources.proxy_pac;
string pac = getPACContent();
string proxy = "PROXY 127.0.0.1:8123; DIRECT;";


+ 4
- 25
shadowsocks-csharp/Properties/Resources.Designer.cs View File

@@ -96,33 +96,12 @@ namespace shadowsocks_csharp.Properties {
}
/// <summary>
/// Looks up a localized string similar to // Generated by gfwlist2pac
///// https://github.com/clowwindy/gfwlist2pac
///
///var domains = {
/// &quot;gimpshop.com&quot;: 1,
/// &quot;directcreative.com&quot;: 1,
/// &quot;speedpluss.org&quot;: 1,
/// &quot;mingpaovan.com&quot;: 1,
/// &quot;wikinews.org&quot;: 1,
/// &quot;joachims.org&quot;: 1,
/// &quot;maiio.net&quot;: 1,
/// &quot;idv.tw&quot;: 1,
/// &quot;mail-archive.com&quot;: 1,
/// &quot;surfeasy.com.au&quot;: 1,
/// &quot;hihistory.net&quot;: 1,
/// &quot;alexlur.org&quot;: 1,
/// &quot;finalion.jp&quot;: 1,
/// &quot;nrk.no&quot;: 1,
/// &quot;nyt.com&quot;: 1,
/// &quot;cmule.com&quot;: 1,
/// &quot;gappp.org&quot;: 1,
/// &quot;givemesomethingtoread.com&quot;: 1,
/// [rest of string was truncated]&quot;;.
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static string proxy_pac {
internal static byte[] proxy_pac_txt {
get {
return ResourceManager.GetString("proxy_pac", resourceCulture);
object obj = ResourceManager.GetObject("proxy_pac_txt", resourceCulture);
return ((byte[])(obj));
}
}
}


+ 2
- 2
shadowsocks-csharp/Properties/Resources.resx View File

@@ -124,7 +124,7 @@
<data name="polipo_exe" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\polipo.exe.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="proxy_pac" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\proxy.pac.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
<data name="proxy_pac_txt" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\proxy.pac.txt.gz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

+ 0
- 2504
shadowsocks-csharp/proxy.pac.txt
File diff suppressed because it is too large
View File


BIN
shadowsocks-csharp/proxy.pac.txt.gz View File


+ 1
- 0
shadowsocks-csharp/shadowsocks-csharp.csproj View File

@@ -126,6 +126,7 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="simple-json\src\SimpleJson\SimpleJson.cs" />
<None Include="proxy.pac.txt.gz" />
</ItemGroup>
<ItemGroup>
<None Include="config.txt" />


Loading…
Cancel
Save