From 6b575cece08f026710d4421c11dfba8051036dc4 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 7 Sep 2012 14:33:27 +0200 Subject: sms-part: allow storing and accessing the user encoding info of an SMS part --- src/mm-sms-part.c | 37 ++++++++++++++++++------------------- src/mm-sms-part.h | 11 +++++++++++ 2 files changed, 29 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/mm-sms-part.c b/src/mm-sms-part.c index 2d363545..f37434d7 100644 --- a/src/mm-sms-part.c +++ b/src/mm-sms-part.c @@ -58,13 +58,6 @@ #define SMS_TIMESTAMP_LEN 7 #define SMS_MIN_PDU_LEN (7 + SMS_TIMESTAMP_LEN) -typedef enum { - MM_SMS_ENCODING_UNKNOWN = 0x0, - MM_SMS_ENCODING_GSM7, - MM_SMS_ENCODING_8BIT, - MM_SMS_ENCODING_UCS2 -} SmsEncoding; - static char sms_bcd_chars[] = "0123456789*#abc\0\0"; static void @@ -183,10 +176,10 @@ sms_decode_timestamp (const guint8 *timestamp) return timestr; } -static SmsEncoding +static MMSmsEncoding sms_encoding_type (int dcs) { - SmsEncoding scheme = MM_SMS_ENCODING_UNKNOWN; + MMSmsEncoding scheme = MM_SMS_ENCODING_UNKNOWN; switch ((dcs >> 4) & 0xf) { /* General data coding group */ @@ -241,7 +234,7 @@ sms_encoding_type (int dcs) } static char * -sms_decode_text (const guint8 *text, int len, SmsEncoding encoding, int bit_offset) +sms_decode_text (const guint8 *text, int len, MMSmsEncoding encoding, int bit_offset) { char *utf8; guint8 *unpacked; @@ -271,6 +264,7 @@ struct _MMSmsPart { gchar *timestamp; gchar *number; gchar *text; + MMSmsEncoding encoding; GByteArray *data; guint data_coding_scheme; guint class; @@ -301,10 +295,10 @@ mm_sms_part_free (MMSmsPart *self) return self->name; \ } -#define PART_SET_UINT_FUNC(name) \ +#define PART_SET_FUNC(type, name) \ void \ mm_sms_part_set_##name (MMSmsPart *self, \ - guint value) \ + type value) \ { \ self->name = value; \ } @@ -327,7 +321,7 @@ mm_sms_part_free (MMSmsPart *self) } PART_GET_FUNC (guint, index) -PART_SET_UINT_FUNC (index) +PART_SET_FUNC (guint, index) PART_GET_FUNC (const gchar *, smsc) PART_SET_TAKE_STR_FUNC (smsc) PART_GET_FUNC (const gchar *, number) @@ -335,17 +329,19 @@ PART_SET_TAKE_STR_FUNC (number) PART_GET_FUNC (const gchar *, timestamp) PART_SET_TAKE_STR_FUNC (timestamp) PART_GET_FUNC (guint, concat_max) -PART_SET_UINT_FUNC (concat_max) +PART_SET_FUNC (guint, concat_max) PART_GET_FUNC (guint, concat_sequence) -PART_SET_UINT_FUNC (concat_sequence) +PART_SET_FUNC (guint, concat_sequence) PART_GET_FUNC (const gchar *, text) PART_SET_TAKE_STR_FUNC (text) PART_GET_FUNC (guint, data_coding_scheme) -PART_SET_UINT_FUNC (data_coding_scheme) +PART_SET_FUNC (guint, data_coding_scheme) +PART_GET_FUNC (MMSmsEncoding, encoding) +PART_SET_FUNC (MMSmsEncoding, encoding) PART_GET_FUNC (guint, class) -PART_SET_UINT_FUNC (class) +PART_SET_FUNC (guint, class) PART_GET_FUNC (guint, validity) -PART_SET_UINT_FUNC (validity) +PART_SET_FUNC (guint, validity) PART_GET_FUNC (guint, concat_reference) @@ -431,7 +427,7 @@ mm_sms_part_new_from_binary_pdu (guint index, sender_addr_num_digits, sender_addr_num_octets, tp_pid_offset, tp_dcs_offset, user_data_offset, user_data_len, user_data_len_offset, bit_offset; - SmsEncoding user_data_encoding; + MMSmsEncoding user_data_encoding; GByteArray *raw; /* SMSC, in address format, precedes the TPDU */ @@ -574,6 +570,9 @@ mm_sms_part_new_from_binary_pdu (guint index, user_data_len -= udhl; } + /* Keep user data encoding */ + mm_sms_part_set_encoding (sms_part, user_data_encoding); + if ( user_data_encoding == MM_SMS_ENCODING_8BIT || user_data_encoding == MM_SMS_ENCODING_UNKNOWN) { /* 8-bit encoding is usually binary data, and we have no idea what diff --git a/src/mm-sms-part.h b/src/mm-sms-part.h index 6e50d018..fe0efb49 100644 --- a/src/mm-sms-part.h +++ b/src/mm-sms-part.h @@ -19,6 +19,13 @@ #include +typedef enum { + MM_SMS_ENCODING_UNKNOWN = 0x0, + MM_SMS_ENCODING_GSM7, + MM_SMS_ENCODING_8BIT, + MM_SMS_ENCODING_UCS2 +} MMSmsEncoding; + typedef struct _MMSmsPart MMSmsPart; #define SMS_MAX_PDU_LEN 344 @@ -77,6 +84,10 @@ guint mm_sms_part_get_data_coding_scheme (MMSmsPart *part); void mm_sms_part_set_data_coding_scheme (MMSmsPart *part, guint data_coding_scheme); +MMSmsEncoding mm_sms_part_get_encoding (MMSmsPart *part); +void mm_sms_part_set_encoding (MMSmsPart *part, + MMSmsEncoding encoding); + guint mm_sms_part_get_class (MMSmsPart *part); void mm_sms_part_set_class (MMSmsPart *part, guint class); -- cgit v1.2.3-70-g09d2