mirror of
https://github.com/realm/SwiftLint.git
synced 2026-05-07 20:12:49 +00:00
a6c4fd98bc
Ideally, SwiftLintCore would some day only contain components that are needed to define rules. Consequently, it would be the only bundle required to import for (external) rule development.
45 lines
1.3 KiB
Swift
45 lines
1.3 KiB
Swift
#if !os(Linux)
|
|
import SystemConfiguration
|
|
#endif
|
|
|
|
/// Helper enum providing the static var `connectivityStatus`
|
|
enum Reachability {
|
|
enum ConnectivityStatus {
|
|
case connected, disconnected, unknown
|
|
}
|
|
|
|
/// Returns whether the device is connected to a network, if known.
|
|
/// On Linux, this always evaluates to `nil`.
|
|
static var connectivityStatus: ConnectivityStatus {
|
|
#if os(Linux)
|
|
return .unknown
|
|
#else
|
|
var zeroAddress = sockaddr_in()
|
|
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
|
|
zeroAddress.sin_family = sa_family_t(AF_INET)
|
|
|
|
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
|
|
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
|
|
SCNetworkReachabilityCreateWithAddress(nil, $0)
|
|
}
|
|
}) else {
|
|
return .unknown
|
|
}
|
|
|
|
var flags: SCNetworkReachabilityFlags = []
|
|
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
|
|
return .unknown
|
|
}
|
|
|
|
if flags.isEmpty {
|
|
return .disconnected
|
|
}
|
|
|
|
let isReachable = flags.contains(.reachable)
|
|
let needsConnection = flags.contains(.connectionRequired)
|
|
|
|
return (isReachable && !needsConnection) ? .connected : .disconnected
|
|
#endif
|
|
}
|
|
}
|