summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-30 09:38:22 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-30 09:38:22 (GMT)
commitc0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392 (patch)
tree0abba205b10885b925d2bb32f5ee8b45589ec9b3 /src
parent729c00f5c1d538ac7f8dce43cd180862a08e601f (diff)
downloadeulogium-c0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392.zip
eulogium-c0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392.tar.gz
eulogium-c0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392.tar.bz2
Properly iterate complex dbus messages, they can not be read otherwise
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-rw-r--r--src/eulogium.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 7519158..5342e66 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -1147,16 +1147,21 @@ static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pen
{
const char *errname, *errmsg;
struct eulogium_data *eulogium = data;
+ Eldbus_Message_Iter *iter;
struct _status_msg status;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
- if (eldbus_message_arguments_get(msg, "(ns)", &status)) {
+ if (!eldbus_message_arguments_get(msg, "(ns)", &iter)) {
EINA_LOG_ERR("Failed to get printer status.");
return;
}
+ if (!eldbus_message_iter_arguments_get(iter, "ns", &status.i, &status.s)) {
+ EINA_LOG_ERR("Message content does not match expected \"ns\" signature.");
+ return;
+ }
eulogium_printer_status_set(eulogium, &status);
}
@@ -1164,14 +1169,19 @@ static void _on_status_changed_ret(void *data, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
struct eulogium_data *eulogium = data;
+ Eldbus_Message_Iter *iter;
struct _status_msg status;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
- if (eldbus_message_arguments_get(msg, "(ns)", &status)) {
- EINA_LOG_ERR("Failed to get printer status.");
+ if (!eldbus_message_arguments_get(msg, "(ns)", &iter)) {
+ EINA_LOG_ERR("Printer status signal failed.");
+ return;
+ }
+ if (!eldbus_message_iter_arguments_get(iter, "ns", &status.i, &status.s)) {
+ EINA_LOG_ERR("Signal content does not match expected \"ns\" signature.");
return;
}
eulogium_printer_status_set(eulogium, &status);