Browse Source

Implement "Show Plugin Output" checkbox.

tags/4.1.9.0
Raif Atef 4 years ago
parent
commit
b83f5b3d96
5 changed files with 123 additions and 69 deletions
  1. +10
    -4
      shadowsocks-csharp/Controller/Service/Sip003Plugin.cs
  2. +13
    -1
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  3. +1
    -0
      shadowsocks-csharp/Model/Configuration.cs
  4. +15
    -0
      shadowsocks-csharp/View/MenuViewController.cs
  5. +84
    -64
      test/Sip003PluginTest.cs

+ 10
- 4
shadowsocks-csharp/Controller/Service/Sip003Plugin.cs View File

@@ -22,7 +22,7 @@ namespace Shadowsocks.Controller.Service
private bool _started; private bool _started;
private bool _disposed; private bool _disposed;


public static Sip003Plugin CreateIfConfigured(Server server)
public static Sip003Plugin CreateIfConfigured(Server server, bool showPluginOutput)
{ {
if (server == null) if (server == null)
{ {
@@ -34,10 +34,16 @@ namespace Shadowsocks.Controller.Service
return null; return null;
} }


return new Sip003Plugin(server.plugin, server.plugin_opts, server.plugin_args, server.server, server.server_port);
return new Sip003Plugin(
server.plugin,
server.plugin_opts,
server.plugin_args,
server.server,
server.server_port,
showPluginOutput);
} }


