blob: a77618457bc99da88bc487b16b31d2244764f99a [file] [log] [blame]
Darin Petkov096b3472012-05-15 10:26:22 +02001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/wimax_device_proxy.h"
6
7#include <base/bind.h>
8#include <base/logging.h>
Ben Chanb879d142012-05-15 11:10:32 -07009#include <chromeos/dbus/service_constants.h>
Darin Petkov096b3472012-05-15 10:26:22 +020010
11#include "shill/error.h"
12#include "shill/scope_logger.h"
13
14using base::Bind;
15using base::Callback;
16using base::Unretained;
17using std::string;
Darin Petkov9893d9c2012-05-17 15:27:31 -070018using std::vector;
Darin Petkov096b3472012-05-15 10:26:22 +020019
20namespace shill {
21
Darin Petkov096b3472012-05-15 10:26:22 +020022WiMaxDeviceProxy::WiMaxDeviceProxy(DBus::Connection *connection,
23 const DBus::Path &path)
24 : proxy_(connection, path) {}
25
26WiMaxDeviceProxy::~WiMaxDeviceProxy() {}
27
28void WiMaxDeviceProxy::Enable(Error *error,
29 const ResultCallback &callback,
30 int timeout) {
31 SLOG(DBus, 2) << __func__ << "(" << timeout << ")";
32 Invoke(Bind((void (Proxy::*)(void *, int))&Proxy::Enable,
33 Unretained(&proxy_)),
34 error, callback, timeout);
35}
36
37void WiMaxDeviceProxy::Disable(Error *error,
38 const ResultCallback &callback,
39 int timeout) {
40 SLOG(DBus, 2) << __func__ << "(" << timeout << ")";
41 Invoke(Bind((void (Proxy::*)(void *, int))&Proxy::Disable,
42 Unretained(&proxy_)),
43 error, callback, timeout);
44}
45
Darin Petkov9893d9c2012-05-17 15:27:31 -070046void WiMaxDeviceProxy::ScanNetworks(Error *error,
47 const ResultCallback &callback,
48 int timeout) {
49 SLOG(DBus, 2) << __func__ << "(" << timeout << ")";
50 Invoke(Bind((void (Proxy::*)(void *, int))&Proxy::ScanNetworks,
51 Unretained(&proxy_)),
52 error, callback, timeout);
53}
54
Ben Chan4e5c1312012-05-18 18:45:38 -070055void WiMaxDeviceProxy::Connect(const DBus::Path &network,
56 const DBusPropertiesMap &parameters,
57 Error *error,
Darin Petkov096b3472012-05-15 10:26:22 +020058 const ResultCallback &callback,
59 int timeout) {
60 SLOG(DBus, 2) << __func__ << "(" << timeout << ")";
Ben Chan4e5c1312012-05-18 18:45:38 -070061 Invoke(Bind((void (Proxy::*)(const DBus::Path &, const DBusPropertiesMap &,
62 void *, int))&Proxy::Connect,
63 Unretained(&proxy_), network, parameters),
Darin Petkov096b3472012-05-15 10:26:22 +020064 error, callback, timeout);
65}
66
67void WiMaxDeviceProxy::Disconnect(Error *error,
68 const ResultCallback &callback,
69 int timeout) {
70 SLOG(DBus, 2) << __func__ << "(" << timeout << ")";
71 Invoke(Bind((void (Proxy::*)(void *, int))&Proxy::Disconnect,
72 Unretained(&proxy_)),
73 error, callback, timeout);
74}
75
Darin Petkov9893d9c2012-05-17 15:27:31 -070076void WiMaxDeviceProxy::set_networks_changed_callback(
77 const NetworksChangedCallback &callback) {
78 proxy_.set_networks_changed_callback(callback);
79}
80
Darin Petkov096b3472012-05-15 10:26:22 +020081uint8 WiMaxDeviceProxy::Index(Error *error) {
82 SLOG(DBus, 2) << __func__;
83 try {
84 return proxy_.Index();
85 } catch (const DBus::Error &e) {
86 FromDBusError(e, error);
87 }
88 return 0;
89}
90
91string WiMaxDeviceProxy::Name(Error *error) {
92 SLOG(DBus, 2) << __func__;
93 try {
94 return proxy_.Name();
95 } catch (const DBus::Error &e) {
96 FromDBusError(e, error);
97 }
98 return string();
99}
100
101void WiMaxDeviceProxy::Invoke(const Callback<void(void *, int)> &method,
102 Error *error,
103 const ResultCallback &callback,
104 int timeout) {
105 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
106 try {
107 method.Run(cb.get(), timeout);
108 cb.release();
109 } catch (const DBus::Error &e) {
110 FromDBusError(e, error);
111 }
112}
113
114// static
115void WiMaxDeviceProxy::FromDBusError(const DBus::Error &dbus_error,
116 Error *error) {
117 if (!error) {
118 return;
119 }
120 if (!dbus_error.is_set()) {
121 error->Reset();
122 return;
123 }
124 Error::PopulateAndLog(error, Error::kOperationFailed, dbus_error.what());
125}
126
127WiMaxDeviceProxy::Proxy::Proxy(DBus::Connection *connection,
128 const DBus::Path &path)
Ben Chanb879d142012-05-15 11:10:32 -0700129 : DBus::ObjectProxy(*connection, path,
130 wimax_manager::kWiMaxManagerServiceName) {}
Darin Petkov096b3472012-05-15 10:26:22 +0200131
132WiMaxDeviceProxy::Proxy::~Proxy() {}
133
Darin Petkov9893d9c2012-05-17 15:27:31 -0700134void WiMaxDeviceProxy::Proxy::set_networks_changed_callback(
135 const NetworksChangedCallback &callback) {
136 networks_changed_callback_ = callback;
137}
138
139void WiMaxDeviceProxy::Proxy::NetworksChanged(
140 const vector<DBus::Path> &networks) {
141 SLOG(DBus, 2) << __func__ << "(" << networks.size() << ")";
142 if (networks_changed_callback_.is_null()) {
143 return;
144 }
145 RpcIdentifiers rpc_networks;
146 DBusProperties::ConvertPathsToRpcIdentifiers(networks, &rpc_networks);
147 networks_changed_callback_.Run(rpc_networks);
148}
149
Darin Petkov096b3472012-05-15 10:26:22 +0200150void WiMaxDeviceProxy::Proxy::EnableCallback(const DBus::Error &error,
151 void *data) {
152 SLOG(DBus, 2) << __func__;
153 HandleCallback(error, data);
154}
155
156void WiMaxDeviceProxy::Proxy::DisableCallback(const DBus::Error &error,
157 void *data) {
158 SLOG(DBus, 2) << __func__;
159 HandleCallback(error, data);
160}
161
Darin Petkov9893d9c2012-05-17 15:27:31 -0700162void WiMaxDeviceProxy::Proxy::ScanNetworksCallback(const DBus::Error &error,
163 void *data) {
164 SLOG(DBus, 2) << __func__;
165 HandleCallback(error, data);
166}
167
Darin Petkov096b3472012-05-15 10:26:22 +0200168void WiMaxDeviceProxy::Proxy::ConnectCallback(const DBus::Error &error,
169 void *data) {
170 SLOG(DBus, 2) << __func__;
171 HandleCallback(error, data);
172}
173
174void WiMaxDeviceProxy::Proxy::DisconnectCallback(const DBus::Error &error,
175 void *data) {
176 SLOG(DBus, 2) << __func__;
177 HandleCallback(error, data);
178}
179
180// static
181void WiMaxDeviceProxy::Proxy::HandleCallback(const DBus::Error &error,
182 void *data) {
183 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
184 Error e;
185 FromDBusError(error, &e);
186 callback->Run(e);
187}
188
189} // namespace shill