204
205
netreg->pending = NULL;
207
if (netreg->driver->registration_status)
208
netreg->driver->registration_status(netreg,
208
if (netreg->driver->registration_status == NULL)
211
netreg->driver->registration_status(netreg,
209
212
registration_status_callback, netreg);
1305
1308
if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED ||
1306
1309
netreg->status == NETWORK_REGISTRATION_STATUS_ROAMING) {
1307
if (netreg->driver->current_operator)
1310
if (netreg->driver->current_operator != NULL)
1308
1311
netreg->driver->current_operator(netreg,
1309
1312
current_operator_callback, netreg);
1311
if (netreg->driver->strength)
1314
if (netreg->driver->strength != NULL)
1312
1315
netreg->driver->strength(netreg,
1313
1316
signal_strength_callback, netreg);
1358
1361
if (netreg->status == NETWORK_REGISTRATION_STATUS_REGISTERED ||
1359
1362
netreg->status == NETWORK_REGISTRATION_STATUS_ROAMING) {
1360
if (netreg->driver->strength)
1363
if (netreg->driver->strength != NULL)
1361
1364
netreg->driver->strength(netreg,
1362
1365
signal_strength_callback, netreg);
1366
1369
(status == NETWORK_REGISTRATION_STATUS_NOT_REGISTERED ||
1367
1370
status == NETWORK_REGISTRATION_STATUS_DENIED ||
1368
1371
status == NETWORK_REGISTRATION_STATUS_UNKNOWN)) {
1369
if (netreg->driver->register_auto)
1372
if (netreg->driver->register_auto != NULL)
1370
1373
netreg->driver->register_auto(netreg, init_register,
1471
1474
if (netreg->eons && !sim_eons_pnn_is_empty(netreg->eons))
1472
ofono_sim_read(netreg->sim, SIM_EFOPL_FILEID,
1475
ofono_sim_read(netreg->sim_context, SIM_EFOPL_FILEID,
1473
1476
OFONO_SIM_FILE_STRUCTURE_FIXED,
1474
1477
sim_opl_read_cb, netreg);
1550
1553
netreg->spname = spn;
1551
ofono_sim_read(netreg->sim, SIM_EFSPDI_FILEID,
1554
ofono_sim_read(netreg->sim_context, SIM_EFSPDI_FILEID,
1552
1555
OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
1553
1556
sim_spdi_read_cb, netreg);
1682
1685
netreg->settings = NULL;
1688
if (netreg->sim_context) {
1689
ofono_sim_context_free(netreg->sim_context);
1690
netreg->sim_context = NULL;
1685
1695
g_dbus_unregister_interface(conn, path,
1686
1696
OFONO_NETWORK_REGISTRATION_INTERFACE);
1687
1697
ofono_modem_remove_interface(modem,
1697
1707
if (netreg == NULL)
1700
if (netreg->driver && netreg->driver->remove)
1710
if (netreg->driver != NULL && netreg->driver->remove != NULL)
1701
1711
netreg->driver->remove(netreg);
1704
sim_eons_free(netreg->eons);
1707
sim_spdi_free(netreg->spdi);
1710
g_free(netreg->spname);
1713
sim_eons_free(netreg->eons);
1714
sim_spdi_free(netreg->spdi);
1716
g_free(netreg->spname);
1712
1717
g_free(netreg);
1779
1784
"Mode", netreg->mode);
1787
static void sim_pnn_opl_changed(int id, void *userdata)
1789
struct ofono_netreg *netreg = userdata;
1793
* Free references to structures on the netreg->eons list and
1794
* update the operator info on D-bus. If EFpnn/EFopl read succeeds,
1795
* operator info will be updated again, otherwise it won't be
1798
for (l = netreg->operator_list; l; l = l->next)
1799
set_network_operator_eons_info(l->data, NULL);
1801
sim_eons_free(netreg->eons);
1802
netreg->eons = NULL;
1804
ofono_sim_read(netreg->sim_context, SIM_EFPNN_FILEID,
1805
OFONO_SIM_FILE_STRUCTURE_FIXED,
1806
sim_pnn_read_cb, netreg);
1809
static void sim_spn_spdi_changed(int id, void *userdata)
1811
struct ofono_netreg *netreg = userdata;
1813
netreg->flags &= ~(NETWORK_REGISTRATION_FLAG_HOME_SHOW_PLMN |
1814
NETWORK_REGISTRATION_FLAG_ROAMING_SHOW_SPN);
1816
g_free(netreg->spname);
1817
netreg->spname = NULL;
1819
sim_spdi_free(netreg->spdi);
1820
netreg->spdi = NULL;
1822
if (netreg->current_operator) {
1823
DBusConnection *conn = ofono_dbus_get_connection();
1824
const char *path = __ofono_atom_get_path(netreg->atom);
1825
const char *operator;
1827
operator = get_operator_display_name(netreg);
1829
ofono_dbus_signal_property_changed(conn, path,
1830
OFONO_NETWORK_REGISTRATION_INTERFACE,
1831
"Name", DBUS_TYPE_STRING,
1835
ofono_sim_read(netreg->sim_context, SIM_EFSPN_FILEID,
1836
OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
1837
sim_spn_read_cb, netreg);
1782
1840
void ofono_netreg_register(struct ofono_netreg *netreg)
1784
1842
DBusConnection *conn = ofono_dbus_get_connection();
1802
1860
ofono_modem_add_interface(modem, OFONO_NETWORK_REGISTRATION_INTERFACE);
1804
if (netreg->driver->registration_status)
1862
if (netreg->driver->registration_status != NULL)
1805
1863
netreg->driver->registration_status(netreg,
1806
1864
init_registration_status, netreg);
1808
1866
sim_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
1868
if (sim_atom != NULL) {
1811
1869
/* Assume that if sim atom exists, it is ready */
1812
1870
netreg->sim = __ofono_atom_get_data(sim_atom);
1871
netreg->sim_context = ofono_sim_context_create(netreg->sim);
1814
1873
netreg_load_settings(netreg);
1816
ofono_sim_read(netreg->sim, SIM_EFPNN_FILEID,
1875
ofono_sim_read(netreg->sim_context, SIM_EFPNN_FILEID,
1817
1876
OFONO_SIM_FILE_STRUCTURE_FIXED,
1818
1877
sim_pnn_read_cb, netreg);
1819
ofono_sim_read(netreg->sim, SIM_EFSPN_FILEID,
1878
ofono_sim_add_file_watch(netreg->sim_context, SIM_EFPNN_FILEID,
1879
sim_pnn_opl_changed, netreg,
1881
ofono_sim_add_file_watch(netreg->sim_context, SIM_EFOPL_FILEID,
1882
sim_pnn_opl_changed, netreg,
1885
ofono_sim_read(netreg->sim_context, SIM_EFSPN_FILEID,
1820
1886
OFONO_SIM_FILE_STRUCTURE_TRANSPARENT,
1821
1887
sim_spn_read_cb, netreg);
1888
ofono_sim_add_file_watch(netreg->sim_context, SIM_EFSPN_FILEID,
1889
sim_spn_spdi_changed, netreg,
1891
ofono_sim_add_file_watch(netreg->sim_context, SIM_EFSPDI_FILEID,
1892
sim_spn_spdi_changed, netreg,
1824
1896
__ofono_atom_register(netreg->atom, netreg_unregister);