summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Xu <martin.xu@intel.com>2010-03-19 14:44:22 +0800
committerMarcel Holtmann <marcel@holtmann.org>2010-03-19 08:45:36 +0100
commit0f775e45e9ca49ba53357f3d18fd7a09337f0dfe (patch)
tree8521638f4f0374f26e8c012fcda2b2372f87dbbd
parent5a5f996e737fc2dd1fdb19451ab01d61b86b21c4 (diff)
downloadconnman-0f775e45e9ca49ba53357f3d18fd7a09337f0dfe.tar.gz
connman-0f775e45e9ca49ba53357f3d18fd7a09337f0dfe.tar.bz2
connman-0f775e45e9ca49ba53357f3d18fd7a09337f0dfe.zip
Handle the case that MobileNetworkCodeLength is not provided
Don't provide MNC and MCC in this case, but still create the 3G service.
-rw-r--r--plugins/ofono.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/plugins/ofono.c b/plugins/ofono.c
index 960753b6..c5521efb 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -632,14 +632,15 @@ static void add_network(struct connman_device *device, const char *path)
connman_network_set_index(network, -1);
mcc_mnc = connman_device_get_string(device, "MCC_MNC");
-
- mcc = g_strndup(mcc_mnc, 3);
- connman_network_set_string(network, "Cellular.MCC", mcc);
- g_free(mcc);
-
- mnc = g_strdup(mcc_mnc + 3);
- connman_network_set_string(network, "Cellular.MNC", mnc);
- g_free(mnc);
+ if (mcc_mnc != NULL) {
+ mcc = g_strndup(mcc_mnc, 3);
+ connman_network_set_string(network, "Cellular.MCC", mcc);
+ g_free(mcc);
+
+ mnc = g_strdup(mcc_mnc + 3);
+ connman_network_set_string(network, "Cellular.MNC", mnc);
+ g_free(mnc);
+ }
connman_device_add_network(device, network);
}
@@ -854,9 +855,6 @@ static void add_device(const char *path, const char *imsi,
if (imsi == NULL)
return;
- if (mnc_length != 2 && mnc_length != 3)
- return;
-
modem = g_hash_table_lookup(modem_hash, path);
if (modem == NULL)
return;
@@ -871,9 +869,11 @@ static void add_device(const char *path, const char *imsi,
connman_device_set_string(device, "Path", path);
- mcc_mnc = g_strndup(imsi, mnc_length + 3);
- connman_device_set_string(device, "MCC_MNC", mcc_mnc);
- g_free(mcc_mnc);
+ 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 (connman_device_register(device) < 0) {
connman_device_unref(device);
@@ -889,7 +889,8 @@ static void sim_properties_reply(DBusPendingCall *call, void *user_data)
{
const char *path = user_data;
const char *imsi;
- unsigned char mnc_length;
+ /* If MobileNetworkCodeLength is not provided, mnc_length is 0 */
+ unsigned char mnc_length = 0;
DBusMessage *reply;
DBusMessageIter array, dict;