summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-10-25 10:35:21 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-10-25 19:49:56 +0200
commit80f55923ed9a7e3dcdaa35d8c31b6ae94d27d8b4 (patch)
tree805d633f2dfae5c0fca96cd03343b78cb0035709
parent66f134b7bd0f5114630faafdf9083936cf143c9d (diff)
downloadModemManager-80f55923ed9a7e3dcdaa35d8c31b6ae94d27d8b4.tar.gz
sms-part-cdma: support parsing SMS with Unicode encoding
-rw-r--r--src/mm-sms-part-cdma.c29
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)");
}