--- 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