diff options
author | Martin Xu <martin.xu@intel.com> | 2010-03-19 14:44:22 +0800 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-03-19 08:45:36 +0100 |
commit | 0f775e45e9ca49ba53357f3d18fd7a09337f0dfe (patch) | |
tree | 8521638f4f0374f26e8c012fcda2b2372f87dbbd /plugins/ofono.c | |
parent | 5a5f996e737fc2dd1fdb19451ab01d61b86b21c4 (diff) | |
download | connman-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.
Diffstat (limited to 'plugins/ofono.c')
-rw-r--r-- | plugins/ofono.c | 31 |
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; |