From 643144aafbfc58bf61f50a0cdba054bcad465974 Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Sat, 19 Feb 2011 04:54:29 +0100 Subject: call-forwarding: update EFs changed by SIM refresh --- src/call-forwarding.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src/call-forwarding.c') diff --git a/src/call-forwarding.c b/src/call-forwarding.c index d13f9907..fe535b84 100644 --- a/src/call-forwarding.c +++ b/src/call-forwarding.c @@ -1358,8 +1358,31 @@ static void sim_cphs_cff_read_cb(int ok, int total_length, int record, DBUS_TYPE_BOOLEAN, &cfu_voice); } -static void sim_read_cf_indicator(struct ofono_call_forwarding *cf) +static void sim_cfis_changed(int id, void *userdata) { + struct ofono_call_forwarding *cf = userdata; + + if (((cf->flags & CALL_FORWARDING_FLAG_CPHS_CFF) || + cf->cfis_record_id > 0) && is_cfu_enabled(cf, NULL)) { + DBusConnection *conn = ofono_dbus_get_connection(); + const char *path = __ofono_atom_get_path(cf->atom); + ofono_bool_t status = FALSE; + + ofono_dbus_signal_property_changed(conn, path, + OFONO_CALL_FORWARDING_INTERFACE, + "ForwardingFlagOnSim", + DBUS_TYPE_BOOLEAN, &status); + } + + cf->cfis_record_id = 0; + cf->flags &= ~CALL_FORWARDING_FLAG_CPHS_CFF; + + /* + * TODO: remove forwarding rules in + * cf->cf_conditions[CALL_FORWARDING_TYPE_UNCONDITIONAL] that + * originate from EFcfis before adding the new rules? + */ + if (__ofono_sim_service_available(cf->sim, SIM_UST_SERVICE_CFIS, SIM_SST_SERVICE_CFIS) == TRUE) @@ -1372,6 +1395,26 @@ static void sim_read_cf_indicator(struct ofono_call_forwarding *cf) sim_cphs_cff_read_cb, cf); } +static void sim_read_cf_indicator(struct ofono_call_forwarding *cf) +{ + if (__ofono_sim_service_available(cf->sim, + SIM_UST_SERVICE_CFIS, + SIM_SST_SERVICE_CFIS) == TRUE) { + ofono_sim_read(cf->sim_context, SIM_EFCFIS_FILEID, + OFONO_SIM_FILE_STRUCTURE_FIXED, + sim_cfis_read_cb, cf); + ofono_sim_add_file_watch(cf->sim_context, SIM_EFCFIS_FILEID, + sim_cfis_changed, cf, NULL); + } else { + ofono_sim_read(cf->sim_context, SIM_EF_CPHS_CFF_FILEID, + OFONO_SIM_FILE_STRUCTURE_TRANSPARENT, + sim_cphs_cff_read_cb, cf); + ofono_sim_add_file_watch(cf->sim_context, + SIM_EF_CPHS_CFF_FILEID, + sim_cfis_changed, cf, NULL); + } +} + int ofono_call_forwarding_driver_register(const struct ofono_call_forwarding_driver *d) { DBG("driver: %p, name: %s", d, d->name); -- cgit v1.2.3