https://kotlinlang.org logo
#ios
Title
# ios
m

magnumrocha

04/08/2020, 8:00 AM
currently, I'm trying to translate this code to kotlin:
Copy code
public func isConnectedToNetwork() -> Bool {
    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 false
    }

    var flags: SCNetworkReachabilityFlags = []
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
        return false
    }
    if flags.isEmpty {
        return false
    }

    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)

    return (isReachable && !needsConnection)
}
f

fcosta

04/10/2020, 1:40 AM
I suggest you to take a look at the Objective-c documentation
m

magnumrocha

04/10/2020, 2:45 PM
After a long fight, I've made the translation to kotlin, and apparently it is working:
Copy code
fun isNetworkAvailable(): Boolean {
    memScoped {
        val zeroAddress = alloc<sockaddr_in>()
        zeroAddress.sin_len = sizeOf<sockaddr_in>().toUByte()
        zeroAddress.sin_family = AF_INET.toUByte()

        val defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(null, zeroAddress.ptr.reinterpret()) ?: return false

        var flags = allocArray<SCNetworkReachabilityFlagsVar>(10)

        if (!SCNetworkReachabilityGetFlags(defaultRouteReachability, flags)) {
            return false
        }

        val results = (0..9).map { flags[it] }.toTypedArray()

        val isReachable = results.contains(kSCNetworkFlagsReachable)
        val needsConnection = results.contains(kSCNetworkFlagsConnectionRequired)

        return isReachable && !needsConnection
    }
}
however, I am not 100% sure about this... I appreciate some validation/help 🙂
44 Views