public void Stop() { if (stopped) { return; } stopped = true; if (_port_map_listener != null) { foreach (Listener l in _port_map_listener) { l.Stop(); } _port_map_listener = null; } if (_listener != null) { _listener.Stop(); } #if !_CONSOLE if (polipoRunner != null) { polipoRunner.Stop(); } if (_config.sysProxyMode != (int)ProxyMode.NoModify && _config.sysProxyMode != (int)ProxyMode.Direct) { SystemProxy.Update(_config, true); } #endif ServerTransferTotal.Save(_transfer); }
public void Stop() { if (stopped) { return; } stopped = true; if (_port_map_listener != null) { foreach (var l in _port_map_listener) { l.Stop(); } _port_map_listener = null; } _listener?.Stop(); privoxyRunner?.Stop(); if (_config.sysProxyMode != (int)ProxyMode.NoModify && _config.sysProxyMode != (int)ProxyMode.Direct) { SystemProxy.Update(_config, true, null); } ServerTransferTotal.Save(_transfer); }
public void Reload() { StopPortMap(); // some logic in configuration updated the config when saving, we need to read it again Global.GuiConfig = MergeGetConfiguration(Global.GuiConfig); Global.GuiConfig.FlushPortMapCache(); Logging.SaveToFile = Global.GuiConfig.LogEnable; Logging.OpenLogFile(); ReloadProxyRule(); if (_privoxyRunner == null) { _privoxyRunner = new HttpProxyRunner(); } ReloadPacServer(); if (_gfwListUpdater == null) { _gfwListUpdater = new GfwListUpdater(); _gfwListUpdater.UpdateCompleted += (o, args) => UpdatePACFromGFWListCompleted?.Invoke(o, args); _gfwListUpdater.Error += (o, args) => UpdatePACFromGFWListError?.Invoke(o, args); } _listener?.Stop(); _privoxyRunner.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 // though UseShellExecute is set to true now // http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open try { _privoxyRunner.Start(Global.GuiConfig); var local = new Local(Global.GuiConfig, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local, _pacServer, new HttpPortForwarder(_privoxyRunner.RunningPort, Global.GuiConfig) }; _listener = new Listener(services); _listener.Start(Global.GuiConfig, 0); } catch (Exception e) { ThrowSocketException(ref e); Logging.LogUsefulException(e); ReportError(e); } LoadPortMap(); Application.Current.Dispatcher?.InvokeAsync(() => { ConfigChanged?.Invoke(this, new EventArgs()); }); UpdateSystemProxy(); Utils.ReleaseMemory(); }
public void Stop() { if (stopped) { return; } stopped = true; if (_listener != null) { _listener.Stop(); } if (polipoRunner != null) { polipoRunner.Stop(); } if (_config.enabled) { SystemProxy.Update(_config, true); } }
public void Reload() { StopPortMap(); // some logic in configuration updated the config when saving, we need to read it again Global.GuiConfig = MergeGetConfiguration(Global.GuiConfig); Global.GuiConfig.FlushPortMapCache(); Logging.SaveToFile = Global.GuiConfig.LogEnable; Logging.OpenLogFile(); ReloadProxyRule(); _httpProxyRunner ??= new HttpProxyRunner(); ReloadPacServer(); if (_gfwListUpdater == null) { _gfwListUpdater = new GfwListUpdater(); _gfwListUpdater.UpdateCompleted += (o, args) => UpdatePACFromGFWListCompleted?.Invoke(o, args); _gfwListUpdater.Error += (o, args) => UpdatePACFromGFWListError?.Invoke(o, args); } _listener?.Stop(); _httpProxyRunner.Stop(); try { _httpProxyRunner.Start(Global.GuiConfig); var local = new Local(Global.GuiConfig, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local, _pacServer, new HttpPortForwarder(_httpProxyRunner.RunningPort, Global.GuiConfig) }; _listener = new Listener(services); _listener.Start(Global.GuiConfig, 0); } catch (Exception e) { ThrowSocketException(ref e); Logging.LogUsefulException(e); ReportError(e); } LoadPortMap(); Application.Current.Dispatcher?.InvokeAsync(() => { ConfigChanged?.Invoke(this, new EventArgs()); }); UpdateSystemProxy(); }
public void Stop() { if (_stopped) { return; } _stopped = true; StopPortMap(); _listener?.Stop(); _privoxyRunner?.Stop(); SystemProxy.Restore(); ServerTransferTotal.Save(_transfer, Global.GuiConfig.Configs); }
public void Stop() { if (_stopped) { return; } _stopped = true; StopPortMap(); _listener?.Stop(); _privoxyRunner?.Stop(); if (Global.GuiConfig.SysProxyMode != ProxyMode.NoModify && Global.GuiConfig.SysProxyMode != ProxyMode.Direct) { SystemProxy.SystemProxy.Update(Global.GuiConfig, true, null); } ServerTransferTotal.Save(_transfer, Global.GuiConfig.Configs); }
protected void Reload() { if (_port_map_listener != null) { foreach (var l in _port_map_listener) { l.Stop(); } _port_map_listener = null; } // some logic in configuration updated the config when saving, we need to read it again _config = MergeGetConfiguration(_config); _config.FlushPortMapCache(); Logging.save_to_file = _config.logEnable; Logging.OpenLogFile(); ReloadIPRange(); var hostMap = new HostMap(); hostMap.LoadHostFile(); HostMap.Instance().Clear(hostMap); if (privoxyRunner == null) { privoxyRunner = new HttpProxyRunner(); } if (_pacServer == null) { _pacServer = new PACServer(); _pacServer.PACFileChanged += pacServer_PACFileChanged; _pacServer.UserRuleFileChanged += pacServer_UserRuleFileChanged; } _pacServer.UpdateConfiguration(_config); if (gfwListUpdater == null) { gfwListUpdater = new GFWListUpdater(); gfwListUpdater.UpdateCompleted += pacServer_PACUpdateCompleted; gfwListUpdater.Error += pacServer_PACUpdateError; } if (chnDomainsAndIPUpdater == null) { chnDomainsAndIPUpdater = new ChnDomainsAndIPUpdater(); chnDomainsAndIPUpdater.UpdateCompleted += pacServer_PACUpdateCompleted; chnDomainsAndIPUpdater.Error += pacServer_PACUpdateError; } _listener?.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 // though UseShellExecute is set to true now // http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open try { privoxyRunner.Stop(); privoxyRunner.Start(_config); var local = new Local(_config, _transfer, _rangeSet); var services = new List <Listener.Service> { local, _pacServer, new APIServer(this, _config), new HttpPortForwarder(privoxyRunner.RunningPort, _config) }; _listener = new Listener(services); _listener.Start(_config, 0); } catch (Exception e) { // translate Microsoft language into human language // i.e. An attempt was made to access a socket in a way forbidden by its access permissions => Port already in use if (e is SocketException se) { if (se.SocketErrorCode == SocketError.AddressAlreadyInUse) { e = new Exception(string.Format(I18N.GetString("Port {0} already in use"), _config.localPort), se); } else if (se.SocketErrorCode == SocketError.AccessDenied) { e = new Exception(string.Format(I18N.GetString("Port {0} is reserved by system"), _config.localPort), se); } } Logging.LogUsefulException(e); ReportError(e); } _port_map_listener = new List <Listener>(); foreach (var pair in _config.GetPortMapCache()) { try { var local = new Local(_config, _transfer, _rangeSet); var services = new List <Listener.Service> { local }; var listener = new Listener(services); listener.Start(_config, pair.Key); _port_map_listener.Add(listener); } catch (Exception e) { // translate Microsoft language into human language // i.e. An attempt was made to access a socket in a way forbidden by its access permissions => Port already in use if (e is SocketException se) { if (se.SocketErrorCode == SocketError.AddressAlreadyInUse) { e = new Exception(string.Format(I18N.GetString("Port {0} already in use"), pair.Key), e); } else if (se.SocketErrorCode == SocketError.AccessDenied) { e = new Exception(string.Format(I18N.GetString("Port {0} is reserved by system"), pair.Key), se); } } Logging.LogUsefulException(e); ReportError(e); } } ConfigChanged?.Invoke(this, new EventArgs()); UpdateSystemProxy(); Utils.ReleaseMemory(); }
public void Reload() { if (_port_map_listener != null) { foreach (var l in _port_map_listener) { l.Stop(); } _port_map_listener = null; } // some logic in configuration updated the config when saving, we need to read it again _config = MergeGetConfiguration(_config); _config.FlushPortMapCache(); Logging.SaveToFile = _config.logEnable; Logging.OpenLogFile(); if (_hostDaemon == null) { _hostDaemon = new HostDaemon(); _hostDaemon.ChnIpChanged += (o, args) => ReloadIPRange(); _hostDaemon.UserRuleChanged += (o, args) => HostMap.Reload(); } ReloadIPRange(); HostMap.Reload(); GlobalConfiguration.OSSupportsLocalIPv6 = Socket.OSSupportsIPv6; if (privoxyRunner == null) { privoxyRunner = new HttpProxyRunner(); } if (_pacDaemon == null) { _pacDaemon = new PACDaemon(); _pacDaemon.PACFileChanged += (o, args) => UpdateSystemProxy(); _pacDaemon.UserRuleFileChanged += PacDaemon_UserRuleFileChanged; } if (_pacServer == null) { _pacServer = new PACServer(_pacDaemon); } _pacServer.UpdatePacUrl(_config); if (gfwListUpdater == null) { gfwListUpdater = new GfwListUpdater(); gfwListUpdater.UpdateCompleted += (o, args) => UpdatePACFromGFWListCompleted?.Invoke(o, args); gfwListUpdater.Error += (o, args) => UpdatePACFromGFWListError?.Invoke(o, args); } _listener?.Stop(); privoxyRunner.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 // though UseShellExecute is set to true now // http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open try { privoxyRunner.Start(_config); var local = new Local(_config, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local, _pacServer, new HttpPortForwarder(privoxyRunner.RunningPort, _config) }; _listener = new Listener(services); _listener.Start(_config, 0); } catch (Exception e) { ThrowSocketException(ref e); Logging.LogUsefulException(e); ReportError(e); } _port_map_listener = new List <Listener>(); foreach (var pair in _config.GetPortMapCache()) { try { var local = new Local(_config, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local }; var listener = new Listener(services); listener.Start(_config, pair.Key); _port_map_listener.Add(listener); } catch (Exception e) { ThrowSocketException(ref e); Logging.LogUsefulException(e); ReportError(e); } } Application.Current.Dispatcher?.Invoke(() => { ConfigChanged?.Invoke(this, new EventArgs()); }); UpdateSystemProxy(); Utils.ReleaseMemory(); }
public void Reload() { if (_port_map_listener != null) { foreach (var l in _port_map_listener) { l.Stop(); } _port_map_listener = null; } // some logic in configuration updated the config when saving, we need to read it again _config = MergeGetConfiguration(_config); _config.FlushPortMapCache(); Logging.save_to_file = _config.logEnable; Logging.OpenLogFile(); if (_hostDaemon == null) { _hostDaemon = new HostDaemon(); _hostDaemon.ChnIpChanged += (o, args) => ReloadIPRange(); _hostDaemon.UserRuleChanged += (o, args) => HostMap.Reload(); } ReloadIPRange(); HostMap.Reload(); GlobalConfiguration.OSSupportsLocalIPv6 = Socket.OSSupportsIPv6; if (privoxyRunner == null) { privoxyRunner = new HttpProxyRunner(); } if (_pacDaemon == null) { _pacDaemon = new PACDaemon(); _pacDaemon.PACFileChanged += (o, args) => UpdateSystemProxy(); _pacDaemon.UserRuleFileChanged += PacDaemon_UserRuleFileChanged; } if (_pacServer == null) { _pacServer = new PACServer(_pacDaemon); } _pacServer.UpdatePacUrl(_config); if (gfwListUpdater == null) { gfwListUpdater = new GFWListUpdater(); gfwListUpdater.UpdateCompleted += (o, args) => UpdatePACFromGFWListCompleted?.Invoke(o, args); gfwListUpdater.Error += (o, args) => UpdatePACFromGFWListError?.Invoke(o, args); } if (chnDomainsAndIPUpdater == null) { chnDomainsAndIPUpdater = new ChnDomainsAndIPUpdater(); chnDomainsAndIPUpdater.UpdateCompleted += (o, args) => UpdatePACFromChnDomainsAndIPCompleted?.Invoke(o, args); chnDomainsAndIPUpdater.Error += (o, args) => UpdatePACFromGFWListError?.Invoke(o, args); } _listener?.Stop(); privoxyRunner.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 // though UseShellExecute is set to true now // http://stackoverflow.com/questions/10235093/socket-doesnt-close-after-application-exits-if-a-launched-process-is-open try { privoxyRunner.Start(_config); var local = new Local(_config, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local, _pacServer, new HttpPortForwarder(privoxyRunner.RunningPort, _config) }; _listener = new Listener(services); _listener.Start(_config, 0); } catch (Exception e) { // translate Microsoft language into human language // i.e. An attempt was made to access a socket in a way forbidden by its access permissions => Port already in use if (e is SocketException se) { switch (se.SocketErrorCode) { case SocketError.AddressAlreadyInUse: { e = new Exception(string.Format(I18NUtil.GetAppStringValue(@"PortInUse"), _config.localPort), se); break; } case SocketError.AccessDenied: { e = new Exception(string.Format(I18NUtil.GetAppStringValue(@"PortReserved"), _config.localPort), se); break; } } } Logging.LogUsefulException(e); ReportError(e); } _port_map_listener = new List <Listener>(); foreach (var pair in _config.GetPortMapCache()) { try { var local = new Local(_config, _transfer, _chnRangeSet); var services = new List <Listener.IService> { local }; var listener = new Listener(services); listener.Start(_config, pair.Key); _port_map_listener.Add(listener); } catch (Exception e) { // translate Microsoft language into human language // i.e. An attempt was made to access a socket in a way forbidden by its access permissions => Port already in use if (e is SocketException se) { switch (se.SocketErrorCode) { case SocketError.AddressAlreadyInUse: e = new Exception(string.Format(I18NUtil.GetAppStringValue(@"PortInUse"), pair.Key), e); break; case SocketError.AccessDenied: e = new Exception(string.Format(I18NUtil.GetAppStringValue(@"PortReserved"), pair.Key), se); break; } } Logging.LogUsefulException(e); ReportError(e); } } Application.Current.Dispatcher?.Invoke(() => { ConfigChanged?.Invoke(this, new EventArgs()); }); UpdateSystemProxy(); Utils.ReleaseMemory(); }