Ejemplo n.º 1
0
        public static void Update(Configuration config, bool forceDisable)
        {
            int sysProxyMode = config.sysProxyMode;

            if (sysProxyMode == (int)ProxyMode.NoModify)
            {
                return;
            }
            if (forceDisable)
            {
                sysProxyMode = (int)ProxyMode.Direct;
            }
            bool global  = sysProxyMode == (int)ProxyMode.Global;
            bool enabled = sysProxyMode != (int)ProxyMode.Direct;

            try
            {
                if (enabled)//sysProxyMode != (int)ProxyMode.Direct,global & pac
                {
                    string pacUrl = $"http://127.0.0.1:{config.localPort}/pac?auth={config.localAuthPassword}&t={Util.Utils.GetTimestamp(DateTime.Now)}";
                    Sysproxy.SetIEProxy(enabled, global, $"127.0.0.1:{config.localPort}", pacUrl);
                }
                else
                {
                    Sysproxy.SetIEProxy(false, false, null, null);
                    //Sysproxy.SetIEProxy(config.proxyEnable, config.proxyEnable, $"{config.proxyHost}:{config.proxyPort}", "");
                }
            }
            catch (Exception ex)
            {
                Logging.LogUsefulException(ex);
            }
        }
Ejemplo n.º 2
0
    public ClanApplicationContext()
    {
        _clansMenuStrip          = new ContextMenuStrip();
        _clansMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(menuOpening);

        // 读取配置并开启 clash 进程
        readConfig();
        _clash = new Clash(_currentConfig);
        _clash.Start();

        // 读取 API 端口,并连接 API
        string cfg = File.ReadAllText(_currentConfig);
        Dictionary <string, object> dict = new Deserializer().Deserialize <Dictionary <string, object> >(cfg);
        string extController             = dict["external-controller"].ToString();

        _clashAPI = new ClashAPI(extController); //TODO: external controller protentially not started yet.

        // 打开系统代理
        _sysproxy         = new Sysproxy(_clashAPI.config.port);
        _sysproxy.Enabled = true;

        // 若当前托管配置记录了 selector 选择,则恢复选择状态
        if (_configList.index >= 0 && _configList.files[_configList.index].selections.Count > 0)
        {
            restoreSelections(_configList.files[_configList.index].selections);
        }

        _trayIcon = new NotifyIcon()
        {
            Icon             = Clans.Properties.Resources.Clash,
            ContextMenuStrip = _clansMenuStrip,
            Visible          = true
        };
    }
Ejemplo n.º 3
0
        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 && !config.pacUrl.IsNullOrEmpty())
                        {
                            pacUrl = config.pacUrl;
                        }
                        else
                        {
                            pacUrl = pacSrv.PacUrl;
                        }
                        Sysproxy.SetIEProxy(true, false, null, pacUrl);
                    }
                }
                else
                {
                    Sysproxy.SetIEProxy(false, false, null, null);
                    Proxies.UnsetProxy();
                }
            }
            catch (ProxyException ex)
            {
                Logging.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);
                }
            }
        }
Ejemplo n.º 4
0
        public static void Update(Configuration config, bool forceDisable, PACServer pacSrv)
        {
            bool global  = config.global;
            bool enabled = config.enabled;

            if (forceDisable)
            {
                enabled = false;
            }

            try
            {
                if (enabled)
                {
                    if (global)
                    {
                        Sysproxy.SetIEProxy(true, true, "127.0.0.1:" + config.localPort.ToString(), "");
                    }
                    else
                    {
                        string pacUrl;
                        if (config.useOnlinePac && !config.pacUrl.IsNullOrEmpty())
                        {
                            pacUrl = config.pacUrl;
                        }
                        else
                        {
                            pacUrl =
                                $"http://127.0.0.1:{config.localPort}/pac?t={GetTimestamp(DateTime.Now)}{pacSrv.PacSecret}";
                        }
                        Sysproxy.SetIEProxy(true, false, "", pacUrl);
                    }
                }
                else
                {
                    Sysproxy.SetIEProxy(false, false, "", "");
                }
            }
            catch (ProxyException ex)
            {
                Logging.LogUsefulException(ex);
            }
        }
        public ShadowsocksController()
        {
            /***************************************************<Start> add by Ian.May 2016/10/15****************************************************/
            // preparing parameters for destructing fogNodes at closing stage, should not be handed from _config;(shallow copy)
            _configBackup      = Configuration.Load();
            _clientUser        = ClientUser.Load();
            isShadowFogMode    = true;
            isInitialStartup   = true;
            isShadowFogStarted = false;

            Sysproxy.SetIEProxy(false, false, "", "");
            //Ends
            /****************************************************<End> add by Ian.May 2016/10/15*****************************************************/

            _config = Configuration.Load();
            StatisticsConfiguration = StatisticsStrategyConfiguration.Load();
            _strategyManager        = new StrategyManager(this);
            StartReleasingMemory();
            StartTrafficStatistics(61);
        }
Ejemplo n.º 6
0
    void reloadConfig()
    {
        _clash.ReloadConfig(_currentConfig);

        // 读取 API 端口,并连接 API
        string cfg = File.ReadAllText(_currentConfig);
        Dictionary <string, object> dict = new Deserializer().Deserialize <Dictionary <string, object> >(cfg);
        string extController             = dict["external-controller"].ToString();

        _clashAPI.UpdateURL(extController); //TODO: external controller protentially not started yet.

        // 更新系统代理
        _sysproxy         = new Sysproxy(_clashAPI.config.port);
        _sysproxy.Enabled = true;

        // 若当前托管配置记录了 selector 选择,则恢复选择状态
        if (_configList.index >= 0 && _configList.files[_configList.index].selections.Count > 0)
        {
            restoreSelections(_configList.files[_configList.index].selections);
        }
    }