--- src/stkutil.c | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index ae4cc32..e953ead 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -4170,6 +4170,34 @@ static gboolean build_dataobj_text(struct stk_tlv_builder *tlv, return stk_tlv_builder_close_container(tlv); } +/* Defined in TS 102.223 Section 8.15 - USSD specific case*/ +static gboolean build_dataobj_ussd_text(struct stk_tlv_builder *tlv, + const void *data, gboolean cr) +{ + const struct stk_ussd_text *text = data; + unsigned char tag = STK_DATA_OBJECT_TYPE_TEXT; + gboolean ret; + + if (!text->text || !text->len) + return TRUE; + + if (stk_tlv_builder_open_container(tlv, cr, tag, TRUE) != TRUE) + return FALSE; + + if (text->dcs != -1) { + if (stk_tlv_builder_append_byte(tlv, text->dcs) != TRUE) + return FALSE; + + ret = stk_tlv_builder_append_bytes(tlv, text->text, text->len); + } else + ret = stk_tlv_builder_append_text(tlv, -1, (const char *) text->text); + + if (ret != TRUE) + return ret; + + return stk_tlv_builder_close_container(tlv); +} + /* Described in TS 131.111 Section 8.17 */ static gboolean build_dataobj_ussd_string(struct stk_tlv_builder *tlv, const void *data, gboolean cr) @@ -5459,6 +5487,13 @@ const unsigned char *stk_pdu_from_response(const struct stk_response *response, case STK_COMMAND_TYPE_LANGUAGE_NOTIFICATION: case STK_COMMAND_TYPE_LAUNCH_BROWSER: break; + case STK_COMMAND_TYPE_SEND_USSD: + ok = build_dataobj(&builder, + build_dataobj_ussd_text, + DATAOBJ_FLAG_CR, + &response->send_ussd.text, + NULL); + break; default: return NULL; }; -- 1.7.0.4