diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-03-23 13:43:55 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-03-23 21:16:50 -0500 |
commit | d3ac9188f053574dd4954880ea4e8f4c2d88c876 (patch) | |
tree | 61e4c769bacb9ecc40a53f5940faba17d14535e9 /src | |
parent | 01a4a93bee6178c085186f8be8b3d106f5673e53 (diff) | |
download | ofono-d3ac9188f053574dd4954880ea4e8f4c2d88c876.tar.bz2 |
Fix: Handle broken modems that returns empty COPS
Diffstat (limited to 'src')
-rw-r--r-- | src/network.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/network.c b/src/network.c index 64178a41..3a9c5175 100644 --- a/src/network.c +++ b/src/network.c @@ -423,6 +423,7 @@ static char *get_operator_display_name(struct ofono_netreg *netreg) struct network_operator_data *opd = netreg->current_operator; const char *plmn; static char name[1024]; + static char mccmnc[OFONO_MAX_MCC_LENGTH + OFONO_MAX_MNC_LENGTH + 1]; int len = sizeof(name); int home_or_spdi; @@ -436,6 +437,16 @@ static char *get_operator_display_name(struct ofono_netreg *netreg) } plmn = opd->name; + + /* + * This is a fallback on some really broken hardware which do not + * report the COPS name + */ + if (plmn[0] == '\0') { + snprintf(mccmnc, sizeof(mccmnc), "%s%s", opd->mcc, opd->mnc); + plmn = mccmnc; + } + if (opd->eons_info && opd->eons_info->longname) plmn = opd->eons_info->longname; @@ -476,6 +487,9 @@ static void set_network_operator_name(struct network_operator_data *opd, const char *path; const char *operator; + if (name[0] == '\0') + return; + if (!strncmp(opd->name, name, OFONO_MAX_OPERATOR_NAME_LENGTH)) return; @@ -579,6 +593,7 @@ static DBusMessage *network_operator_get_properties(DBusConnection *conn, DBusMessage *reply; DBusMessageIter iter; DBusMessageIter dict; + char mccmnc[OFONO_MAX_MCC_LENGTH + OFONO_MAX_MNC_LENGTH + 1]; const char *name = opd->name; const char *status = @@ -597,6 +612,11 @@ static DBusMessage *network_operator_get_properties(DBusConnection *conn, OFONO_PROPERTIES_ARRAY_SIGNATURE, &dict); + if (name[0] == '\0') { + snprintf(mccmnc, sizeof(mccmnc), "%s%s", opd->mcc, opd->mnc); + name = mccmnc; + } + ofono_dbus_dict_append(&dict, "Name", DBUS_TYPE_STRING, &name); ofono_dbus_dict_append(&dict, "Status", DBUS_TYPE_STRING, &status); |