summaryrefslogtreecommitdiffstats
path: root/src/network.c
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2009-07-05 05:14:15 +0200
committerDenis Kenzior <denkenz@gmail.com>2009-07-14 15:45:03 -0500
commit98a4308b307cefd3b6daa60195d4e8d91ec7c709 (patch)
treee5057f07616b97e357684e88dc76870f598df929 /src/network.c
parentfeb36e2d5b0edb882e152c1fd958166e22eb0cbd (diff)
downloadofono-98a4308b307cefd3b6daa60195d4e8d91ec7c709.tar.bz2
Read EF-PNN, EF-OPL and override network names accordingly.
Diffstat (limited to 'src/network.c')
-rw-r--r--src/network.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/src/network.c b/src/network.c
index 402d2af1..92e52e5a 100644
--- a/src/network.c
+++ b/src/network.c
@@ -341,13 +341,15 @@ static char *get_operator_display_name(struct ofono_modem *modem)
return name;
}
+ plmn = netreg->current_operator->name;
+ if (netreg->current_operator->override_name)
+ plmn = netreg->current_operator->override_name;
+
if (!netreg->spname || strlen(netreg->spname) == 0) {
- g_strlcpy(name, netreg->current_operator->name, len);
+ g_strlcpy(name, plmn, len);
return name;
}
- plmn = netreg->current_operator->name;
-
home_or_spdi =
(netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED) ||
ofono_operator_in_spdi(modem, netreg->current_operator);
@@ -385,20 +387,22 @@ static void set_network_operator_name(struct ofono_modem *modem,
strncpy(op->name, name, OFONO_MAX_OPERATOR_NAME_LENGTH);
op->name[OFONO_MAX_OPERATOR_NAME_LENGTH] = '\0';
- path = network_operator_build_path(modem, op);
+ if (!op->override_name) {
+ path = network_operator_build_path(modem, op);
- dbus_gsm_signal_property_changed(conn, path,
- NETWORK_OPERATOR_INTERFACE,
- "Name", DBUS_TYPE_STRING,
- &name);
+ dbus_gsm_signal_property_changed(conn, path,
+ NETWORK_OPERATOR_INTERFACE,
+ "Name", DBUS_TYPE_STRING,
+ &name);
- if (op == netreg->current_operator) {
- operator = get_operator_display_name(modem);
+ if (op == netreg->current_operator) {
+ operator = get_operator_display_name(modem);
- dbus_gsm_signal_property_changed(conn, modem->path,
- NETWORK_REGISTRATION_INTERFACE,
- "Operator", DBUS_TYPE_STRING,
- &operator);
+ dbus_gsm_signal_property_changed(conn, modem->path,
+ NETWORK_REGISTRATION_INTERFACE,
+ "Operator", DBUS_TYPE_STRING,
+ &operator);
+ }
}
}
@@ -415,6 +419,9 @@ static DBusMessage *network_operator_get_properties(DBusConnection *conn,
const char *status =
network_operator_status_to_string(op->operator->status);
+ if (op->operator->override_name)
+ name = op->operator->override_name;
+
reply = dbus_message_new_method_return(msg);
if (!reply)
return NULL;
@@ -854,6 +861,13 @@ void ofono_network_registration_notify(struct ofono_modem *modem, int status,
}
}
+static void network_operator_name_override(struct ofono_modem *modem,
+ struct ofono_network_operator *op)
+{
+ op->override_name =
+ ofono_operator_name_sim_override(modem, op->mcc, op->mnc);
+}
+
static void operator_list_callback(const struct ofono_error *error, int total,
const struct ofono_network_operator *list,
void *data)
@@ -892,11 +906,12 @@ static void operator_list_callback(const struct ofono_error *error, int total,
} else {
/* New operator */
struct ofono_network_operator *op =
- g_try_new0(struct ofono_network_operator, 1);
+ g_memdup(&list[i],
+ sizeof(struct ofono_network_operator));
if (!op)
continue;
- memcpy(op, &list[i], sizeof(struct ofono_network_operator));
+ network_operator_name_override(modem, op);
if (network_operator_dbus_register(modem, op)) {
n = g_slist_prepend(n, op);
@@ -970,15 +985,14 @@ static void current_operator_callback(const struct ofono_error *error,
if (current) {
netreg->current_operator =
- g_try_new0(struct ofono_network_operator, 1);
-
+ g_memdup(current,
+ sizeof(struct ofono_network_operator));
if (!netreg->current_operator) {
ofono_error("Unable to allocate current operator");
return;
}
- memcpy(netreg->current_operator, current,
- sizeof(struct ofono_network_operator));
+ network_operator_name_override(modem, netreg->current_operator);
netreg->current_operator->status = OPERATOR_STATUS_CURRENT;