[shill] Add support for setting properties.
This CL adds a framework for supporting RPC-exposed properties in Shill.
It also plumbs the code for setting properties on Service objects to prove
the approach. Device and Manager settings will follow.
BUG=chromium-os:16343
TEST=build shill, run unit tests.
Change-Id: I55869453d6039e688f1a49be9dfb1ba1315efe0a
Reviewed-on: http://gerrit.chromium.org/gerrit/3004
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Chris Masone <cmasone@chromium.org>
diff --git a/dbus_adaptor.cc b/dbus_adaptor.cc
index 9b57ba2..748832c 100644
--- a/dbus_adaptor.cc
+++ b/dbus_adaptor.cc
@@ -35,6 +35,10 @@
const string &name,
const ::DBus::Variant &value,
::DBus::Error &error) {
+ if (!store->Contains(name)) {
+ Error(Error::kInvalidProperty, name + " is invalid.").ToDBusError(&error);
+ return false;
+ }
bool set = false;
Error e(Error::kInvalidArguments, "Could not write " + name);
@@ -46,6 +50,8 @@
set = store->SetInt16Property(name, value.reader().get_int16(), &e);
else if (DBusAdaptor::IsInt32(value.signature()))
set = store->SetInt32Property(name, value.reader().get_int32(), &e);
+ else if (DBusAdaptor::IsPath(value.signature()))
+ set = store->SetStringProperty(name, value.reader().get_path(), &e);
else if (DBusAdaptor::IsString(value.signature()))
set = store->SetStringProperty(name, value.reader().get_string(), &e);
else if (DBusAdaptor::IsStringmap(value.signature()))
@@ -95,6 +101,13 @@
}
// static
+::DBus::Variant DBusAdaptor::PathToVariant(const ::DBus::Path &value) {
+ ::DBus::Variant v;
+ v.writer().append_path(value.c_str());
+ return v;
+}
+
+// static
::DBus::Variant DBusAdaptor::StringToVariant(const string &value) {
::DBus::Variant v;
v.writer().append_string(value.c_str());
@@ -153,6 +166,11 @@
}
// static
+bool DBusAdaptor::IsPath(::DBus::Signature signature) {
+ return signature == ::DBus::type< ::DBus::Path >::sig();
+}
+
+// static
bool DBusAdaptor::IsString(::DBus::Signature signature) {
return signature == ::DBus::type<string>::sig();
}