blob: 9b57ba215cf5de12da6036c7ee657744ffcb566d [file] [log] [blame]
Chris Masoned0ceb8c2011-06-02 10:05:39 -07001// Copyright (c) 2011 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
Chris Masone8fe2c7e2011-06-09 15:51:19 -07005#include <map>
Chris Masoned0ceb8c2011-06-02 10:05:39 -07006#include <string>
Chris Masone8fe2c7e2011-06-09 15:51:19 -07007#include <vector>
Chris Masoned0ceb8c2011-06-02 10:05:39 -07008
Chris Masone8fe2c7e2011-06-09 15:51:19 -07009#include <base/logging.h>
Chris Masoned0ceb8c2011-06-02 10:05:39 -070010#include <dbus-c++/dbus.h>
11
12#include "shill/dbus_adaptor.h"
Chris Masone8fe2c7e2011-06-09 15:51:19 -070013#include "shill/error.h"
14#include "shill/property_store_interface.h"
15
16using std::map;
17using std::string;
18using std::vector;
Chris Masoned0ceb8c2011-06-02 10:05:39 -070019
20namespace shill {
21
Chris Masone8fe2c7e2011-06-09 15:51:19 -070022// static
23const char DBusAdaptor::kStringmapSig[] = "a{ss}";
24// static
25const char DBusAdaptor::kStringsSig[] = "as";
26
27DBusAdaptor::DBusAdaptor(DBus::Connection* conn, const string &object_path)
Chris Masoned0ceb8c2011-06-02 10:05:39 -070028 : DBus::ObjectAdaptor(*conn, object_path) {
29}
30
31DBusAdaptor::~DBusAdaptor() {}
32
33// static
Chris Masone8fe2c7e2011-06-09 15:51:19 -070034bool DBusAdaptor::DispatchOnType(PropertyStoreInterface *store,
35 const string &name,
36 const ::DBus::Variant &value,
37 ::DBus::Error &error) {
38 bool set = false;
39 Error e(Error::kInvalidArguments, "Could not write " + name);
40
41 if (DBusAdaptor::IsBool(value.signature()))
42 set = store->SetBoolProperty(name, value.reader().get_bool(), &e);
43 else if (DBusAdaptor::IsByte(value.signature()))
44 set = store->SetUint8Property(name, value.reader().get_byte(), &e);
45 else if (DBusAdaptor::IsInt16(value.signature()))
46 set = store->SetInt16Property(name, value.reader().get_int16(), &e);
47 else if (DBusAdaptor::IsInt32(value.signature()))
48 set = store->SetInt32Property(name, value.reader().get_int32(), &e);
49 else if (DBusAdaptor::IsString(value.signature()))
50 set = store->SetStringProperty(name, value.reader().get_string(), &e);
51 else if (DBusAdaptor::IsStringmap(value.signature()))
52 set = store->SetStringmapProperty(name,
53 value.operator map<string, string>(),
54 &e);
55 else if (DBusAdaptor::IsStrings(value.signature()))
56 set = store->SetStringsProperty(name, value.operator vector<string>(), &e);
57 else if (DBusAdaptor::IsUint16(value.signature()))
58 set = store->SetUint16Property(name, value.reader().get_uint16(), &e);
59 else if (DBusAdaptor::IsUint32(value.signature()))
60 set = store->SetUint32Property(name, value.reader().get_uint32(), &e);
61 else
62 NOTREACHED();
63
64 if (!set)
65 e.ToDBusError(&error);
66 return set;
67}
68
69// static
Chris Masoned0ceb8c2011-06-02 10:05:39 -070070::DBus::Variant DBusAdaptor::BoolToVariant(bool value) {
71 ::DBus::Variant v;
72 v.writer().append_bool(value);
73 return v;
74}
75
76// static
Chris Masone8fe2c7e2011-06-09 15:51:19 -070077::DBus::Variant DBusAdaptor::ByteToVariant(uint8 value) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070078 ::DBus::Variant v;
Chris Masone8fe2c7e2011-06-09 15:51:19 -070079 v.writer().append_byte(value);
Chris Masoned0ceb8c2011-06-02 10:05:39 -070080 return v;
81}
82
83// static
Chris Masone8fe2c7e2011-06-09 15:51:19 -070084::DBus::Variant DBusAdaptor::Int16ToVariant(int16 value) {
85 ::DBus::Variant v;
86 v.writer().append_int16(value);
87 return v;
88}
89
90// static
91::DBus::Variant DBusAdaptor::Int32ToVariant(int32 value) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070092 ::DBus::Variant v;
93 v.writer().append_int32(value);
94 return v;
95}
96
97// static
Chris Masone8fe2c7e2011-06-09 15:51:19 -070098::DBus::Variant DBusAdaptor::StringToVariant(const string &value) {
Chris Masoned0ceb8c2011-06-02 10:05:39 -070099 ::DBus::Variant v;
100 v.writer().append_string(value.c_str());
101 return v;
102}
103
Chris Masone8fe2c7e2011-06-09 15:51:19 -0700104// static
105::DBus::Variant DBusAdaptor::StringmapToVariant(
106 const map<string, string> &value) {
107 ::DBus::Variant v;
108 ::DBus::MessageIter writer = v.writer();
109 writer << value;
110 return v;
111}
112
113// static
114::DBus::Variant DBusAdaptor::StringsToVariant(const vector<string> &value) {
115 ::DBus::Variant v;
116 ::DBus::MessageIter writer = v.writer();
117 writer << value;
118 return v;
119}
120
121// static
122::DBus::Variant DBusAdaptor::Uint16ToVariant(uint16 value) {
123 ::DBus::Variant v;
124 v.writer().append_uint16(value);
125 return v;
126}
127
128// static
129::DBus::Variant DBusAdaptor::Uint32ToVariant(uint32 value) {
130 ::DBus::Variant v;
131 v.writer().append_uint32(value);
132 return v;
133}
134
135// static
136bool DBusAdaptor::IsBool(::DBus::Signature signature) {
137 return signature == ::DBus::type<bool>::sig();
138}
139
140// static
141bool DBusAdaptor::IsByte(::DBus::Signature signature) {
142 return signature == ::DBus::type<uint8>::sig();
143}
144
145// static
146bool DBusAdaptor::IsInt16(::DBus::Signature signature) {
147 return signature == ::DBus::type<int16>::sig();
148}
149
150// static
151bool DBusAdaptor::IsInt32(::DBus::Signature signature) {
152 return signature == ::DBus::type<int32>::sig();
153}
154
155// static
156bool DBusAdaptor::IsString(::DBus::Signature signature) {
157 return signature == ::DBus::type<string>::sig();
158}
159
160// static
161bool DBusAdaptor::IsStringmap(::DBus::Signature signature) {
162 return signature == DBusAdaptor::kStringmapSig;
163}
164
165// static
166bool DBusAdaptor::IsStrings(::DBus::Signature signature) {
167 return signature == DBusAdaptor::kStringsSig;
168}
169
170// static
171bool DBusAdaptor::IsUint16(::DBus::Signature signature) {
172 return signature == ::DBus::type<uint16>::sig();
173}
174
175// static
176bool DBusAdaptor::IsUint32(::DBus::Signature signature) {
177 return signature == ::DBus::type<uint32>::sig();
178}
179
Chris Masoned0ceb8c2011-06-02 10:05:39 -0700180} // namespace shill