GCF test case 31.8.1.2.3 is rejecting the user response.
Any subsequent USSD notification are not handled because USSD is always in
state user-action.
---
src/ussd.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/ussd.c b/src/ussd.c
index 74888b2..0ad4f61 100644
--- a/src/ussd.c
+++ b/src/ussd.c
@@ -414,6 +414,10 @@ void ofono_ussd_notify(struct ofono_ussd *ussd, int status, int dcs,
return;
}
+ if (status == OFONO_USSD_STATUS_TERMINATED &&
+ ussd->state == USSD_STATE_IDLE)
+ return;
+
if (status == OFONO_USSD_STATUS_NOT_SUPPORTED) {
ussd_change_state(ussd, USSD_STATE_IDLE);
@@ -595,9 +599,11 @@ 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)
+ if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
DBG("ussd response failed with error: %s",
telephony_error_to_str(error));
+ ussd_change_state(ussd, USSD_STATE_IDLE);
+ }
if (error->type == OFONO_ERROR_TYPE_NO_ERROR) {
ussd_change_state(ussd, USSD_STATE_RESPONSE_SENT);
--
1.7.9.5