summaryrefslogtreecommitdiffstats
path: root/src/network.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-07-14 15:20:37 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-07-14 15:45:06 -0500
commitc0862b7553e368e80763a82fdd6ef5fd8dee1b0a (patch)
tree23b45a1df4c6ec5468d8fc3f4481c7587bf071ef /src/network.c
parentd938e7f3002ef7f4db2a639a8b7d97f64293cbdf (diff)
downloadofono-c0862b7553e368e80763a82fdd6ef5fd8dee1b0a.tar.bz2
Refactor how EONS is used
Diffstat (limited to 'src/network.c')
-rw-r--r--src/network.c87
1 files changed, 81 insertions, 6 deletions
diff --git a/src/network.c b/src/network.c
index 77878aec..e88e5c57 100644
--- a/src/network.c
+++ b/src/network.c
@@ -423,6 +423,67 @@ static void set_network_operator_name(struct ofono_modem *modem,
}
}
+static void set_network_operator_eons_info(struct ofono_modem *modem,
+ struct network_operator_data *opd,
+ struct sim_eons_operator_info *eons_info)
+{
+ struct network_registration_data *netreg = modem->network_registration;
+ DBusConnection *conn = dbus_gsm_connection();
+ struct sim_eons_operator_info *old_eons_info = opd->eons_info;
+ const char *path;
+ const char *oldname;
+ const char *newname;
+ const char *oldinfo;
+ const char *newinfo;
+
+ if (!old_eons_info && !eons_info)
+ return;
+
+ path = network_operator_build_path(modem, opd->info);
+ opd->eons_info = eons_info;
+
+ if (old_eons_info && old_eons_info->longname)
+ oldname = old_eons_info->longname;
+ else
+ oldname = opd->info->name;
+
+ if (eons_info && eons_info->longname)
+ newname = eons_info->longname;
+ else
+ newname = opd->info->name;
+
+ if (oldname != newname && strcmp(oldname, newname)) {
+ dbus_gsm_signal_property_changed(conn, path,
+ NETWORK_OPERATOR_INTERFACE,
+ "Name", DBUS_TYPE_STRING,
+ &newname);
+
+ if (opd == netreg->current_operator) {
+ const char *operator = get_operator_display_name(modem);
+
+ dbus_gsm_signal_property_changed(conn, modem->path,
+ NETWORK_REGISTRATION_INTERFACE,
+ "Operator", DBUS_TYPE_STRING,
+ &operator);
+ }
+ }
+
+ if (old_eons_info && old_eons_info->info)
+ oldinfo = old_eons_info->info;
+ else
+ oldinfo = "";
+
+ if (eons_info && eons_info->info)
+ newname = eons_info->info;
+ else
+ newinfo = "";
+
+ if (oldname != newname && strcmp(oldname, newname))
+ dbus_gsm_signal_property_changed(conn, path,
+ NETWORK_OPERATOR_INTERFACE,
+ "AdditionalInformation",
+ DBUS_TYPE_STRING, &newinfo);
+}
static DBusMessage *network_operator_get_properties(DBusConnection *conn,
DBusMessage *msg,
void *data)
@@ -523,6 +584,7 @@ static struct network_operator_data *
const struct ofono_network_operator *op,
enum operator_status status)
{
+ struct network_registration_data *netreg = modem->network_registration;
DBusConnection *conn = dbus_gsm_connection();
const char *path;
struct network_operator_data *opd = NULL;
@@ -543,6 +605,10 @@ static struct network_operator_data *
opd->modem = modem;
opd->eons_info = NULL;
+ if (netreg->eons)
+ opd->eons_info = sim_eons_lookup(netreg->eons,
+ op->mcc, op->mnc);
+
if (!g_dbus_register_interface(conn, path, NETWORK_OPERATOR_INTERFACE,
network_operator_methods,
network_operator_signals,
@@ -1132,6 +1198,7 @@ static void sim_opl_read_cb(struct ofono_modem *modem, int ok,
{
struct network_registration_data *netreg = modem->network_registration;
int total;
+ GSList *l;
if (!ok)
return;
@@ -1142,16 +1209,24 @@ static void sim_opl_read_cb(struct ofono_modem *modem, int ok,
if (length < 8 || record_length < 8 || length < record_length)
return;
- /* If we don't have PNN, ignore this completely */
- if (!netreg->eons)
- return;
-
total = length / record_length;
sim_eons_add_pnn_record(netreg->eons, record, data, record_length);
- if (record == total)
- sim_eons_optimize(netreg->eons);
+ if (record != total)
+ return;
+
+ sim_eons_optimize(netreg->eons);
+
+ for (l = netreg->operator_list; l; l = l->next) {
+ struct network_operator_data *opd = l->data;
+ struct sim_eons_operator_info *eons_info;
+
+ eons_info = sim_eons_lookup(netreg->eons, opd->info->mcc,
+ opd->info->mnc);
+
+ set_network_operator_eons_info(modem, opd, eons_info);
+ }
}
static void sim_pnn_read_cb(struct ofono_modem *modem, int ok,