ConnectionHelper.swift 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // ConnectionHelper.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 31/03/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import SystemConfiguration
  9. import Foundation
  10. import UIKit
  11. class ConnectionHelper {
  12. class func isConnectedToNetwork() -> Bool {
  13. var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
  14. zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
  15. zeroAddress.sin_family = sa_family_t(AF_INET)
  16. let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
  17. $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
  18. SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
  19. }
  20. }
  21. var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
  22. if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
  23. return false
  24. }
  25. /* Only Working for WIFI
  26. let isReachable = flags == .reachable
  27. let needsConnection = flags == .connectionRequired
  28. return isReachable && !needsConnection
  29. */
  30. // Working for Cellular and WIFI
  31. let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
  32. let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
  33. let isConnect = (isReachable && !needsConnection)
  34. return isConnect
  35. }
  36. class func checkIpAddress(completion: @escaping (Bool) -> Void) {
  37. if let url = URL(string: "https://ipinfo.io/json") {
  38. let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
  39. if let error = error {
  40. print("Error when checking location: \(error.localizedDescription)")
  41. completion(false)
  42. return
  43. }
  44. if let data = data {
  45. do {
  46. let json = try JSONSerialization.jsonObject(with: data, options: [])
  47. if let dict = json as? [String: Any], let country = dict["country"] as? String {
  48. print("IP Country: \(country)")
  49. if country != "ID" {
  50. completion(false)
  51. } else {
  52. completion(true)
  53. }
  54. } else {
  55. completion(false)
  56. }
  57. } catch {
  58. print("Error when checking location: \(error.localizedDescription)")
  59. completion(false)
  60. }
  61. } else {
  62. completion(false)
  63. }
  64. }
  65. task.resume()
  66. } else {
  67. completion(false)
  68. }
  69. }
  70. }