using System; using System.Windows.Forms; using NLog; using Shadowsocks.Model; using Shadowsocks.Util.SystemProxy; namespace Shadowsocks.Controller { public static class SystemProxy { private static Logger logger = LogManager.GetCurrentClassLogger(); private static string GetTimestamp(DateTime value) { return value.ToString("yyyyMMddHHmmssfff"); } public static void Update(Configuration config, bool forceDisable, PACServer pacSrv, bool noRetry = false) { bool global = config.global; bool enabled = config.enabled; if (forceDisable) { enabled = false; } try { if (enabled) { if (global) { Sysproxy.SetIEProxy(true, true, "localhost:" + config.localPort.ToString(), null); } else { string pacUrl; if (config.useOnlinePac && !string.IsNullOrEmpty(config.pacUrl)) { pacUrl = config.pacUrl; } else { pacUrl = pacSrv.PacUrl; } Sysproxy.SetIEProxy(true, false, null, pacUrl); } } else { Sysproxy.SetIEProxy(false, false, null, null); } } catch (ProxyException ex) { logger.LogUsefulException(ex); if (ex.Type != ProxyExceptionType.Unspecific && !noRetry) { var ret = MessageBox.Show(I18N.GetString("Error occured when process proxy setting, do you want reset current setting and retry?"), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ret == DialogResult.Yes) { Sysproxy.ResetIEProxy(); Update(config, forceDisable, pacSrv, true); } } else { MessageBox.Show(I18N.GetString("Unrecoverable proxy setting error occured, see log for detail"), I18N.GetString("Shadowsocks"), MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } }