systemconfiguration/
captive_network.rs1use crate::{bridge, error::Result, ffi};
2
3#[derive(Clone, Copy, Debug, Default)]
4pub struct CaptiveNetwork;
5
6impl CaptiveNetwork {
7 pub fn supported_interfaces() -> Vec<String> {
8 bridge::take_string_array(unsafe {
9 ffi::captive_network::sc_captive_network_copy_supported_interfaces()
10 })
11 }
12
13 pub fn set_supported_ssids<S: AsRef<str>>(values: &[S]) -> Result<()> {
14 let values = bridge::CStringArray::new(values, "sc_captive_network_set_supported_ssids")?;
15 let ok = unsafe {
16 ffi::captive_network::sc_captive_network_set_supported_ssids(values.as_ptr(), values.count())
17 };
18 bridge::bool_result("sc_captive_network_set_supported_ssids", ok)
19 }
20
21 pub fn mark_portal_online(interface_name: &str) -> Result<()> {
22 let interface_name = bridge::cstring(interface_name, "sc_captive_network_mark_portal_online")?;
23 let ok = unsafe {
24 ffi::captive_network::sc_captive_network_mark_portal_online(interface_name.as_ptr())
25 };
26 bridge::bool_result("sc_captive_network_mark_portal_online", ok)
27 }
28
29 pub fn mark_portal_offline(interface_name: &str) -> Result<()> {
30 let interface_name = bridge::cstring(interface_name, "sc_captive_network_mark_portal_offline")?;
31 let ok = unsafe {
32 ffi::captive_network::sc_captive_network_mark_portal_offline(interface_name.as_ptr())
33 };
34 bridge::bool_result("sc_captive_network_mark_portal_offline", ok)
35 }
36}