@@ -108,12 +108,12 @@ namespace Shadowsocks.Controller | |||
if (item == null) continue; | |||
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; | |||
foreach (var item in ViewUtils.GetMenuItems(m)) | |||
foreach (var item in ViewUtils.GetToolStripMenuItems(m)) | |||
{ | |||
if (item == null) continue; | |||
item.Text = GetString(item.Text); | |||
@@ -24,7 +24,7 @@ namespace Shadowsocks.Controller | |||
{ | |||
var rd = new byte[32]; | |||
RNG.GetBytes(rd); | |||
_cachedPacSecret = HttpServerUtility.UrlTokenEncode(rd); | |||
_cachedPacSecret = HttpServerUtilityUrlToken.Encode(rd); | |||
} | |||
return _cachedPacSecret; | |||
} | |||
@@ -51,7 +51,7 @@ namespace Shadowsocks.Controller | |||
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) | |||
@@ -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> | |||
// 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> | |||
//------------------------------------------------------------------------------ | |||
@@ -12,7 +12,7 @@ namespace Shadowsocks.Properties { | |||
[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 { | |||
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); | |||
} | |||
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 | |||
@@ -34,17 +34,17 @@ | |||
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(); | |||
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.ChangeFontButton = new System.Windows.Forms.Button(); | |||
this.ClearLogsButton = new System.Windows.Forms.Button(); | |||
@@ -79,76 +79,66 @@ | |||
// | |||
// 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 | |||
// | |||
@@ -294,7 +284,7 @@ | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; | |||
this.ClientSize = new System.Drawing.Size(384, 161); | |||
this.Controls.Add(this.tableLayoutPanel1); | |||
this.Menu = this.MainMenu; | |||
this.MainMenuStrip = this.MainMenu; | |||
this.MinimumSize = new System.Drawing.Size(400, 200); | |||
this.Name = "LogForm"; | |||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; | |||
@@ -319,23 +309,23 @@ | |||
#endregion | |||
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.Button ClearLogsButton; | |||
private System.Windows.Forms.Button ChangeFontButton; | |||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; | |||
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.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.DataVisualization.Charting.Chart trafficChart; | |||
} |
@@ -256,14 +256,14 @@ namespace Shadowsocks.View | |||
} | |||
topMostTriggerLock = true; | |||
TopMost = TopMostMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||
TopMost = TopMostToolStripMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||
topMostTriggerLock = false; | |||
wrapTextTriggerLock = true; | |||
LogMessageTextBox.WordWrap = WrapTextMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||
LogMessageTextBox.WordWrap = WrapTextToolStripMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||
wrapTextTriggerLock = false; | |||
ToolbarFlowLayoutPanel.Visible = ShowToolbarMenuItem.Checked = toolbarTrigger; | |||
ToolbarFlowLayoutPanel.Visible = ShowToolbarToolStripMenuItem.Checked = toolbarTrigger; | |||
} | |||
private void LogForm_FormClosing(object sender, FormClosingEventArgs e) | |||
@@ -288,14 +288,14 @@ namespace Shadowsocks.View | |||
controller.SaveLogViewerConfig(config); | |||
} | |||
private void OpenLocationMenuItem_Click(object sender, EventArgs e) | |||
private void OpenLocationToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
string argument = "/select, \"" + filename + "\""; | |||
logger.Debug(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(); | |||
} | |||
@@ -317,7 +317,7 @@ namespace Shadowsocks.View | |||
LogMessageTextBox.Clear(); | |||
} | |||
private void ClearLogsMenuItem_Click(object sender, EventArgs e) | |||
private void ClearLogsToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
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(); | |||
} | |||
@@ -369,12 +369,12 @@ namespace Shadowsocks.View | |||
wrapTextTrigger = !wrapTextTrigger; | |||
LogMessageTextBox.WordWrap = wrapTextTrigger; | |||
LogMessageTextBox.ScrollToCaret(); | |||
WrapTextMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||
WrapTextToolStripMenuItem.Checked = WrapTextCheckBox.Checked = wrapTextTrigger; | |||
wrapTextTriggerLock = false; | |||
} | |||
private void WrapTextMenuItem_Click(object sender, EventArgs e) | |||
private void WrapTextToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
if (!wrapTextTriggerLock) | |||
{ | |||
@@ -401,7 +401,7 @@ namespace Shadowsocks.View | |||
topMostTrigger = !topMostTrigger; | |||
TopMost = topMostTrigger; | |||
TopMostMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||
TopMostToolStripMenuItem.Checked = TopMostCheckBox.Checked = topMostTrigger; | |||
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) | |||
{ | |||
@@ -425,11 +425,11 @@ namespace Shadowsocks.View | |||
private bool toolbarTrigger = false; | |||
private void ShowToolbarMenuItem_Click(object sender, EventArgs e) | |||
private void ShowToolbarToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
toolbarTrigger = !toolbarTrigger; | |||
ToolbarFlowLayoutPanel.Visible = toolbarTrigger; | |||
ShowToolbarMenuItem.Checked = toolbarTrigger; | |||
ShowToolbarToolStripMenuItem.Checked = toolbarTrigger; | |||
} | |||
private class TrafficInfo | |||
@@ -10,6 +10,7 @@ using System.IO; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using System.Windows.Media.Imaging; | |||
using ZXing; | |||
using ZXing.Common; | |||
using ZXing.QrCode; | |||
@@ -33,29 +34,29 @@ namespace Shadowsocks.View | |||
private bool _isStartupChecking; | |||
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 ProxyForm proxyForm; | |||
@@ -91,7 +92,7 @@ namespace Shadowsocks.View | |||
_notifyIcon = new NotifyIcon(); | |||
UpdateTrayIconAndNotifyText(); | |||
_notifyIcon.Visible = true; | |||
_notifyIcon.ContextMenu = contextMenu1; | |||
_notifyIcon.ContextMenuStrip = contextMenu1; | |||
_notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked; | |||
_notifyIcon.MouseClick += notifyIcon1_Click; | |||
_notifyIcon.MouseDoubleClick += notifyIcon1_DoubleClick; | |||
@@ -272,67 +273,68 @@ namespace Shadowsocks.View | |||
#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() | |||
{ | |||
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() | |||
{ | |||
var items = ServersItem.MenuItems; | |||
var items = ServersItem.DropDownItems; | |||
while (items[0] != SeperatorItem) | |||
{ | |||
items.RemoveAt(0); | |||
@@ -459,15 +461,15 @@ namespace Shadowsocks.View | |||
int strategyCount = 0; | |||
foreach (var strategy in controller.GetStrategies()) | |||
{ | |||
MenuItem item = new MenuItem(strategy.Name); | |||
ToolStripMenuItem item = new ToolStripMenuItem(strategy.Name); | |||
item.Tag = strategy.ID; | |||
item.Click += AStrategyItem_Click; | |||
items.Add(strategyCount, item); | |||
items.Add( item); | |||
strategyCount++; | |||
} | |||
// user wants a seperator item between strategy and servers menugroup | |||
items.Add(strategyCount++, new MenuItem("-")); | |||
items.Add(new ToolStripMenuItem("-")); | |||
int serverCount = 0; | |||
Configuration configuration = controller.GetConfigurationCopy(); | |||
@@ -475,15 +477,15 @@ namespace Shadowsocks.View | |||
{ | |||
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.Click += AServerItem_Click; | |||
items.Add(strategyCount + serverCount, item); | |||
items.Add( item); | |||
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)) | |||
{ | |||
@@ -694,13 +696,13 @@ namespace Shadowsocks.View | |||
private void AServerItem_Click(object sender, EventArgs e) | |||
{ | |||
MenuItem item = (MenuItem)sender; | |||
ToolStripMenuItem item = (ToolStripMenuItem)sender; | |||
controller.SelectServerIndex((int)item.Tag); | |||
} | |||
private void AStrategyItem_Click(object sender, EventArgs e) | |||
{ | |||
MenuItem item = (MenuItem)sender; | |||
ToolStripMenuItem item = (ToolStripMenuItem)sender; | |||
controller.SelectStrategy((string)item.Tag); | |||
} | |||
@@ -765,7 +767,7 @@ namespace Shadowsocks.View | |||
cropRect, | |||
GraphicsUnit.Pixel); | |||
} | |||
var source = new BitmapLuminanceSource(target); | |||
var source = new BitmapSourceLuminanceSource(null); | |||
var bitmap = new BinaryBitmap(new HybridBinarizer(source)); | |||
QRCodeReader reader = new QRCodeReader(); | |||
var result = reader.decode(bitmap); | |||
@@ -879,14 +881,14 @@ namespace Shadowsocks.View | |||
private void UpdateOnlinePACURLItem_Click(object sender, EventArgs e) | |||
{ | |||
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) | |||
@@ -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"/> | |||
</sectionGroup> | |||
</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> | |||
<Shadowsocks.Properties.Settings> | |||
<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> | |||
<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> | |||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||
<TargetFramework>netcoreapp3.1</TargetFramework> | |||
<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> | |||
<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> | |||
<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> | |||
</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> | |||
<AutoGen>True</AutoGen> | |||
<DependentUpon>Settings.settings</DependentUpon> | |||
</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> | |||
<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> | |||
<LastGenOutput>Settings.Designer.cs</LastGenOutput> | |||
</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> | |||
<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> |
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 | |||
# Visual Studio Version 16 | |||
VisualStudioVersion = 16.0.29709.97 | |||
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 | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShadowsocksTest", "test\ShadowsocksTest.csproj", "{45913187-0685-4903-B250-DCEF0479CD86}" | |||
ProjectSection(ProjectDependencies) = postProject | |||
@@ -18,13 +18,14 @@ Global | |||
Release|x86 = Release|x86 | |||
EndGlobalSection | |||
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|x86.ActiveCfg = Debug|x86 | |||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.Build.0 = Debug|x86 | |||