Hi Jukka, > Makefile.am | 3 + > examples/provision.c | 198 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 201 insertions(+), 0 deletions(-) > create mode 100644 examples/provision.c > > diff --git a/Makefile.am b/Makefile.am > index 0f330a7..d57509d 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -305,6 +305,9 @@ builtin_sources += examples/history.c > > builtin_modules += example_nettime > builtin_sources += examples/nettime.c > + > +builtin_modules += example_gprs_provision > +builtin_sources += examples/provision.c > endif
I like to have these match. So just call it example_provision. > +struct provisioning_request { > + struct ofono_modem *modem; > + ofono_gprs_provision_cb_t cb; > + void *userdata; Same as I mentioned in the other patch. Please use user_data. > +}; > + > +static void sim_spn_read_cb(int ok, int length, int record, > + const unsigned char *data, > + int record_length, void *userdata) > +{ > + struct provisioning_request *req = userdata; > + char *spn = NULL; > + > + struct ofono_atom *sim_atom; > + struct ofono_sim *sim; > + const char *imsi; > + > + unsigned char mnc_length; > + char mcc[OFONO_MAX_MCC_LENGTH + 1]; > + char mnc[OFONO_MAX_MNC_LENGTH + 1]; > + > + GSList *settings = NULL; > + struct ofono_gprs_provisioning_data *entry; > + > + sim_atom = __ofono_modem_find_atom(req->modem, OFONO_ATOM_TYPE_SIM); > + > + if (sim_atom == NULL) { > + ofono_debug("No SIM atom"); > + goto finish; > + } > + > + sim = __ofono_atom_get_data(sim_atom); > + imsi = ofono_sim_get_imsi(sim); > + if (imsi == NULL) { > + ofono_debug("No IMSI available"); > + goto finish; > + } > + > + mnc_length = ofono_sim_get_mnc_length(sim); > + if (mnc_length == 0) { > + ofono_debug("No MNC length available"); > + goto finish; > + } > + > + strncpy(mcc, imsi, OFONO_MAX_MCC_LENGTH); > + mcc[OFONO_MAX_MCC_LENGTH] = '\0'; > + strncpy(mnc, imsi + OFONO_MAX_MCC_LENGTH, mnc_length); > + mnc[mnc_length] = '\0'; > + > + if (ok) > + spn = sim_string_to_utf8(data + 1, length - 1); > + > + ofono_debug("Finding settings for MCC %s, MNC %s, SPN '%s'", > + mcc, mnc, spn); > + > + if (spn == NULL || strcmp(spn, "oFono") != 0) > + goto finish; I think we need to also take some MCC and MNC into account. People will be by accident compiling this plugin and I wanna make sure nothing bad gets provisioned ;) > +static void example_gprs_provision_get_settings( > + struct ofono_modem *modem, > + ofono_gprs_provision_cb_t cb, > + void *userdata) > +{ > + struct provisioning_request *req; > + struct ofono_atom *sim_atom; > + struct ofono_sim *sim = NULL; > + > + ofono_debug("Provisioning..."); > + > + req = g_try_new0(struct provisioning_request, 1); > + if (req == NULL) > + goto error; > + > + req->modem = modem; > + req->cb = cb; > + req->userdata = userdata; > + > + /* Start SPN query from SIM */ > + sim_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM); > + > + if (sim_atom != NULL) > + sim = __ofono_atom_get_data(sim_atom); > + > + if (sim != NULL) { > + ofono_sim_read(sim, SIM_EFSPN_FILEID, > + OFONO_SIM_FILE_STRUCTURE_TRANSPARENT, > + sim_spn_read_cb, req); > + return; > + } Should this not be provided somehow by the SIM atom? Denis, any idea why we are not keeping this information available? Regards Marcel _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono