1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef SHILL_DBUS_CHROMEOS_WIMAX_MANAGER_PROXY_H_
18 #define SHILL_DBUS_CHROMEOS_WIMAX_MANAGER_PROXY_H_
19 
20 #include <string>
21 #include <vector>
22 
23 #include <base/macros.h>
24 #include <wimax_manager/dbus-proxies.h>
25 
26 #include "shill/wimax/wimax_manager_proxy_interface.h"
27 
28 namespace shill {
29 
30 class EventDispatcher;
31 
32 class ChromeosWiMaxManagerProxy : public WiMaxManagerProxyInterface {
33  public:
34   explicit ChromeosWiMaxManagerProxy(
35       EventDispatcher* dispatcher,
36       const scoped_refptr<dbus::Bus>& bus,
37       const base::Closure& service_appeared_callback,
38       const base::Closure& service_vanished_callback);
39   ~ChromeosWiMaxManagerProxy() override;
40 
41   // Inherited from WiMaxManagerProxyInterface.
42   void set_devices_changed_callback(
43       const DevicesChangedCallback& callback) override;
44   RpcIdentifiers Devices(Error* error) override;
45 
46  private:
47   class PropertySet : public dbus::PropertySet {
48    public:
49     PropertySet(dbus::ObjectProxy* object_proxy,
50                 const std::string& interface_name,
51                 const PropertyChangedCallback& callback);
52     brillo::dbus_utils::Property<std::vector<dbus::ObjectPath>> devices;
53 
54    private:
55     DISALLOW_COPY_AND_ASSIGN(PropertySet);
56   };
57 
58   static const char kPropertyDevices[];
59 
60   // Called when service appeared or vanished.
61   void OnServiceAvailable(bool available);
62 
63   // Service name owner changed handler.
64   void OnServiceOwnerChanged(const std::string& old_owner,
65                              const std::string& new_owner);
66 
67   // Signal callbacks inherited from WiMaxManager_proxy.
68   void DevicesChanged(const std::vector<dbus::ObjectPath>& devices);
69 
70   // Callback invoked when the value of property |property_name| is changed.
71   void OnPropertyChanged(const std::string& property_name);
72 
73   // Called when signal is connected to the ObjectProxy.
74   void OnSignalConnected(const std::string& interface_name,
75                          const std::string& signal_name,
76                          bool success);
77 
78   std::unique_ptr<org::chromium::WiMaxManagerProxy> proxy_;
79   std::unique_ptr<PropertySet> properties_;
80   EventDispatcher* dispatcher_;
81   base::Closure service_appeared_callback_;
82   base::Closure service_vanished_callback_;
83   bool service_available_;
84   DevicesChangedCallback devices_changed_callback_;
85 
86   base::WeakPtrFactory<ChromeosWiMaxManagerProxy> weak_factory_{this};
87   DISALLOW_COPY_AND_ASSIGN(ChromeosWiMaxManagerProxy);
88 };
89 
90 }  // namespace shill
91 
92 #endif  // SHILL_DBUS_CHROMEOS_WIMAX_MANAGER_PROXY_H_
93