summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wagner <wagi@monom.org>2010-05-20 22:43:04 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-05-21 00:50:34 +0200
commitfd6b4fd3904580140fbf8ad64763d46a189ff1c6 (patch)
treee47d356505e71c434cef374fe1ef523872db9d57
parent3889170e7e5adb01b024470ba41e4a24a1a24187 (diff)
downloadconnman-fd6b4fd3904580140fbf8ad64763d46a189ff1c6.tar.gz
connman-fd6b4fd3904580140fbf8ad64763d46a189ff1c6.tar.bz2
connman-fd6b4fd3904580140fbf8ad64763d46a189ff1c6.zip
Adapt to new MCC and MNC properties from oFono
Since oFono version 0.20 and later MobileNetworkCodeLength has been deprecated. MobileCountryCode and MobileNetworkCode have to be used instead.
-rw-r--r--plugins/ofono.c55
1 files changed, 36 insertions, 19 deletions
diff --git a/plugins/ofono.c b/plugins/ofono.c
index d0f358e8..d0e4641a 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -616,8 +616,9 @@ static struct connman_network_driver network_driver = {
static void add_network(struct connman_device *device, const char *path)
{
struct connman_network *network;
- char *ident, *mcc, *mnc;
- const char *mcc_mnc;
+ char *ident;
+ const char *mcc;
+ const char *mnc;
DBG("device %p path %s", device, path);
@@ -638,16 +639,13 @@ static void add_network(struct connman_device *device, const char *path)
connman_network_set_available(network, TRUE);
connman_network_set_index(network, -1);
- mcc_mnc = connman_device_get_string(device, "MCC_MNC");
- if (mcc_mnc != NULL) {
- mcc = g_strndup(mcc_mnc, 3);
+ mcc = connman_device_get_string(device, "MCC");
+ if (mcc != NULL)
connman_network_set_string(network, "Cellular.MCC", mcc);
- g_free(mcc);
- mnc = g_strdup(mcc_mnc + 3);
+ mnc = connman_device_get_string(device, "MNC");
+ if (mnc != NULL)
connman_network_set_string(network, "Cellular.MNC", mnc);
- g_free(mnc);
- }
connman_device_add_network(device, network);
}
@@ -843,13 +841,12 @@ done:
}
static void add_device(const char *path, const char *imsi,
- unsigned char mnc_length)
+ const char *mcc, const char *mnc)
{
struct modem_data *modem;
struct connman_device *device;
- char *mcc_mnc;
- DBG("path %s imsi %s mnc_length %d", path, imsi, mnc_length);
+ DBG("path %s imsi %s", path, imsi);
if (path == NULL)
return;
@@ -870,12 +867,10 @@ static void add_device(const char *path, const char *imsi,
connman_device_set_mode(device, CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE);
connman_device_set_string(device, "Path", path);
-
- if (mnc_length == 2 || mnc_length == 3) {
- mcc_mnc = g_strndup(imsi, mnc_length + 3);
- connman_device_set_string(device, "MCC_MNC", mcc_mnc);
- g_free(mcc_mnc);
- }
+ if (mcc != NULL)
+ connman_device_set_string(device, "MCC", mcc);
+ if (mnc != NULL)
+ connman_device_set_string(device, "MNC", mnc);
if (connman_device_register(device) < 0) {
connman_device_unref(device);
@@ -891,6 +886,8 @@ static void sim_properties_reply(DBusPendingCall *call, void *user_data)
{
const char *path = user_data;
const char *imsi;
+ char *mcc = NULL;
+ char *mnc = NULL;
/* If MobileNetworkCodeLength is not provided, mnc_length is 0 */
unsigned char mnc_length = 0;
DBusMessage *reply;
@@ -920,14 +917,34 @@ static void sim_properties_reply(DBusPendingCall *call, void *user_data)
if (g_str_equal(key, "SubscriberIdentity") == TRUE)
dbus_message_iter_get_basic(&value, &imsi);
+ /*
+ * 'MobileNetworkCodeLength' is deprecated since version 0.20, but
+ * keep it here for backward compatibility reasons.
+ */
else if (g_str_equal(key, "MobileNetworkCodeLength") == TRUE)
dbus_message_iter_get_basic(&value,
(void *) &mnc_length);
+ else if (g_str_equal(key, "MobileCountryCode") == TRUE)
+ dbus_message_iter_get_basic(&value,
+ (void *) &mcc);
+ else if (g_str_equal(key, "MobileNetworkCode") == TRUE)
+ dbus_message_iter_get_basic(&value,
+ (void *) &mnc);
dbus_message_iter_next(&dict);
}
- add_device(path, imsi, mnc_length);
+ if (mnc_length == 2 || mnc_length == 3) {
+ mcc = g_strndup(imsi, 3);
+ mnc = g_strndup(imsi + 3, mnc_length);
+ }
+
+ add_device(path, imsi, mcc, mnc);
+
+ if (mnc_length == 2 || mnc_length == 3) {
+ g_free(mcc);
+ g_free(mnc);
+ }
done:
dbus_message_unref(reply);