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