All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] LaunchBrowser Proactive command Support
@ 2011-01-14  9:38 Jeevaka Badrappan
  2011-01-14  9:38 ` [PATCH 1/3] stk: Handle Launch Browser proactive command Jeevaka Badrappan
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jeevaka Badrappan @ 2011-01-14  9:38 UTC (permalink / raw)
  To: ofono

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

Hi,

  Following set of patches adds the basic support for LaunchBrowser
proactive command to ofono.

 When a LaunchBrowser proactive command is received, oFono will inform the
agent to LaunchBrowser with the specified URL. If confirmed by user, agent
should launch the browser with the specified URL. This patch doesn't handle
the qualifier, Network Access Name, User Name, password and bearer information
which can be part of the LaunchBrowser proactive command.

Regards,
Jeevaka

Jeevaka Badrappan (3):
  stk: Handle Launch Browser proactive command
  test: Add support for launch browser command
  doc: Describe ConfirmLaunchBrowser method

 doc/stk-api.txt    |    8 +++++
 src/stk.c          |   90 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/stkagent.c     |   68 +++++++++++++++++++++++++++++++++++++++
 src/stkagent.h     |    7 ++++
 test/test-stk-menu |   13 +++++++
 5 files changed, 186 insertions(+), 0 deletions(-)


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

* [PATCH 1/3] stk: Handle Launch Browser proactive command
  2011-01-14  9:38 [PATCH 0/3] LaunchBrowser Proactive command Support Jeevaka Badrappan
@ 2011-01-14  9:38 ` Jeevaka Badrappan
  2011-01-19  3:54   ` Denis Kenzior
  2011-01-14  9:38 ` [PATCH 2/3] test: Add support for launch browser command Jeevaka Badrappan
  2011-01-14  9:38 ` [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method Jeevaka Badrappan
  2 siblings, 1 reply; 7+ messages in thread
From: Jeevaka Badrappan @ 2011-01-14  9:38 UTC (permalink / raw)
  To: ofono

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

---
 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);
+		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;
+	}
+
+	if ( lb->browser_id > 4) {
+		rsp->result.type = STK_RESULT_TYPE_DATA_NOT_UNDERSTOOD;
+		return TRUE;
+	}
+
+	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);
-- 
1.7.0.4


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

* [PATCH 2/3] test: Add support for launch browser command
  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-14  9:38 ` Jeevaka Badrappan
  2011-01-19  3:55   ` Denis Kenzior
  2011-01-14  9:38 ` [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method Jeevaka Badrappan
  2 siblings, 1 reply; 7+ messages in thread
From: Jeevaka Badrappan @ 2011-01-14  9:38 UTC (permalink / raw)
  To: ofono

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

---
 test/test-stk-menu |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/test/test-stk-menu b/test/test-stk-menu
index 673b5bc..85b98ca 100755
--- a/test/test-stk-menu
+++ b/test/test-stk-menu
@@ -157,6 +157,19 @@ class StkAgent(dbus.service.Object):
 			return False
 
 	@dbus.service.method("org.ofono.SimToolkitAgent",
+				in_signature="sys", out_signature="b")
+	def ConfirmLaunchBrowser(self, info, icon, url):
+		print "Information: (%s)" % (info)
+		print "Icon: (%d)" % (icon)
+		print "URL (%s)" % (url)
+		key = raw_input("Enter Confirmation (y, n):")
+
+		if key == 'y':
+			return True
+		else:
+			return False
+
+	@dbus.service.method("org.ofono.SimToolkitAgent",
 					in_signature="", out_signature="")
 	def Cancel(self):
 		print "Cancel"
-- 
1.7.0.4


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

* [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method
  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-14  9:38 ` [PATCH 2/3] test: Add support for launch browser command Jeevaka Badrappan
@ 2011-01-14  9:38 ` Jeevaka Badrappan
  2011-01-19  3:55   ` Denis Kenzior
  2 siblings, 1 reply; 7+ messages in thread
From: Jeevaka Badrappan @ 2011-01-14  9:38 UTC (permalink / raw)
  To: ofono

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

---
 doc/stk-api.txt |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/doc/stk-api.txt b/doc/stk-api.txt
index 425ee23..7669311 100644
--- a/doc/stk-api.txt
+++ b/doc/stk-api.txt
@@ -257,6 +257,14 @@ Methods		byte RequestSelection(string title, byte icon_id,
 			until the call is canceled using Cancel().  This
 			method should not return.
 
+		boolean ConfirmLaunchBrowser() (string information,
+						byte icon_id, string url)
+
+			Asks the agent to request user to confirm launch
+			browser. If confirmed, then the agent should send
+			confirmation message to oFono and then should open
+			the launch browser with the given url.
+
 		void Cancel() [noreply]
 
 			Asks the agent to cancel any ongoing operation in
-- 
1.7.0.4


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

* Re: [PATCH 1/3] stk: Handle Launch Browser proactive command
  2011-01-14  9:38 ` [PATCH 1/3] stk: Handle Launch Browser proactive command Jeevaka Badrappan
@ 2011-01-19  3:54   ` Denis Kenzior
  0 siblings, 0 replies; 7+ messages in thread
From: Denis Kenzior @ 2011-01-19  3:54 UTC (permalink / raw)
  To: ofono

[-- 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

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

* Re: [PATCH 2/3] test: Add support for launch browser command
  2011-01-14  9:38 ` [PATCH 2/3] test: Add support for launch browser command Jeevaka Badrappan
@ 2011-01-19  3:55   ` Denis Kenzior
  0 siblings, 0 replies; 7+ messages in thread
From: Denis Kenzior @ 2011-01-19  3:55 UTC (permalink / raw)
  To: ofono

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

Hi Jeevaka,

On 01/14/2011 03:38 AM, Jeevaka Badrappan wrote:
> ---
>  test/test-stk-menu |   13 +++++++++++++
>  1 files changed, 13 insertions(+), 0 deletions(-)
> 

Since we already figured out the API I went ahead and applied this patch.

Regards,
-Denis

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

* Re: [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method
  2011-01-14  9:38 ` [PATCH 3/3] doc: Describe ConfirmLaunchBrowser method Jeevaka Badrappan
@ 2011-01-19  3:55   ` Denis Kenzior
  0 siblings, 0 replies; 7+ messages in thread
From: Denis Kenzior @ 2011-01-19  3:55 UTC (permalink / raw)
  To: ofono

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

Hi Jeevaka,

On 01/14/2011 03:38 AM, Jeevaka Badrappan wrote:
> ---
>  doc/stk-api.txt |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 

Patch has been applied, thanks.

Regards,
-Denis

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

end of thread, other threads:[~2011-01-19  3:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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.