summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeevaka Badrappan <jeevaka.badrappan@elektrobit.com>2010-09-13 16:00:10 -0700
committerDenis Kenzior <denkenz@gmail.com>2010-09-14 09:58:45 -0500
commitfd9570500ef61caba52cc6494de96cdcf1ec725b (patch)
treee846fd8f1034c470c9338ac4da8328d34fce6d83
parentc44e6361a07f37ea17c3fad8919436bfeb288ed4 (diff)
downloadofono-fd9570500ef61caba52cc6494de96cdcf1ec725b.tar.bz2
smsutil: Add USSD encoding function
-rw-r--r--src/smsutil.c29
-rw-r--r--src/smsutil.h1
2 files changed, 30 insertions, 0 deletions
diff --git a/src/smsutil.c b/src/smsutil.c
index 26c79513..0d68d331 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 0e0ddf45..a81fd6d5 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);