Skip to main content

systemconfiguration/
captive_network.rs

1use 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(
17                values.as_ptr(),
18                values.count(),
19            )
20        };
21        bridge::bool_result("sc_captive_network_set_supported_ssids", ok)
22    }
23
24    pub fn mark_portal_online(interface_name: &str) -> Result<()> {
25        let interface_name =
26            bridge::cstring(interface_name, "sc_captive_network_mark_portal_online")?;
27        let ok = unsafe {
28            ffi::captive_network::sc_captive_network_mark_portal_online(interface_name.as_ptr())
29        };
30        bridge::bool_result("sc_captive_network_mark_portal_online", ok)
31    }
32
33    pub fn mark_portal_offline(interface_name: &str) -> Result<()> {
34        let interface_name =
35            bridge::cstring(interface_name, "sc_captive_network_mark_portal_offline")?;
36        let ok = unsafe {
37            ffi::captive_network::sc_captive_network_mark_portal_offline(interface_name.as_ptr())
38        };
39        bridge::bool_result("sc_captive_network_mark_portal_offline", ok)
40    }
41}