Hi Jeevaka,

On 09/09/2010 07:31 AM, Jeevaka Badrappan wrote:
> ---
>  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;

You have to be a bit careful here.  Text does support the notion of
NULL/empty strings.  E.g. the CTLV is present, and the length is set to
0.  Refer to ETSI 102.223 Section 8.15.

> +
> +     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);

I prefer that we assume dcs will always be 0x00, 0x04 or 0x08.

> +
> +     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;
>       };

Regards,
-Denis
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to