mirror of git://git.sysmocom.de/ofono
sim: Watch for changes to EFmsisdn and EFsdn
This commit is contained in:
parent
0550553c87
commit
f2a82b8e8d
34
src/sim.c
34
src/sim.c
|
@ -1198,10 +1198,12 @@ out:
|
||||||
check:
|
check:
|
||||||
/* All records retrieved */
|
/* All records retrieved */
|
||||||
if (sim->service_numbers) {
|
if (sim->service_numbers) {
|
||||||
char **service_numbers;
|
|
||||||
|
|
||||||
sim->service_numbers = g_slist_reverse(sim->service_numbers);
|
sim->service_numbers = g_slist_reverse(sim->service_numbers);
|
||||||
sim->sdn_ready = TRUE;
|
sim->sdn_ready = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sim->sdn_ready) {
|
||||||
|
char **service_numbers;
|
||||||
|
|
||||||
service_numbers = get_service_numbers(sim->service_numbers);
|
service_numbers = get_service_numbers(sim->service_numbers);
|
||||||
|
|
||||||
|
@ -1214,6 +1216,21 @@ check:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sim_service_numbers_changed(int id, void *userdata)
|
||||||
|
{
|
||||||
|
struct ofono_sim *sim = userdata;
|
||||||
|
|
||||||
|
if (sim->service_numbers) {
|
||||||
|
g_slist_foreach(sim->service_numbers,
|
||||||
|
(GFunc)service_number_free, NULL);
|
||||||
|
g_slist_free(sim->service_numbers);
|
||||||
|
sim->service_numbers = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ofono_sim_read(sim->context, SIM_EFSDN_FILEID,
|
||||||
|
OFONO_SIM_FILE_STRUCTURE_FIXED, sim_sdn_read_cb, sim);
|
||||||
|
}
|
||||||
|
|
||||||
static void sim_own_numbers_update(struct ofono_sim *sim)
|
static void sim_own_numbers_update(struct ofono_sim *sim)
|
||||||
{
|
{
|
||||||
ofono_sim_read(sim->context, SIM_EFMSISDN_FILEID,
|
ofono_sim_read(sim->context, SIM_EFMSISDN_FILEID,
|
||||||
|
@ -1221,6 +1238,13 @@ static void sim_own_numbers_update(struct ofono_sim *sim)
|
||||||
sim);
|
sim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sim_own_numbers_changed(int id, void *userdata)
|
||||||
|
{
|
||||||
|
struct ofono_sim *sim = userdata;
|
||||||
|
|
||||||
|
sim_own_numbers_update(sim);
|
||||||
|
}
|
||||||
|
|
||||||
static void sim_efimg_read_cb(int ok, int length, int record,
|
static void sim_efimg_read_cb(int ok, int length, int record,
|
||||||
const unsigned char *data,
|
const unsigned char *data,
|
||||||
int record_length, void *userdata)
|
int record_length, void *userdata)
|
||||||
|
@ -1270,9 +1294,14 @@ static void sim_ready(enum ofono_sim_state new_state, void *user)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sim_own_numbers_update(sim);
|
sim_own_numbers_update(sim);
|
||||||
|
ofono_sim_add_file_watch(sim->context, SIM_EFMSISDN_FILEID,
|
||||||
|
sim_own_numbers_changed, sim, NULL);
|
||||||
|
|
||||||
ofono_sim_read(sim->context, SIM_EFSDN_FILEID,
|
ofono_sim_read(sim->context, SIM_EFSDN_FILEID,
|
||||||
OFONO_SIM_FILE_STRUCTURE_FIXED, sim_sdn_read_cb, sim);
|
OFONO_SIM_FILE_STRUCTURE_FIXED, sim_sdn_read_cb, sim);
|
||||||
|
ofono_sim_add_file_watch(sim->context, SIM_EFSDN_FILEID,
|
||||||
|
sim_service_numbers_changed, sim, NULL);
|
||||||
|
|
||||||
ofono_sim_read(sim->context, SIM_EFIMG_FILEID,
|
ofono_sim_read(sim->context, SIM_EFIMG_FILEID,
|
||||||
OFONO_SIM_FILE_STRUCTURE_FIXED, sim_efimg_read_cb, sim);
|
OFONO_SIM_FILE_STRUCTURE_FIXED, sim_efimg_read_cb, sim);
|
||||||
}
|
}
|
||||||
|
@ -2153,6 +2182,7 @@ static void sim_free_main_state(struct ofono_sim *sim)
|
||||||
(GFunc)service_number_free, NULL);
|
(GFunc)service_number_free, NULL);
|
||||||
g_slist_free(sim->service_numbers);
|
g_slist_free(sim->service_numbers);
|
||||||
sim->service_numbers = NULL;
|
sim->service_numbers = NULL;
|
||||||
|
sim->sdn_ready = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sim->efust) {
|
if (sim->efust) {
|
||||||
|
|
Loading…
Reference in New Issue