All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH] Query locked pins after reset pin
Date: Wed, 11 Sep 2013 13:22:06 -0500	[thread overview]
Message-ID: <5230B4CE.5090707@gmail.com> (raw)
In-Reply-To: <1378926837-16531-1-git-send-email-caiwen.zhang@intel.com>

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

Hi Caiwen,

On 09/11/2013 02:13 PM, caiwen.zhang(a)intel.com wrote:
> From: Caiwen Zhang <caiwen.zhang@intel.com>
>
> ---
>   src/sim.c |   77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 76 insertions(+), 1 deletion(-)
>
> diff --git a/src/sim.c b/src/sim.c
> index edae5eb..ef55b1c 100644
> --- a/src/sim.c
> +++ b/src/sim.c
> @@ -123,6 +123,11 @@ struct msisdn_set_request {
>   	DBusMessage *msg;
>   };
>
> +struct sim_locked_query_request {
> +	struct ofono_sim *sim;
> +	enum ofono_sim_password_type type;
> +};
> +
>   struct service_number {
>   	char *id;
>   	struct ofono_phone_number ph;
> @@ -610,6 +615,57 @@ error:
>   	return __ofono_error_invalid_args(msg);
>   }
>
> +void sim_query_locked_cb(const struct ofono_error *error,
> +			int locked, void *data)
> +{
> +	struct sim_locked_query_request *req = data;
> +	struct ofono_sim *sim = req->sim;
> +	char **locked_pins;
> +	DBusConnection *conn = ofono_dbus_get_connection();
> +	const char *path = __ofono_atom_get_path(sim->atom);
> +
> +	DBG("");
> +
> +	if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
> +		g_free(req);
> +		return;
> +	}
> +
> +	if (req->type >= OFONO_SIM_PASSWORD_SIM_PUK) {
> +		g_free(req);
> +		return;

This check seems to be pointless

> +	}
> +
> +	sim->locked_pins[req->type] = locked;
> +	DBG("sim_query_locked_cb pin_type: %d %d", req->type, locked);
> +
> +	locked_pins = get_locked_pins(sim);
> +	ofono_dbus_signal_array_property_changed(conn, path,
> +						OFONO_SIM_MANAGER_INTERFACE,
> +						"LockedPins", DBUS_TYPE_STRING,
> +						&locked_pins);
> +	g_strfreev(locked_pins);
> +	g_free(req);
> +}
> +
> +static void __sim_query_locked(struct ofono_sim *sim,
> +			enum ofono_sim_password_type type)

Why is this function prefixed by '__'?  The '__ofono' prefix is reserved 
for private APIs (e.g. functions that are not static, but not part of 
include/* public APIs).

> +{
> +	struct sim_locked_query_request *req;
> +
> +	if (type == OFONO_SIM_PASSWORD_NONE
> +		|| type > OFONO_SIM_PASSWORD_PHCORP_PIN)
> +		return;

This does not comply with our coding style guidelines.  Also, why do you 
bother checking type here since it is always guaranteed to be only 
OFONO_SIM_PASSWORD_SIM_PIN?

> +
> +	req = g_new0(struct sim_locked_query_request, 1);
> +	req->sim = sim;
> +	req->type = type;

This is wrong, see below:

> +		
> +	if (sim->driver->query_locked)
> +		sim->driver->query_locked(sim, type, sim_query_locked_cb, req);

The oFono driver calling semantics do not allow for a cleanup handler. 
So if the modem hardware crashes or is removed in the time between you 
submit the request to the driver and the driver returns with the result, 
you will incur a memory leak.

> +}
> +
> +
>   static void sim_locked_cb(struct ofono_sim *sim, gboolean locked)
>   {
>   	DBusConnection *conn = ofono_dbus_get_connection();
> @@ -1039,6 +1095,25 @@ static DBusMessage *sim_get_icon(DBusConnection *conn,
>   	return NULL;
>   }
>
> +static void sim_reset_pin_cb(const struct ofono_error *error, void *data)
> +{
> +	struct ofono_sim *sim = data;
> +	DBusMessage *reply;
> +	enum ofono_sim_password_type type;
> +
> +	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, reply);
> +
> +	__ofono_sim_recheck_pin(sim);
> +
> +	for (type = OFONO_SIM_PASSWORD_SIM_PIN; type < OFONO_SIM_PASSWORD_SIM_PUK; type++)
> +		__sim_query_locked(sim, type);

Why do you need this in the first place.  Are you suggesting that by 
unblocking the SIM PIN it somehow has the side-effect of also resetting 
the SIM lock status?

> +}
> +
>   static DBusMessage *sim_reset_pin(DBusConnection *conn, DBusMessage *msg,
>   					void *data)
>   {
> @@ -1074,7 +1149,7 @@ static DBusMessage *sim_reset_pin(DBusConnection *conn, DBusMessage *msg,
>   		return __ofono_error_invalid_format(msg);
>
>   	sim->pending = dbus_message_ref(msg);
> -	sim->driver->reset_passwd(sim, puk, pin, sim_enter_pin_cb, sim);
> +	sim->driver->reset_passwd(sim, puk, pin, sim_reset_pin_cb, sim);
>
>   	return NULL;
>   }
>

Regards,
-Denis

  reply	other threads:[~2013-09-11 18:22 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-11 19:13 [PATCH] Query locked pins after reset pin caiwen.zhang
2013-09-11 18:22 ` Denis Kenzior [this message]
2013-09-12  7:31   ` Zhang, Caiwen
2013-09-12 13:51     ` Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5230B4CE.5090707@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.