summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2015-11-05 13:48:45 -0600
committerDenis Kenzior <denkenz@gmail.com>2015-11-05 13:48:45 -0600
commit6910a2e2e94579d7e85ce03484e14f57096bd0e0 (patch)
tree149dc6e27b68c2c90a763456dbedaed397c3a20f /drivers
parent8b6c834a1ca861ac58f056ba21373ebcbed294cb (diff)
downloadofono-6910a2e2e94579d7e85ce03484e14f57096bd0e0.tar.bz2
rilmodem: Rework ril_ussd_request
Diffstat (limited to 'drivers')
-rw-r--r--drivers/rilmodem/ussd.c51
1 files changed, 17 insertions, 34 deletions
diff --git a/drivers/rilmodem/ussd.c b/drivers/rilmodem/ussd.c
index e8d9bb94..e87af9ea 100644
--- a/drivers/rilmodem/ussd.c
+++ b/drivers/rilmodem/ussd.c
@@ -84,53 +84,36 @@ static void ril_ussd_request(struct ofono_ussd *ussd, int dcs,
{
struct ussd_data *ud = ofono_ussd_get_data(ussd);
struct cb_data *cbd = cb_data_new(cb, data, ussd);
- enum sms_charset charset;
- char *text = NULL;
- int ret = 0;
-
- if (cbs_dcs_decode(dcs, NULL, NULL, &charset, NULL, NULL, NULL)) {
-
- if (charset == SMS_CHARSET_7BIT) {
- long written;
-
- text = (char *) unpack_7bit(pdu, len, 0, TRUE,
- 0, &written, 1);
- if (text != NULL)
- *(text + written) = '\0';
-
- } else if (charset == SMS_CHARSET_UCS2) {
- text = g_convert((char *) pdu, len,
- "UTF-8//TRANSLIT", "UCS-2BE",
- NULL, NULL, NULL);
- } else {
- ofono_error("%s: No support for charset %d",
- __func__, charset);
- }
- }
+ char *text;
+ struct parcel rilp;
+ int ret;
- if (text) {
- struct parcel rilp;
+ text = ussd_decode(dcs, len, pdu);
+ if (!text)
+ goto error;
- g_ril_request_send_ussd(ud->ril, text, &rilp);
+ g_ril_request_send_ussd(ud->ril, text, &rilp);
- ret = g_ril_send(ud->ril, RIL_REQUEST_SEND_USSD,
- &rilp, ril_ussd_cb, ussd, NULL);
- g_free(text);
- }
+ ret = g_ril_send(ud->ril, RIL_REQUEST_SEND_USSD,
+ &rilp, ril_ussd_cb, ussd, NULL);
+ g_free(text);
/*
+ * TODO: Is g_idle_add necessary?
* We do not wait for the SEND_USSD reply to do the callback, as some
* networks send it after sending one or more ON_USSD events. From the
* ofono core perspective, Initiate() does not return until one ON_USSD
* event is received: making here a successful callback just makes the
* core wait for that event.
*/
- if (ret <= 0) {
- g_free(cbd);
- CALLBACK_WITH_FAILURE(cb, data);
- } else {
+ if (ret > 0) {
g_idle_add(request_success, cbd);
+ return;
}
+
+error:
+ g_free(cbd);
+ CALLBACK_WITH_FAILURE(cb, data);
}
static void ril_ussd_cancel_cb(struct ril_msg *message, gpointer user_data)