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