summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-06-05 17:56:11 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-06-05 19:58:52 -0500
commitf9f30807816700c44c30c7d04b80c65497f0558d (patch)
treee639ab4de35f3e599e96bebb10d901fccf075206 /src
parent219a94a50212ae506329ee52aeb17d6cba4ee587 (diff)
downloadofono-f9f30807816700c44c30c7d04b80c65497f0558d.tar.bz2
Add utility for parsing MWI SMS DCS types
Diffstat (limited to 'src')
-rw-r--r--src/smsutil.c44
-rw-r--r--src/smsutil.h12
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