Skip to main content

systemconfiguration/
raw_ffi.rs

1#![allow(non_camel_case_types, non_upper_case_globals)]
2
3use std::ffi::{c_char, c_void};
4
5pub use apple_cf::raw::{
6    Boolean, CFAllocatorRef, CFArrayRef, CFDataRef, CFDateRef, CFDictionaryRef,
7    CFPropertyListRef, CFRunLoopRef, CFStringRef,
8};
9pub type SCDynamicStoreRef = *const c_void;
10pub type SCNetworkInterfaceRef = *const c_void;
11pub type SCNetworkProtocolRef = *const c_void;
12pub type SCNetworkReachabilityRef = *const c_void;
13pub type SCNetworkServiceRef = *const c_void;
14pub type SCNetworkSetRef = *const c_void;
15pub type SCPreferencesRef = *const c_void;
16pub type SCNetworkReachabilityFlags = u32;
17
18pub const kSCNetworkReachabilityFlagsTransientConnection: SCNetworkReachabilityFlags = 1 << 0;
19pub const kSCNetworkReachabilityFlagsReachable: SCNetworkReachabilityFlags = 1 << 1;
20pub const kSCNetworkReachabilityFlagsConnectionRequired: SCNetworkReachabilityFlags = 1 << 2;
21pub const kSCNetworkReachabilityFlagsConnectionOnTraffic: SCNetworkReachabilityFlags = 1 << 3;
22pub const kSCNetworkReachabilityFlagsInterventionRequired: SCNetworkReachabilityFlags = 1 << 4;
23pub const kSCNetworkReachabilityFlagsConnectionOnDemand: SCNetworkReachabilityFlags = 1 << 5;
24pub const kSCNetworkReachabilityFlagsIsLocalAddress: SCNetworkReachabilityFlags = 1 << 16;
25pub const kSCNetworkReachabilityFlagsIsDirect: SCNetworkReachabilityFlags = 1 << 17;
26pub const kSCNetworkReachabilityFlagsIsWWAN: SCNetworkReachabilityFlags = 1 << 18;
27
28#[repr(C)]
29pub struct SCNetworkReachabilityContext {
30    pub version: isize,
31    pub info: *mut c_void,
32    pub retain: Option<unsafe extern "C" fn(info: *const c_void) -> *const c_void>,
33    pub release: Option<unsafe extern "C" fn(info: *const c_void)>,
34    pub copy_description: Option<unsafe extern "C" fn(info: *const c_void) -> CFStringRef>,
35}
36
37pub type SCNetworkReachabilityCallBack = Option<
38    unsafe extern "C" fn(
39        target: SCNetworkReachabilityRef,
40        flags: SCNetworkReachabilityFlags,
41        info: *mut c_void,
42    ),
43>;
44
45unsafe extern "C" {
46    pub static kCFBooleanTrue: *const c_void;
47    pub static kCFBooleanFalse: *const c_void;
48    pub static kCFRunLoopDefaultMode: *const c_void;
49
50    pub fn CFArrayCreate(
51        allocator: CFAllocatorRef,
52        values: *const *const c_void,
53        num_values: isize,
54        callbacks: *const c_void,
55    ) -> CFArrayRef;
56    pub fn CFArrayGetCount(the_array: CFArrayRef) -> isize;
57    pub fn CFArrayGetValueAtIndex(the_array: CFArrayRef, idx: isize) -> *const c_void;
58    pub fn CFCopyDescription(cf: *const c_void) -> CFStringRef;
59    pub fn CFRetain(cf: *const c_void) -> *const c_void;
60    pub fn CFRelease(cf: *const c_void);
61    pub fn CFRunLoopGetCurrent() -> CFRunLoopRef;
62    pub fn CFStringCreateWithCString(
63        allocator: CFAllocatorRef,
64        c_str: *const c_char,
65        encoding: u32,
66    ) -> CFStringRef;
67    pub fn CFStringGetLength(the_string: CFStringRef) -> isize;
68    pub fn CFStringGetMaximumSizeForEncoding(length: isize, encoding: u32) -> isize;
69    pub fn CFStringGetCString(
70        the_string: CFStringRef,
71        buffer: *mut c_char,
72        buffer_size: isize,
73        encoding: u32,
74    ) -> Boolean;
75
76    pub fn SCError() -> i32;
77    pub fn SCErrorString(status: i32) -> *const c_char;
78
79    pub fn SCDynamicStoreCreate(
80        allocator: CFAllocatorRef,
81        name: CFStringRef,
82        callout: *const c_void,
83        context: *const c_void,
84    ) -> SCDynamicStoreRef;
85    pub fn SCDynamicStoreCopyKeyList(store: SCDynamicStoreRef, pattern: CFStringRef) -> CFArrayRef;
86    pub fn SCDynamicStoreCopyValue(store: SCDynamicStoreRef, key: CFStringRef)
87        -> CFPropertyListRef;
88    pub fn SCDynamicStoreCopyMultiple(
89        store: SCDynamicStoreRef,
90        keys: CFArrayRef,
91        patterns: CFArrayRef,
92    ) -> CFDictionaryRef;
93    pub fn SCDynamicStoreAddValue(
94        store: SCDynamicStoreRef,
95        key: CFStringRef,
96        value: CFPropertyListRef,
97    ) -> Boolean;
98    pub fn SCDynamicStoreAddTemporaryValue(
99        store: SCDynamicStoreRef,
100        key: CFStringRef,
101        value: CFPropertyListRef,
102    ) -> Boolean;
103    pub fn SCDynamicStoreSetValue(
104        store: SCDynamicStoreRef,
105        key: CFStringRef,
106        value: CFPropertyListRef,
107    ) -> Boolean;
108    pub fn SCDynamicStoreRemoveValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
109    pub fn SCDynamicStoreNotifyValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
110    pub fn SCDynamicStoreSetNotificationKeys(
111        store: SCDynamicStoreRef,
112        keys: CFArrayRef,
113        patterns: CFArrayRef,
114    ) -> Boolean;
115    pub fn SCDynamicStoreCopyNotifiedKeys(store: SCDynamicStoreRef) -> CFArrayRef;
116    pub fn SCDynamicStoreCopyComputerName(
117        store: SCDynamicStoreRef,
118        encoding: *mut u32,
119    ) -> CFStringRef;
120    pub fn SCDynamicStoreCopyConsoleUser(
121        store: SCDynamicStoreRef,
122        uid: *mut libc::uid_t,
123        gid: *mut libc::gid_t,
124    ) -> CFStringRef;
125    pub fn SCDynamicStoreCopyLocalHostName(store: SCDynamicStoreRef) -> CFStringRef;
126    pub fn SCDynamicStoreCopyLocation(store: SCDynamicStoreRef) -> CFStringRef;
127    pub fn SCDynamicStoreCopyProxies(store: SCDynamicStoreRef) -> CFDictionaryRef;
128    pub fn SCDynamicStoreCopyDHCPInfo(
129        store: SCDynamicStoreRef,
130        service_id: CFStringRef,
131    ) -> CFDictionaryRef;
132    pub fn SCDynamicStoreKeyCreateNetworkGlobalEntity(
133        allocator: CFAllocatorRef,
134        domain: CFStringRef,
135        entity: CFStringRef,
136    ) -> CFStringRef;
137    pub fn SCDynamicStoreKeyCreateNetworkInterface(
138        allocator: CFAllocatorRef,
139        domain: CFStringRef,
140    ) -> CFStringRef;
141    pub fn SCDynamicStoreKeyCreateNetworkInterfaceEntity(
142        allocator: CFAllocatorRef,
143        domain: CFStringRef,
144        ifname: CFStringRef,
145        entity: CFStringRef,
146    ) -> CFStringRef;
147    pub fn SCDynamicStoreKeyCreateNetworkServiceEntity(
148        allocator: CFAllocatorRef,
149        domain: CFStringRef,
150        service_id: CFStringRef,
151        entity: CFStringRef,
152    ) -> CFStringRef;
153    pub fn SCDynamicStoreKeyCreateComputerName(allocator: CFAllocatorRef) -> CFStringRef;
154    pub fn SCDynamicStoreKeyCreateConsoleUser(allocator: CFAllocatorRef) -> CFStringRef;
155    pub fn SCDynamicStoreKeyCreateHostNames(allocator: CFAllocatorRef) -> CFStringRef;
156    pub fn SCDynamicStoreKeyCreateLocation(allocator: CFAllocatorRef) -> CFStringRef;
157    pub fn SCDynamicStoreKeyCreateProxies(allocator: CFAllocatorRef) -> CFStringRef;
158
159    pub fn SCPreferencesCreate(
160        allocator: CFAllocatorRef,
161        name: CFStringRef,
162        prefs_id: CFStringRef,
163    ) -> SCPreferencesRef;
164    pub fn SCPreferencesLock(prefs: SCPreferencesRef, wait: Boolean) -> Boolean;
165    pub fn SCPreferencesCommitChanges(prefs: SCPreferencesRef) -> Boolean;
166    pub fn SCPreferencesApplyChanges(prefs: SCPreferencesRef) -> Boolean;
167    pub fn SCPreferencesUnlock(prefs: SCPreferencesRef) -> Boolean;
168    pub fn SCPreferencesGetSignature(prefs: SCPreferencesRef) -> CFDataRef;
169    pub fn SCPreferencesCopyKeyList(prefs: SCPreferencesRef) -> CFArrayRef;
170    pub fn SCPreferencesGetValue(prefs: SCPreferencesRef, key: CFStringRef) -> CFPropertyListRef;
171    pub fn SCPreferencesAddValue(
172        prefs: SCPreferencesRef,
173        key: CFStringRef,
174        value: CFPropertyListRef,
175    ) -> Boolean;
176    pub fn SCPreferencesSetValue(
177        prefs: SCPreferencesRef,
178        key: CFStringRef,
179        value: CFPropertyListRef,
180    ) -> Boolean;
181    pub fn SCPreferencesRemoveValue(prefs: SCPreferencesRef, key: CFStringRef) -> Boolean;
182    pub fn SCPreferencesSynchronize(prefs: SCPreferencesRef);
183    pub fn SCPreferencesPathCreateUniqueChild(
184        prefs: SCPreferencesRef,
185        prefix: CFStringRef,
186    ) -> CFStringRef;
187    pub fn SCPreferencesPathGetValue(prefs: SCPreferencesRef, path: CFStringRef)
188        -> CFDictionaryRef;
189    pub fn SCPreferencesPathGetLink(prefs: SCPreferencesRef, path: CFStringRef) -> CFStringRef;
190    pub fn SCPreferencesPathSetValue(
191        prefs: SCPreferencesRef,
192        path: CFStringRef,
193        value: CFDictionaryRef,
194    ) -> Boolean;
195    pub fn SCPreferencesPathSetLink(
196        prefs: SCPreferencesRef,
197        path: CFStringRef,
198        link: CFStringRef,
199    ) -> Boolean;
200    pub fn SCPreferencesPathRemoveValue(prefs: SCPreferencesRef, path: CFStringRef) -> Boolean;
201    pub fn SCPreferencesSetComputerName(
202        prefs: SCPreferencesRef,
203        name: CFStringRef,
204        name_encoding: u32,
205    ) -> Boolean;
206    pub fn SCPreferencesSetLocalHostName(prefs: SCPreferencesRef, name: CFStringRef) -> Boolean;
207
208    pub fn SCNetworkInterfaceCopyAll() -> CFArrayRef;
209    pub fn SCNetworkInterfaceGetBSDName(interface: SCNetworkInterfaceRef) -> CFStringRef;
210    pub fn SCNetworkInterfaceGetConfiguration(interface: SCNetworkInterfaceRef) -> CFDictionaryRef;
211    pub fn SCNetworkInterfaceGetExtendedConfiguration(
212        interface: SCNetworkInterfaceRef,
213        extended_type: CFStringRef,
214    ) -> CFDictionaryRef;
215    pub fn SCNetworkInterfaceGetHardwareAddressString(
216        interface: SCNetworkInterfaceRef,
217    ) -> CFStringRef;
218    pub fn SCNetworkInterfaceGetInterface(
219        interface: SCNetworkInterfaceRef,
220    ) -> SCNetworkInterfaceRef;
221    pub fn SCNetworkInterfaceGetInterfaceType(interface: SCNetworkInterfaceRef) -> CFStringRef;
222    pub fn SCNetworkInterfaceGetLocalizedDisplayName(
223        interface: SCNetworkInterfaceRef,
224    ) -> CFStringRef;
225    pub fn SCNetworkInterfaceGetSupportedInterfaceTypes(
226        interface: SCNetworkInterfaceRef,
227    ) -> CFArrayRef;
228    pub fn SCNetworkInterfaceGetSupportedProtocolTypes(
229        interface: SCNetworkInterfaceRef,
230    ) -> CFArrayRef;
231    pub fn SCNetworkInterfaceCreateWithInterface(
232        interface: SCNetworkInterfaceRef,
233        interface_type: CFStringRef,
234    ) -> SCNetworkInterfaceRef;
235    pub fn SCNetworkInterfaceCopyMTU(
236        interface: SCNetworkInterfaceRef,
237        current: *mut i32,
238        minimum: *mut i32,
239        maximum: *mut i32,
240    ) -> Boolean;
241    pub fn SCNetworkInterfaceForceConfigurationRefresh(interface: SCNetworkInterfaceRef)
242        -> Boolean;
243
244    pub fn SCNetworkProtocolGetConfiguration(protocol: SCNetworkProtocolRef) -> CFDictionaryRef;
245    pub fn SCNetworkProtocolGetEnabled(protocol: SCNetworkProtocolRef) -> Boolean;
246    pub fn SCNetworkProtocolGetProtocolType(protocol: SCNetworkProtocolRef) -> CFStringRef;
247    pub fn SCNetworkProtocolSetConfiguration(
248        protocol: SCNetworkProtocolRef,
249        config: CFDictionaryRef,
250    ) -> Boolean;
251    pub fn SCNetworkProtocolSetEnabled(protocol: SCNetworkProtocolRef, enabled: Boolean)
252        -> Boolean;
253
254    pub fn SCNetworkServiceCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
255    pub fn SCNetworkServiceCopyProtocols(service: SCNetworkServiceRef) -> CFArrayRef;
256    pub fn SCNetworkServiceCopyProtocol(
257        service: SCNetworkServiceRef,
258        protocol_type: CFStringRef,
259    ) -> SCNetworkProtocolRef;
260    pub fn SCNetworkServiceAddProtocolType(
261        service: SCNetworkServiceRef,
262        protocol_type: CFStringRef,
263    ) -> Boolean;
264    pub fn SCNetworkServiceEstablishDefaultConfiguration(service: SCNetworkServiceRef) -> Boolean;
265    pub fn SCNetworkServiceGetEnabled(service: SCNetworkServiceRef) -> Boolean;
266    pub fn SCNetworkServiceGetInterface(service: SCNetworkServiceRef) -> SCNetworkInterfaceRef;
267    pub fn SCNetworkServiceGetName(service: SCNetworkServiceRef) -> CFStringRef;
268    pub fn SCNetworkServiceGetServiceID(service: SCNetworkServiceRef) -> CFStringRef;
269    pub fn SCNetworkServiceRemove(service: SCNetworkServiceRef) -> Boolean;
270    pub fn SCNetworkServiceRemoveProtocolType(
271        service: SCNetworkServiceRef,
272        protocol_type: CFStringRef,
273    ) -> Boolean;
274    pub fn SCNetworkServiceSetEnabled(service: SCNetworkServiceRef, enabled: Boolean) -> Boolean;
275    pub fn SCNetworkServiceSetName(service: SCNetworkServiceRef, name: CFStringRef) -> Boolean;
276
277    pub fn SCNetworkSetCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
278    pub fn SCNetworkSetCopyCurrent(prefs: SCPreferencesRef) -> SCNetworkSetRef;
279    pub fn SCNetworkSetCopyServices(set: SCNetworkSetRef) -> CFArrayRef;
280    pub fn SCNetworkSetGetName(set: SCNetworkSetRef) -> CFStringRef;
281    pub fn SCNetworkSetGetSetID(set: SCNetworkSetRef) -> CFStringRef;
282    pub fn SCNetworkSetGetServiceOrder(set: SCNetworkSetRef) -> CFArrayRef;
283    pub fn SCNetworkSetContainsInterface(
284        set: SCNetworkSetRef,
285        interface: SCNetworkInterfaceRef,
286    ) -> Boolean;
287    pub fn SCNetworkSetAddService(set: SCNetworkSetRef, service: SCNetworkServiceRef) -> Boolean;
288    pub fn SCNetworkSetRemove(set: SCNetworkSetRef) -> Boolean;
289    pub fn SCNetworkSetRemoveService(set: SCNetworkSetRef, service: SCNetworkServiceRef)
290        -> Boolean;
291    pub fn SCNetworkSetSetCurrent(set: SCNetworkSetRef) -> Boolean;
292    pub fn SCNetworkSetSetName(set: SCNetworkSetRef, name: CFStringRef) -> Boolean;
293    pub fn SCNetworkSetSetServiceOrder(set: SCNetworkSetRef, order: CFArrayRef) -> Boolean;
294
295    pub fn SCNetworkReachabilityCreateWithAddress(
296        allocator: CFAllocatorRef,
297        address: *const libc::sockaddr,
298    ) -> SCNetworkReachabilityRef;
299    pub fn SCNetworkReachabilityCreateWithAddressPair(
300        allocator: CFAllocatorRef,
301        local_address: *const libc::sockaddr,
302        remote_address: *const libc::sockaddr,
303    ) -> SCNetworkReachabilityRef;
304    pub fn SCNetworkReachabilityCreateWithName(
305        allocator: CFAllocatorRef,
306        nodename: *const c_char,
307    ) -> SCNetworkReachabilityRef;
308    pub fn SCNetworkReachabilityGetFlags(
309        target: SCNetworkReachabilityRef,
310        flags: *mut SCNetworkReachabilityFlags,
311    ) -> Boolean;
312    pub fn SCNetworkReachabilitySetCallback(
313        target: SCNetworkReachabilityRef,
314        callback: SCNetworkReachabilityCallBack,
315        context: *const SCNetworkReachabilityContext,
316    ) -> Boolean;
317    pub fn SCNetworkReachabilityScheduleWithRunLoop(
318        target: SCNetworkReachabilityRef,
319        run_loop: CFRunLoopRef,
320        run_loop_mode: CFStringRef,
321    ) -> Boolean;
322    pub fn SCNetworkReachabilityUnscheduleFromRunLoop(
323        target: SCNetworkReachabilityRef,
324        run_loop: CFRunLoopRef,
325        run_loop_mode: CFStringRef,
326    ) -> Boolean;
327
328    pub fn CNSetSupportedSSIDs(ssid_array: CFArrayRef) -> Boolean;
329    pub fn CNMarkPortalOnline(interface_name: CFStringRef) -> Boolean;
330    pub fn CNMarkPortalOffline(interface_name: CFStringRef) -> Boolean;
331    pub fn CNCopySupportedInterfaces() -> CFArrayRef;
332}