mirror of git://git.sysmocom.de/ofono
sim: store mcc and mnc separate from imsi
This commit is contained in:
parent
c81c88e311
commit
da535d1288
34
src/sim.c
34
src/sim.c
|
@ -78,6 +78,8 @@ struct ofono_sim {
|
||||||
gboolean barred_dialing;
|
gboolean barred_dialing;
|
||||||
|
|
||||||
char *imsi;
|
char *imsi;
|
||||||
|
char mcc[OFONO_MAX_MCC_LENGTH + 1];
|
||||||
|
char mnc[OFONO_MAX_MNC_LENGTH + 1];
|
||||||
|
|
||||||
GSList *own_numbers;
|
GSList *own_numbers;
|
||||||
GSList *new_numbers;
|
GSList *new_numbers;
|
||||||
|
@ -348,21 +350,13 @@ static DBusMessage *sim_get_properties(DBusConnection *conn,
|
||||||
bdn = sim->barred_dialing;
|
bdn = sim->barred_dialing;
|
||||||
ofono_dbus_dict_append(&dict, "BarredDialing", DBUS_TYPE_BOOLEAN, &bdn);
|
ofono_dbus_dict_append(&dict, "BarredDialing", DBUS_TYPE_BOOLEAN, &bdn);
|
||||||
|
|
||||||
if (sim->mnc_length && sim->imsi) {
|
if (sim->mcc[0] != '\0' && sim->mnc[0] != '\0') {
|
||||||
char mcc[OFONO_MAX_MCC_LENGTH + 1];
|
|
||||||
char mnc[OFONO_MAX_MNC_LENGTH + 1];
|
|
||||||
const char *str;
|
const char *str;
|
||||||
|
str = sim->mcc;
|
||||||
strncpy(mcc, sim->imsi, OFONO_MAX_MCC_LENGTH);
|
|
||||||
mcc[OFONO_MAX_MCC_LENGTH] = '\0';
|
|
||||||
strncpy(mnc, sim->imsi + OFONO_MAX_MCC_LENGTH, sim->mnc_length);
|
|
||||||
mnc[sim->mnc_length] = '\0';
|
|
||||||
|
|
||||||
str = mcc;
|
|
||||||
ofono_dbus_dict_append(&dict, "MobileCountryCode",
|
ofono_dbus_dict_append(&dict, "MobileCountryCode",
|
||||||
DBUS_TYPE_STRING, &str);
|
DBUS_TYPE_STRING, &str);
|
||||||
|
|
||||||
str = mnc;
|
str = sim->mnc;
|
||||||
ofono_dbus_dict_append(&dict, "MobileNetworkCode",
|
ofono_dbus_dict_append(&dict, "MobileNetworkCode",
|
||||||
DBUS_TYPE_STRING, &str);
|
DBUS_TYPE_STRING, &str);
|
||||||
}
|
}
|
||||||
|
@ -1299,22 +1293,21 @@ static void sim_imsi_cb(const struct ofono_error *error, const char *imsi,
|
||||||
DBUS_TYPE_STRING, &sim->imsi);
|
DBUS_TYPE_STRING, &sim->imsi);
|
||||||
|
|
||||||
if (sim->mnc_length) {
|
if (sim->mnc_length) {
|
||||||
char mcc[OFONO_MAX_MCC_LENGTH + 1];
|
|
||||||
char mnc[OFONO_MAX_MNC_LENGTH + 1];
|
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
strncpy(mcc, sim->imsi, OFONO_MAX_MCC_LENGTH);
|
strncpy(sim->mcc, sim->imsi, OFONO_MAX_MCC_LENGTH);
|
||||||
mcc[OFONO_MAX_MCC_LENGTH] = '\0';
|
sim->mcc[OFONO_MAX_MCC_LENGTH] = '\0';
|
||||||
strncpy(mnc, sim->imsi + OFONO_MAX_MCC_LENGTH, sim->mnc_length);
|
strncpy(sim->mnc, sim->imsi + OFONO_MAX_MCC_LENGTH,
|
||||||
mnc[sim->mnc_length] = '\0';
|
sim->mnc_length);
|
||||||
|
sim->mnc[sim->mnc_length] = '\0';
|
||||||
|
|
||||||
str = mcc;
|
str = sim->mcc;
|
||||||
ofono_dbus_signal_property_changed(conn, path,
|
ofono_dbus_signal_property_changed(conn, path,
|
||||||
OFONO_SIM_MANAGER_INTERFACE,
|
OFONO_SIM_MANAGER_INTERFACE,
|
||||||
"MobileCountryCode",
|
"MobileCountryCode",
|
||||||
DBUS_TYPE_STRING, &str);
|
DBUS_TYPE_STRING, &str);
|
||||||
|
|
||||||
str = mnc;
|
str = sim->mnc;
|
||||||
ofono_dbus_signal_property_changed(conn, path,
|
ofono_dbus_signal_property_changed(conn, path,
|
||||||
OFONO_SIM_MANAGER_INTERFACE,
|
OFONO_SIM_MANAGER_INTERFACE,
|
||||||
"MobileNetworkCode",
|
"MobileNetworkCode",
|
||||||
|
@ -2060,6 +2053,9 @@ static void sim_free_state(struct ofono_sim *sim)
|
||||||
sim->imsi = NULL;
|
sim->imsi = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sim->mcc[0] = '\0';
|
||||||
|
sim->mnc[0] = '\0';
|
||||||
|
|
||||||
if (sim->own_numbers) {
|
if (sim->own_numbers) {
|
||||||
g_slist_foreach(sim->own_numbers, (GFunc)g_free, NULL);
|
g_slist_foreach(sim->own_numbers, (GFunc)g_free, NULL);
|
||||||
g_slist_free(sim->own_numbers);
|
g_slist_free(sim->own_numbers);
|
||||||
|
|
Loading…
Reference in New Issue