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 #include "shill/dbus/chromeos_ipconfig_dbus_adaptor.h"
18 
19 #include <string>
20 #include <vector>
21 
22 #include <base/strings/stringprintf.h>
23 
24 #include "shill/error.h"
25 #include "shill/ipconfig.h"
26 #include "shill/logging.h"
27 
28 using base::StringPrintf;
29 using brillo::dbus_utils::AsyncEventSequencer;
30 using brillo::dbus_utils::ExportedObjectManager;
31 using std::string;
32 using std::vector;
33 
34 namespace shill {
35 
36 namespace Logging {
37 static auto kModuleLogScope = ScopeLogger::kDBus;
ObjectID(ChromeosIPConfigDBusAdaptor * i)38 static string ObjectID(ChromeosIPConfigDBusAdaptor* i) {
39   return i->GetRpcIdentifier();
40 }
41 }
42 
43 // static
44 const char ChromeosIPConfigDBusAdaptor::kPath[] = "/ipconfig/";
45 
ChromeosIPConfigDBusAdaptor(const scoped_refptr<dbus::Bus> & bus,IPConfig * config)46 ChromeosIPConfigDBusAdaptor::ChromeosIPConfigDBusAdaptor(
47     const scoped_refptr<dbus::Bus>& bus,
48     IPConfig* config)
49     : org::chromium::flimflam::IPConfigAdaptor(this),
50       ChromeosDBusAdaptor(bus,
51                           StringPrintf("%s%s_%u_%s",
52                                        kPath,
53                                        SanitizePathElement(
54                                            config->device_name()).c_str(),
55                                        config->serial(),
56                                        config->type().c_str())),
57       ipconfig_(config) {
58   // Register DBus object.
59   RegisterWithDBusObject(dbus_object());
60   dbus_object()->RegisterAndBlock();
61 }
62 
~ChromeosIPConfigDBusAdaptor()63 ChromeosIPConfigDBusAdaptor::~ChromeosIPConfigDBusAdaptor() {
64   dbus_object()->UnregisterAsync();
65   ipconfig_ = nullptr;
66 }
67 
EmitBoolChanged(const string & name,bool value)68 void ChromeosIPConfigDBusAdaptor::EmitBoolChanged(const string& name,
69                                                   bool value) {
70   SLOG(this, 2) << __func__ << ": " << name;
71   SendPropertyChangedSignal(name, brillo::Any(value));
72 }
73 
EmitUintChanged(const string & name,uint32_t value)74 void ChromeosIPConfigDBusAdaptor::EmitUintChanged(const string& name,
75                                                   uint32_t value) {
76   SLOG(this, 2) << __func__ << ": " << name;
77   SendPropertyChangedSignal(name, brillo::Any(value));
78 }
79 
EmitIntChanged(const string & name,int value)80 void ChromeosIPConfigDBusAdaptor::EmitIntChanged(const string& name,
81                                                  int value) {
82   SLOG(this, 2) << __func__ << ": " << name;
83   SendPropertyChangedSignal(name, brillo::Any(value));
84 }
85 
EmitStringChanged(const string & name,const string & value)86 void ChromeosIPConfigDBusAdaptor::EmitStringChanged(const string& name,
87                                                     const string& value) {
88   SLOG(this, 2) << __func__ << ": " << name;
89   SendPropertyChangedSignal(name, brillo::Any(value));
90 }
91 
EmitStringsChanged(const string & name,const vector<string> & value)92 void ChromeosIPConfigDBusAdaptor::EmitStringsChanged(
93     const string& name, const vector<string>& value) {
94   SLOG(this, 2) << __func__ << ": " << name;
95   SendPropertyChangedSignal(name, brillo::Any(value));
96 }
97 
GetProperties(brillo::ErrorPtr * error,brillo::VariantDictionary * properties)98 bool ChromeosIPConfigDBusAdaptor::GetProperties(
99     brillo::ErrorPtr* error, brillo::VariantDictionary* properties) {
100   SLOG(this, 2) << __func__;
101   return ChromeosDBusAdaptor::GetProperties(ipconfig_->store(),
102                                             properties,
103                                             error);
104 }
105 
SetProperty(brillo::ErrorPtr * error,const string & name,const brillo::Any & value)106 bool ChromeosIPConfigDBusAdaptor::SetProperty(
107     brillo::ErrorPtr* error, const string& name, const brillo::Any& value) {
108   SLOG(this, 2) << __func__ << ": " << name;
109   return ChromeosDBusAdaptor::SetProperty(ipconfig_->mutable_store(),
110                                           name,
111                                           value,
112                                           error);
113 }
114 
ClearProperty(brillo::ErrorPtr * error,const string & name)115 bool ChromeosIPConfigDBusAdaptor::ClearProperty(
116     brillo::ErrorPtr* error, const string& name) {
117   SLOG(this, 2) << __func__ << ": " << name;
118   return ChromeosDBusAdaptor::ClearProperty(ipconfig_->mutable_store(),
119                                             name,
120                                             error);
121 }
122 
Remove(brillo::ErrorPtr * error)123 bool ChromeosIPConfigDBusAdaptor::Remove(brillo::ErrorPtr* error) {
124   SLOG(this, 2) << __func__;
125   return !Error(Error::kNotSupported).ToChromeosError(error);
126 }
127 
Refresh(brillo::ErrorPtr * error)128 bool ChromeosIPConfigDBusAdaptor::Refresh(brillo::ErrorPtr* error) {
129   SLOG(this, 2) << __func__;
130   Error e;
131   ipconfig_->Refresh(&e);
132   return !e.ToChromeosError(error);
133 }
134 
135 }  // namespace shill
136