Signed-off-by: Syrone Wong <wong.syrone@gmail.com>tags/3.3.2
@@ -16,21 +16,21 @@ using Shadowsocks.Util.ProcessManagement; | |||||
namespace Shadowsocks.Controller | namespace Shadowsocks.Controller | ||||
{ | { | ||||
class PolipoRunner | |||||
class PrivoxyRunner | |||||
{ | { | ||||
private static int Uid; | private static int Uid; | ||||
private static string UniqueConfigFile; | private static string UniqueConfigFile; | ||||
private static Job PolipoJob; | |||||
private static Job PrivoxyJob; | |||||
private Process _process; | private Process _process; | ||||
private int _runningPort; | private int _runningPort; | ||||
static PolipoRunner() | |||||
static PrivoxyRunner() | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
Uid = Application.StartupPath.GetHashCode(); // Currently we use ss's StartupPath to identify different polipo instance. | |||||
Uid = Application.StartupPath.GetHashCode(); // Currently we use ss's StartupPath to identify different Privoxy instance. | |||||
UniqueConfigFile = $"privoxy_{Uid}.conf"; | UniqueConfigFile = $"privoxy_{Uid}.conf"; | ||||
PolipoJob = new Job(); | |||||
PrivoxyJob = new Job(); | |||||
FileManager.UncompressFile(Utils.GetTempPath("ss_privoxy.exe"), Resources.privoxy_exe); | FileManager.UncompressFile(Utils.GetTempPath("ss_privoxy.exe"), Resources.privoxy_exe); | ||||
FileManager.UncompressFile(Utils.GetTempPath("mgwz.dll"), Resources.mgwz_dll); | FileManager.UncompressFile(Utils.GetTempPath("mgwz.dll"), Resources.mgwz_dll); | ||||
@@ -54,17 +54,17 @@ namespace Shadowsocks.Controller | |||||
Server server = configuration.GetCurrentServer(); | Server server = configuration.GetCurrentServer(); | ||||
if (_process == null) | if (_process == null) | ||||
{ | { | ||||
Process[] existingPolipo = Process.GetProcessesByName("ss_privoxy"); | |||||
foreach (Process p in existingPolipo.Where(IsChildProcess)) | |||||
Process[] existingPrivoxy = Process.GetProcessesByName("ss_privoxy"); | |||||
foreach (Process p in existingPrivoxy.Where(IsChildProcess)) | |||||
{ | { | ||||
KillProcess(p); | KillProcess(p); | ||||
} | } | ||||
string polipoConfig = Resources.privoxy_conf; | |||||
string privoxyConfig = Resources.privoxy_conf; | |||||
_runningPort = this.GetFreePort(); | _runningPort = this.GetFreePort(); | ||||
polipoConfig = polipoConfig.Replace("__SOCKS_PORT__", configuration.localPort.ToString()); | |||||
polipoConfig = polipoConfig.Replace("__POLIPO_BIND_PORT__", _runningPort.ToString()); | |||||
polipoConfig = polipoConfig.Replace("__POLIPO_BIND_IP__", configuration.shareOverLan ? "0.0.0.0" : "127.0.0.1"); | |||||
FileManager.ByteArrayToFile(Utils.GetTempPath(UniqueConfigFile), Encoding.UTF8.GetBytes(polipoConfig)); | |||||
privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", configuration.localPort.ToString()); | |||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", _runningPort.ToString()); | |||||
privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", configuration.shareOverLan ? "0.0.0.0" : "127.0.0.1"); | |||||
FileManager.ByteArrayToFile(Utils.GetTempPath(UniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig)); | |||||
_process = new Process(); | _process = new Process(); | ||||
// Configure the process using the StartInfo properties. | // Configure the process using the StartInfo properties. | ||||
@@ -80,7 +80,7 @@ namespace Shadowsocks.Controller | |||||
* Add this process to job obj associated with this ss process, so that | * Add this process to job obj associated with this ss process, so that | ||||
* when ss exit unexpectedly, this process will be forced killed by system. | * when ss exit unexpectedly, this process will be forced killed by system. | ||||
*/ | */ | ||||
PolipoJob.AddProcess(_process.Handle); | |||||
PrivoxyJob.AddProcess(_process.Handle); | |||||
} | } | ||||
RefreshTrayArea(); | RefreshTrayArea(); | ||||
} | } |
@@ -28,7 +28,7 @@ namespace Shadowsocks.Controller | |||||
private PACServer _pacServer; | private PACServer _pacServer; | ||||
private Configuration _config; | private Configuration _config; | ||||
private StrategyManager _strategyManager; | private StrategyManager _strategyManager; | ||||
private PolipoRunner polipoRunner; | |||||
private PrivoxyRunner privoxyRunner; | |||||
private GFWListUpdater gfwListUpdater; | private GFWListUpdater gfwListUpdater; | ||||
public AvailabilityStatistics availabilityStatistics = AvailabilityStatistics.Instance; | public AvailabilityStatistics availabilityStatistics = AvailabilityStatistics.Instance; | ||||
public StatisticsStrategyConfiguration StatisticsConfiguration { get; private set; } | public StatisticsStrategyConfiguration StatisticsConfiguration { get; private set; } | ||||
@@ -264,9 +264,9 @@ namespace Shadowsocks.Controller | |||||
{ | { | ||||
_listener.Stop(); | _listener.Stop(); | ||||
} | } | ||||
if (polipoRunner != null) | |||||
if (privoxyRunner != null) | |||||
{ | { | ||||
polipoRunner.Stop(); | |||||
privoxyRunner.Stop(); | |||||
} | } | ||||
if (_config.enabled) | if (_config.enabled) | ||||
{ | { | ||||
@@ -417,9 +417,9 @@ namespace Shadowsocks.Controller | |||||
_config = Configuration.Load(); | _config = Configuration.Load(); | ||||
StatisticsConfiguration = StatisticsStrategyConfiguration.Load(); | StatisticsConfiguration = StatisticsStrategyConfiguration.Load(); | ||||
if (polipoRunner == null) | |||||
if (privoxyRunner == null) | |||||
{ | { | ||||
polipoRunner = new PolipoRunner(); | |||||
privoxyRunner = new PrivoxyRunner(); | |||||
} | } | ||||
if (_pacServer == null) | if (_pacServer == null) | ||||
{ | { | ||||
@@ -441,11 +441,11 @@ namespace Shadowsocks.Controller | |||||
{ | { | ||||
_listener.Stop(); | _listener.Stop(); | ||||
} | } | ||||
// don't put polipoRunner.Start() before pacServer.Stop() | |||||
// don't put PrivoxyRunner.Start() before pacServer.Stop() | |||||
// or bind will fail when switching bind address from 0.0.0.0 to 127.0.0.1 | // or bind will fail when switching bind address from 0.0.0.0 to 127.0.0.1 | ||||
// though UseShellExecute is set to true now | // though UseShellExecute is set to true now | ||||
// http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open | // http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open | ||||
polipoRunner.Stop(); | |||||
privoxyRunner.Stop(); | |||||
try | try | ||||
{ | { | ||||
var strategy = GetCurrentStrategy(); | var strategy = GetCurrentStrategy(); | ||||
@@ -454,7 +454,7 @@ namespace Shadowsocks.Controller | |||||
strategy.ReloadServers(); | strategy.ReloadServers(); | ||||
} | } | ||||
polipoRunner.Start(_config); | |||||
privoxyRunner.Start(_config); | |||||
TCPRelay tcpRelay = new TCPRelay(this, _config); | TCPRelay tcpRelay = new TCPRelay(this, _config); | ||||
UDPRelay udpRelay = new UDPRelay(this); | UDPRelay udpRelay = new UDPRelay(this); | ||||
@@ -462,7 +462,7 @@ namespace Shadowsocks.Controller | |||||
services.Add(tcpRelay); | services.Add(tcpRelay); | ||||
services.Add(udpRelay); | services.Add(udpRelay); | ||||
services.Add(_pacServer); | services.Add(_pacServer); | ||||
services.Add(new PortForwarder(polipoRunner.RunningPort)); | |||||
services.Add(new PortForwarder(privoxyRunner.RunningPort)); | |||||
_listener = new Listener(services); | _listener = new Listener(services); | ||||
_listener.Start(_config); | _listener.Start(_config); | ||||
} | } | ||||
@@ -1,4 +1,4 @@ | |||||
listen-address __POLIPO_BIND_IP__:__POLIPO_BIND_PORT__ | |||||
listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ | |||||
show-on-task-bar 0 | show-on-task-bar 0 | ||||
activity-animation 0 | activity-animation 0 | ||||
forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . | forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . | ||||
@@ -198,7 +198,7 @@ | |||||
<DependentUpon>ConfigForm.cs</DependentUpon> | <DependentUpon>ConfigForm.cs</DependentUpon> | ||||
</Compile> | </Compile> | ||||
<Compile Include="Controller\Service\TCPRelay.cs" /> | <Compile Include="Controller\Service\TCPRelay.cs" /> | ||||
<Compile Include="Controller\Service\PolipoRunner.cs" /> | |||||
<Compile Include="Controller\Service\PrivoxyRunner.cs" /> | |||||
<Compile Include="Program.cs" /> | <Compile Include="Program.cs" /> | ||||
<Compile Include="Properties\AssemblyInfo.cs" /> | <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
<Compile Include="Controller\ShadowsocksController.cs" /> | <Compile Include="Controller\ShadowsocksController.cs" /> | ||||