added iOS source code
[wl-app.git] / iOS / Pods / Realm / Realm / ObjectStore / src / sync / impl / apple / system_configuration.cpp
diff --git a/iOS/Pods/Realm/Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp b/iOS/Pods/Realm/Realm/ObjectStore/src/sync/impl/apple/system_configuration.cpp
new file mode 100644 (file)
index 0000000..6c4c127
--- /dev/null
@@ -0,0 +1,98 @@
+////////////////////////////////////////////////////////////////////////////
+//
+// Copyright 2017 Realm Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////
+
+#include "sync/impl/apple/system_configuration.hpp"
+
+#if NETWORK_REACHABILITY_AVAILABLE
+
+#include <asl.h>
+#include "dlfcn.h"
+
+using namespace realm;
+using namespace realm::_impl;
+
+SystemConfiguration::SystemConfiguration()
+{
+    m_framework_handle = dlopen("/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration", RTLD_LAZY);
+
+    if (m_framework_handle) {
+        m_create_with_name = (create_with_name_t)dlsym(m_framework_handle, "SCNetworkReachabilityCreateWithName");
+        m_create_with_address = (create_with_address_t)dlsym(m_framework_handle, "SCNetworkReachabilityCreateWithAddress");
+        m_set_dispatch_queue = (set_dispatch_queue_t)dlsym(m_framework_handle, "SCNetworkReachabilitySetDispatchQueue");
+        m_set_callback = (set_callback_t)dlsym(m_framework_handle, "SCNetworkReachabilitySetCallback");
+        m_get_flags = (get_flags_t)dlsym(m_framework_handle, "SCNetworkReachabilityGetFlags");
+    } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+        asl_log(nullptr, nullptr, ASL_LEVEL_WARNING, "network reachability is not available");
+#pragma clang diagnostic pop
+    }
+}
+
+SystemConfiguration& SystemConfiguration::shared()
+{
+    static SystemConfiguration system_configuration;
+
+    return system_configuration;
+}
+
+SCNetworkReachabilityRef SystemConfiguration::network_reachability_create_with_name(CFAllocatorRef allocator,
+                                                                                    const char *hostname)
+{
+    if (m_create_with_name)
+        return m_create_with_name(allocator, hostname);
+
+    return nullptr;
+}
+
+SCNetworkReachabilityRef SystemConfiguration::network_reachability_create_with_address(CFAllocatorRef allocator,
+                                                                                       const sockaddr *address)
+{
+    if (m_create_with_address)
+        return m_create_with_address(allocator, address);
+
+    return nullptr;
+}
+
+bool SystemConfiguration::network_reachability_set_dispatch_queue(SCNetworkReachabilityRef target, dispatch_queue_t queue)
+{
+    if (m_set_dispatch_queue)
+        return m_set_dispatch_queue(target, queue);
+
+    return false;
+}
+
+bool SystemConfiguration::network_reachability_set_callback(SCNetworkReachabilityRef target,
+                                                            SCNetworkReachabilityCallBack callback,
+                                                            SCNetworkReachabilityContext *context)
+{
+    if (m_set_callback)
+        return m_set_callback(target, callback, context);
+
+    return false;
+}
+
+bool SystemConfiguration::network_reachability_get_flags(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags *flags)
+{
+    if (m_get_flags)
+        return m_get_flags(target, flags);
+
+    return false;
+}
+
+#endif // NETWORK_REACHABILITY_AVAILABLE