1 // Copyright (c) 2012 The Chromium 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.
5 #include "chromeos/dbus/shill_manager_client.h"
8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/values.h"
11 #include "chromeos/dbus/shill_property_changed_observer.h"
13 #include "dbus/message.h"
14 #include "dbus/object_path.h"
15 #include "dbus/object_proxy.h"
16 #include "dbus/values_util.h"
17 #include "third_party/cros_system_api/dbus/service_constants.h"
23 // The ShillManagerClient implementation.
24 class ShillManagerClientImpl
: public ShillManagerClient
{
26 ShillManagerClientImpl() : proxy_(NULL
) {}
28 ////////////////////////////////////
29 // ShillManagerClient overrides.
30 virtual void AddPropertyChangedObserver(
31 ShillPropertyChangedObserver
* observer
) OVERRIDE
{
32 helper_
->AddPropertyChangedObserver(observer
);
35 virtual void RemovePropertyChangedObserver(
36 ShillPropertyChangedObserver
* observer
) OVERRIDE
{
37 helper_
->RemovePropertyChangedObserver(observer
);
40 virtual void GetProperties(const DictionaryValueCallback
& callback
) OVERRIDE
{
41 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
42 shill::kGetPropertiesFunction
);
43 helper_
->CallDictionaryValueMethod(&method_call
, callback
);
46 virtual void GetNetworksForGeolocation(
47 const DictionaryValueCallback
& callback
) OVERRIDE
{
48 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
49 shill::kGetNetworksForGeolocation
);
50 helper_
->CallDictionaryValueMethod(&method_call
, callback
);
53 virtual void SetProperty(const std::string
& name
,
54 const base::Value
& value
,
55 const base::Closure
& callback
,
56 const ErrorCallback
& error_callback
) OVERRIDE
{
57 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
58 shill::kSetPropertyFunction
);
59 dbus::MessageWriter
writer(&method_call
);
60 writer
.AppendString(name
);
61 ShillClientHelper::AppendValueDataAsVariant(&writer
, value
);
62 helper_
->CallVoidMethodWithErrorCallback(&method_call
,
67 virtual void RequestScan(const std::string
& type
,
68 const base::Closure
& callback
,
69 const ErrorCallback
& error_callback
) OVERRIDE
{
70 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
71 shill::kRequestScanFunction
);
72 dbus::MessageWriter
writer(&method_call
);
73 writer
.AppendString(type
);
74 helper_
->CallVoidMethodWithErrorCallback(&method_call
,
79 virtual void EnableTechnology(
80 const std::string
& type
,
81 const base::Closure
& callback
,
82 const ErrorCallback
& error_callback
) OVERRIDE
{
83 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
84 shill::kEnableTechnologyFunction
);
85 dbus::MessageWriter
writer(&method_call
);
86 writer
.AppendString(type
);
87 helper_
->CallVoidMethodWithErrorCallback(&method_call
,
92 virtual void DisableTechnology(
93 const std::string
& type
,
94 const base::Closure
& callback
,
95 const ErrorCallback
& error_callback
) OVERRIDE
{
96 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
97 shill::kDisableTechnologyFunction
);
98 dbus::MessageWriter
writer(&method_call
);
99 writer
.AppendString(type
);
100 helper_
->CallVoidMethodWithErrorCallback(&method_call
,
105 virtual void ConfigureService(
106 const base::DictionaryValue
& properties
,
107 const ObjectPathCallback
& callback
,
108 const ErrorCallback
& error_callback
) OVERRIDE
{
109 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
110 shill::kConfigureServiceFunction
);
111 dbus::MessageWriter
writer(&method_call
);
112 ShillClientHelper::AppendServicePropertiesDictionary(&writer
, properties
);
113 helper_
->CallObjectPathMethodWithErrorCallback(&method_call
,
118 virtual void ConfigureServiceForProfile(
119 const dbus::ObjectPath
& profile_path
,
120 const base::DictionaryValue
& properties
,
121 const ObjectPathCallback
& callback
,
122 const ErrorCallback
& error_callback
) OVERRIDE
{
123 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
124 shill::kConfigureServiceForProfileFunction
);
125 dbus::MessageWriter
writer(&method_call
);
126 writer
.AppendObjectPath(dbus::ObjectPath(profile_path
));
127 ShillClientHelper::AppendServicePropertiesDictionary(&writer
, properties
);
128 helper_
->CallObjectPathMethodWithErrorCallback(&method_call
,
133 virtual void GetService(
134 const base::DictionaryValue
& properties
,
135 const ObjectPathCallback
& callback
,
136 const ErrorCallback
& error_callback
) OVERRIDE
{
137 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
138 shill::kGetServiceFunction
);
139 dbus::MessageWriter
writer(&method_call
);
140 ShillClientHelper::AppendServicePropertiesDictionary(&writer
, properties
);
141 helper_
->CallObjectPathMethodWithErrorCallback(&method_call
,
146 virtual void VerifyDestination(const VerificationProperties
& properties
,
147 const BooleanCallback
& callback
,
148 const ErrorCallback
& error_callback
) OVERRIDE
{
149 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
150 shill::kVerifyDestinationFunction
);
151 dbus::MessageWriter
writer(&method_call
);
152 writer
.AppendString(properties
.certificate
);
153 writer
.AppendString(properties
.public_key
);
154 writer
.AppendString(properties
.nonce
);
155 writer
.AppendString(properties
.signed_data
);
156 writer
.AppendString(properties
.device_serial
);
157 writer
.AppendString(properties
.device_ssid
);
158 writer
.AppendString(properties
.device_bssid
);
159 helper_
->CallBooleanMethodWithErrorCallback(
160 &method_call
, callback
, error_callback
);
163 virtual void VerifyAndEncryptCredentials(
164 const VerificationProperties
& properties
,
165 const std::string
& service_path
,
166 const StringCallback
& callback
,
167 const ErrorCallback
& error_callback
) OVERRIDE
{
168 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
169 shill::kVerifyAndEncryptCredentialsFunction
);
170 dbus::MessageWriter
writer(&method_call
);
171 writer
.AppendString(properties
.certificate
);
172 writer
.AppendString(properties
.public_key
);
173 writer
.AppendString(properties
.nonce
);
174 writer
.AppendString(properties
.signed_data
);
175 writer
.AppendString(properties
.device_serial
);
176 writer
.AppendString(properties
.device_ssid
);
177 writer
.AppendString(properties
.device_bssid
);
178 writer
.AppendObjectPath(dbus::ObjectPath(service_path
));
179 helper_
->CallStringMethodWithErrorCallback(
180 &method_call
, callback
, error_callback
);
183 virtual void VerifyAndEncryptData(
184 const VerificationProperties
& properties
,
185 const std::string
& data
,
186 const StringCallback
& callback
,
187 const ErrorCallback
& error_callback
) OVERRIDE
{
188 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
189 shill::kVerifyAndEncryptDataFunction
);
190 dbus::MessageWriter
writer(&method_call
);
191 writer
.AppendString(properties
.certificate
);
192 writer
.AppendString(properties
.public_key
);
193 writer
.AppendString(properties
.nonce
);
194 writer
.AppendString(properties
.signed_data
);
195 writer
.AppendString(properties
.device_serial
);
196 writer
.AppendString(properties
.device_ssid
);
197 writer
.AppendString(properties
.device_bssid
);
198 writer
.AppendString(data
);
199 helper_
->CallStringMethodWithErrorCallback(
200 &method_call
, callback
, error_callback
);
203 virtual void ConnectToBestServices(
204 const base::Closure
& callback
,
205 const ErrorCallback
& error_callback
) OVERRIDE
{
206 dbus::MethodCall
method_call(shill::kFlimflamManagerInterface
,
207 shill::kConnectToBestServicesFunction
);
208 helper_
->CallVoidMethodWithErrorCallback(&method_call
,
213 virtual TestInterface
* GetTestInterface() OVERRIDE
{
218 virtual void Init(dbus::Bus
* bus
) OVERRIDE
{
219 proxy_
= bus
->GetObjectProxy(shill::kFlimflamServiceName
,
220 dbus::ObjectPath(shill::kFlimflamServicePath
));
221 helper_
.reset(new ShillClientHelper(proxy_
));
222 helper_
->MonitorPropertyChanged(shill::kFlimflamManagerInterface
);
226 dbus::ObjectProxy
* proxy_
;
227 scoped_ptr
<ShillClientHelper
> helper_
;
229 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl
);
234 ShillManagerClient::ShillManagerClient() {}
236 ShillManagerClient::~ShillManagerClient() {}
239 ShillManagerClient
* ShillManagerClient::Create() {
240 return new ShillManagerClientImpl();
243 // ShillManagerClient::VerificationProperties implementation.
244 ShillManagerClient::VerificationProperties::VerificationProperties() {
247 ShillManagerClient::VerificationProperties::~VerificationProperties() {
250 } // namespace chromeos