All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sim: check if lock is locked after code input attempt
@ 2011-01-17 11:34 Jussi Kangas
  2011-01-24 22:32 ` Denis Kenzior
  0 siblings, 1 reply; 4+ messages in thread
From: Jussi Kangas @ 2011-01-17 11:34 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 3291 bytes --]

Hi again,

This is third attempt to fix the problem where PUK required information
is not shown correctly after user tries to change pin code too many
times with wrong passwords. Basically solution is pretty much as in
original made by Marit Henriksen except it does not do the sim interface
initialization anymore and it goes to PRE_SIM state if PUK is required
except in case of PIN2. Fix is also extended to pin locking and pin
unlocking.  

Br,
-Jussi

---
 src/sim.c |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/src/sim.c b/src/sim.c
index d627647..00f0463 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -622,6 +622,45 @@ static void sim_locked_cb(struct ofono_sim *sim,
gboolean locked)
 	sim_pin_retries_check(sim);
 }
 
+static void fail_reason_check_cb(const struct ofono_error *error,
+				enum ofono_sim_password_type pin_type,
+				void *data)
+{
+	struct ofono_sim *sim = data;
+	DBusConnection *conn = ofono_dbus_get_connection();
+	const char *path = __ofono_atom_get_path(sim->atom);
+	struct ofono_modem *modem = __ofono_atom_get_modem(sim->atom);
+	const char *pin_name;
+
+	if (sim->pin_type != pin_type) {
+		sim->pin_type = pin_type;
+		pin_name = sim_passwd_name(pin_type);
+
+		if (pin_type != OFONO_SIM_PASSWORD_NONE &&
+				password_is_pin(pin_type) == FALSE)
+			pin_type = puk2pin(pin_type);
+
+		if (pin_type != OFONO_SIM_PASSWORD_INVALID)
+			sim->locked_pins[pin_type] = TRUE;
+
+		ofono_dbus_signal_property_changed(conn, path,
+						OFONO_SIM_MANAGER_INTERFACE,
+						"PinRequired", DBUS_TYPE_STRING,
+						&pin_name);
+
+		if ((sim->state != OFONO_SIM_STATE_READY) ||
+		   ((sim->locked_pins[pin_type] == TRUE) && (
+		     pin_type == OFONO_SIM_PASSWORD_SIM_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHSIM_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHFSIM_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHNET_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHNETSUB_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHSP_PIN ||
+		     pin_type == OFONO_SIM_PASSWORD_PHCORP_PIN)))
+			ofono_modem_reset(modem);
+	}
+}
+
 static void sim_unlock_cb(const struct ofono_error *error, void *data)
 {
 	struct ofono_sim *sim = data;
@@ -630,6 +669,9 @@ static void sim_unlock_cb(const struct ofono_error
*error, void *data)
 		DBusMessage *reply = __ofono_error_failed(sim->pending);
 
 		__ofono_dbus_pending_reply(&sim->pending, reply);
+
+		sim->driver->query_passwd_state(sim, fail_reason_check_cb, sim);
+
 		sim_pin_retries_check(sim);
 
 		return;
@@ -646,6 +688,9 @@ static void sim_lock_cb(const struct ofono_error
*error, void *data)
 		DBusMessage *reply = __ofono_error_failed(sim->pending);
 
 		__ofono_dbus_pending_reply(&sim->pending, reply);
+
+		sim->driver->query_passwd_state(sim, fail_reason_check_cb, sim);
+
 		sim_pin_retries_check(sim);
 
 		return;
@@ -717,6 +762,8 @@ static void sim_change_pin_cb(const struct
ofono_error *error, void *data)
 		__ofono_dbus_pending_reply(&sim->pending,
 				__ofono_error_failed(sim->pending));
 
+		sim->driver->query_passwd_state(sim, fail_reason_check_cb, sim);
+
 		sim_pin_retries_check(sim);
 
 		return;
-- 
1.7.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-01-25 20:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-17 11:34 [PATCH] sim: check if lock is locked after code input attempt Jussi Kangas
2011-01-24 22:32 ` Denis Kenzior
2011-01-25 15:34   ` Jussi Kangas
2011-01-25 20:09     ` Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.