diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-30 09:38:22 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-30 09:38:22 (GMT) |
commit | c0aa687b6ef7d1ae4b8a99cf5d3a1dfb50b7e392 (patch) | |
tree | 0abba205b10885b925d2bb32f5ee8b45589ec9b3 /src | |
parent | 729c00f5c1d538ac7f8dce43cd180862a08e601f (diff) | |
download | eulogium-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.c | 16 |
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); |