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}