diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-12-12 18:33:53 +0100 |
---|---|---|
committer | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-12-12 18:37:13 +0100 |
commit | 9542bf4d7a09b2267004538352c84b7413950e6f (patch) | |
tree | f663515857d64e924b6da38e6200bde6a6263d53 /plugins | |
parent | 8200c91aa4224800421ceedf66d29d454b4a89d7 (diff) | |
download | connman-9542bf4d7a09b2267004538352c84b7413950e6f.tar.gz connman-9542bf4d7a09b2267004538352c84b7413950e6f.tar.bz2 connman-9542bf4d7a09b2267004538352c84b7413950e6f.zip |
ofono: Monitor netreg Roaming property
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/ofono.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/plugins/ofono.c b/plugins/ofono.c index f8f3b244..03a79fd6 100644 --- a/plugins/ofono.c +++ b/plugins/ofono.c @@ -137,6 +137,7 @@ struct modem_data { /* Netreg Interface */ char *name; uint8_t strength; + connman_bool_t roaming; /* pending calls */ DBusPendingCall *call_set_property; @@ -946,6 +947,8 @@ static void add_network(struct modem_data *modem) connman_network_set_available(modem->network, TRUE); + connman_network_set_roaming(modem->network, modem->roaming); + if (connman_device_add_network(modem->device, modem->network) < 0) { connman_network_unref(modem->network); modem->network = NULL; @@ -1254,6 +1257,32 @@ static void netreg_update_strength(struct modem_data *modem, connman_network_update(modem->network); } +static void netreg_update_roaming(struct modem_data *modem, + DBusMessageIter *value) +{ + char *status; + connman_bool_t roaming; + + dbus_message_iter_get_basic(value, &status); + + if (g_str_equal(status, "roaming") == TRUE) + roaming = TRUE; + else + roaming = FALSE; + + if (roaming == modem->roaming) + return; + + modem->roaming = roaming; + + if (modem->network == NULL) + return; + + connman_network_set_bool(modem->network, + "Roaming", modem->roaming); + connman_network_update(modem->network); +} + static gboolean netreg_changed(DBusConnection *connection, DBusMessage *message, void *user_data) { @@ -1281,6 +1310,8 @@ static gboolean netreg_changed(DBusConnection *connection, DBusMessage *message, netreg_update_name(modem, &value); } else if (g_str_equal(key, "Strength") == TRUE) { netreg_update_strength(modem, &value); + } else if (g_str_equal(key, "Status") == TRUE) { + netreg_update_roaming(modem, &value); } return TRUE; @@ -1305,6 +1336,8 @@ static void netreg_properties_reply(struct modem_data *modem, netreg_update_name(modem, &value); } else if (g_str_equal(key, "Strength") == TRUE) { netreg_update_strength(modem, &value); + } else if (g_str_equal(key, "Status") == TRUE) { + netreg_update_roaming(modem, &value); } dbus_message_iter_next(dict); |