示例#1
0
 public bool AddRule(ProxifierRule rule)
 {
     if (!this.innerRuleList.Contains(rule))
     {
         this.innerRuleList.Add(rule);
         return(true);
     }
     return(false);
 }
示例#2
0
 public bool AddRule(bool enabled, string ruleName, string targetAddress, string _applications, string _ports, ActionType actionType, int proxyID = 100)
 {
     if (ruleName.ToLower() != "default" && this.innerProxyList.ContainsKey(proxyID))
     {
         var currentRule = new ProxifierRule(enabled, ruleName)
         {
             Targets = targetAddress, Applications = _applications, Ports = _ports
         };
         currentRule.Action.Type     = actionType;
         currentRule.Action.ServerID = proxyID;
         this.innerRuleList.Add(currentRule);
         return(true);
     }
     else
     {
         return(false);
     }
 }
        public void Load(TextReader xmlReader)
        {
            XDocument innerXML = XDocument.Load(xmlReader);

            this.innerProfile.Clear();
            if (innerXML != null)
            {
                XElement ProxifierProfile = innerXML.Element("ProxifierProfile");
                if (ProxifierProfile != null)
                {
                    XElement currentE;
                    var      b = ProxifierProfile.Element("Options");
                    if (b != null)
                    {
                        currentE = b.Element("Resolve");
                        if (currentE != null)
                        {
                            this.AutoModeDetection = Parse(currentE.Element("AutoModeDetection").Attribute("enabled"), false);
                            this.ViaProxy          = Parse(currentE.Element("ViaProxy").Attribute("enabled"), false);
                            this.TryLocalDnsFirst  = Parse(currentE.Element("ViaProxy").Element("TryLocalDnsFirst").Attribute("enabled"), false);
                            this.ExclusionList     = Parse(currentE.Element("ExclusionList"), "%ComputerName%; localhost; *.local");
                        }
                        this.Encryption              = Parse <EncryptionMode>(b.Element("Encryption").Attribute("mode"), EncryptionMode.disabled);
                        this.HttpProxiesSupport      = Parse(b.Element("HttpProxiesSupport").Attribute("enabled"), false);
                        this.HandleDirectConnections = Parse(b.Element("HandleDirectConnections").Attribute("enabled"), false);
                        this.ConnectionLoopDetection = Parse(b.Element("ConnectionLoopDetection").Attribute("enabled"), true);
                        this.ProcessServices         = Parse(b.Element("ProcessServices").Attribute("enabled"), true);
                        this.ProcessOtherUsers       = Parse(b.Element("ProcessOtherUsers").Attribute("enabled"), true);
                    }

                    Dictionary <int, int> transition = new Dictionary <int, int>();

                    XElement             _ProxyList = ProxifierProfile.Element("ProxyList");
                    ProxifierProxyServer currentServer;

                    int newIDServer;

                    if (_ProxyList != null)
                    {
                        foreach (var c in _ProxyList.Elements())
                        {
                            newIDServer           = -1;
                            currentServer         = new ProxifierProxyServer(Parse(c.Attribute("id"), -1));
                            currentServer.Type    = Parse <ProxyType>(c.Attribute("type"), ProxyType.SOCKS5);
                            currentServer.Address = Parse(c.Element("Address"), string.Empty);
                            currentServer.Port    = Parse(c.Element("Port"), 1080);
                            currentServer.Options = Parse(c.Element("Options"), 48);
                            currentE = c.Element("Authentication");
                            if (currentE != null)
                            {
                                currentServer.Authentication = Parse(currentE.Attribute("enabled"), false);
                                currentServer.Username       = Parse(currentE.Element("Username"), string.Empty);
                                currentServer.Password       = Parse(currentE.Element("Password"), string.Empty);
                            }
                            newIDServer = this.innerProfile.AddProxy(currentServer);
                            if (currentServer.ID >= 100)
                            {
                                if (currentServer.ID != newIDServer)
                                {
                                    transition.Add(currentServer.ID, newIDServer);
                                }
                            }
                        }
                    }

                    XElement      _RuleList = ProxifierProfile.Element("RuleList");
                    ProxifierRule currentRule;
                    if (_RuleList != null)
                    {
                        foreach (var c in _RuleList.Elements())
                        {
                            currentRule              = new ProxifierRule(Parse(c.Attribute("enabled"), true));
                            currentRule.Name         = Parse(c.Element("ProxifierRule"), string.Empty);
                            currentRule.Ports        = Parse(c.Element("Ports"), string.Empty);
                            currentRule.Applications = Parse(c.Element("Applications"), string.Empty);
                            currentRule.Targets      = Parse(c.Element("Targets"), string.Empty);
                            currentRule.Action.Type  = Parse <ActionType>(c.Element("Action").Attribute("type"), ActionType.Direct);
                            if (currentRule.Action.Type != ActionType.Direct && currentRule.Action.Type != ActionType.Block)
                            {
                                newIDServer = Parse(c.Element("Action"), -1);
                                if (transition.ContainsKey(newIDServer))
                                {
                                    currentRule.Action.ServerID = transition[newIDServer];
                                }
                                else
                                {
                                    currentRule.Action.ServerID = newIDServer;
                                }
                            }
                            this.innerProfile.AddRule(currentRule);
                        }
                    }
                }
            }
        }
 public void AddProxy(ProxifierRule rule)
 {
     this.innerProfile.AddRule(rule);
 }