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}