* [PATCH] Return network's USSD reponses from the Respond method instead of signalling
@ 2010-03-31 4:57 Andrzej Zaborowski
2010-03-31 18:59 ` Denis Kenzior
0 siblings, 1 reply; 2+ messages in thread
From: Andrzej Zaborowski @ 2010-03-31 4:57 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2763 bytes --]
---
doc/supplementaryservices-api.txt | 2 +-
src/ussd.c | 31 ++++++++++++++++++++++++-------
2 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/doc/supplementaryservices-api.txt b/doc/supplementaryservices-api.txt
index 23796c1..115e2ff 100644
--- a/doc/supplementaryservices-api.txt
+++ b/doc/supplementaryservices-api.txt
@@ -16,7 +16,7 @@ Methods string, variant Initiate(string command)
new command can be initiated until this one is
cancelled or ended.
- void Respond(string reply)
+ string Respond(string reply)
Send a response to the network either when
it is awaiting further input after Initiate()
diff --git a/src/ussd.c b/src/ussd.c
index a2a4f5d..9ec7600 100644
--- a/src/ussd.c
+++ b/src/ussd.c
@@ -360,8 +360,20 @@ void ofono_ussd_notify(struct ofono_ussd *ussd, int status, const char *str)
else
ussd_change_state(ussd, USSD_STATE_IDLE);
- } else if (ussd->state == USSD_STATE_IDLE ||
- ussd->state == USSD_STATE_RESPONSE_SENT) {
+ } else if (ussd->state == USSD_STATE_RESPONSE_SENT) {
+ reply = dbus_message_new_method_return(ussd->pending);
+
+ if (!str)
+ str = "";
+
+ dbus_message_append_args(reply, DBUS_TYPE_STRING, &str,
+ DBUS_TYPE_INVALID);
+
+ if (status == OFONO_USSD_STATUS_ACTION_REQUIRED)
+ ussd_change_state(ussd, USSD_STATE_USER_ACTION);
+ else
+ ussd_change_state(ussd, USSD_STATE_IDLE);
+ } else if (ussd->state == USSD_STATE_IDLE) {
const char *signal_name;
const char *path = __ofono_atom_get_path(ussd->atom);
int new_state;
@@ -462,14 +474,19 @@ static void ussd_response_callback(const struct ofono_error *error, void *data)
struct ofono_ussd *ussd = data;
DBusMessage *reply;
+ if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
+ DBG("ussd response failed with error: %s",
+ telephony_error_to_str(error));
+
if (error->type == OFONO_ERROR_TYPE_NO_ERROR) {
ussd_change_state(ussd, USSD_STATE_RESPONSE_SENT);
- reply = dbus_message_new_method_return(ussd->pending);
- } else {
- ussd_change_state(ussd, USSD_STATE_IDLE);
- reply = __ofono_error_failed(ussd->pending);
+ return;
}
+ if (!ussd->pending)
+ return;
+
+ reply = __ofono_error_failed(ussd->pending);
__ofono_dbus_pending_reply(&ussd->pending, reply);
}
@@ -575,7 +592,7 @@ static DBusMessage *ussd_get_properties(DBusConnection *conn,
static GDBusMethodTable ussd_methods[] = {
{ "Initiate", "s", "sv", ussd_initiate,
G_DBUS_METHOD_FLAG_ASYNC },
- { "Respond", "s", "", ussd_respond,
+ { "Respond", "s", "s", ussd_respond,
G_DBUS_METHOD_FLAG_ASYNC },
{ "Cancel", "", "", ussd_cancel,
G_DBUS_METHOD_FLAG_ASYNC },
--
1.6.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Return network's USSD reponses from the Respond method instead of signalling
2010-03-31 4:57 [PATCH] Return network's USSD reponses from the Respond method instead of signalling Andrzej Zaborowski
@ 2010-03-31 18:59 ` Denis Kenzior
0 siblings, 0 replies; 2+ messages in thread
From: Denis Kenzior @ 2010-03-31 18:59 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 373 bytes --]
Hi Andrew,
> ---
> doc/supplementaryservices-api.txt | 2 +-
> src/ussd.c | 31 ++++++++++++++++++++++++-------
> 2 files changed, 25 insertions(+), 8 deletions(-)
>
Patch has been applied, but please keep your commit message header to 50
characters or less and the commit description to 72 characters / line.
Regards,
-Denis
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-03-31 18:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-31 4:57 [PATCH] Return network's USSD reponses from the Respond method instead of signalling Andrzej Zaborowski
2010-03-31 18:59 ` 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.