---
 plugins/ofono.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/plugins/ofono.c b/plugins/ofono.c
index 47afe13..25ee007 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -76,6 +76,7 @@ struct modem_data {
        gboolean pending_online;
        gboolean requested_online;
        gboolean online;
+       gboolean locked;
 
        uint8_t strength, has_strength;
 };
@@ -995,13 +996,13 @@ static gboolean modem_has_gprs(DBusMessageIter *array)
        return modem_has_interface(array, OFONO_GPRS_INTERFACE);
 }
 
-static void add_modem(const char *path, DBusMessageIter *properties)
+static void add_modem(const char *path, DBusMessageIter *prop)
 {
        struct modem_data *modem;
-       DBusMessageIter dict;
        dbus_bool_t powered = FALSE;
        dbus_bool_t online = FALSE;
        dbus_bool_t has_online = FALSE;
+       dbus_bool_t locked = FALSE;
        gboolean has_sim = FALSE;
        gboolean has_reg = FALSE;
        gboolean has_gprs = FALSE;
@@ -1021,13 +1022,11 @@ static void add_modem(const char *path, DBusMessageIter 
*properties)
 
        g_hash_table_insert(modem_hash, g_strdup(path), modem);
 
-       dbus_message_iter_recurse(properties, &dict);
-
-       while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
+       while (dbus_message_iter_get_arg_type(prop) == DBUS_TYPE_DICT_ENTRY) {
                DBusMessageIter entry, value;
                const char *key;
 
-               dbus_message_iter_recurse(&dict, &entry);
+               dbus_message_iter_recurse(prop, &entry);
                dbus_message_iter_get_basic(&entry, &key);
 
                dbus_message_iter_next(&entry);
@@ -1035,6 +1034,8 @@ static void add_modem(const char *path, DBusMessageIter 
*properties)
 
                if (g_str_equal(key, "Powered") == TRUE)
                        dbus_message_iter_get_basic(&value, &powered);
+               else if (g_str_equal(key, "Lockdown") == TRUE)
+                       dbus_message_iter_get_basic(&value, &locked);
                else if (g_str_equal(key, "Online") == TRUE) {
                        has_online = TRUE;
                        dbus_message_iter_get_basic(&value, &online);
@@ -1044,15 +1045,19 @@ static void add_modem(const char *path, DBusMessageIter 
*properties)
                        has_gprs = modem_has_gprs(&value);
                }
 
-               dbus_message_iter_next(&dict);
+               dbus_message_iter_next(prop);
        }
 
+       if (locked)
+               return;
+
        if (!powered)
                modem_change_powered(path, TRUE);
 
        modem->has_sim = has_sim;
        modem->has_reg = has_reg;
        modem->has_gprs = has_gprs;
+       modem->locked = locked;
 
        update_modem_online(modem, online);
 
@@ -1176,6 +1181,13 @@ static gboolean modem_changed(DBusConnection 
*connection, DBusMessage *message,
                dbus_message_iter_get_basic(&value, &online);
 
                update_modem_online(modem, online);
+       } else if (g_str_equal(key, "Lockdown") == TRUE) {
+               dbus_bool_t locked;
+
+               dbus_message_iter_get_basic(&value, &locked);
+
+               modem->locked = locked;
+
        } else if (g_str_equal(key, "Interfaces") == TRUE) {
                gboolean has_sim = modem_has_sim(&value);
                gboolean has_reg = modem_has_reg(&value);
-- 
1.7.3.2

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to