summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Qiu <zqiu@google.com>2015-08-25 11:54:34 -0700
committerPeter Qiu <zqiu@google.com>2015-08-25 12:02:01 -0700
commit2d4e68c1666d841d00ca60404f30d604cb67a479 (patch)
tree476d561f87b8d9ba03a006138aec262f30fbc8fd
parent67cf363132ddeade1cfdd2965787abc37174f18a (diff)
downloadlibchromeos-2d4e68c1666d841d00ca60404f30d604cb67a479.tar.gz
libchromeos: dbus: support additional types for variant deserialization
This is needed for supporting cellular modem proxies in shill. While there, use std::tuple instead of std::pair for deserializing struct variant type. BUG=chromium:517680 TEST=build libchromeos TEST=Run network_3GSmokeTest on device with shill using libchromeos dbus Change-Id: I6c138ee4a52c2655143929c70d6958d6aff3b05f
-rw-r--r--chromeos/dbus/data_serialization.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/chromeos/dbus/data_serialization.cc b/chromeos/dbus/data_serialization.cc
index 00ad723..f57697b 100644
--- a/chromeos/dbus/data_serialization.cc
+++ b/chromeos/dbus/data_serialization.cc
@@ -219,6 +219,19 @@ bool PopArrayValueFromReader(dbus::MessageReader* reader,
else if (signature == "a{sa{sv}}")
return PopTypedMapFromReader<
std::string, chromeos::VariantDictionary>(reader, value);
+ else if (signature == "a{say}")
+ return PopTypedMapFromReader<
+ std::string, std::vector<uint8_t>>(reader, value);
+ else if (signature == "a{uv}")
+ return PopTypedMapFromReader<uint32_t, chromeos::Any>(reader, value);
+ else if (signature == "a(su)")
+ return PopTypedArrayFromReader<
+ std::tuple<std::string, uint32_t>>(reader, value);
+ else if (signature == "a{uu}")
+ return PopTypedMapFromReader<uint32_t, uint32_t>(reader, value);
+ else if (signature == "a(uu)")
+ return PopTypedArrayFromReader<
+ std::tuple<uint32_t, uint32_t>>(reader, value);
// When a use case for particular array signature is found, feel free
// to add handing for it here.
@@ -234,10 +247,15 @@ bool PopStructValueFromReader(dbus::MessageReader* reader,
chromeos::Any* value) {
std::string signature = reader->GetDataSignature();
if (signature == "(ii)")
- return PopTypedValueFromReader<std::pair<int, int>>(reader, value);
+ return PopTypedValueFromReader<std::tuple<int, int>>(reader, value);
else if (signature == "(ss)")
- return PopTypedValueFromReader<std::pair<std::string, std::string>>(reader,
- value);
+ return PopTypedValueFromReader<std::tuple<std::string, std::string>>(reader,
+ value);
+ else if (signature == "(ub)")
+ return PopTypedValueFromReader<std::tuple<uint32_t, bool>>(reader, value);
+ else if (signature == "(uu)")
+ return PopTypedValueFromReader<std::tuple<uint32_t, uint32_t>>(reader,
+ value);
// When a use case for particular struct signature is found, feel free
// to add handing for it here.