added iOS source code
[wl-app.git] / iOS / Pods / Realm / include / sync / impl / apple / network_reachability_observer.hpp
1 ////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright 2016 Realm Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 ////////////////////////////////////////////////////////////////////////////
18
19 #ifndef REALM_OS_NETWORK_REACHABILITY_OBSERVER_HPP
20 #define REALM_OS_NETWORK_REACHABILITY_OBSERVER_HPP
21
22 #include <functional>
23 #include <string>
24
25 #include <realm/util/cf_ptr.hpp>
26 #include <realm/util/optional.hpp>
27
28 #include "sync/impl/network_reachability.hpp"
29
30 #if NETWORK_REACHABILITY_AVAILABLE
31
32 #include "sync/impl/apple/system_configuration.hpp"
33
34 namespace realm {
35 namespace _impl {
36
37 enum NetworkReachabilityStatus {
38     NotReachable,
39     ReachableViaWiFi,
40     ReachableViaWWAN
41 };
42
43 class NetworkReachabilityObserver {
44 public:
45     NetworkReachabilityObserver(util::Optional<std::string> hostname,
46                                 std::function<void (const NetworkReachabilityStatus)> handler);
47
48     ~NetworkReachabilityObserver();
49
50     NetworkReachabilityStatus reachability_status() const;
51
52     bool start_observing();
53     void stop_observing();
54
55 private:
56     void reachability_changed();
57
58     util::CFPtr<SCNetworkReachabilityRef> m_reachability_ref;
59     NetworkReachabilityStatus m_previous_status;
60     dispatch_queue_t m_callback_queue;
61     std::function<void (const NetworkReachabilityStatus)> m_change_handler;
62 };
63
64 } // namespace _impl
65 } // namespace realm
66
67 #endif // NETWORK_REACHABILITY_AVAILABLE
68
69 #endif // REALM_OS_NETWORK_REACHABILITY_OBSERVER_HPP