summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2011-12-12 18:33:53 +0100
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2011-12-12 18:37:13 +0100
commit9542bf4d7a09b2267004538352c84b7413950e6f (patch)
treef663515857d64e924b6da38e6200bde6a6263d53 /plugins
parent8200c91aa4224800421ceedf66d29d454b4a89d7 (diff)
downloadconnman-9542bf4d7a09b2267004538352c84b7413950e6f.tar.gz
connman-9542bf4d7a09b2267004538352c84b7413950e6f.tar.bz2
connman-9542bf4d7a09b2267004538352c84b7413950e6f.zip
ofono: Monitor netreg Roaming property
Diffstat (limited to 'plugins')
-rw-r--r--plugins/ofono.c33
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);