diff options
Diffstat (limited to 'src/mm-sms-part-cdma.c')
-rw-r--r-- | src/mm-sms-part-cdma.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/src/mm-sms-part-cdma.c b/src/mm-sms-part-cdma.c index b567e38e..4e1ff462 100644 --- a/src/mm-sms-part-cdma.c +++ b/src/mm-sms-part-cdma.c @@ -744,7 +744,7 @@ read_bearer_data_user_data (MMSmsPart *sms_part, const struct Parameter *subparameter) { guint8 message_encoding; - guint8 message_type; + guint8 message_type = 0; guint8 num_fields; guint byte_offset = 0; guint bit_offset = 0; @@ -824,6 +824,48 @@ read_bearer_data_user_data (MMSmsPart *sms_part, OFFSETS_UPDATE (8); mm_dbg (" num fields: %u", num_fields); + /* Now, process actual text or data */ + switch (message_encoding) { + case ENCODING_OCTET: { + GByteArray *data; + guint i; + + SUBPARAMETER_SIZE_CHECK (byte_offset + 1 + ((bit_offset + (num_fields * 8)) / 8)); + + data = g_byte_array_sized_new (num_fields); + g_byte_array_set_size (data, num_fields); + for (i = 0; i < num_fields; i++) { + data->data[i] = read_bits (&subparameter->parameter_value[byte_offset], bit_offset, 8); + OFFSETS_UPDATE (8); + } + + mm_dbg (" data: (%u bytes)", num_fields); + mm_sms_part_take_data (sms_part, data); + break; + } + + case ENCODING_ASCII_7BIT: { + gchar *text; + guint i; + + SUBPARAMETER_SIZE_CHECK (byte_offset + 1 + ((bit_offset + (num_fields * 7)) / 8)); + + text = g_malloc (num_fields + 1); + for (i = 0; i < num_fields; i++) { + text[i] = read_bits (&subparameter->parameter_value[byte_offset], bit_offset, 7); + OFFSETS_UPDATE (7); + } + text[i] = '\0'; + + mm_dbg (" text: '%s'", text); + mm_sms_part_take_text (sms_part, text); + break; + } + + default: + mm_dbg (" text/data: ignored (unsupported encoding)"); + } + #undef OFFSETS_UPDATE #undef SUBPARAMETER_SIZE_CHECK } |