@@ -108,12 +108,12 @@ namespace Shadowsocks.Controller | |||||
if (item == null) continue; | if (item == null) continue; | ||||
item.Text = GetString(item.Text); | item.Text = GetString(item.Text); | ||||
} | } | ||||
TranslateMenu(c.Menu); | |||||
TranslateMenu(c.MainMenuStrip); | |||||
} | } | ||||
public static void TranslateMenu(Menu m) | |||||
public static void TranslateMenu(MenuStrip m) | |||||
{ | { | ||||
if (m == null) return; | if (m == null) return; | ||||
foreach (var item in ViewUtils.GetMenuItems(m)) | |||||
foreach (var item in ViewUtils.GetToolStripMenuItems(m)) | |||||
{ | { | ||||
if (item == null) continue; | if (item == null) continue; | ||||
item.Text = GetString(item.Text); | item.Text = GetString(item.Text); | ||||
@@ -24,7 +24,7 @@ namespace Shadowsocks.Controller | |||||
{ | { | ||||
var rd = new byte[32]; | var rd = new byte[32]; | ||||
RNG.GetBytes(rd); | RNG.GetBytes(rd); | ||||
_cachedPacSecret = HttpServerUtility.UrlTokenEncode(rd); | |||||
_cachedPacSecret = HttpServerUtilityUrlToken.Encode(rd); | |||||
} | } | ||||
return _cachedPacSecret; | return _cachedPacSecret; | ||||
} | } | ||||
@@ -51,7 +51,7 @@ namespace Shadowsocks.Controller | |||||
private static string GetHash(string content) | private static string GetHash(string content) | ||||
{ | { | ||||
return HttpServerUtility.UrlTokenEncode(MbedTLS.MD5(Encoding.ASCII.GetBytes(content))); | |||||
return HttpServerUtilityUrlToken.Encode(MbedTLS.MD5(Encoding.ASCII.GetBytes(content))); | |||||
} | } | ||||
public override bool Handle(byte[] firstPacket, int length, Socket socket, object state) | public override bool Handle(byte[] firstPacket, int length, Socket socket, object state) | ||||
@@ -0,0 +1,144 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace Shadowsocks | |||||
{ | |||||
/// <summary> | |||||
/// HttpServerUtility URL Token のエンコード及びデコードを行うクラス。 | |||||
/// https://docs.microsoft.com/ja-jp/dotnet/api/system.web.httpserverutility.urltokenencode | |||||
/// https://docs.microsoft.com/ja-jp/dotnet/api/system.web.httpserverutility.urltokendecode | |||||
/// </summary> | |||||
/// <remarks> | |||||
/// HttpServerUtility URL Token 形式は、パディング無し base64url にパディング数を文字として追記した文字列です。 | |||||
/// 例えば、<c>0x00</c> は <c>AA2</c> になります。 | |||||
/// </remarks> | |||||
public static class HttpServerUtilityUrlToken | |||||
{ | |||||
#if NETSTANDARD2_0 | |||||
private static readonly byte[] EmptyBytes = Array.Empty<byte>(); | |||||
#else | |||||
private static readonly byte[] EmptyBytes = new byte[0]; | |||||
#endif | |||||
/// <summary> | |||||
/// <see cref="byte"/> 配列を HttpServerUtility URL Token にエンコードします。 | |||||
/// </summary> | |||||
/// <param name="bytes">エンコード対象の <see cref="byte"/> 配列。</param> | |||||
/// <returns>HttpServerUtility URL Token エンコード文字列。<paramref name="bytes"/> の長さが <c>0</c> の場合は空文字列を返します。</returns> | |||||
/// <exception cref="ArgumentNullException"><paramref name="bytes"/> is <c>null</c>.</exception> | |||||
public static string Encode(byte[] bytes) | |||||
{ | |||||
if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } | |||||
return Encode(bytes, 0, bytes.Length); | |||||
} | |||||
/// <summary> | |||||
/// <see cref="byte"/> 配列を HttpServerUtility URL Token にエンコードします。 | |||||
/// </summary> | |||||
/// <param name="bytes">エンコード対象の <see cref="byte"/> 配列。</param> | |||||
/// <param name="offset">エンコードの開始位置を示すオフセット。</param> | |||||
/// <param name="length">エンコード対象の要素の数。</param> | |||||
/// <returns>HttpServerUtility URL Token エンコード文字列。<paramref name="length"/> が <c>0</c> の場合は空文字列を返します。</returns> | |||||
/// <exception cref="ArgumentNullException"><paramref name="bytes"/> is <c>null</c>.</exception> | |||||
/// <exception cref="ArgumentOutOfRangeException"> | |||||
/// <paramref name="offset"/> または <paramref name="length"/> が負の値です。 | |||||
/// または <paramref name="offset"/> と <paramref name="length"/> を加算した値が <paramref name="bytes"/> の長さを超えています。 | |||||
/// </exception> | |||||
public static string Encode(byte[] bytes, int offset, int length) | |||||
{ | |||||
if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } | |||||
var encoded = Encode(bytes, offset, length, padding: false); | |||||
if (encoded.Length == 0) { return ""; } | |||||
var paddingLen = unchecked(~encoded.Length + 1) & 0b11; | |||||
encoded += paddingLen; | |||||
return encoded; | |||||
} | |||||
/// <summary> | |||||
/// <see cref="byte"/> 配列を base64url にエンコードします。 | |||||
/// </summary> | |||||
/// <param name="bytes">エンコード対象の <see cref="byte"/> 配列。</param> | |||||
/// <param name="offset">エンコードの開始位置を示すオフセット。</param> | |||||
/// <param name="length">エンコード対象の要素の数。</param> | |||||
/// <param name="padding">パディングをする場合は <c>true</c>、それ以外は <c>false</c>。既定値は <c>false</c>。</param> | |||||
/// <returns>base64url エンコード文字列。</returns> | |||||
/// <exception cref="ArgumentNullException"><paramref name="bytes"/> is <c>null</c>.</exception> | |||||
/// <exception cref="ArgumentOutOfRangeException"> | |||||
/// <paramref name="offset"/> または <paramref name="length"/> が負の値です。 | |||||
/// または <paramref name="offset"/> と <paramref name="length"/> を加算した値が <paramref name="bytes"/> の長さを超えています。 | |||||
/// </exception> | |||||
public static string Encode(byte[] bytes, int offset, int length, bool padding = false) | |||||
{ | |||||
var encoded = Convert.ToBase64String(bytes, offset, length); | |||||
if (!padding) | |||||
{ | |||||
encoded = encoded.TrimEnd('='); | |||||
} | |||||
return encoded | |||||
.Replace('+', '-') | |||||
.Replace('/', '_') | |||||
; | |||||
} | |||||
/// <summary> | |||||
/// HttpServerUtility URL Token 文字列を <see cref="byte"/> 配列にデコードします。 | |||||
/// </summary> | |||||
/// <param name="encoded">HttpServerUtility URL Token にエンコードされた文字列。</param> | |||||
/// <returns>デコード後の <see cref="byte"/> 配列。<paramref name="encoded"/> が空文字列の場合は <see cref="byte"/> の空配列を返します。</returns> | |||||
/// <exception cref="ArgumentNullException"><paramref name="encoded"/> is <c>null</c>.</exception> | |||||
/// <exception cref="FormatException"><paramref name="encoded"/> が HttpServerUtility URL Token 文字列ではありません。</exception> | |||||
public static byte[] Decode(string encoded) | |||||
{ | |||||
if (encoded == null) { throw new ArgumentNullException(nameof(encoded)); } | |||||
if (!TryDecode(encoded, out var result)) { throw new FormatException("HttpServerUtility URL Token 文字列ではありません。"); } | |||||
return result; | |||||
} | |||||
/// <summary> | |||||
/// HttpServerUtility URL Token でエンコードされた文字列をデコードします。 | |||||
/// </summary> | |||||
/// <param name="encoded">HttpServerUtility URL Token エンコードされた文字列。</param> | |||||
/// <param name="result">デコード後の <see cref="byte"/> 配列。<paramref name="encoded"/> が空文字列の場合は <see cref="byte"/> の空配列が設定されます。失敗した場合は <c>null</c>。</param> | |||||
/// <returns>デコードに成功した場合は <c>true</c>、それ以外は <c>false</c>。</returns> | |||||
public static bool TryDecode(string encoded, out byte[] result) | |||||
{ | |||||
if (encoded == null) { goto Failure; } | |||||
if (encoded.Length == 0) | |||||
{ | |||||
result = EmptyBytes; | |||||
return true; | |||||
} | |||||
var paddingLen = encoded[encoded.Length - 1] - '0'; | |||||
if (paddingLen < 0 || paddingLen > 3) { goto Failure; } | |||||
var base64Str = encoded | |||||
.Substring(0, encoded.Length - 1) | |||||
.Replace('-', '+') | |||||
.Replace('_', '/'); | |||||
if (paddingLen > 0) | |||||
{ | |||||
base64Str += new string('=', paddingLen); | |||||
} | |||||
try | |||||
{ | |||||
result = Convert.FromBase64String(base64Str); | |||||
return true; | |||||
} | |||||
catch (FormatException) { goto Failure; } | |||||
Failure: | |||||
result = null; | |||||
return false; | |||||
} | |||||
} | |||||
} |
@@ -1,37 +0,0 @@ | |||||
using Shadowsocks.Controller; | |||||
using System.Reflection; | |||||
using System.Runtime.CompilerServices; | |||||
using System.Runtime.InteropServices; | |||||
// 有关程序集的常规信息通过下列属性集 | |||||
// 控制。更改这些属性值可修改 | |||||
// 与程序集关联的信息。 | |||||
[assembly: AssemblyTitle("Shadowsocks")] | |||||
[assembly: AssemblyDescription("")] | |||||
[assembly: AssemblyConfiguration("")] | |||||
[assembly: AssemblyCompany("")] | |||||
[assembly: AssemblyProduct("Shadowsocks")] | |||||
[assembly: AssemblyCopyright("clowwindy & community 2020")] | |||||
[assembly: AssemblyTrademark("")] | |||||
[assembly: AssemblyCulture("")] | |||||
// 将 ComVisible 设置为 false 使此程序集中的类型 | |||||
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, | |||||
// 则将该类型上的 ComVisible 属性设置为 true。 | |||||
[assembly: ComVisible(false)] | |||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID | |||||
[assembly: Guid("f8334709-4309-436a-8bbd-6165dcf4a660")] | |||||
// 程序集的版本信息由下面四个值组成: | |||||
// | |||||
// 主版本 | |||||
// 次版本 | |||||
// 内部版本号 | |||||
// 修订号 | |||||
// | |||||
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, | |||||
// 方法是按如下所示使用“*”: | |||||
// [assembly: AssemblyVersion("1.0.*")] | |||||
[assembly: AssemblyVersion(UpdateChecker.Version)] | |||||
// [assembly: AssemblyFileVersion("2.0.0")] |
@@ -0,0 +1,17 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<!-- | |||||
https://go.microsoft.com/fwlink/?LinkID=208121. | |||||
--> | |||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<PropertyGroup> | |||||
<PublishProtocol>FileSystem</PublishProtocol> | |||||
<Configuration>Release</Configuration> | |||||
<Platform>Any CPU</Platform> | |||||
<TargetFramework>netcoreapp3.1</TargetFramework> | |||||
<PublishDir>bin\Release\netcoreapp3.1\publish\</PublishDir> | |||||
<RuntimeIdentifier>win-x86</RuntimeIdentifier> | |||||
<SelfContained>false</SelfContained> | |||||
<PublishSingleFile>False</PublishSingleFile> | |||||
<PublishReadyToRun>False</PublishReadyToRun> | |||||
</PropertyGroup> | |||||
</Project> |
@@ -0,0 +1,6 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<!-- | |||||
https://go.microsoft.com/fwlink/?LinkID=208121. | |||||
--> | |||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
</Project> |
@@ -1,10 +1,10 @@ | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
// <auto-generated> | // <auto-generated> | ||||
// This code was generated by a tool. | |||||
// Runtime Version:4.0.30319.42000 | |||||
// 此代码由工具生成。 | |||||
// 运行时版本:4.0.30319.42000 | |||||
// | // | ||||
// Changes to this file may cause incorrect behavior and will be lost if | |||||
// the code is regenerated. | |||||
// 对此文件的更改可能会导致不正确的行为,并且如果 | |||||
// 重新生成代码,这些更改将会丢失。 | |||||
// </auto-generated> | // </auto-generated> | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
@@ -12,7 +12,7 @@ namespace Shadowsocks.Properties { | |||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | ||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.1.0.0")] | |||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] | |||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { | ||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | ||||
@@ -22,15 +22,25 @@ namespace Shadowsocks.Util | |||||
return children.SelectMany(GetChildControls<TControl>).Concat(children); | return children.SelectMany(GetChildControls<TControl>).Concat(children); | ||||
} | } | ||||
public static IEnumerable<MenuItem> GetMenuItems(Menu m) | |||||
public static IEnumerable<ToolStripMenuItem> GetToolStripMenuItems(MenuStrip m) | |||||
{ | { | ||||
if (m?.MenuItems == null || m.MenuItems.Count == 0) return Enumerable.Empty<MenuItem>(); | |||||
var children = new List<MenuItem>(); | |||||
foreach (var item in m.MenuItems) | |||||
if (m?.Items == null || m.Items.Count == 0) return Enumerable.Empty<ToolStripMenuItem>(); | |||||
var children = new List<ToolStripMenuItem>(); | |||||
foreach (var item in m.Items) | |||||
{ | { | ||||
children.Add((MenuItem)item); | |||||
children.Add((ToolStripMenuItem)item); | |||||
} | } | ||||
return children.SelectMany(GetMenuItems).Concat(children); | |||||
return children.SelectMany(GetToolStripMenuItems).Concat(children); | |||||
} | |||||
public static IEnumerable<ToolStripMenuItem> GetToolStripMenuItems(ToolStripMenuItem m) | |||||
{ | |||||
if (m?.DropDownItems == null || m.DropDownItems.Count == 0) return Enumerable.Empty<ToolStripMenuItem>(); | |||||
var children = new List<ToolStripMenuItem>(); | |||||
foreach (var item in m.DropDownItems) | |||||
{ | |||||
children.Add((ToolStripMenuItem)item); | |||||
} | |||||
return children.SelectMany(GetToolStripMenuItems).Concat(children); | |||||
} | } | ||||
// Workaround NotifyIcon's 63 chars limit | // Workaround NotifyIcon's 63 chars limit | ||||
@@ -34,17 +34,17 @@ | |||||
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); | System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); | ||||
System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); | System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); | ||||
this.LogMessageTextBox = new System.Windows.Forms.TextBox(); | this.LogMessageTextBox = new System.Windows.Forms.TextBox(); | ||||
this.MainMenu = new System.Windows.Forms.MainMenu(this.components); | |||||
this.FileMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.OpenLocationMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.ExitMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.ViewMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.ClearLogsMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.ChangeFontMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.WrapTextMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.TopMostMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.MenuItemSeparater = new System.Windows.Forms.MenuItem(); | |||||
this.ShowToolbarMenuItem = new System.Windows.Forms.MenuItem(); | |||||
this.MainMenu = new System.Windows.Forms.MenuStrip(); | |||||
this.FileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.OpenLocationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ExitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ClearLogsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ChangeFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.WrapTextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.TopMostToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ToolStripMenuItemSeparater = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.ShowToolbarToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||||
this.TopMostCheckBox = new System.Windows.Forms.CheckBox(); | this.TopMostCheckBox = new System.Windows.Forms.CheckBox(); | ||||
this.ChangeFontButton = new System.Windows.Forms.Button(); | this.ChangeFontButton = new System.Windows.Forms.Button(); | ||||
this.ClearLogsButton = new System.Windows.Forms.Button(); | this.ClearLogsButton = new System.Windows.Forms.Button(); | ||||
@@ -79,76 +79,66 @@ | |||||
// | // | ||||
// MainMenu | // MainMenu | ||||
// | // | ||||
this.MainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { | |||||
this.FileMenuItem, | |||||
this.ViewMenuItem}); | |||||
this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripMenuItem[] { | |||||
this.FileToolStripMenuItem, | |||||
this.ViewToolStripMenuItem}); | |||||
// | // | ||||
// FileMenuItem | |||||
// FileToolStripMenuItem | |||||
// | // | ||||
this.FileMenuItem.Index = 0; | |||||
this.FileMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { | |||||
this.OpenLocationMenuItem, | |||||
this.ExitMenuItem}); | |||||
this.FileMenuItem.Text = "&File"; | |||||
this.FileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripMenuItem[] { | |||||
this.OpenLocationToolStripMenuItem, | |||||
this.ExitToolStripMenuItem}); | |||||
this.FileToolStripMenuItem.Text = "&File"; | |||||
// | // | ||||
// OpenLocationMenuItem | |||||
// OpenLocationToolStripMenuItem | |||||
// | // | ||||
this.OpenLocationMenuItem.Index = 0; | |||||
this.OpenLocationMenuItem.Text = "&Open Location"; | |||||
this.OpenLocationMenuItem.Click += new System.EventHandler(this.OpenLocationMenuItem_Click); | |||||
this.OpenLocationToolStripMenuItem.Text = "&Open Location"; | |||||
this.OpenLocationToolStripMenuItem.Click += new System.EventHandler(this.OpenLocationToolStripMenuItem_Click); | |||||
// | // | ||||
// ExitMenuItem | |||||
// ExitToolStripMenuItem | |||||
// | // | ||||
this.ExitMenuItem.Index = 1; | |||||
this.ExitMenuItem.Text = "E&xit"; | |||||
this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); | |||||
this.ExitToolStripMenuItem.Text = "E&xit"; | |||||
this.ExitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); | |||||
// | // | ||||
// ViewMenuItem | |||||
// ViewToolStripMenuItem | |||||
// | // | ||||
this.ViewMenuItem.Index = 1; | |||||
this.ViewMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { | |||||
this.ClearLogsMenuItem, | |||||
this.ChangeFontMenuItem, | |||||
this.WrapTextMenuItem, | |||||
this.TopMostMenuItem, | |||||
this.MenuItemSeparater, | |||||
this.ShowToolbarMenuItem}); | |||||
this.ViewMenuItem.Text = "&View"; | |||||
this.ViewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripMenuItem[] { | |||||
this.ClearLogsToolStripMenuItem, | |||||
this.ChangeFontToolStripMenuItem, | |||||
this.WrapTextToolStripMenuItem, | |||||
this.TopMostToolStripMenuItem, | |||||
this.ToolStripMenuItemSeparater, | |||||
this.ShowToolbarToolStripMenuItem}); | |||||
this.ViewToolStripMenuItem.Text = "&View"; | |||||
// | // | ||||
// ClearLogsMenuItem | |||||
// ClearLogsToolStripMenuItem | |||||
// | // | ||||
this.ClearLogsMenuItem.Index = 0; | |||||
this.ClearLogsMenuItem.Text = "&Clear Logs"; | |||||
this.ClearLogsMenuItem.Click += new System.EventHandler(this.ClearLogsMenuItem_Click); | |||||
this.ClearLogsToolStripMenuItem.Text = "&Clear Logs"; | |||||
this.ClearLogsToolStripMenuItem.Click += new System.EventHandler(this.ClearLogsToolStripMenuItem_Click); | |||||
// | // | ||||
// ChangeFontMenuItem | |||||
// ChangeFontToolStripMenuItem | |||||
// | // | ||||
this.ChangeFontMenuItem.Index = 1; | |||||
this.ChangeFontMenuItem.Text = "Change &Font"; | |||||
this.ChangeFontMenuItem.Click += new System.EventHandler(this.ChangeFontMenuItem_Click); | |||||
this.ChangeFontToolStripMenuItem.Text = "Change &Font"; | |||||
this.ChangeFontToolStripMenuItem.Click += new System.EventHandler(this.ChangeFontToolStripMenuItem_Click); | |||||
// | // | ||||
// WrapTextMenuItem | |||||
// WrapTextToolStripMenuItem | |||||
// | // | ||||
this.WrapTextMenuItem.Index = 2; | |||||
this.WrapTextMenuItem.Text = "&Wrap Text"; | |||||
this.WrapTextMenuItem.Click += new System.EventHandler(this.WrapTextMenuItem_Click); | |||||
this.WrapTextToolStripMenuItem.Text = "&Wrap Text"; | |||||
this.WrapTextToolStripMenuItem.Click += new System.EventHandler(this.WrapTextToolStripMenuItem_Click); | |||||
// | // | ||||
// TopMostMenuItem | |||||
// TopMostToolStripMenuItem | |||||
// | // | ||||
this.TopMostMenuItem.Index = 3; | |||||
this.TopMostMenuItem.Text = "&Top Most"; | |||||
this.TopMostMenuItem.Click += new System.EventHandler(this.TopMostMenuItem_Click); | |||||
this.TopMostToolStripMenuItem.Text = "&Top Most"; | |||||
this.TopMostToolStripMenuItem.Click += new System.EventHandler(this.TopMostToolStripMenuItem_Click); | |||||
// | // | ||||
// MenuItemSeparater | |||||
// ToolStripMenuItemSeparater | |||||
// | // | ||||
this.MenuItemSeparater.Index = 4; | |||||
this.MenuItemSeparater.Text = "-"; | |||||
this.ToolStripMenuItemSeparater.Text = "-"; | |||||
// | // | ||||
// ShowToolbarMenuItem | |||||
// ShowToolbarToolStripMenuItem | |||||
// | // | ||||
this.ShowToolbarMenuItem.Index = 5; | |||||
this.ShowToolbarMenuItem.Text = "&Show Toolbar"; | |||||
this.ShowToolbarMenuItem.Click += new System.EventHandler(this.ShowToolbarMenuItem_Click); | |||||
this.ShowToolbarToolStripMenuItem.Text = "&Show Toolbar"; | |||||
this.ShowToolbarToolStripMenuItem.Click += new System.EventHandler(this.ShowToolbarToolStripMenuItem_Click); | |||||
// | // | ||||
// TopMostCheckBox | // TopMostCheckBox | ||||
// | // | ||||
@@ -294,7 +284,7 @@ | |||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; | ||||
this.ClientSize = new System.Drawing.Size(384, 161); | this.ClientSize = new System.Drawing.Size(384, 161); | ||||
this.Controls.Add(this.tableLayoutPanel1); | this.Controls.Add(this.tableLayoutPanel1); | ||||
this.Menu = this.MainMenu; | |||||
this.MainMenuStrip = this.MainMenu; | |||||
this.MinimumSize = new System.Drawing.Size(400, 200); | this.MinimumSize = new System.Drawing.Size(400, 200); | ||||
this.Name = "LogForm"; | this.Name = "LogForm"; | ||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; | ||||
@@ -319,23 +309,23 @@ | |||||
#endregion | #endregion | ||||
private System.Windows.Forms.TextBox LogMessageTextBox; | private System.Windows.Forms.TextBox LogMessageTextBox; | ||||
private System.Windows.Forms.MainMenu MainMenu; | |||||
private System.Windows.Forms.MenuItem FileMenuItem; | |||||
private System.Windows.Forms.MenuItem OpenLocationMenuItem; | |||||
private System.Windows.Forms.MenuItem ExitMenuItem; | |||||
private System.Windows.Forms.MenuStrip MainMenu; | |||||
private System.Windows.Forms.ToolStripMenuItem FileToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem OpenLocationToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem ExitToolStripMenuItem; | |||||
private System.Windows.Forms.CheckBox WrapTextCheckBox; | private System.Windows.Forms.CheckBox WrapTextCheckBox; | ||||
private System.Windows.Forms.Button ClearLogsButton; | private System.Windows.Forms.Button ClearLogsButton; | ||||
private System.Windows.Forms.Button ChangeFontButton; | private System.Windows.Forms.Button ChangeFontButton; | ||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; | ||||
private System.Windows.Forms.CheckBox TopMostCheckBox; | private System.Windows.Forms.CheckBox TopMostCheckBox; | ||||
private System.Windows.Forms.MenuItem ViewMenuItem; | |||||
private System.Windows.Forms.MenuItem ClearLogsMenuItem; | |||||
private System.Windows.Forms.MenuItem ChangeFontMenuItem; | |||||
private System.Windows.Forms.MenuItem WrapTextMenuItem; | |||||
private System.Windows.Forms.MenuItem TopMostMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem ViewToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem ClearLogsToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem ChangeFontToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem WrapTextToolStripMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem TopMostToolStripMenuItem; | |||||
private System.Windows.Forms.FlowLayoutPanel ToolbarFlowLayoutPanel; | private System.Windows.Forms.FlowLayoutPanel ToolbarFlowLayoutPanel; | ||||
private System.Windows.Forms.MenuItem MenuItemSeparater; | |||||
private System.Windows.Forms.MenuItem ShowToolbarMenuItem; | |||||
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItemSeparater; | |||||
private System.Windows.Forms.ToolStripMenuItem ShowToolbarToolStripMenuItem; | |||||
private System.Windows.Forms.SplitContainer splitContainer1; | private System.Windows.Forms.SplitContainer splitContainer1; | ||||
private System.Windows.Forms.DataVisualization.Charting.Chart trafficChart; | private System.Windows.Forms.DataVisualization.Charting.Chart trafficChart; | ||||
} | } |
@@ -256,14 +256,14 @@ namespace Shadowsocks.View | |||||
} | } | ||||
topMostTriggerLock = true; | topMostTriggerLock = true; | ||||
TopMost = TopMostMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||||
TopMost = TopMostToolStripMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||||
topMostTriggerLock = false; | topMostTriggerLock = false; | ||||
wrapTextTriggerLock = true; | wrapTextTriggerLock = true; | ||||
LogMessageTextBox.WordWrap = WrapTextMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||||
LogMessageTextBox.WordWrap = WrapTextToolStripMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||||
wrapTextTriggerLock = false; | wrapTextTriggerLock = false; | ||||
ToolbarFlowLayoutPanel.Visible = ShowToolbarMenuItem.Checked = toolbarTrigger; | |||||
ToolbarFlowLayoutPanel.Visible = ShowToolbarToolStripMenuItem.Checked = toolbarTrigger; | |||||
} | } | ||||
private void LogForm_FormClosing(object sender, FormClosingEventArgs e) | private void LogForm_FormClosing(object sender, FormClosingEventArgs e) | ||||
@@ -288,14 +288,14 @@ namespace Shadowsocks.View | |||||
controller.SaveLogViewerConfig(config); | controller.SaveLogViewerConfig(config); | ||||
} | } | ||||
private void OpenLocationMenuItem_Click(object sender, EventArgs e) | |||||
private void OpenLocationToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
string argument = "/select, \"" + filename + "\""; | string argument = "/select, \"" + filename + "\""; | ||||
logger.Debug(argument); | logger.Debug(argument); | ||||
System.Diagnostics.Process.Start("explorer.exe", argument); | System.Diagnostics.Process.Start("explorer.exe", argument); | ||||
} | } | ||||
private void ExitMenuItem_Click(object sender, EventArgs e) | |||||
private void ExitToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
Close(); | Close(); | ||||
} | } | ||||
@@ -317,7 +317,7 @@ namespace Shadowsocks.View | |||||
LogMessageTextBox.Clear(); | LogMessageTextBox.Clear(); | ||||
} | } | ||||
private void ClearLogsMenuItem_Click(object sender, EventArgs e) | |||||
private void ClearLogsToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
DoClearLogs(); | DoClearLogs(); | ||||
} | } | ||||
@@ -347,7 +347,7 @@ namespace Shadowsocks.View | |||||
} | } | ||||
} | } | ||||
private void ChangeFontMenuItem_Click(object sender, EventArgs e) | |||||
private void ChangeFontToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
DoChangeFont(); | DoChangeFont(); | ||||
} | } | ||||
@@ -369,12 +369,12 @@ namespace Shadowsocks.View | |||||
wrapTextTrigger = !wrapTextTrigger; | wrapTextTrigger = !wrapTextTrigger; | ||||
LogMessageTextBox.WordWrap = wrapTextTrigger; | LogMessageTextBox.WordWrap = wrapTextTrigger; | ||||
LogMessageTextBox.ScrollToCaret(); | LogMessageTextBox.ScrollToCaret(); | ||||
WrapTextMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||||
WrapTextToolStripMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||||
wrapTextTriggerLock = false; | wrapTextTriggerLock = false; | ||||
} | } | ||||
private void WrapTextMenuItem_Click(object sender, EventArgs e) | |||||
private void WrapTextToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
if (!wrapTextTriggerLock) | if (!wrapTextTriggerLock) | ||||
{ | { | ||||
@@ -401,7 +401,7 @@ namespace Shadowsocks.View | |||||
topMostTrigger = !topMostTrigger; | topMostTrigger = !topMostTrigger; | ||||
TopMost = topMostTrigger; | TopMost = topMostTrigger; | ||||
TopMostMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||||
TopMostToolStripMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||||
topMostTriggerLock = false; | topMostTriggerLock = false; | ||||
} | } | ||||
@@ -414,7 +414,7 @@ namespace Shadowsocks.View | |||||
} | } | ||||
} | } | ||||
private void TopMostMenuItem_Click(object sender, EventArgs e) | |||||
private void TopMostToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
if (!topMostTriggerLock) | if (!topMostTriggerLock) | ||||
{ | { | ||||
@@ -425,11 +425,11 @@ namespace Shadowsocks.View | |||||
private bool toolbarTrigger = false; | private bool toolbarTrigger = false; | ||||
private void ShowToolbarMenuItem_Click(object sender, EventArgs e) | |||||
private void ShowToolbarToolStripMenuItem_Click(object sender, EventArgs e) | |||||
{ | { | ||||
toolbarTrigger = !toolbarTrigger; | toolbarTrigger = !toolbarTrigger; | ||||
ToolbarFlowLayoutPanel.Visible = toolbarTrigger; | ToolbarFlowLayoutPanel.Visible = toolbarTrigger; | ||||
ShowToolbarMenuItem.Checked = toolbarTrigger; | |||||
ShowToolbarToolStripMenuItem.Checked = toolbarTrigger; | |||||
} | } | ||||
private class TrafficInfo | private class TrafficInfo | ||||
@@ -10,6 +10,7 @@ using System.IO; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Windows.Forms; | using System.Windows.Forms; | ||||
using System.Windows.Media.Imaging; | |||||
using ZXing; | using ZXing; | ||||
using ZXing.Common; | using ZXing.Common; | ||||
using ZXing.QrCode; | using ZXing.QrCode; | ||||
@@ -33,29 +34,29 @@ namespace Shadowsocks.View | |||||
private bool _isStartupChecking; | private bool _isStartupChecking; | ||||
private string _urlToOpen; | private string _urlToOpen; | ||||
private ContextMenu contextMenu1; | |||||
private MenuItem disableItem; | |||||
private MenuItem AutoStartupItem; | |||||
private MenuItem ShareOverLANItem; | |||||
private MenuItem SeperatorItem; | |||||
private MenuItem ConfigItem; | |||||
private MenuItem ServersItem; | |||||
private MenuItem globalModeItem; | |||||
private MenuItem PACModeItem; | |||||
private MenuItem localPACItem; | |||||
private MenuItem onlinePACItem; | |||||
private MenuItem editLocalPACItem; | |||||
private MenuItem updateFromGFWListItem; | |||||
private MenuItem editGFWUserRuleItem; | |||||
private MenuItem editOnlinePACItem; | |||||
private MenuItem secureLocalPacUrlToggleItem; | |||||
private MenuItem autoCheckUpdatesToggleItem; | |||||
private MenuItem checkPreReleaseToggleItem; | |||||
private MenuItem proxyItem; | |||||
private MenuItem hotKeyItem; | |||||
private MenuItem VerboseLoggingToggleItem; | |||||
private MenuItem ShowPluginOutputToggleItem; | |||||
private MenuItem WriteI18NFileItem; | |||||
private ContextMenuStrip contextMenu1; | |||||
private ToolStripMenuItem disableItem; | |||||
private ToolStripMenuItem AutoStartupItem; | |||||
private ToolStripMenuItem ShareOverLANItem; | |||||
private ToolStripMenuItem SeperatorItem; | |||||
private ToolStripMenuItem ConfigItem; | |||||
private ToolStripMenuItem ServersItem; | |||||
private ToolStripMenuItem globalModeItem; | |||||
private ToolStripMenuItem PACModeItem; | |||||
private ToolStripMenuItem localPACItem; | |||||
private ToolStripMenuItem onlinePACItem; | |||||
private ToolStripMenuItem editLocalPACItem; | |||||
private ToolStripMenuItem updateFromGFWListItem; | |||||
private ToolStripMenuItem editGFWUserRuleItem; | |||||
private ToolStripMenuItem editOnlinePACItem; | |||||
private ToolStripMenuItem secureLocalPacUrlToggleItem; | |||||
private ToolStripMenuItem autoCheckUpdatesToggleItem; | |||||
private ToolStripMenuItem checkPreReleaseToggleItem; | |||||
private ToolStripMenuItem proxyItem; | |||||
private ToolStripMenuItem hotKeyItem; | |||||
private ToolStripMenuItem VerboseLoggingToggleItem; | |||||
private ToolStripMenuItem ShowPluginOutputToggleItem; | |||||
private ToolStripMenuItem WriteI18NFileItem; | |||||
private ConfigForm configForm; | private ConfigForm configForm; | ||||
private ProxyForm proxyForm; | private ProxyForm proxyForm; | ||||
@@ -91,7 +92,7 @@ namespace Shadowsocks.View | |||||
_notifyIcon = new NotifyIcon(); | _notifyIcon = new NotifyIcon(); | ||||
UpdateTrayIconAndNotifyText(); | UpdateTrayIconAndNotifyText(); | ||||
_notifyIcon.Visible = true; | _notifyIcon.Visible = true; | ||||
_notifyIcon.ContextMenu = contextMenu1; | |||||
_notifyIcon.ContextMenuStrip = contextMenu1; | |||||
_notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked; | _notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked; | ||||
_notifyIcon.MouseClick += notifyIcon1_Click; | _notifyIcon.MouseClick += notifyIcon1_Click; | ||||
_notifyIcon.MouseDoubleClick += notifyIcon1_DoubleClick; | _notifyIcon.MouseDoubleClick += notifyIcon1_DoubleClick; | ||||
@@ -272,67 +273,68 @@ namespace Shadowsocks.View | |||||
#endregion | #endregion | ||||
#region MenuItems and MenuGroups | |||||
#region ToolStripMenuItems and MenuGroups | |||||
private MenuItem CreateMenuItem(string text, EventHandler click) | |||||
private ToolStripMenuItem CreateToolStripMenuItem(string text, EventHandler click) | |||||
{ | { | ||||
return new MenuItem(I18N.GetString(text), click); | |||||
return new ToolStripMenuItem(I18N.GetString(text),null, click); | |||||
} | } | ||||
private MenuItem CreateMenuGroup(string text, MenuItem[] items) | |||||
private ToolStripMenuItem CreateMenuGroup(string text, ToolStripMenuItem[] items) | |||||
{ | { | ||||
return new MenuItem(I18N.GetString(text), items); | |||||
return new ToolStripMenuItem(I18N.GetString(text), null,items); | |||||
} | } | ||||
private void LoadMenu() | private void LoadMenu() | ||||
{ | { | ||||
this.contextMenu1 = new ContextMenu(new MenuItem[] { | |||||
CreateMenuGroup("System Proxy", new MenuItem[] { | |||||
this.disableItem = CreateMenuItem("Disable", new EventHandler(this.EnableItem_Click)), | |||||
this.PACModeItem = CreateMenuItem("PAC", new EventHandler(this.PACModeItem_Click)), | |||||
this.globalModeItem = CreateMenuItem("Global", new EventHandler(this.GlobalModeItem_Click)) | |||||
this.contextMenu1 = new ContextMenuStrip(); | |||||
contextMenu1.Items.AddRange(new ToolStripItem[]{ | |||||
CreateMenuGroup("System Proxy", new ToolStripMenuItem[] { | |||||
this.disableItem = CreateToolStripMenuItem("Disable", new EventHandler(this.EnableItem_Click)), | |||||
this.PACModeItem = CreateToolStripMenuItem("PAC", new EventHandler(this.PACModeItem_Click)), | |||||
this.globalModeItem = CreateToolStripMenuItem("Global", new EventHandler(this.GlobalModeItem_Click)) | |||||
}), | }), | ||||
this.ServersItem = CreateMenuGroup("Servers", new MenuItem[] { | |||||
this.SeperatorItem = new MenuItem("-"), | |||||
this.ConfigItem = CreateMenuItem("Edit Servers...", new EventHandler(this.Config_Click)), | |||||
CreateMenuItem("Statistics Config...", StatisticsConfigItem_Click), | |||||
new MenuItem("-"), | |||||
CreateMenuItem("Share Server Config...", new EventHandler(this.QRCodeItem_Click)), | |||||
CreateMenuItem("Scan QRCode from Screen...", new EventHandler(this.ScanQRCodeItem_Click)), | |||||
CreateMenuItem("Import URL from Clipboard...", new EventHandler(this.ImportURLItem_Click)) | |||||
this.ServersItem = CreateMenuGroup("Servers", new ToolStripMenuItem[] { | |||||
this.SeperatorItem = new ToolStripMenuItem("-"), | |||||
this.ConfigItem = CreateToolStripMenuItem("Edit Servers...", new EventHandler(this.Config_Click)), | |||||
CreateToolStripMenuItem("Statistics Config...", StatisticsConfigItem_Click), | |||||
new ToolStripMenuItem("-"), | |||||
CreateToolStripMenuItem("Share Server Config...", new EventHandler(this.QRCodeItem_Click)), | |||||
CreateToolStripMenuItem("Scan QRCode from Screen...", new EventHandler(this.ScanQRCodeItem_Click)), | |||||
CreateToolStripMenuItem("Import URL from Clipboard...", new EventHandler(this.ImportURLItem_Click)) | |||||
}), | }), | ||||
CreateMenuGroup("PAC ", new MenuItem[] { | |||||
this.localPACItem = CreateMenuItem("Local PAC", new EventHandler(this.LocalPACItem_Click)), | |||||
this.onlinePACItem = CreateMenuItem("Online PAC", new EventHandler(this.OnlinePACItem_Click)), | |||||
new MenuItem("-"), | |||||
this.editLocalPACItem = CreateMenuItem("Edit Local PAC File...", new EventHandler(this.EditPACFileItem_Click)), | |||||
this.updateFromGFWListItem = CreateMenuItem("Update Local PAC from GFWList", new EventHandler(this.UpdatePACFromGFWListItem_Click)), | |||||
this.editGFWUserRuleItem = CreateMenuItem("Edit User Rule for GFWList...", new EventHandler(this.EditUserRuleFileForGFWListItem_Click)), | |||||
this.secureLocalPacUrlToggleItem = CreateMenuItem("Secure Local PAC", new EventHandler(this.SecureLocalPacUrlToggleItem_Click)), | |||||
CreateMenuItem("Copy Local PAC URL", new EventHandler(this.CopyLocalPacUrlItem_Click)), | |||||
this.editOnlinePACItem = CreateMenuItem("Edit Online PAC URL...", new EventHandler(this.UpdateOnlinePACURLItem_Click)), | |||||
CreateMenuGroup("PAC ", new ToolStripMenuItem[] { | |||||
this.localPACItem = CreateToolStripMenuItem("Local PAC", new EventHandler(this.LocalPACItem_Click)), | |||||
this.onlinePACItem = CreateToolStripMenuItem("Online PAC", new EventHandler(this.OnlinePACItem_Click)), | |||||
new ToolStripMenuItem("-"), | |||||
this.editLocalPACItem = CreateToolStripMenuItem("Edit Local PAC File...", new EventHandler(this.EditPACFileItem_Click)), | |||||
this.updateFromGFWListItem = CreateToolStripMenuItem("Update Local PAC from GFWList", new EventHandler(this.UpdatePACFromGFWListItem_Click)), | |||||
this.editGFWUserRuleItem = CreateToolStripMenuItem("Edit User Rule for GFWList...", new EventHandler(this.EditUserRuleFileForGFWListItem_Click)), | |||||
this.secureLocalPacUrlToggleItem = CreateToolStripMenuItem("Secure Local PAC", new EventHandler(this.SecureLocalPacUrlToggleItem_Click)), | |||||
CreateToolStripMenuItem("Copy Local PAC URL", new EventHandler(this.CopyLocalPacUrlItem_Click)), | |||||
this.editOnlinePACItem = CreateToolStripMenuItem("Edit Online PAC URL...", new EventHandler(this.UpdateOnlinePACURLItem_Click)), | |||||
}), | }), | ||||
this.proxyItem = CreateMenuItem("Forward Proxy...", new EventHandler(this.proxyItem_Click)), | |||||
new MenuItem("-"), | |||||
this.AutoStartupItem = CreateMenuItem("Start on Boot", new EventHandler(this.AutoStartupItem_Click)), | |||||
this.ShareOverLANItem = CreateMenuItem("Allow other Devices to connect", new EventHandler(this.ShareOverLANItem_Click)), | |||||
new MenuItem("-"), | |||||
this.hotKeyItem = CreateMenuItem("Edit Hotkeys...", new EventHandler(this.hotKeyItem_Click)), | |||||
CreateMenuGroup("Help", new MenuItem[] { | |||||
CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)), | |||||
this.VerboseLoggingToggleItem = CreateMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ), | |||||
this.ShowPluginOutputToggleItem = CreateMenuItem("Show Plugin Output", new EventHandler(this.ShowPluginOutputToggleItem_Click)), | |||||
this.WriteI18NFileItem = CreateMenuItem("Write translation template",new EventHandler(WriteI18NFileItem_Click)), | |||||
CreateMenuGroup("Updates...", new MenuItem[] { | |||||
CreateMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)), | |||||
new MenuItem("-"), | |||||
this.autoCheckUpdatesToggleItem = CreateMenuItem("Check for Updates at Startup", new EventHandler(this.autoCheckUpdatesToggleItem_Click)), | |||||
this.checkPreReleaseToggleItem = CreateMenuItem("Check Pre-release Version", new EventHandler(this.checkPreReleaseToggleItem_Click)), | |||||
this.proxyItem = CreateToolStripMenuItem("Forward Proxy...", new EventHandler(this.proxyItem_Click)), | |||||
new ToolStripMenuItem("-"), | |||||
this.AutoStartupItem = CreateToolStripMenuItem("Start on Boot", new EventHandler(this.AutoStartupItem_Click)), | |||||
this.ShareOverLANItem = CreateToolStripMenuItem("Allow other Devices to connect", new EventHandler(this.ShareOverLANItem_Click)), | |||||
new ToolStripMenuItem("-"), | |||||
this.hotKeyItem = CreateToolStripMenuItem("Edit Hotkeys...", new EventHandler(this.hotKeyItem_Click)), | |||||
CreateMenuGroup("Help", new ToolStripMenuItem[] { | |||||
CreateToolStripMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)), | |||||
this.VerboseLoggingToggleItem = CreateToolStripMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ), | |||||
this.ShowPluginOutputToggleItem = CreateToolStripMenuItem("Show Plugin Output", new EventHandler(this.ShowPluginOutputToggleItem_Click)), | |||||
this.WriteI18NFileItem = CreateToolStripMenuItem("Write translation template",new EventHandler(WriteI18NFileItem_Click)), | |||||
CreateMenuGroup("Updates...", new ToolStripMenuItem[] { | |||||
CreateToolStripMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)), | |||||
new ToolStripMenuItem("-"), | |||||
this.autoCheckUpdatesToggleItem = CreateToolStripMenuItem("Check for Updates at Startup", new EventHandler(this.autoCheckUpdatesToggleItem_Click)), | |||||
this.checkPreReleaseToggleItem = CreateToolStripMenuItem("Check Pre-release Version", new EventHandler(this.checkPreReleaseToggleItem_Click)), | |||||
}), | }), | ||||
CreateMenuItem("About...", new EventHandler(this.AboutItem_Click)), | |||||
CreateToolStripMenuItem("About...", new EventHandler(this.AboutItem_Click)), | |||||
}), | }), | ||||
new MenuItem("-"), | |||||
CreateMenuItem("Quit", new EventHandler(this.Quit_Click)) | |||||
new ToolStripMenuItem("-"), | |||||
CreateToolStripMenuItem("Quit", new EventHandler(this.Quit_Click)) | |||||
}); | }); | ||||
} | } | ||||
@@ -451,7 +453,7 @@ namespace Shadowsocks.View | |||||
private void UpdateServersMenu() | private void UpdateServersMenu() | ||||
{ | { | ||||
var items = ServersItem.MenuItems; | |||||
var items = ServersItem.DropDownItems; | |||||
while (items[0] != SeperatorItem) | while (items[0] != SeperatorItem) | ||||
{ | { | ||||
items.RemoveAt(0); | items.RemoveAt(0); | ||||
@@ -459,15 +461,15 @@ namespace Shadowsocks.View | |||||
int strategyCount = 0; | int strategyCount = 0; | ||||
foreach (var strategy in controller.GetStrategies()) | foreach (var strategy in controller.GetStrategies()) | ||||
{ | { | ||||
MenuItem item = new MenuItem(strategy.Name); | |||||
ToolStripMenuItem item = new ToolStripMenuItem(strategy.Name); | |||||
item.Tag = strategy.ID; | item.Tag = strategy.ID; | ||||
item.Click += AStrategyItem_Click; | item.Click += AStrategyItem_Click; | ||||
items.Add(strategyCount, item); | |||||
items.Add( item); | |||||
strategyCount++; | strategyCount++; | ||||
} | } | ||||
// user wants a seperator item between strategy and servers menugroup | // user wants a seperator item between strategy and servers menugroup | ||||
items.Add(strategyCount++, new MenuItem("-")); | |||||
items.Add(new ToolStripMenuItem("-")); | |||||
int serverCount = 0; | int serverCount = 0; | ||||
Configuration configuration = controller.GetConfigurationCopy(); | Configuration configuration = controller.GetConfigurationCopy(); | ||||
@@ -475,15 +477,15 @@ namespace Shadowsocks.View | |||||
{ | { | ||||
if (Configuration.ChecksServer(server)) | if (Configuration.ChecksServer(server)) | ||||
{ | { | ||||
MenuItem item = new MenuItem(server.FriendlyName()); | |||||
ToolStripMenuItem item = new ToolStripMenuItem(server.FriendlyName()); | |||||
item.Tag = configuration.configs.FindIndex(s => s == server); | item.Tag = configuration.configs.FindIndex(s => s == server); | ||||
item.Click += AServerItem_Click; | item.Click += AServerItem_Click; | ||||
items.Add(strategyCount + serverCount, item); | |||||
items.Add( item); | |||||
serverCount++; | serverCount++; | ||||
} | } | ||||
} | } | ||||
foreach (MenuItem item in items) | |||||
foreach (ToolStripMenuItem item in items) | |||||
{ | { | ||||
if (item.Tag != null && (item.Tag.ToString() == configuration.index.ToString() || item.Tag.ToString() == configuration.strategy)) | if (item.Tag != null && (item.Tag.ToString() == configuration.index.ToString() || item.Tag.ToString() == configuration.strategy)) | ||||
{ | { | ||||
@@ -694,13 +696,13 @@ namespace Shadowsocks.View | |||||
private void AServerItem_Click(object sender, EventArgs e) | private void AServerItem_Click(object sender, EventArgs e) | ||||
{ | { | ||||
MenuItem item = (MenuItem)sender; | |||||
ToolStripMenuItem item = (ToolStripMenuItem)sender; | |||||
controller.SelectServerIndex((int)item.Tag); | controller.SelectServerIndex((int)item.Tag); | ||||
} | } | ||||
private void AStrategyItem_Click(object sender, EventArgs e) | private void AStrategyItem_Click(object sender, EventArgs e) | ||||
{ | { | ||||
MenuItem item = (MenuItem)sender; | |||||
ToolStripMenuItem item = (ToolStripMenuItem)sender; | |||||
controller.SelectStrategy((string)item.Tag); | controller.SelectStrategy((string)item.Tag); | ||||
} | } | ||||
@@ -765,7 +767,7 @@ namespace Shadowsocks.View | |||||
cropRect, | cropRect, | ||||
GraphicsUnit.Pixel); | GraphicsUnit.Pixel); | ||||
} | } | ||||
var source = new BitmapLuminanceSource(target); | |||||
var source = new BitmapSourceLuminanceSource(null); | |||||
var bitmap = new BinaryBitmap(new HybridBinarizer(source)); | var bitmap = new BinaryBitmap(new HybridBinarizer(source)); | ||||
QRCodeReader reader = new QRCodeReader(); | QRCodeReader reader = new QRCodeReader(); | ||||
var result = reader.decode(bitmap); | var result = reader.decode(bitmap); | ||||
@@ -879,14 +881,14 @@ namespace Shadowsocks.View | |||||
private void UpdateOnlinePACURLItem_Click(object sender, EventArgs e) | private void UpdateOnlinePACURLItem_Click(object sender, EventArgs e) | ||||
{ | { | ||||
string origPacUrl = controller.GetConfigurationCopy().pacUrl; | string origPacUrl = controller.GetConfigurationCopy().pacUrl; | ||||
string pacUrl = Microsoft.VisualBasic.Interaction.InputBox( | |||||
I18N.GetString("Please input PAC Url"), | |||||
I18N.GetString("Edit Online PAC URL"), | |||||
origPacUrl, -1, -1); | |||||
if (!pacUrl.IsNullOrEmpty() && pacUrl != origPacUrl) | |||||
{ | |||||
controller.SavePACUrl(pacUrl); | |||||
} | |||||
//string pacUrl = Microsoft.VisualBasic.Interaction.InputBox( | |||||
// I18N.GetString("Please input PAC Url"), | |||||
// I18N.GetString("Edit Online PAC URL"), | |||||
// origPacUrl, -1, -1); | |||||
//if (!pacUrl.IsNullOrEmpty() && pacUrl != origPacUrl) | |||||
//{ | |||||
// controller.SavePACUrl(pacUrl); | |||||
//} | |||||
} | } | ||||
private void SecureLocalPacUrlToggleItem_Click(object sender, EventArgs e) | private void SecureLocalPacUrlToggleItem_Click(object sender, EventArgs e) | ||||
@@ -5,21 +5,7 @@ | |||||
<section name="Shadowsocks.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/> | <section name="Shadowsocks.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/> | ||||
</sectionGroup> | </sectionGroup> | ||||
</configSections> | </configSections> | ||||
<startup> | |||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/> | |||||
</startup> | |||||
<runtime> | |||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> | |||||
<dependentAssembly> | |||||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> | |||||
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0"/> | |||||
</dependentAssembly> | |||||
<dependentAssembly> | |||||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> | |||||
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0"/> | |||||
</dependentAssembly> | |||||
</assemblyBinding> | |||||
</runtime> | |||||
<userSettings> | <userSettings> | ||||
<Shadowsocks.Properties.Settings> | <Shadowsocks.Properties.Settings> | ||||
<setting name="LogViewerWidth" serializeAs="String"> | <setting name="LogViewerWidth" serializeAs="String"> | ||||
@@ -1,11 +0,0 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<packages> | |||||
<package id="Caseless.Fody" version="1.8.3" targetFramework="net472" /> | |||||
<package id="Costura.Fody" version="3.3.3" targetFramework="net472" /> | |||||
<package id="Fody" version="4.2.1" targetFramework="net472" developmentDependency="true" /> | |||||
<package id="GlobalHotKey" version="1.1.0" targetFramework="net472" /> | |||||
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" /> | |||||
<package id="NLog" version="4.6.8" targetFramework="net472" /> | |||||
<package id="StringEx.CS" version="0.3.1" targetFramework="net472" developmentDependency="true" /> | |||||
<package id="ZXing.Net" version="0.16.5" targetFramework="net472" /> | |||||
</packages> |
@@ -1,340 +1,108 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<Import Project="..\packages\Costura.Fody.3.3.3\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.3.3.3\build\Costura.Fody.props')" /> | |||||
<Import Project="..\packages\Caseless.Fody.1.8.3\build\Caseless.Fody.props" Condition="Exists('..\packages\Caseless.Fody.1.8.3\build\Caseless.Fody.props')" /> | |||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> | |||||
<PropertyGroup> | <PropertyGroup> | ||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
<ProductVersion>9.0.21022</ProductVersion> | |||||
<SchemaVersion>2.0</SchemaVersion> | |||||
<ProjectGuid>{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}</ProjectGuid> | |||||
<OutputType>WinExe</OutputType> | <OutputType>WinExe</OutputType> | ||||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||||
<TargetFramework>netcoreapp3.1</TargetFramework> | |||||
<RootNamespace>Shadowsocks</RootNamespace> | <RootNamespace>Shadowsocks</RootNamespace> | ||||
<UseWindowsForms>true</UseWindowsForms> | |||||
<Authors>clowwindy & community 2020</Authors> | |||||
<PackageId>Shadowsocks</PackageId> | |||||
<Product>Shadowsocks</Product> | |||||
<Version>4.1.9.2</Version> | |||||
<AssemblyName>Shadowsocks</AssemblyName> | <AssemblyName>Shadowsocks</AssemblyName> | ||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | |||||
<StartupObject> | |||||
</StartupObject> | |||||
<ApplicationIcon>shadowsocks.ico</ApplicationIcon> | |||||
<IsWebBootstrapper>false</IsWebBootstrapper> | |||||
<FileUpgradeFlags> | |||||
</FileUpgradeFlags> | |||||
<UpgradeBackupLocation> | |||||
</UpgradeBackupLocation> | |||||
<OldToolsVersion>3.5</OldToolsVersion> | |||||
<TargetFrameworkProfile> | |||||
</TargetFrameworkProfile> | |||||
<NuGetPackageImportStamp> | |||||
</NuGetPackageImportStamp> | |||||
<PublishUrl>publish\</PublishUrl> | |||||
<Install>true</Install> | |||||
<InstallFrom>Disk</InstallFrom> | |||||
<UpdateEnabled>false</UpdateEnabled> | |||||
<UpdateMode>Foreground</UpdateMode> | |||||
<UpdateInterval>7</UpdateInterval> | |||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits> | |||||
<UpdatePeriodically>false</UpdatePeriodically> | |||||
<UpdateRequired>false</UpdateRequired> | |||||
<MapFileExtensions>true</MapFileExtensions> | |||||
<ApplicationRevision>1</ApplicationRevision> | |||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> | |||||
<UseApplicationTrust>false</UseApplicationTrust> | |||||
<BootstrapperEnabled>true</BootstrapperEnabled> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
<OutputPath>bin\x86\Debug\</OutputPath> | |||||
<DefineConstants>TRACE;DEBUG</DefineConstants> | |||||
<DebugType>full</DebugType> | |||||
<PlatformTarget>x86</PlatformTarget> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> | |||||
<Prefer32Bit>false</Prefer32Bit> | |||||
<Optimize>false</Optimize> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> | |||||
<OutputPath>bin\x86\Release\</OutputPath> | |||||
<DefineConstants>TRACE</DefineConstants> | |||||
<Optimize>true</Optimize> | |||||
<DebugType>pdbonly</DebugType> | |||||
<PlatformTarget>x86</PlatformTarget> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet> | |||||
<Prefer32Bit>false</Prefer32Bit> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
</PropertyGroup> | |||||
<PropertyGroup> | |||||
<ApplicationManifest>app.manifest</ApplicationManifest> | |||||
<ApplicationIcon /> | |||||
<StartupObject /> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Reference Include="Caseless, Version=1.8.3.0, Culture=neutral, PublicKeyToken=409b3227471b0f0d, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\Caseless.Fody.1.8.3\lib\net452\Caseless.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Costura, Version=3.3.3.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\Costura.Fody.3.3.3\lib\net40\Costura.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="GlobalHotKey, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\GlobalHotKey.1.1.0\lib\GlobalHotKey.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="Microsoft.CSharp" /> | |||||
<Reference Include="Microsoft.VisualBasic" /> | |||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\NLog.4.6.8\lib\net45\NLog.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="PresentationCore" /> | |||||
<Reference Include="System" /> | |||||
<Reference Include="System.Configuration" /> | |||||
<Reference Include="System.Data" /> | |||||
<Reference Include="System.Data.DataSetExtensions" /> | |||||
<Reference Include="System.Drawing" /> | |||||
<Reference Include="System.IO.Compression" /> | |||||
<Reference Include="System.Management" /> | |||||
<Reference Include="System.Net" /> | |||||
<Reference Include="System.Runtime.Serialization" /> | |||||
<Reference Include="System.ServiceModel" /> | |||||
<Reference Include="System.Transactions" /> | |||||
<Reference Include="System.Web" /> | |||||
<Reference Include="System.Windows.Forms" /> | |||||
<Reference Include="System.Windows.Forms.DataVisualization" /> | |||||
<Reference Include="System.XML" /> | |||||
<Reference Include="WindowsBase" /> | |||||
<Reference Include="zxing, Version=0.16.5.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\ZXing.Net.0.16.5\lib\net47\zxing.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="zxing.presentation, Version=0.16.5.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\ZXing.Net.0.16.5\lib\net47\zxing.presentation.dll</HintPath> | |||||
<None Remove="app.config" /> | |||||
<None Remove="app.manifest" /> | |||||
<None Remove="Data\abp.js" /> | |||||
<None Remove="Data\default-abp-rule.js" /> | |||||
<None Remove="Data\i18n.csv" /> | |||||
<None Remove="Data\libsscrypto.dll.gz" /> | |||||
<None Remove="Data\NLog.config" /> | |||||
<None Remove="Data\privoxy.exe.gz" /> | |||||
<None Remove="Data\privoxy_conf.txt" /> | |||||
<None Remove="Data\sysproxy.exe.gz" /> | |||||
<None Remove="Data\sysproxy64.exe.gz" /> | |||||
<None Remove="Data\user-rule.txt" /> | |||||
<None Remove="Resources\ss128.pdn" /> | |||||
<None Remove="Resources\ss32.pdn" /> | |||||
<None Remove="Resources\ss32Fill.png" /> | |||||
<None Remove="Resources\ss32In.png" /> | |||||
<None Remove="Resources\ss32Out.png" /> | |||||
<None Remove="Resources\ss32Outline.png" /> | |||||
<None Remove="Resources\ssw128.png" /> | |||||
<None Remove="shadowsocks.ico" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Content Include="app.manifest" /> | |||||
<Content Include="app.config"> | |||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory> | |||||
</Content> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Caseless.Fody" Version="1.9.0" /> | |||||
<PackageReference Include="Costura.Fody" Version="4.1.0" /> | |||||
<PackageReference Include="Fody" Version="6.1.1"> | |||||
<PrivateAssets>all</PrivateAssets> | |||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||||
</PackageReference> | |||||
<PackageReference Include="GlobalHotKeyCore" Version="1.2.0" /> | |||||
<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" /> | |||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> | |||||
<PackageReference Include="NLog" Version="4.6.8" /> | |||||
<PackageReference Include="StringEx.CS" Version="0.3.1"> | |||||
<PrivateAssets>all</PrivateAssets> | |||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||||
</PackageReference> | |||||
<PackageReference Include="System.Management" Version="4.7.0" /> | |||||
<PackageReference Include="ZXing.Net" Version="0.16.5" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Reference Include="System.Windows.Forms.DataVisualization"> | |||||
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.DataVisualization.dll</HintPath> | |||||
</Reference> | </Reference> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<Compile Include="Controller\HotkeyReg.cs" /> | |||||
<Compile Include="Controller\LoggerExtension.cs" /> | |||||
<Compile Include="Controller\Service\PACDaemon.cs" /> | |||||
<Compile Include="Controller\System\Hotkeys\HotkeyCallbacks.cs" /> | |||||
<Compile Include="Encryption\AEAD\AEADEncryptor.cs" /> | |||||
<Compile Include="Encryption\AEAD\AEADMbedTLSEncryptor.cs" /> | |||||
<Compile Include="Encryption\AEAD\AEADOpenSSLEncryptor.cs" /> | |||||
<Compile Include="Encryption\AEAD\AEADSodiumEncryptor.cs" /> | |||||
<Compile Include="Encryption\CircularBuffer\ByteCircularBuffer.cs" /> | |||||
<Compile Include="Encryption\EncryptorBase.cs" /> | |||||
<Compile Include="Encryption\EncryptorFactory.cs" /> | |||||
<Compile Include="Encryption\Exception\CryptoException.cs" /> | |||||
<Compile Include="Encryption\IEncryptor.cs" /> | |||||
<Compile Include="Encryption\MbedTLS.cs" /> | |||||
<Compile Include="Encryption\OpenSSL.cs" /> | |||||
<Compile Include="Encryption\RNG.cs" /> | |||||
<Compile Include="Encryption\Sodium.cs" /> | |||||
<Compile Include="Encryption\Stream\StreamEncryptor.cs" /> | |||||
<Compile Include="Encryption\Stream\StreamMbedTLSEncryptor.cs" /> | |||||
<Compile Include="Encryption\Stream\StreamOpenSSLEncryptor.cs" /> | |||||
<Compile Include="Encryption\Stream\StreamSodiumEncryptor.cs" /> | |||||
<Compile Include="Model\HotKeyConfig.cs" /> | |||||
<Compile Include="Model\NLogConfig.cs" /> | |||||
<Compile Include="Model\ProxyConfig.cs" /> | |||||
<Compile Include="Model\SysproxyConfig.cs" /> | |||||
<Compile Include="Properties\Resources.Designer.cs"> | |||||
<AutoGen>True</AutoGen> | |||||
<DesignTime>True</DesignTime> | |||||
<DependentUpon>Resources.resx</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="Properties\Settings.Designer.cs"> | |||||
<AutoGen>True</AutoGen> | |||||
<Resource Include="Data\abp.js" /> | |||||
<Resource Include="Data\default-abp-rule.js" /> | |||||
<Resource Include="Data\i18n.csv" /> | |||||
<Resource Include="Data\libsscrypto.dll.gz" /> | |||||
<Resource Include="Data\NLog.config" /> | |||||
<Resource Include="Data\privoxy.exe.gz" /> | |||||
<Resource Include="Data\privoxy_conf.txt" /> | |||||
<Resource Include="Data\sysproxy.exe.gz" /> | |||||
<Resource Include="Data\sysproxy64.exe.gz" /> | |||||
<Resource Include="Data\user-rule.txt" /> | |||||
<Resource Include="Resources\ss128.pdn" /> | |||||
<Resource Include="Resources\ss32.pdn" /> | |||||
<Resource Include="Resources\ss32Fill.png" /> | |||||
<Resource Include="Resources\ss32In.png" /> | |||||
<Resource Include="Resources\ss32Out.png" /> | |||||
<Resource Include="Resources\ss32Outline.png" /> | |||||
<Resource Include="Resources\ssw128.png" /> | |||||
<Resource Include="shadowsocks.ico" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Compile Update="Properties\Settings.Designer.cs"> | |||||
<DesignTimeSharedInput>True</DesignTimeSharedInput> | <DesignTimeSharedInput>True</DesignTimeSharedInput> | ||||
<AutoGen>True</AutoGen> | |||||
<DependentUpon>Settings.settings</DependentUpon> | <DependentUpon>Settings.settings</DependentUpon> | ||||
</Compile> | </Compile> | ||||
<Compile Include="Proxy\DirectConnect.cs" /> | |||||
<Compile Include="Proxy\HttpProxy.cs" /> | |||||
<Compile Include="Proxy\IProxy.cs" /> | |||||
<Compile Include="Controller\Service\AvailabilityStatistics.cs" /> | |||||
<Compile Include="Controller\Strategy\HighAvailabilityStrategy.cs" /> | |||||
<Compile Include="Controller\Strategy\StatisticsStrategy.cs" /> | |||||
<Compile Include="Controller\System\AutoStartup.cs" /> | |||||
<Compile Include="Controller\FileManager.cs" /> | |||||
<Compile Include="Controller\Service\GFWListUpdater.cs" /> | |||||
<Compile Include="Controller\I18N.cs" /> | |||||
<Compile Include="Controller\Service\Listener.cs" /> | |||||
<Compile Include="Controller\Service\PortForwarder.cs" /> | |||||
<Compile Include="Controller\Service\UDPRelay.cs" /> | |||||
<Compile Include="Controller\Service\UpdateChecker.cs" /> | |||||
<Compile Include="Controller\Service\PACServer.cs" /> | |||||
<Compile Include="Model\LogViewerConfig.cs" /> | |||||
<Compile Include="Model\Server.cs" /> | |||||
<Compile Include="Model\Configuration.cs" /> | |||||
<Compile Include="Model\StatisticsRecord.cs" /> | |||||
<Compile Include="Model\StatisticsStrategyConfiguration.cs" /> | |||||
<Compile Include="Controller\Strategy\BalancingStrategy.cs" /> | |||||
<Compile Include="Controller\Strategy\StrategyManager.cs" /> | |||||
<Compile Include="Controller\Strategy\IStrategy.cs" /> | |||||
<Compile Include="Controller\Service\Sip003Plugin.cs" /> | |||||
<Compile Include="Proxy\Socks5Proxy.cs" /> | |||||
<Compile Include="Settings.cs" /> | |||||
<Compile Include="Controller\System\Hotkeys\Hotkeys.cs" /> | |||||
<Compile Include="StringEx.cs" /> | |||||
<Compile Include="Util\ProcessManagement\Job.cs" /> | |||||
<Compile Include="Util\ProcessManagement\ThreadUtil.cs" /> | |||||
<Compile Include="Util\Sockets\LineReader.cs" /> | |||||
<Compile Include="Util\Sockets\SocketUtil.cs" /> | |||||
<Compile Include="Util\Sockets\WrappedSocket.cs" /> | |||||
<Compile Include="Util\SystemProxy\ProxyException.cs" /> | |||||
<Compile Include="Util\SystemProxy\Sysproxy.cs" /> | |||||
<Compile Include="Util\Util.cs" /> | |||||
<Compile Include="Util\ViewUtils.cs" /> | |||||
<Compile Include="View\ConfigForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\ConfigForm.Designer.cs"> | |||||
<DependentUpon>ConfigForm.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="Controller\Service\TCPRelay.cs" /> | |||||
<Compile Include="Controller\Service\PrivoxyRunner.cs" /> | |||||
<Compile Include="Program.cs" /> | |||||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||||
<Compile Include="Controller\ShadowsocksController.cs" /> | |||||
<Compile Include="Controller\System\SystemProxy.cs" /> | |||||
<Compile Include="View\CalculationControl.cs"> | |||||
<SubType>UserControl</SubType> | |||||
</Compile> | |||||
<Compile Include="View\CalculationControl.Designer.cs"> | |||||
<DependentUpon>CalculationControl.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="View\HotkeySettingsForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\HotkeySettingsForm.designer.cs"> | |||||
<DependentUpon>HotkeySettingsForm.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="View\LogForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\LogForm.Designer.cs"> | |||||
<DependentUpon>LogForm.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="View\MenuViewController.cs" /> | |||||
<Compile Include="View\ProxyForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\ProxyForm.Designer.cs"> | |||||
<DependentUpon>ProxyForm.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="View\QRCodeForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\QRCodeForm.Designer.cs"> | |||||
<DependentUpon>QRCodeForm.cs</DependentUpon> | |||||
</Compile> | |||||
<Compile Include="View\QRCodeSplashForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\StatisticsStrategyConfigurationForm.cs"> | |||||
<SubType>Form</SubType> | |||||
</Compile> | |||||
<Compile Include="View\StatisticsStrategyConfigurationForm.Designer.cs"> | |||||
<DependentUpon>StatisticsStrategyConfigurationForm.cs</DependentUpon> | |||||
</Compile> | |||||
<EmbeddedResource Include="View\ConfigForm.resx"> | |||||
<DependentUpon>ConfigForm.cs</DependentUpon> | |||||
<SubType>Designer</SubType> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="Properties\Resources.resx"> | |||||
<Generator>ResXFileCodeGenerator</Generator> | |||||
<SubType>Designer</SubType> | |||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\CalculationControl.resx"> | |||||
<DependentUpon>CalculationControl.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\HotkeySettingsForm.resx"> | |||||
<DependentUpon>HotkeySettingsForm.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\LogForm.resx"> | |||||
<DependentUpon>LogForm.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\ProxyForm.resx"> | |||||
<DependentUpon>ProxyForm.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\QRCodeForm.resx"> | |||||
<DependentUpon>QRCodeForm.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<EmbeddedResource Include="View\StatisticsStrategyConfigurationForm.resx"> | |||||
<DependentUpon>StatisticsStrategyConfigurationForm.cs</DependentUpon> | |||||
</EmbeddedResource> | |||||
<None Include="app.config" /> | |||||
<None Include="app.manifest"> | |||||
<SubType>Designer</SubType> | |||||
</None> | |||||
<None Include="Data\i18n.csv" /> | |||||
<None Include="Data\libsscrypto.dll.gz" /> | |||||
<None Include="Data\NLog.config" /> | |||||
<None Include="Data\privoxy.exe.gz" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="Data\sysproxy.exe.gz" /> | |||||
<None Include="Data\sysproxy64.exe.gz" /> | |||||
<None Include="packages.config" /> | |||||
<None Include="Properties\DataSources\Shadowsocks.Model.StatisticsStrategyConfiguration.datasource" /> | |||||
<None Include="Properties\Settings.settings"> | |||||
<None Update="Properties\Settings.settings"> | |||||
<Generator>SettingsSingleFileGenerator</Generator> | <Generator>SettingsSingleFileGenerator</Generator> | ||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput> | <LastGenOutput>Settings.Designer.cs</LastGenOutput> | ||||
</None> | </None> | ||||
<None Include="Resources\ssw128.png" /> | |||||
<Content Include="Data\abp.js" /> | |||||
<Content Include="Data\default-abp-rule.js" /> | |||||
<Content Include="Data\privoxy_conf.txt" /> | |||||
<Content Include="Data\user-rule.txt" /> | |||||
<None Include="FodyWeavers.xml"> | |||||
<SubType>Designer</SubType> | |||||
</None> | |||||
<Content Include="Resources\ss32Fill.png" /> | |||||
<Content Include="Resources\ss32In.png" /> | |||||
<Content Include="Resources\ss32Out.png" /> | |||||
<Content Include="Resources\ss32Outline.png" /> | |||||
<Content Include="shadowsocks.ico" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5"> | |||||
<Visible>False</Visible> | |||||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> | |||||
<Install>false</Install> | |||||
</BootstrapperPackage> | |||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0"> | |||||
<Visible>False</Visible> | |||||
<ProductName>.NET Framework 3.0 %28x86%29</ProductName> | |||||
<Install>false</Install> | |||||
</BootstrapperPackage> | |||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5"> | |||||
<Visible>False</Visible> | |||||
<ProductName>.NET Framework 3.5</ProductName> | |||||
<Install>true</Install> | |||||
</BootstrapperPackage> | |||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> | |||||
<Visible>False</Visible> | |||||
<ProductName>.NET Framework 3.5 SP1</ProductName> | |||||
<Install>false</Install> | |||||
</BootstrapperPackage> | |||||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> | |||||
<Visible>False</Visible> | |||||
<ProductName>Windows Installer 3.1</ProductName> | |||||
<Install>true</Install> | |||||
</BootstrapperPackage> | |||||
</ItemGroup> | </ItemGroup> | ||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
<Import Project="..\packages\Fody.4.2.1\build\Fody.targets" Condition="Exists('..\packages\Fody.4.2.1\build\Fody.targets')" /> | |||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||||
<PropertyGroup> | |||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||||
</PropertyGroup> | |||||
<Error Condition="!Exists('..\packages\Fody.4.2.1\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.4.2.1\build\Fody.targets'))" /> | |||||
<Error Condition="!Exists('..\packages\Caseless.Fody.1.8.3\build\Caseless.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Caseless.Fody.1.8.3\build\Caseless.Fody.props'))" /> | |||||
<Error Condition="!Exists('..\packages\Costura.Fody.3.3.3\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.3.3.3\build\Costura.Fody.props'))" /> | |||||
</Target> | |||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||||
Other similar extension points exist, see Microsoft.Common.targets. | |||||
<Target Name="BeforeBuild"> | |||||
</Target> | |||||
<Target Name="AfterBuild"> | |||||
</Target> | |||||
--> | |||||
</Project> | </Project> |
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio Version 16 | # Visual Studio Version 16 | ||||
VisualStudioVersion = 16.0.29709.97 | VisualStudioVersion = 16.0.29709.97 | ||||
MinimumVisualStudioVersion = 10.0.40219.1 | MinimumVisualStudioVersion = 10.0.40219.1 | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shadowsocks-csharp", "shadowsocks-csharp\shadowsocks-csharp.csproj", "{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}" | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "shadowsocks-csharp", "shadowsocks-csharp\shadowsocks-csharp.csproj", "{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}" | |||||
EndProject | EndProject | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShadowsocksTest", "test\ShadowsocksTest.csproj", "{45913187-0685-4903-B250-DCEF0479CD86}" | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShadowsocksTest", "test\ShadowsocksTest.csproj", "{45913187-0685-4903-B250-DCEF0479CD86}" | ||||
ProjectSection(ProjectDependencies) = postProject | ProjectSection(ProjectDependencies) = postProject | ||||
@@ -18,13 +18,14 @@ Global | |||||
Release|x86 = Release|x86 | Release|x86 = Release|x86 | ||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.ActiveCfg = Debug|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.ActiveCfg = Debug|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.Build.0 = Debug|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.Deploy.0 = Debug|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.ActiveCfg = Release|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.ActiveCfg = Release|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.Build.0 = Release|x86 | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.Build.0 = Release|Any CPU | |||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.ActiveCfg = Debug|x86 | {45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.ActiveCfg = Debug|x86 | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.ActiveCfg = Debug|x86 | {45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.ActiveCfg = Debug|x86 | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.Build.0 = Debug|x86 | {45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.Build.0 = Debug|x86 | ||||