(&self, selector: &FirewallRule)
| 102 | } |
| 103 | |
| 104 | fn find_by_selector(&self, selector: &FirewallRule) -> Result<Option<INetFwRule>, FirewallError> { |
| 105 | // HRESULT 0x80070002 is HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), returned when the |
| 106 | // rule name does not match any existing rule. |
| 107 | const HRESULT_FILE_NOT_FOUND: HRESULT = HRESULT(0x80070002_u32 as i32); |
| 108 | |
| 109 | let Some(lookup_name) = selector.selector_name() else { |
| 110 | return Ok(None); |
| 111 | }; |
| 112 | |
| 113 | match unsafe { self.rules.Item(&BSTR::from(lookup_name)) } { |
| 114 | Ok(rule) => Ok(Some(rule)), |
| 115 | Err(e) if e.code() == HRESULT_FILE_NOT_FOUND => Ok(None), |
| 116 | Err(e) => Err(t!("firewall.ruleLookupFailed", name = lookup_name, error = e.to_string()).to_string().into()), |
| 117 | } |
| 118 | } |
| 119 | |
| 120 | fn remove_rule(&self, rule_name: &str) -> Result<(), FirewallError> { |
| 121 | unsafe { self.rules.Remove(&BSTR::from(rule_name)) } |
no test coverage detected