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)
92 -> CFPropertyListRef;
93 pub fn SCDynamicStoreCopyMultiple(
94 store: SCDynamicStoreRef,
95 keys: CFArrayRef,
96 patterns: CFArrayRef,
97 ) -> CFDictionaryRef;
98 pub fn SCDynamicStoreAddValue(
99 store: SCDynamicStoreRef,
100 key: CFStringRef,
101 value: CFPropertyListRef,
102 ) -> Boolean;
103 pub fn SCDynamicStoreAddTemporaryValue(
104 store: SCDynamicStoreRef,
105 key: CFStringRef,
106 value: CFPropertyListRef,
107 ) -> Boolean;
108 pub fn SCDynamicStoreSetValue(
109 store: SCDynamicStoreRef,
110 key: CFStringRef,
111 value: CFPropertyListRef,
112 ) -> Boolean;
113 pub fn SCDynamicStoreRemoveValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
114 pub fn SCDynamicStoreNotifyValue(store: SCDynamicStoreRef, key: CFStringRef) -> Boolean;
115 pub fn SCDynamicStoreSetNotificationKeys(
116 store: SCDynamicStoreRef,
117 keys: CFArrayRef,
118 patterns: CFArrayRef,
119 ) -> Boolean;
120 pub fn SCDynamicStoreCopyNotifiedKeys(store: SCDynamicStoreRef) -> CFArrayRef;
121 pub fn SCDynamicStoreCopyComputerName(
122 store: SCDynamicStoreRef,
123 encoding: *mut u32,
124 ) -> CFStringRef;
125 pub fn SCDynamicStoreCopyConsoleUser(
126 store: SCDynamicStoreRef,
127 uid: *mut libc::uid_t,
128 gid: *mut libc::gid_t,
129 ) -> CFStringRef;
130 pub fn SCDynamicStoreCopyLocalHostName(store: SCDynamicStoreRef) -> CFStringRef;
131 pub fn SCDynamicStoreCopyLocation(store: SCDynamicStoreRef) -> CFStringRef;
132 pub fn SCDynamicStoreCopyProxies(store: SCDynamicStoreRef) -> CFDictionaryRef;
133 pub fn SCDynamicStoreCopyDHCPInfo(
134 store: SCDynamicStoreRef,
135 service_id: CFStringRef,
136 ) -> CFDictionaryRef;
137 pub fn SCDynamicStoreKeyCreateNetworkGlobalEntity(
138 allocator: CFAllocatorRef,
139 domain: CFStringRef,
140 entity: CFStringRef,
141 ) -> CFStringRef;
142 pub fn SCDynamicStoreKeyCreateNetworkInterface(
143 allocator: CFAllocatorRef,
144 domain: CFStringRef,
145 ) -> CFStringRef;
146 pub fn SCDynamicStoreKeyCreateNetworkInterfaceEntity(
147 allocator: CFAllocatorRef,
148 domain: CFStringRef,
149 ifname: CFStringRef,
150 entity: CFStringRef,
151 ) -> CFStringRef;
152 pub fn SCDynamicStoreKeyCreateNetworkServiceEntity(
153 allocator: CFAllocatorRef,
154 domain: CFStringRef,
155 service_id: CFStringRef,
156 entity: CFStringRef,
157 ) -> CFStringRef;
158 pub fn SCDynamicStoreKeyCreateComputerName(allocator: CFAllocatorRef) -> CFStringRef;
159 pub fn SCDynamicStoreKeyCreateConsoleUser(allocator: CFAllocatorRef) -> CFStringRef;
160 pub fn SCDynamicStoreKeyCreateHostNames(allocator: CFAllocatorRef) -> CFStringRef;
161 pub fn SCDynamicStoreKeyCreateLocation(allocator: CFAllocatorRef) -> CFStringRef;
162 pub fn SCDynamicStoreKeyCreateProxies(allocator: CFAllocatorRef) -> CFStringRef;
163
164 pub fn SCPreferencesCreate(
165 allocator: CFAllocatorRef,
166 name: CFStringRef,
167 prefs_id: CFStringRef,
168 ) -> SCPreferencesRef;
169 pub fn SCPreferencesLock(prefs: SCPreferencesRef, wait: Boolean) -> Boolean;
170 pub fn SCPreferencesCommitChanges(prefs: SCPreferencesRef) -> Boolean;
171 pub fn SCPreferencesApplyChanges(prefs: SCPreferencesRef) -> Boolean;
172 pub fn SCPreferencesUnlock(prefs: SCPreferencesRef) -> Boolean;
173 pub fn SCPreferencesGetSignature(prefs: SCPreferencesRef) -> CFDataRef;
174 pub fn SCPreferencesCopyKeyList(prefs: SCPreferencesRef) -> CFArrayRef;
175 pub fn SCPreferencesGetValue(prefs: SCPreferencesRef, key: CFStringRef) -> CFPropertyListRef;
176 pub fn SCPreferencesAddValue(
177 prefs: SCPreferencesRef,
178 key: CFStringRef,
179 value: CFPropertyListRef,
180 ) -> Boolean;
181 pub fn SCPreferencesSetValue(
182 prefs: SCPreferencesRef,
183 key: CFStringRef,
184 value: CFPropertyListRef,
185 ) -> Boolean;
186 pub fn SCPreferencesRemoveValue(prefs: SCPreferencesRef, key: CFStringRef) -> Boolean;
187 pub fn SCPreferencesSynchronize(prefs: SCPreferencesRef);
188 pub fn SCPreferencesPathCreateUniqueChild(
189 prefs: SCPreferencesRef,
190 prefix: CFStringRef,
191 ) -> CFStringRef;
192 pub fn SCPreferencesPathGetValue(prefs: SCPreferencesRef, path: CFStringRef)
193 -> CFDictionaryRef;
194 pub fn SCPreferencesPathGetLink(prefs: SCPreferencesRef, path: CFStringRef) -> CFStringRef;
195 pub fn SCPreferencesPathSetValue(
196 prefs: SCPreferencesRef,
197 path: CFStringRef,
198 value: CFDictionaryRef,
199 ) -> Boolean;
200 pub fn SCPreferencesPathSetLink(
201 prefs: SCPreferencesRef,
202 path: CFStringRef,
203 link: CFStringRef,
204 ) -> Boolean;
205 pub fn SCPreferencesPathRemoveValue(prefs: SCPreferencesRef, path: CFStringRef) -> Boolean;
206 pub fn SCPreferencesSetComputerName(
207 prefs: SCPreferencesRef,
208 name: CFStringRef,
209 name_encoding: u32,
210 ) -> Boolean;
211 pub fn SCPreferencesSetLocalHostName(prefs: SCPreferencesRef, name: CFStringRef) -> Boolean;
212
213 pub fn SCNetworkInterfaceCopyAll() -> CFArrayRef;
214 pub fn SCNetworkInterfaceGetBSDName(interface: SCNetworkInterfaceRef) -> CFStringRef;
215 pub fn SCNetworkInterfaceGetConfiguration(interface: SCNetworkInterfaceRef) -> CFDictionaryRef;
216 pub fn SCNetworkInterfaceGetExtendedConfiguration(
217 interface: SCNetworkInterfaceRef,
218 extended_type: CFStringRef,
219 ) -> CFDictionaryRef;
220 pub fn SCNetworkInterfaceGetHardwareAddressString(
221 interface: SCNetworkInterfaceRef,
222 ) -> CFStringRef;
223 pub fn SCNetworkInterfaceGetInterface(
224 interface: SCNetworkInterfaceRef,
225 ) -> SCNetworkInterfaceRef;
226 pub fn SCNetworkInterfaceGetInterfaceType(interface: SCNetworkInterfaceRef) -> CFStringRef;
227 pub fn SCNetworkInterfaceGetLocalizedDisplayName(
228 interface: SCNetworkInterfaceRef,
229 ) -> CFStringRef;
230 pub fn SCNetworkInterfaceGetSupportedInterfaceTypes(
231 interface: SCNetworkInterfaceRef,
232 ) -> CFArrayRef;
233 pub fn SCNetworkInterfaceGetSupportedProtocolTypes(
234 interface: SCNetworkInterfaceRef,
235 ) -> CFArrayRef;
236 pub fn SCNetworkInterfaceCreateWithInterface(
237 interface: SCNetworkInterfaceRef,
238 interface_type: CFStringRef,
239 ) -> SCNetworkInterfaceRef;
240 pub fn SCNetworkInterfaceCopyMTU(
241 interface: SCNetworkInterfaceRef,
242 current: *mut i32,
243 minimum: *mut i32,
244 maximum: *mut i32,
245 ) -> Boolean;
246 pub fn SCNetworkInterfaceForceConfigurationRefresh(interface: SCNetworkInterfaceRef)
247 -> Boolean;
248
249 pub fn SCNetworkProtocolGetConfiguration(protocol: SCNetworkProtocolRef) -> CFDictionaryRef;
250 pub fn SCNetworkProtocolGetEnabled(protocol: SCNetworkProtocolRef) -> Boolean;
251 pub fn SCNetworkProtocolGetProtocolType(protocol: SCNetworkProtocolRef) -> CFStringRef;
252 pub fn SCNetworkProtocolSetConfiguration(
253 protocol: SCNetworkProtocolRef,
254 config: CFDictionaryRef,
255 ) -> Boolean;
256 pub fn SCNetworkProtocolSetEnabled(protocol: SCNetworkProtocolRef, enabled: Boolean)
257 -> Boolean;
258
259 pub fn SCNetworkServiceCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
260 pub fn SCNetworkServiceCopyProtocols(service: SCNetworkServiceRef) -> CFArrayRef;
261 pub fn SCNetworkServiceCopyProtocol(
262 service: SCNetworkServiceRef,
263 protocol_type: CFStringRef,
264 ) -> SCNetworkProtocolRef;
265 pub fn SCNetworkServiceAddProtocolType(
266 service: SCNetworkServiceRef,
267 protocol_type: CFStringRef,
268 ) -> Boolean;
269 pub fn SCNetworkServiceEstablishDefaultConfiguration(service: SCNetworkServiceRef) -> Boolean;
270 pub fn SCNetworkServiceGetEnabled(service: SCNetworkServiceRef) -> Boolean;
271 pub fn SCNetworkServiceGetInterface(service: SCNetworkServiceRef) -> SCNetworkInterfaceRef;
272 pub fn SCNetworkServiceGetName(service: SCNetworkServiceRef) -> CFStringRef;
273 pub fn SCNetworkServiceGetServiceID(service: SCNetworkServiceRef) -> CFStringRef;
274 pub fn SCNetworkServiceRemove(service: SCNetworkServiceRef) -> Boolean;
275 pub fn SCNetworkServiceRemoveProtocolType(
276 service: SCNetworkServiceRef,
277 protocol_type: CFStringRef,
278 ) -> Boolean;
279 pub fn SCNetworkServiceSetEnabled(service: SCNetworkServiceRef, enabled: Boolean) -> Boolean;
280 pub fn SCNetworkServiceSetName(service: SCNetworkServiceRef, name: CFStringRef) -> Boolean;
281
282 pub fn SCNetworkSetCopyAll(prefs: SCPreferencesRef) -> CFArrayRef;
283 pub fn SCNetworkSetCopyCurrent(prefs: SCPreferencesRef) -> SCNetworkSetRef;
284 pub fn SCNetworkSetCopyServices(set: SCNetworkSetRef) -> CFArrayRef;
285 pub fn SCNetworkSetGetName(set: SCNetworkSetRef) -> CFStringRef;
286 pub fn SCNetworkSetGetSetID(set: SCNetworkSetRef) -> CFStringRef;
287 pub fn SCNetworkSetGetServiceOrder(set: SCNetworkSetRef) -> CFArrayRef;
288 pub fn SCNetworkSetContainsInterface(
289 set: SCNetworkSetRef,
290 interface: SCNetworkInterfaceRef,
291 ) -> Boolean;
292 pub fn SCNetworkSetAddService(set: SCNetworkSetRef, service: SCNetworkServiceRef) -> Boolean;
293 pub fn SCNetworkSetRemove(set: SCNetworkSetRef) -> Boolean;
294 pub fn SCNetworkSetRemoveService(set: SCNetworkSetRef, service: SCNetworkServiceRef)
295 -> Boolean;
296 pub fn SCNetworkSetSetCurrent(set: SCNetworkSetRef) -> Boolean;
297 pub fn SCNetworkSetSetName(set: SCNetworkSetRef, name: CFStringRef) -> Boolean;
298 pub fn SCNetworkSetSetServiceOrder(set: SCNetworkSetRef, order: CFArrayRef) -> Boolean;
299
300 pub fn SCNetworkReachabilityCreateWithAddress(
301 allocator: CFAllocatorRef,
302 address: *const libc::sockaddr,
303 ) -> SCNetworkReachabilityRef;
304 pub fn SCNetworkReachabilityCreateWithAddressPair(
305 allocator: CFAllocatorRef,
306 local_address: *const libc::sockaddr,
307 remote_address: *const libc::sockaddr,
308 ) -> SCNetworkReachabilityRef;
309 pub fn SCNetworkReachabilityCreateWithName(
310 allocator: CFAllocatorRef,
311 nodename: *const c_char,
312 ) -> SCNetworkReachabilityRef;
313 pub fn SCNetworkReachabilityGetFlags(
314 target: SCNetworkReachabilityRef,
315 flags: *mut SCNetworkReachabilityFlags,
316 ) -> Boolean;
317 pub fn SCNetworkReachabilitySetCallback(
318 target: SCNetworkReachabilityRef,
319 callback: SCNetworkReachabilityCallBack,
320 context: *const SCNetworkReachabilityContext,
321 ) -> Boolean;
322 pub fn SCNetworkReachabilityScheduleWithRunLoop(
323 target: SCNetworkReachabilityRef,
324 run_loop: CFRunLoopRef,
325 run_loop_mode: CFStringRef,
326 ) -> Boolean;
327 pub fn SCNetworkReachabilityUnscheduleFromRunLoop(
328 target: SCNetworkReachabilityRef,
329 run_loop: CFRunLoopRef,
330 run_loop_mode: CFStringRef,
331 ) -> Boolean;
332
333 pub fn CNSetSupportedSSIDs(ssid_array: CFArrayRef) -> Boolean;
334 pub fn CNMarkPortalOnline(interface_name: CFStringRef) -> Boolean;
335 pub fn CNMarkPortalOffline(interface_name: CFStringRef) -> Boolean;
336 pub fn CNCopySupportedInterfaces() -> CFArrayRef;
337}