The "USSD terminated by network" notification is handled to recover
the idle state in case of USSD transaction error.
---
 src/ussd.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/ussd.c b/src/ussd.c
index 74888b2..a35f172 100644
--- a/src/ussd.c
+++ b/src/ussd.c
@@ -414,6 +414,18 @@ void ofono_ussd_notify(struct ofono_ussd *ussd, int 
status, int dcs,
                return;
        }
 
+       if (status == OFONO_USSD_STATUS_TERMINATED &&
+                       (ussd->state == USSD_STATE_IDLE ||
+                       ussd->state == USSD_STATE_USER_ACTION)) {
+               ussd_change_state(ussd, USSD_STATE_IDLE);
+
+               if (ussd->pending == NULL)
+                       return;
+
+               reply = __ofono_error_failed(ussd->pending);
+               goto out;
+       }
+
        if (status == OFONO_USSD_STATUS_NOT_SUPPORTED) {
                ussd_change_state(ussd, USSD_STATE_IDLE);
 
-- 
1.7.9.5

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to