コード例 #1
0
 public void RemoveRule(string code)
 {
     lock (m_rules)
     {
         if (m_rules.ContainsKey(code) == false)
         {
             return;
         }
         //throw new Exception("Unexpected: NetLock WFP rule '" + code + "' doesn't exists");
         WfpItem item = m_rules[code];
         m_rules.Remove(code);
         Wfp.RemoveItem(item);
     }
 }
コード例 #2
0
ファイル: Wfp.cs プロジェクト: jn7163/airvpn-client
        public static WfpItem AddItem(string code, XmlElement xml)
        {
            lock (Items)
            {
                if (Items.ContainsKey(code))
                {
                    throw new Exception("Windows WFP, unexpected: Rule '" + code + "' already exists");
                }

                WfpItem item = new WfpItem();
                item.Code = code;

                List <string> layers = new List <string>();

                if (xml.GetAttribute("layer") == "all")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v4");
                    layers.Add("ale_flow_established_v6");
                }
                else if (xml.GetAttribute("layer") == "ipv4")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_flow_established_v4");
                }
                else if (xml.GetAttribute("layer") == "ipv6")
                {
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v6");
                }
                else
                {
                    layers.Add(xml.GetAttribute("layer"));
                }

                if (xml.HasAttribute("weight") == false)
                {
                    xml.SetAttribute("weight", "auto");
                }

                foreach (string layer in layers)
                {
                    XmlElement xmlClone = xml.CloneNode(true) as XmlElement;
                    xmlClone.SetAttribute("layer", layer);
                    string xmlStr = xmlClone.OuterXml;

                    UInt64 id1 = LibPocketFirewallAddRule(xmlStr);

                    if (id1 == 0)
                    {
                        throw new Exception(Messages.Format(Messages.WfpRuleAddFail, LibPocketFirewallGetLastError2()));
                    }
                    else
                    {
                        item.FirewallIds.Add(id1);
                    }
                }

                Items[item.Code] = item;

                return(item);
            }
        }
コード例 #3
0
ファイル: Wfp.cs プロジェクト: Clodo76/airvpn-client
        public static WfpItem AddItem(string code, XmlElement xml)
        {
            lock(Items)
            {
                if (Items.ContainsKey(code))
                    throw new Exception("Windows WFP, unexpected: Rule '" + code + "' already exists");

                WfpItem item = new WfpItem();
                item.Code = code;

                List<string> layers = new List<string>();

                if (xml.GetAttribute("layer") == "all")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v4");
                    layers.Add("ale_flow_established_v6");
                }
                else if (xml.GetAttribute("layer") == "ipv4")
                {
                    layers.Add("ale_auth_recv_accept_v4");
                    layers.Add("ale_auth_connect_v4");
                    layers.Add("ale_flow_established_v4");
                }
                else if (xml.GetAttribute("layer") == "ipv6")
                {
                    layers.Add("ale_auth_recv_accept_v6");
                    layers.Add("ale_auth_connect_v6");
                    layers.Add("ale_flow_established_v6");
                }
                else
                    layers.Add(xml.GetAttribute("layer"));

                if (xml.HasAttribute("weight") == false)
                {
                    xml.SetAttribute("weight", "1000");
                }

                foreach (string layer in layers)
                {
                    XmlElement xmlClone = xml.CloneNode(true) as XmlElement;
                    xmlClone.SetAttribute("layer", layer);
                    string xmlStr = xmlClone.OuterXml;

                    UInt64 id1 = LibPocketFirewallAddRule(xmlStr);

                    if (id1 == 0)
                    {
                        throw new Exception(MessagesFormatter.Format(Messages.WfpRuleAddFail, LibPocketFirewallGetLastError2(), xmlStr));
                    }
                    else
                    {
                        // Only used for debugging WFP issue with rules in some system
                        // Engine.Instance.Logs.Log(LogType.Verbose, Messages.Format(Messages.WfpRuleAddSuccess, xmlStr));
                        item.FirewallIds.Add(id1);
                    }
                }

                Items[item.Code] = item;

                return item;
            }
        }
コード例 #4
0
ファイル: Wfp.cs プロジェクト: Clodo76/airvpn-client
        public static bool RemoveItem(WfpItem item)
        {
            lock(Items)
            {
                if (Items.ContainsValue(item) == false)
                    throw new Exception("Windows WFP, unexpected: Rule '" + item.Code + "' not exists");

                foreach (UInt64 id in item.FirewallIds)
                {
                    bool result = RemoveItemId(id);
                    if (result == false)
                        throw new Exception(MessagesFormatter.Format(Messages.WfpRuleRemoveFail, LibPocketFirewallGetLastError2()));
                }

                Items.Remove(item.Code);

                if (Items.Count == 0)
                {

                }
            }

            return true;
        }