diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-06-05 17:56:11 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-06-05 19:58:52 -0500 |
commit | f9f30807816700c44c30c7d04b80c65497f0558d (patch) | |
tree | e639ab4de35f3e599e96bebb10d901fccf075206 /src | |
parent | 219a94a50212ae506329ee52aeb17d6cba4ee587 (diff) | |
download | ofono-f9f30807816700c44c30c7d04b80c65497f0558d.tar.bz2 |
Add utility for parsing MWI SMS DCS types
Diffstat (limited to 'src')
-rw-r--r-- | src/smsutil.c | 44 | ||||
-rw-r--r-- | src/smsutil.h | 12 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/smsutil.c b/src/smsutil.c index ca301dd4..b381b8c0 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -172,6 +172,50 @@ gboolean sms_dcs_decode(guint8 dcs, enum sms_class *cls, return TRUE; } +gboolean sms_mwi_dcs_decode(guint8 dcs, enum sms_mwi_type *type, + enum sms_charset *charset, + gboolean *active, gboolean *discard) +{ + guint8 upper = (dcs & 0xf0) >> 4; + enum sms_mwi_type t; + enum sms_charset ch; + gboolean dis; + gboolean act; + + if (upper < 0xC || upper > 0xE) + return FALSE; + + upper = (dcs & 0x30) >> 4; + + if (upper == 0) + dis = TRUE; + else + dis = FALSE; + + if (upper == 3) + ch = SMS_CHARSET_UCS2; + else + ch = SMS_CHARSET_7BIT; + + act = dcs & 0x8; + + t = (enum sms_mwi_type) (dcs & 0x3); + + if (type) + *type = t; + + if (charset) + *charset = ch; + + if (active) + *active = act; + + if (discard) + *discard = dis; + + return TRUE; +} + int sms_udl_in_bytes(guint8 ud_len, guint8 dcs) { int len_7bit = (ud_len + 1) * 7 / 8; diff --git a/src/smsutil.h b/src/smsutil.h index b5f15c76..37dffb14 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -156,6 +156,13 @@ enum sms_charset { SMS_CHARSET_UCS2 = 2, }; +enum sms_mwi_type { + SMS_MWI_TYPE_VOICE = 0, + SMS_MWI_TYPE_FAX = 1, + SMS_MWI_TYPE_EMAIL = 2, + SMS_MWI_TYPE_OTHER = 3, +}; + struct sms_address { enum sms_number_type number_type; enum sms_numbering_plan numbering_plan; @@ -317,4 +324,9 @@ gboolean sms_udh_iter_next(struct sms_udh_iter *iter); gboolean sms_dcs_decode(guint8 dcs, enum sms_class *cls, enum sms_charset *charset, gboolean *compressed, gboolean *autodelete); + +gboolean sms_mwi_dcs_decode(guint8 dcs, enum sms_mwi_type *type, + enum sms_charset *charset, + gboolean *active, gboolean *discard); + #endif |