private Sip003Plugin(string plugin, string pluginOpts, string pluginArgs, string serverAddress, int serverPort)
private Sip003Plugin(string plugin, string pluginOpts, string pluginArgs, string serverAddress, int serverPort, bool showPluginOutput)
{ {
if (plugin == null) throw new ArgumentNullException(nameof(plugin)); if (plugin == null) throw new ArgumentNullException(nameof(plugin));
if (string.IsNullOrWhiteSpace(serverAddress)) if (string.IsNullOrWhiteSpace(serverAddress))
@@ -58,7 +64,7 @@ namespace Shadowsocks.Controller.Service
FileName = plugin, FileName = plugin,
Arguments = pluginArgs, Arguments = pluginArgs,
UseShellExecute = false, UseShellExecute = false,
CreateNoWindow = true,
CreateNoWindow = !showPluginOutput,
ErrorDialog = false, ErrorDialog = false,
WindowStyle = ProcessWindowStyle.Hidden, WindowStyle = ProcessWindowStyle.Hidden,
WorkingDirectory = appPath ?? Environment.CurrentDirectory, WorkingDirectory = appPath ?? Environment.CurrentDirectory,


+ 13
- 1
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -65,6 +65,7 @@ namespace Shadowsocks.Controller
public event EventHandler EnableGlobalChanged; public event EventHandler EnableGlobalChanged;
public event EventHandler ShareOverLANStatusChanged; public event EventHandler ShareOverLANStatusChanged;
public event EventHandler VerboseLoggingStatusChanged; public event EventHandler VerboseLoggingStatusChanged;
public event EventHandler ShowPluginOutputChanged;
public event EventHandler TrafficChanged; public event EventHandler TrafficChanged;
// when user clicked Edit PAC, and PAC file has already created // when user clicked Edit PAC, and PAC file has already created
@@ -151,7 +152,10 @@ namespace Shadowsocks.Controller
public EndPoint GetPluginLocalEndPointIfConfigured(Server server) public EndPoint GetPluginLocalEndPointIfConfigured(Server server)
{ {
var plugin = _pluginsByServer.GetOrAdd(server, Sip003Plugin.CreateIfConfigured);
var plugin = _pluginsByServer.GetOrAdd(
server,
x => Sip003Plugin.CreateIfConfigured(x, _config.showPluginOutput));
if (plugin == null) if (plugin == null)
{ {
return null; return null;
@@ -252,6 +256,14 @@ namespace Shadowsocks.Controller
VerboseLoggingStatusChanged?.Invoke(this, new EventArgs()); VerboseLoggingStatusChanged?.Invoke(this, new EventArgs());
} }
public void ToggleShowPluginOutput(bool enabled)
{
_config.showPluginOutput = enabled;
SaveConfig(_config);
ShowPluginOutputChanged?.Invoke(this, new EventArgs());
}
public void SelectServerIndex(int index) public void SelectServerIndex(int index)
{ {
_config.index = index; _config.index = index;


+ 1
- 0
shadowsocks-csharp/Model/Configuration.cs View File

@@ -23,6 +23,7 @@ namespace Shadowsocks.Model
public bool isIPv6Enabled = false; public bool isIPv6Enabled = false;
public int localPort; public int localPort;
public bool portableMode = true; public bool portableMode = true;
public bool showPluginOutput;
public string pacUrl; public string pacUrl;
public bool useOnlinePac; public bool useOnlinePac;
public bool secureLocalPac = true; public bool secureLocalPac = true;


+ 15
- 0
shadowsocks-csharp/View/MenuViewController.cs View File

@@ -55,6 +55,7 @@ namespace Shadowsocks.View
private MenuItem proxyItem; private MenuItem proxyItem;
private MenuItem hotKeyItem; private MenuItem hotKeyItem;
private MenuItem VerboseLoggingToggleItem; private MenuItem VerboseLoggingToggleItem;
private MenuItem ShowPluginOutputToggleItem;
private ConfigForm configForm; private ConfigForm configForm;
private ProxyForm proxyForm; private ProxyForm proxyForm;
@@ -81,6 +82,7 @@ namespace Shadowsocks.View
controller.UserRuleFileReadyToOpen += controller_FileReadyToOpen; controller.UserRuleFileReadyToOpen += controller_FileReadyToOpen;
controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged; controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged;
controller.VerboseLoggingStatusChanged += controller_VerboseLoggingStatusChanged; controller.VerboseLoggingStatusChanged += controller_VerboseLoggingStatusChanged;
controller.ShowPluginOutputChanged += controller_ShowPluginOutputChanged;
controller.EnableGlobalChanged += controller_EnableGlobalChanged; controller.EnableGlobalChanged += controller_EnableGlobalChanged;
controller.Errored += controller_Errored; controller.Errored += controller_Errored;
controller.UpdatePACFromGFWListCompleted += controller_UpdatePACFromGFWListCompleted; controller.UpdatePACFromGFWListCompleted += controller_UpdatePACFromGFWListCompleted;
@@ -319,6 +321,7 @@ namespace Shadowsocks.View
CreateMenuGroup("Help", new MenuItem[] { CreateMenuGroup("Help", new MenuItem[] {
CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)), CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)),
this.VerboseLoggingToggleItem = CreateMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ), this.VerboseLoggingToggleItem = CreateMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ),
this.ShowPluginOutputToggleItem = CreateMenuItem("Show Plugin Output", new EventHandler(this.ShowPluginOutputToggleItem_Click)),
CreateMenuGroup("Updates...", new MenuItem[] { CreateMenuGroup("Updates...", new MenuItem[] {
CreateMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)), CreateMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)),
new MenuItem("-"), new MenuItem("-"),
@@ -355,6 +358,11 @@ namespace Shadowsocks.View
VerboseLoggingToggleItem.Checked = controller.GetConfigurationCopy().isVerboseLogging; VerboseLoggingToggleItem.Checked = controller.GetConfigurationCopy().isVerboseLogging;
} }
void controller_ShowPluginOutputChanged(object sender, EventArgs e)
{
ShowPluginOutputToggleItem.Checked = controller.GetConfigurationCopy().showPluginOutput;
}
void controller_EnableGlobalChanged(object sender, EventArgs e) void controller_EnableGlobalChanged(object sender, EventArgs e)
{ {
globalModeItem.Checked = controller.GetConfigurationCopy().global; globalModeItem.Checked = controller.GetConfigurationCopy().global;
@@ -431,6 +439,7 @@ namespace Shadowsocks.View
UpdateSystemProxyItemsEnabledStatus(config); UpdateSystemProxyItemsEnabledStatus(config);
ShareOverLANItem.Checked = config.shareOverLan; ShareOverLANItem.Checked = config.shareOverLan;
VerboseLoggingToggleItem.Checked = config.isVerboseLogging; VerboseLoggingToggleItem.Checked = config.isVerboseLogging;
ShowPluginOutputToggleItem.Checked = config.showPluginOutput;
AutoStartupItem.Checked = AutoStartup.Check(); AutoStartupItem.Checked = AutoStartup.Check();
onlinePACItem.Checked = onlinePACItem.Enabled && config.useOnlinePac; onlinePACItem.Checked = onlinePACItem.Enabled && config.useOnlinePac;
localPACItem.Checked = !onlinePACItem.Checked; localPACItem.Checked = !onlinePACItem.Checked;
@@ -703,6 +712,12 @@ namespace Shadowsocks.View
controller.ToggleVerboseLogging(VerboseLoggingToggleItem.Checked); controller.ToggleVerboseLogging(VerboseLoggingToggleItem.Checked);
} }
private void ShowPluginOutputToggleItem_Click(object sender, EventArgs e)
{
ShowPluginOutputToggleItem.Checked = !ShowPluginOutputToggleItem.Checked;
controller.ToggleShowPluginOutput(ShowPluginOutputToggleItem.Checked);
}
private void StatisticsConfigItem_Click(object sender, EventArgs e) private void StatisticsConfigItem_Click(object sender, EventArgs e)
{ {
StatisticsStrategyConfigurationForm form = new StatisticsStrategyConfigurationForm(controller); StatisticsStrategyConfigurationForm form = new StatisticsStrategyConfigurationForm(controller);


+ 84
- 64
test/Sip003PluginTest.cs View File

@@ -19,13 +19,15 @@ namespace Shadowsocks.Test
{ {
var NoPlugin = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb"
});
var NoPlugin = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
NoPlugin, NoPlugin,
@@ -39,14 +41,17 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_Plugin() public void TestSip003Plugin_Plugin()
{ {
var Plugin = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin
});
var Plugin = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin
},
false);
RunPluginSupportTest( RunPluginSupportTest(
Plugin, Plugin,
fake_plugin, fake_plugin,
@@ -58,16 +63,19 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_PluginWithOpts() public void TestSip003Plugin_PluginWithOpts()
{
var PluginWithOpts = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option"
});
{
var PluginWithOpts = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
PluginWithOpts, PluginWithOpts,
fake_plugin, fake_plugin,
@@ -80,15 +88,18 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_PluginWithArgs() public void TestSip003Plugin_PluginWithArgs()
{ {
var PluginWithArgs = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_args = "_test"
});
var PluginWithArgs = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_args = "_test"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
PluginWithArgs, PluginWithArgs,
fake_plugin, fake_plugin,
@@ -101,16 +112,19 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_PluginWithOptsAndArgs() public void TestSip003Plugin_PluginWithOptsAndArgs()
{ {
var PluginWithOptsAndArgs = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option",
plugin_args = "_test"
});
var PluginWithOptsAndArgs = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option",
plugin_args = "_test"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
PluginWithOptsAndArgs, PluginWithOptsAndArgs,
fake_plugin, fake_plugin,
@@ -123,15 +137,18 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_PluginWithArgsReplaced() public void TestSip003Plugin_PluginWithArgsReplaced()
{ {
var PluginWithArgsReplaced = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_args = "_test,%SS_REMOTE_HOST%"
});
var PluginWithArgsReplaced = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_args = "_test,%SS_REMOTE_HOST%"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
PluginWithArgsReplaced, PluginWithArgsReplaced,
fake_plugin, fake_plugin,
@@ -143,17 +160,20 @@ namespace Shadowsocks.Test
[TestMethod] [TestMethod]
public void TestSip003Plugin_PluginWithOptsAndArgsReplaced() public void TestSip003Plugin_PluginWithOptsAndArgsReplaced()
{
var PluginWithOptsAndArgsReplaced = Sip003Plugin.CreateIfConfigured(new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option",
plugin_args = "_test,%SS_REMOTE_HOST%,%SS_PLUGIN_OPTIONS%"
});
{
var PluginWithOptsAndArgsReplaced = Sip003Plugin.CreateIfConfigured(
new Server
{
server = "192.168.100.1",
server_port = 8888,
password = "test",
method = "bf-cfb",
plugin = fake_plugin,
plugin_opts = "_option",
plugin_args = "_test,%SS_REMOTE_HOST%,%SS_PLUGIN_OPTIONS%"
},
false);
RunPluginSupportTest( RunPluginSupportTest(
PluginWithOptsAndArgsReplaced, PluginWithOptsAndArgsReplaced,
fake_plugin, fake_plugin,


Loading…
Cancel
Save