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); } }
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); } }
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; } }
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; }