diff options
author | Denis Kenzior <denkenz@gmail.com> | 2015-11-05 13:48:45 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2015-11-05 13:48:45 -0600 |
commit | 6910a2e2e94579d7e85ce03484e14f57096bd0e0 (patch) | |
tree | 149dc6e27b68c2c90a763456dbedaed397c3a20f /drivers | |
parent | 8b6c834a1ca861ac58f056ba21373ebcbed294cb (diff) | |
download | ofono-6910a2e2e94579d7e85ce03484e14f57096bd0e0.tar.bz2 |
rilmodem: Rework ril_ussd_request
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/rilmodem/ussd.c | 51 |
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) |