In the case there are more than one context saved by ofono, the signal
sent is an array and not a dictionary.
This commit implements this case by recursing it of one step.
---
 plugins/ofono.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/plugins/ofono.c b/plugins/ofono.c
index 8f0f146..9975f64 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -1501,7 +1501,7 @@ static gboolean cm_context_added(DBusConnection *conn,
        const char *path = dbus_message_get_path(message);
        char *context_path;
        struct modem_data *modem;
-       DBusMessageIter iter, properties;
+       DBusMessageIter iter, properties, dict;
 
        DBG("%s", path);
 
@@ -1517,6 +1517,13 @@ static gboolean cm_context_added(DBusConnection *conn,
        dbus_message_iter_next(&iter);
        dbus_message_iter_recurse(&iter, &properties);
 
+       /* Sometimes, we get an array instead of dict */
+       if (dbus_message_iter_get_arg_type(&properties) == DBUS_TYPE_ARRAY) {
+               /* Must recurse again */
+               dbus_message_iter_recurse(&properties, &dict);
+               if (add_cm_context(modem, context_path, &dict) != 0)
+                       return TRUE;
+       }
        if (add_cm_context(modem, context_path, &properties) != 0)
                return TRUE;
 
-- 
2.1.4

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to