Hi Jussi,

>  include/sim.h    |    2 ++
>  src/call-meter.c |   27 +++++++++++++++++++++++++++
>  src/sim.c        |    8 ++++----
>  3 files changed, 33 insertions(+), 4 deletions(-)
> 
> diff --git a/include/sim.h b/include/sim.h
> index 412ae44..a56056e 100644
> --- a/include/sim.h
> +++ b/include/sim.h
> @@ -227,6 +227,8 @@ unsigned int ofono_sim_add_file_watch(struct 
> ofono_sim_context *context,
>  void ofono_sim_remove_file_watch(struct ofono_sim_context *context,
>                                       unsigned int id);
>  
> +void sim_pin_check(struct ofono_sim *sim);
> +

Please name this __ofono_sim_recheck_pin(struct ofono_sim *sim);

>  #ifdef __cplusplus
>  }
>  #endif
> diff --git a/src/call-meter.c b/src/call-meter.c
> index 0789935..61678d8 100644
> --- a/src/call-meter.c
> +++ b/src/call-meter.c
> @@ -335,11 +335,20 @@ static void set_acm_max_query_callback(const struct 
> ofono_error *error,
>  static void set_acm_max_callback(const struct ofono_error *error, void *data)
>  {
>       struct ofono_call_meter *cm = data;
> +     struct ofono_atom *sim_atom;
> +     struct ofono_sim *sim = NULL;
>  
>       if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
>               DBG("Setting acm_max failed");
>               __ofono_dbus_pending_reply(&cm->pending,
>                                       __ofono_error_failed(cm->pending));
> +             sim_atom = __ofono_modem_find_atom(
> +                     __ofono_atom_get_modem(cm->atom),
> +                             OFONO_ATOM_TYPE_SIM);
> +             if (!sim_atom)

doc/coding-style.txt M1, and M13

> +                     return;
> +             sim = __ofono_atom_get_data(sim_atom);

doc/coding-style.txt M1

> +             sim_pin_check(sim);
>               return;
>       }
>

And please factor out this code into a separate function, you repeat it
three times.

> @@ -396,11 +405,20 @@ static void set_puct_query_callback(const struct 
> ofono_error *error,
>  static void set_puct_callback(const struct ofono_error *error, void *data)
>  {
>       struct ofono_call_meter *cm = data;
> +     struct ofono_atom *sim_atom;
> +     struct ofono_sim *sim = NULL;
>  
>       if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
>               DBG("setting puct failed");
>               __ofono_dbus_pending_reply(&cm->pending,
>                                       __ofono_error_failed(cm->pending));
> +             sim_atom = __ofono_modem_find_atom(
> +                     __ofono_atom_get_modem(cm->atom),
> +                             OFONO_ATOM_TYPE_SIM);
> +             if (!sim_atom)
> +                     return;
> +             sim = __ofono_atom_get_data(sim_atom);
> +             sim_pin_check(sim);
>               return;
>       }
>  
> @@ -593,11 +611,20 @@ static void reset_acm_query_callback(const struct 
> ofono_error *error, int value,
>  static void acm_reset_callback(const struct ofono_error *error, void *data)
>  {
>       struct ofono_call_meter *cm = data;
> +     struct ofono_atom *sim_atom;
> +     struct ofono_sim *sim = NULL;
>  
>       if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
>               DBG("reseting acm failed");
>               __ofono_dbus_pending_reply(&cm->pending,
>                                       __ofono_error_failed(cm->pending));
> +             sim_atom = __ofono_modem_find_atom(
> +                     __ofono_atom_get_modem(cm->atom),
> +                             OFONO_ATOM_TYPE_SIM);
> +             if (!sim_atom)
> +                     return;
> +             sim = __ofono_atom_get_data(sim_atom);
> +             sim_pin_check(sim);
>               return;
>       }
>  
> diff --git a/src/sim.c b/src/sim.c
> index c39269d..08236f2 100644
> --- a/src/sim.c
> +++ b/src/sim.c
> @@ -49,7 +49,6 @@
>  static GSList *g_drivers = NULL;
>  
>  static void sim_own_numbers_update(struct ofono_sim *sim);
> -static void sim_pin_check(struct ofono_sim *sim);
>  
>  struct ofono_sim {
>       /* Contents of the SIM file system, in rough initialization order */
> @@ -2231,8 +2230,9 @@ static void sim_pin_query_cb(const struct ofono_error 
> *error,
>                                               &pin_name);
>       }
>  
> -     if (pin_type != OFONO_SIM_PASSWORD_NONE &&
> -                     sim->state == OFONO_SIM_STATE_READY) {
> +     if ((pin_type != OFONO_SIM_PASSWORD_NONE &&
> +                     sim->state == OFONO_SIM_STATE_READY) &&
> +                             (pin_type != OFONO_SIM_PASSWORD_SIM_PIN2)) {

I don't see how this can work.  You need to check for pin_type != NONE,
PIN2 and PUK2 AND state == READY here.  This also only covers the case
of the PIN2 or PUK2 being triggered when call-meter is active.  You do
not take care of the case where PIN2 or PUK2 are already required during
sim initialization.

>               /* Force the sim state out of READY */
>               sim_free_main_state(sim);
>  
> @@ -2247,7 +2247,7 @@ checkdone:
>               sim_initialize_after_pin(sim);
>  }
>  
> -static void sim_pin_check(struct ofono_sim *sim)
> +void sim_pin_check(struct ofono_sim *sim)
>  {
>       if (sim->driver->query_passwd_state == NULL) {
>               sim_initialize_after_pin(sim);

Regards,
-Denis
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to