--- src/smsutil.c | 29 +++++++++++++++++++++++++++++ src/smsutil.h | 1 + 2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/src/smsutil.c b/src/smsutil.c index 26c7951..0d68d33 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -4179,3 +4179,32 @@ char *ussd_decode(int dcs, int len, const unsigned char *data) return utf8; } + +gboolean ussd_encode(const char *str, long *items_written, unsigned char *pdu) +{ + unsigned char *converted = NULL; + long written; + long num_packed; + + if (!pdu) + return FALSE; + + converted = convert_utf8_to_gsm(str, -1, NULL, &written, 0); + if (!converted || written > 182) + goto error; + + pack_7bit_own_buf(converted, written, 0, TRUE, &num_packed, 0, pdu); + + g_free(converted); + + if (num_packed < 1) + return FALSE; + + if (items_written) + *items_written = num_packed; + + return TRUE; +error: + g_free(converted); + return FALSE; +} diff --git a/src/smsutil.h b/src/smsutil.h index 0e0ddf4..a81fd6d 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -544,3 +544,4 @@ GSList *cbs_optimize_ranges(GSList *ranges); gboolean cbs_topic_in_range(unsigned int topic, GSList *ranges); char *ussd_decode(int dcs, int len, const unsigned char *data); +gboolean ussd_encode(const char *str, long *items_written, unsigned char *pdu); -- 1.7.0.4 _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono