blob: 62f3f84276e773e2689edfd328b4eb17a41138d0 [file] [log] [blame]
mukesh agrawal6bb9e7c2012-01-30 14:57:54 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Chris Masoned7732e42011-05-20 11:08:56 -07002// 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/manager_dbus_adaptor.h"
6
7#include <map>
8#include <string>
Chris Masone8fe2c7e2011-06-09 15:51:19 -07009#include <vector>
Chris Masoned7732e42011-05-20 11:08:56 -070010
Chris Masone7ccc8192011-05-24 14:54:49 -070011#include <base/logging.h>
Chris Masone8fe2c7e2011-06-09 15:51:19 -070012#include <dbus-c++/dbus.h>
13
mukesh agrawal32399322011-09-01 10:53:43 -070014#include "shill/device.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070015#include "shill/error.h"
mukesh agrawal7a4e4002011-09-06 11:26:05 -070016#include "shill/key_value_store.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070017#include "shill/manager.h"
mukesh agrawal7a4e4002011-09-06 11:26:05 -070018#include "shill/wifi_service.h"
Chris Masone7ccc8192011-05-24 14:54:49 -070019
Chris Masoned7732e42011-05-20 11:08:56 -070020using std::map;
21using std::string;
Chris Masone8fe2c7e2011-06-09 15:51:19 -070022using std::vector;
Chris Masoned7732e42011-05-20 11:08:56 -070023
24namespace shill {
25
Chris Masoned7732e42011-05-20 11:08:56 -070026// static
Chris Masone19e30402011-07-19 15:48:47 -070027const char ManagerDBusAdaptor::kPath[] = "/";
Chris Masoned7732e42011-05-20 11:08:56 -070028
Chris Masoned0ceb8c2011-06-02 10:05:39 -070029ManagerDBusAdaptor::ManagerDBusAdaptor(DBus::Connection* conn, Manager *manager)
Chris Masoned7732e42011-05-20 11:08:56 -070030 : DBusAdaptor(conn, kPath),
31 manager_(manager) {
32}
Chris Masoneec6b18b2011-06-08 14:09:10 -070033
34ManagerDBusAdaptor::~ManagerDBusAdaptor() {
35 manager_ = NULL;
36}
Chris Masoned7732e42011-05-20 11:08:56 -070037
38void ManagerDBusAdaptor::UpdateRunning() {}
39
Chris Masone8fe2c7e2011-06-09 15:51:19 -070040void ManagerDBusAdaptor::EmitBoolChanged(const string &name, bool value) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070041 PropertyChanged(name, DBusAdaptor::BoolToVariant(value));
42}
43
Chris Masone8fe2c7e2011-06-09 15:51:19 -070044void ManagerDBusAdaptor::EmitUintChanged(const string &name,
Chris Masoned0ceb8c2011-06-02 10:05:39 -070045 uint32 value) {
Chris Masone8fe2c7e2011-06-09 15:51:19 -070046 PropertyChanged(name, DBusAdaptor::Uint32ToVariant(value));
Chris Masoned0ceb8c2011-06-02 10:05:39 -070047}
48
Chris Masone8fe2c7e2011-06-09 15:51:19 -070049void ManagerDBusAdaptor::EmitIntChanged(const string &name, int value) {
50 PropertyChanged(name, DBusAdaptor::Int32ToVariant(value));
Chris Masoned0ceb8c2011-06-02 10:05:39 -070051}
52
Chris Masone8fe2c7e2011-06-09 15:51:19 -070053void ManagerDBusAdaptor::EmitStringChanged(const string &name,
54 const string &value) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070055 PropertyChanged(name, DBusAdaptor::StringToVariant(value));
56}
57
Gaurav Shah435de2c2011-11-17 19:01:07 -080058void ManagerDBusAdaptor::EmitStringsChanged(const string &name,
59 const vector<string> &value) {
60 PropertyChanged(name, DBusAdaptor::StringsToVariant(value));
61}
62
mukesh agrawal32399322011-09-01 10:53:43 -070063void ManagerDBusAdaptor::EmitRpcIdentifierArrayChanged(
64 const string &name,
65 const vector<string> &value) {
66 vector< ::DBus::Path> paths;
67 vector<string>::const_iterator it;
68 for (it = value.begin(); it != value.end(); ++it) {
69 paths.push_back(*it);
70 }
71
mukesh agrawal2366eed2012-03-20 18:21:50 -070072 PropertyChanged(name, DBusAdaptor::PathsToVariant(paths));
mukesh agrawal32399322011-09-01 10:53:43 -070073}
74
Chris Masone8fe2c7e2011-06-09 15:51:19 -070075void ManagerDBusAdaptor::EmitStateChanged(const string &new_state) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070076 StateChanged(new_state);
77}
78
Chris Masoned7732e42011-05-20 11:08:56 -070079map<string, ::DBus::Variant> ManagerDBusAdaptor::GetProperties(
80 ::DBus::Error &error) {
Chris Masonea8a2c252011-06-27 22:16:30 -070081 map<string, ::DBus::Variant> properties;
Chris Masone27c4aa52011-07-02 13:10:14 -070082 DBusAdaptor::GetProperties(manager_->store(), &properties, &error);
Chris Masonea8a2c252011-06-27 22:16:30 -070083 return properties;
Chris Masoned7732e42011-05-20 11:08:56 -070084}
85
Chris Masone8fe2c7e2011-06-09 15:51:19 -070086void ManagerDBusAdaptor::SetProperty(const string &name,
87 const ::DBus::Variant &value,
Chris Masoned7732e42011-05-20 11:08:56 -070088 ::DBus::Error &error) {
mukesh agrawal6bb9e7c2012-01-30 14:57:54 -080089 if (DBusAdaptor::SetProperty(manager_->mutable_store(),
90 name,
91 value,
92 &error)) {
Chris Masone3bd3c8c2011-06-13 08:20:26 -070093 PropertyChanged(name, value);
94 }
Chris Masoned7732e42011-05-20 11:08:56 -070095}
96
mukesh agrawal1830fa12011-09-26 14:31:40 -070097string ManagerDBusAdaptor::GetState(::DBus::Error &/*error*/) {
Chris Masoned7732e42011-05-20 11:08:56 -070098 return string();
99}
100
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700101::DBus::Path ManagerDBusAdaptor::CreateProfile(const string &name,
Paul Stewart19c871d2011-12-15 16:10:13 -0800102 ::DBus::Error &error) {
103 Error e;
104 string path;
105 manager_->CreateProfile(name, &path, &e);
106 e.ToDBusError(&error);
107 return ::DBus::Path(path);
Chris Masoned7732e42011-05-20 11:08:56 -0700108}
109
mukesh agrawal1830fa12011-09-26 14:31:40 -0700110void ManagerDBusAdaptor::RemoveProfile(const string &/*name*/,
111 ::DBus::Error &/*error*/) {
Chris Masoned7732e42011-05-20 11:08:56 -0700112}
113
mukesh agrawale5929bf2011-08-29 13:47:23 -0700114::DBus::Path ManagerDBusAdaptor::PushProfile(const std::string &name,
Paul Stewart19c871d2011-12-15 16:10:13 -0800115 ::DBus::Error &error) {
116 Error e;
117 string path;
118 manager_->PushProfile(name, &path, &e);
119 e.ToDBusError(&error);
120 return ::DBus::Path(path);
Chris Masoneccc88812011-06-08 18:00:10 -0700121}
122
Paul Stewart19c871d2011-12-15 16:10:13 -0800123void ManagerDBusAdaptor::PopProfile(const std::string &name,
124 ::DBus::Error &error) {
125 Error e;
126 manager_->PopProfile(name, &e);
127 e.ToDBusError(&error);
Chris Masoneccc88812011-06-08 18:00:10 -0700128}
129
Paul Stewart19c871d2011-12-15 16:10:13 -0800130void ManagerDBusAdaptor::PopAnyProfile(::DBus::Error &error) {
131 Error e;
132 manager_->PopAnyProfile(&e);
133 e.ToDBusError(&error);
Chris Masoneccc88812011-06-08 18:00:10 -0700134}
135
Paul Stewartc681fa02012-03-02 19:40:04 -0800136void ManagerDBusAdaptor::RecheckPortal(::DBus::Error &error) {
137 Error e;
138 manager_->RecheckPortal(&e);
139 e.ToDBusError(&error);
140}
141
mukesh agrawal32399322011-09-01 10:53:43 -0700142void ManagerDBusAdaptor::RequestScan(const string &technology,
Chris Masoned7732e42011-05-20 11:08:56 -0700143 ::DBus::Error &error) {
mukesh agrawal32399322011-09-01 10:53:43 -0700144 Error e;
145 manager_->RequestScan(technology, &e);
146 e.ToDBusError(&error);
Chris Masoned7732e42011-05-20 11:08:56 -0700147}
148
Eric Shienbrood9a245532012-03-07 14:20:39 -0500149void ManagerDBusAdaptor::EnableTechnology(const string &technology_name,
150 ::DBus::Error &error) {
151 Error e(Error::kOperationInitiated);
152 DBus::Tag *tag = new DBus::Tag();
153 manager_->EnableTechnology(technology_name, &e, GetMethodReplyCallback(tag));
154 ReturnResultOrDefer(tag, e, &error);
155 // TODO(ers): A reply will be sent to the client as soon as the first
156 // device of a given technology has finished being enabled. It would
157 // seem arguably more correct to wait until all the devices were enabled.
Chris Masoned7732e42011-05-20 11:08:56 -0700158}
159
Eric Shienbrood9a245532012-03-07 14:20:39 -0500160void ManagerDBusAdaptor::DisableTechnology(const string &technology_name,
161 ::DBus::Error &error) {
162 Error e(Error::kOperationInitiated);
163 DBus::Tag *tag = new DBus::Tag();
164 manager_->DisableTechnology(technology_name, &e, GetMethodReplyCallback(tag));
165 ReturnResultOrDefer(tag, e, &error);
166 // TODO(ers): A reply will be sent to the client as soon as the first
167 // device of a given technology has finished being disabled. It would
168 // seem arguably more correct to wait until all the devices were enabled.
Chris Masoned7732e42011-05-20 11:08:56 -0700169}
170
Darin Petkovb65c2452012-02-23 15:17:06 +0100171// Called, e.g., to get WiFiService handle for a hidden SSID.
Chris Masoned7732e42011-05-20 11:08:56 -0700172::DBus::Path ManagerDBusAdaptor::GetService(
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700173 const map<string, ::DBus::Variant> &args,
Chris Masoned7732e42011-05-20 11:08:56 -0700174 ::DBus::Error &error) {
Darin Petkovb65c2452012-02-23 15:17:06 +0100175 ServiceRefPtr service;
176 KeyValueStore args_store;
177 Error e;
178 DBusAdaptor::ArgsToKeyValueStore(args, &args_store, &e);
179 if (e.IsSuccess()) {
180 service = manager_->GetService(args_store, &e);
181 }
182 if (e.ToDBusError(&error)) {
183 return "/"; // ensure return is syntactically valid
184 }
185 return service->GetRpcIdentifier();
Chris Masoned7732e42011-05-20 11:08:56 -0700186}
187
Darin Petkovb65c2452012-02-23 15:17:06 +0100188// Obsolete, use GetService instead.
189::DBus::Path ManagerDBusAdaptor::GetVPNService(
190 const map<string, ::DBus::Variant> &args,
191 ::DBus::Error &error) {
192 return GetService(args, error);
193}
194
195// Obsolete, use GetService instead.
Chris Masoned7732e42011-05-20 11:08:56 -0700196::DBus::Path ManagerDBusAdaptor::GetWifiService(
mukesh agrawal7a4e4002011-09-06 11:26:05 -0700197 const map<string, ::DBus::Variant> &args,
Chris Masoned7732e42011-05-20 11:08:56 -0700198 ::DBus::Error &error) {
Darin Petkovb65c2452012-02-23 15:17:06 +0100199 return GetService(args, error);
Chris Masoned7732e42011-05-20 11:08:56 -0700200}
201
Paul Stewart7f61e522012-03-22 11:13:45 -0700202
203void ManagerDBusAdaptor::ConfigureService(
204 const map<string, ::DBus::Variant> &args,
205 ::DBus::Error &error) {
206 KeyValueStore args_store;
207 Error e;
208 DBusAdaptor::ArgsToKeyValueStore(args, &args_store, &e);
209 if (e.IsSuccess()) {
210 manager_->ConfigureService(args_store, &e);
211 }
212 e.ToDBusError(&error);
Chris Masoned7732e42011-05-20 11:08:56 -0700213}
214
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700215void ManagerDBusAdaptor::RegisterAgent(const ::DBus::Path &,
mukesh agrawal1830fa12011-09-26 14:31:40 -0700216 ::DBus::Error &/*error*/) {
Chris Masoned7732e42011-05-20 11:08:56 -0700217}
218
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700219void ManagerDBusAdaptor::UnregisterAgent(const ::DBus::Path &,
mukesh agrawal1830fa12011-09-26 14:31:40 -0700220 ::DBus::Error &/*error*/) {
Chris Masoned7732e42011-05-20 11:08:56 -0700221}
222
mukesh agrawal1830fa12011-09-26 14:31:40 -0700223int32_t ManagerDBusAdaptor::GetDebugLevel(::DBus::Error &/*error*/) {
Chris Masone7ccc8192011-05-24 14:54:49 -0700224 return logging::GetMinLogLevel();
Chris Masoned7732e42011-05-20 11:08:56 -0700225}
226
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700227void ManagerDBusAdaptor::SetDebugLevel(const int32_t &level,
mukesh agrawal1830fa12011-09-26 14:31:40 -0700228 ::DBus::Error &/*error*/) {
Chris Masone7ccc8192011-05-24 14:54:49 -0700229 if (level < logging::LOG_NUM_SEVERITIES)
230 logging::SetMinLogLevel(level);
231 else
232 LOG(WARNING) << "Ignoring attempt to set log level to " << level;
Chris Masoned7732e42011-05-20 11:08:56 -0700233}
234
mukesh agrawal1830fa12011-09-26 14:31:40 -0700235string ManagerDBusAdaptor::GetServiceOrder(::DBus::Error &/*error*/) {
Paul Stewart22aa71b2011-09-16 12:15:11 -0700236 return manager_->GetTechnologyOrder();
Chris Masoned7732e42011-05-20 11:08:56 -0700237}
238
Paul Stewart22aa71b2011-09-16 12:15:11 -0700239void ManagerDBusAdaptor::SetServiceOrder(const string &order,
Chris Masoned7732e42011-05-20 11:08:56 -0700240 ::DBus::Error &error) {
Paul Stewart22aa71b2011-09-16 12:15:11 -0700241 Error e;
242 manager_->SetTechnologyOrder(order, &e);
243 e.ToDBusError(&error);
Chris Masoned7732e42011-05-20 11:08:56 -0700244}
245
Elly Jones16227d32012-02-09 14:17:25 -0500246std::string ManagerDBusAdaptor::GetDebugTags(::DBus::Error &/*error*/) {
247 return "";
248}
249
250void ManagerDBusAdaptor::SetDebugTags(const std::string &/*tags*/,
251 ::DBus::Error &/*error*/) {
252}
253
254std::string ManagerDBusAdaptor::ListDebugTags(::DBus::Error &/*error*/) {
255 return "";
256}
257
Chris Masoned7732e42011-05-20 11:08:56 -0700258} // namespace shill