summaryrefslogtreecommitdiff
path: root/plugins
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 /plugins
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.
Diffstat (limited to 'plugins')
-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);