summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-03-23 13:43:55 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-03-23 21:16:50 -0500
commitd3ac9188f053574dd4954880ea4e8f4c2d88c876 (patch)
tree61e4c769bacb9ecc40a53f5940faba17d14535e9 /src
parent01a4a93bee6178c085186f8be8b3d106f5673e53 (diff)
downloadofono-d3ac9188f053574dd4954880ea4e8f4c2d88c876.tar.bz2
Fix: Handle broken modems that returns empty COPS
Diffstat (limited to 'src')
-rw-r--r--src/network.c20
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);