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}