From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH 1/3] stk: Handle Launch Browser proactive command
Date: Tue, 18 Jan 2011 21:54:13 -0600 [thread overview]
Message-ID: <4D366065.60406@gmail.com> (raw)
In-Reply-To: <1294997935-21814-2-git-send-email-jeevaka.badrappan@elektrobit.com>
[-- Attachment #1: Type: text/plain, Size: 6638 bytes --]
Hi Jeevaka,
On 01/14/2011 03:38 AM, Jeevaka Badrappan wrote:
> ---
> src/stk.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> src/stkagent.c | 68 ++++++++++++++++++++++++++++++++++++++++++
> src/stkagent.h | 7 ++++
> 3 files changed, 165 insertions(+), 0 deletions(-)
>
> diff --git a/src/stk.c b/src/stk.c
> index f151fc1..e6df58b 100644
> --- a/src/stk.c
> +++ b/src/stk.c
> @@ -2358,6 +2358,91 @@ static gboolean handle_command_play_tone(const struct stk_command *cmd,
> return FALSE;
> }
>
> +static void confirm_launch_browser_cb(enum stk_agent_result result,
> + gboolean confirm,
> + void *user_data)
> +{
> + struct ofono_stk *stk = user_data;
> + unsigned char no_cause[] = { 0x00 };
> + struct ofono_error failure = { .type = OFONO_ERROR_TYPE_FAILURE };
> + struct stk_response rsp;
> +
> + stk->respond_on_exit = FALSE;
> +
> + switch (result) {
> + case STK_AGENT_RESULT_TIMEOUT:
> + confirm = FALSE;
> + /* Fall through */
> +
> + case STK_AGENT_RESULT_OK:
> + if (confirm)
> + break;
> +
> + send_simple_response(stk, STK_RESULT_TYPE_USER_REJECT);
So funnily enough TS 102.223 Table 6.1 says that USER_REJECT is not a
valid response to Launch Browser, even though it certainly describes a
user confirmation phase.
> + return;
> + default:
> + memset(&rsp, 0, sizeof(rsp));
> + ADD_ERROR_RESULT(rsp.result, STK_RESULT_TYPE_TERMINAL_BUSY,
> + no_cause);
> +
> + if (stk_respond(stk, &rsp, stk_command_cb))
> + stk_command_cb(&failure, stk);
> +
> + return;
> + }
> +
> + send_simple_response(stk, STK_RESULT_TYPE_SUCCESS);
> +}
> +
> +static gboolean handle_command_launch_browser(const struct stk_command *cmd,
> + struct stk_response *rsp,
> + struct ofono_stk *stk)
> +{
> + const struct stk_command_launch_browser *lb = &cmd->launch_browser;
> + static unsigned char no_cause[] = { 0x00 };
> + int qualifier = cmd->qualifier;
> + char *alpha_id;
> + int err;
> +
> + if (qualifier > 3 || qualifier == 1) {
> + rsp->result.type = STK_RESULT_TYPE_COMMAND_NOT_UNDERSTOOD;
> + return TRUE;
> + }
So my view is that this should be done inside stkutil.c
> +
> + if ( lb->browser_id > 4) {
> + rsp->result.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD;
> + return TRUE;
> + }
Same for this one, the id should be validated inside browser_id parser
> +
> + alpha_id = dbus_apply_text_attributes(lb->alpha_id ? lb->alpha_id : "",
> + &lb->text_attr);
> + if (alpha_id == NULL) {
> + rsp->result.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD;
> + return TRUE;
> + }
> +
> + err = stk_agent_confirm_launch_browser(stk->current_agent, alpha_id,
> + lb->icon_id.id, lb->url,
> + confirm_launch_browser_cb,
> + stk, NULL, stk->timeout * 1000);
> + g_free(alpha_id);
> +
> + if (err < 0) {
> + /*
> + * We most likely got an out of memory error, tell SIM
> + * to retry
> + */
> + ADD_ERROR_RESULT(rsp->result, STK_RESULT_TYPE_TERMINAL_BUSY,
> + no_cause);
> + return TRUE;
> + }
> +
> + stk->respond_on_exit = TRUE;
> + stk->cancel_cmd = stk_request_cancel;
> +
> + return FALSE;
> +}
> +
> static void stk_proactive_command_cancel(struct ofono_stk *stk)
> {
> if (stk->immediate_response)
> @@ -2545,6 +2630,11 @@ void ofono_stk_proactive_command_notify(struct ofono_stk *stk,
> &rsp, stk);
> break;
>
> + case STK_COMMAND_TYPE_LAUNCH_BROWSER:
> + respond = handle_command_launch_browser(stk->pending_cmd,
> + &rsp, stk);
> + break;
> +
> default:
> rsp.result.type = STK_RESULT_TYPE_COMMAND_NOT_UNDERSTOOD;
> break;
> diff --git a/src/stkagent.c b/src/stkagent.c
> index 2cdc6e1..2395182 100644
> --- a/src/stkagent.c
> +++ b/src/stkagent.c
> @@ -1013,3 +1013,71 @@ int stk_agent_display_action_info(struct stk_agent *agent, const char *text,
>
> return 0;
> }
> +
> +static void confirm_launch_browser_cb(DBusPendingCall *call, void *data)
> +{
> + struct stk_agent *agent = data;
> + stk_agent_confirmation_cb cb = agent->user_cb;
> + DBusMessage *reply = dbus_pending_call_steal_reply(call);
> + enum stk_agent_result result;
> + gboolean remove_agent;
> + dbus_bool_t confirm;
> +
> + if (check_error(agent, reply, 0, &result) == -EINVAL) {
> + remove_agent = TRUE;
> + cb(STK_AGENT_RESULT_TERMINATE, FALSE, agent->user_data);
> + goto error;
> + }
> +
> + if (result != STK_AGENT_RESULT_OK) {
> + cb(result, FALSE, agent->user_data);
> + goto done;
> + }
> +
> + if (dbus_message_get_args(reply, NULL,
> + DBUS_TYPE_BOOLEAN, &confirm,
> + DBUS_TYPE_INVALID) == FALSE) {
> + ofono_error("Can't parse the reply to ConfirmLaunchBrowser()");
> + remove_agent = TRUE;
> + goto error;
> + }
> +
> + cb(result, confirm, agent->user_data);
> +
> + CALLBACK_END();
> +}
> +
> +int stk_agent_confirm_launch_browser(struct stk_agent *agent, const char *text,
> + unsigned char icon_id, const char *url,
> + stk_agent_confirmation_cb cb,
> + void *user_data,
> + ofono_destroy_func destroy, int timeout)
> +{
> + DBusConnection *conn = ofono_dbus_get_connection();
> +
> + agent->msg = dbus_message_new_method_call(agent->bus, agent->path,
> + OFONO_SIM_APP_INTERFACE,
> + "ConfirmLaunchBrowser");
> + if (agent->msg == NULL)
> + return -ENOMEM;
> +
> + dbus_message_append_args(agent->msg,
> + DBUS_TYPE_STRING, &text,
> + DBUS_TYPE_BYTE, &icon_id,
> + DBUS_TYPE_STRING, &url,
> + DBUS_TYPE_INVALID);
> +
> + if (dbus_connection_send_with_reply(conn, agent->msg, &agent->call,
> + timeout) == FALSE ||
> + agent->call == NULL)
> + return -EIO;
> +
> + agent->user_cb = cb;
> + agent->user_data = user_data;
> + agent->user_destroy = destroy;
> +
> + dbus_pending_call_set_notify(agent->call, confirm_launch_browser_cb,
> + agent, NULL);
> +
> + return 0;
> +}
> diff --git a/src/stkagent.h b/src/stkagent.h
> index 6477dbf..1f0c4fa 100644
> --- a/src/stkagent.h
> +++ b/src/stkagent.h
> @@ -140,3 +140,10 @@ void append_menu_items_variant(DBusMessageIter *iter,
>
> int stk_agent_display_action_info(struct stk_agent *agent, const char *text,
> const struct stk_icon_id *icon);
> +
> +int stk_agent_confirm_launch_browser(struct stk_agent *agent, const char *text,
> + unsigned char icon_id, const char *url,
> + stk_agent_confirmation_cb cb,
> + void *user_data,
> + ofono_destroy_func destroy,
> + int timeout);
The rest looks fine to me.
Regards,
-Denis
next prev parent reply other threads:[~2011-01-19 3:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 9:38 [PATCH 0/3] LaunchBrowser Proactive command Support Jeevaka Badrappan
2011-01-14 9:38 ` [PATCH 1/3] stk: Handle Launch Browser proactive command Jeevaka Badrappan
2011-01-19 3:54 ` Denis Kenzior [this message]
2011-01-14 9:38 ` [PATCH 2/3] test: Add support for launch browser command Jeevaka Badrappan
2011-01-19 3:55 ` Denis Kenzior
2011-01-14 9:38 ` [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method Jeevaka Badrappan
2011-01-19 3:55 ` 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=4D366065.60406@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox