diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-10-25 10:35:21 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-10-25 19:49:56 +0200 |
commit | 80f55923ed9a7e3dcdaa35d8c31b6ae94d27d8b4 (patch) | |
tree | 805d633f2dfae5c0fca96cd03343b78cb0035709 | |
parent | 66f134b7bd0f5114630faafdf9083936cf143c9d (diff) | |
download | ModemManager-80f55923ed9a7e3dcdaa35d8c31b6ae94d27d8b4.tar.gz |
sms-part-cdma: support parsing SMS with Unicode encoding
-rw-r--r-- | src/mm-sms-part-cdma.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mm-sms-part-cdma.c b/src/mm-sms-part-cdma.c index e1b85cdbb..cae53b6f1 100644 --- a/src/mm-sms-part-cdma.c +++ b/src/mm-sms-part-cdma.c @@ -889,6 +889,35 @@ read_bearer_data_user_data (MMSmsPart *sms_part, break; } + case ENCODING_UNICODE: { + gchar *utf16; + gchar *text; + guint i; + guint num_bytes; + + /* 2 bytes per field! */ + num_bytes = num_fields * 2; + + SUBPARAMETER_SIZE_CHECK (byte_offset + 1 + ((bit_offset + (num_bytes * 8)) / 8)); + + utf16 = g_malloc (num_bytes); + for (i = 0; i < num_bytes; i++) { + utf16[i] = read_bits (&subparameter->parameter_value[byte_offset], bit_offset, 8); + OFFSETS_UPDATE (8); + } + + text = g_convert (utf16, num_bytes, "UTF-8", "UCS-2BE", NULL, NULL, NULL); + if (!text) { + mm_dbg (" text/data: ignored (UTF-16 to UTF-8 conversion error)"); + } else { + mm_dbg (" text: '%s'", text); + mm_sms_part_take_text (sms_part, text); + } + + g_free (utf16); + break; + } + default: mm_dbg (" text/data: ignored (unsupported encoding)"); } |