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(
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}