Hi Denis.
OK, I can see that this approach was rather too simplistic... Maybe checking
the returned CME error would be a better idea?
I’m a bit unsure how (or if) to proceed with this. As this is in the core,
and not our driver, it might be more on your table? If you think it is
important.
Br Marit
2010/11/2 Denis Kenzior <denkenz(a)gmail.com>
Hi Marit,
On 11/02/2010 10:08 AM, Marit Henriksen wrote:
> From: Marit Henriksen <marit.henriksen(a)stericsson.com>
>
> When changing pin, it is possible to get in a state where the modem
requests puk
> (if incorrect pin is entered too many times). Need to check the SIM pin
status
> to discover this.
> ---
> src/sim.c | 15 ++++++++-------
> 1 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/src/sim.c b/src/sim.c
> index 699ebe9..b2277c5 100644
> --- a/src/sim.c
> +++ b/src/sim.c
> @@ -628,15 +628,16 @@ static DBusMessage *sim_unlock_pin(DBusConnection
*conn, DBusMessage *msg,
> static void sim_change_pin_cb(const struct ofono_error *error, void
*data)
> {
> struct ofono_sim *sim = data;
> + DBusMessage *reply;
>
> - if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> - __ofono_dbus_pending_reply(&sim->pending,
> - __ofono_error_failed(sim->pending));
> - return;
> - }
> + if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
> + reply = __ofono_error_failed(sim->pending);
> + else
> + reply = dbus_message_new_method_return(sim->pending);
>
> - __ofono_dbus_pending_reply(&sim->pending,
> -
dbus_message_new_method_return(sim->pending));
> + __ofono_dbus_pending_reply(&sim->pending, reply);
> +
> + sim_pin_check(sim);
I don't think that running sim_pin_check is such a good idea. That
function initializes the sim interface when +CPIN returns READY.
You also need to tear down the modem state back to pre-sim if the modem
asks for a PUK after change pin fails. That entails removing all
post_sim/post_online atoms and bring the modem back to the offline state ;)
> }
>
> static DBusMessage *sim_change_pin(DBusConnection *conn, DBusMessage
*msg,
Regards,
-Denis