summaryrefslogtreecommitdiffstats
path: root/src/smsutil.h
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-06-30 17:35:56 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-07-02 19:03:04 -0500
commitb1602d49e5a2b075625f63ff460c77d47eb76c09 (patch)
tree97f208cefda2fcf5e07e1aed309c74fb0b59deb9 /src/smsutil.h
parent97d53bf0ecb6344b3cce2df7904275ea47dcaf23 (diff)
downloadofono-b1602d49e5a2b075625f63ff460c77d47eb76c09.tar.bz2
Add Cell Broadcast encoding / decoding utilities
Diffstat (limited to 'src/smsutil.h')
-rw-r--r--src/smsutil.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/smsutil.h b/src/smsutil.h
index 5d647fdc..3e5f269e 100644
--- a/src/smsutil.h
+++ b/src/smsutil.h
@@ -201,6 +201,13 @@ enum cbs_language {
CBS_LANGUAGE_ICELANDIC = 0x24
};
+enum cbs_geo_scope {
+ CBS_GEO_SCOPE_CELL_IMMEDIATE,
+ CBS_GEO_SCOPE_PLMN,
+ CBS_GEO_SCOPE_SERVICE_AREA,
+ CBS_GEO_SCOPE_CELL_NORMAL
+};
+
struct sms_address {
enum sms_number_type number_type;
enum sms_numbering_plan numbering_plan;
@@ -356,6 +363,17 @@ struct sms_assembly {
GSList *assembly_list;
};
+struct cbs {
+ enum cbs_geo_scope gs; /* 2 bits */
+ guint16 message_code; /* 10 bits */
+ guint8 update_number; /* 4 bits */
+ guint16 message_identifier; /* 16 bits */
+ guint8 dcs; /* 8 bits */
+ guint8 max_pages; /* 4 bits */
+ guint8 page; /* 4 bits */
+ guint8 ud[82];
+};
+
static inline gboolean is_bit_set(unsigned char oct, int bit)
{
int mask = 0x1 << bit;
@@ -427,3 +445,6 @@ GSList *sms_text_prepare(const char *utf8, guint16 ref,
gboolean cbs_dcs_decode(guint8 dcs, gboolean *udhi, enum sms_class *cls,
enum sms_charset *charset, gboolean *compressed,
enum cbs_language *language, gboolean *iso639);
+
+gboolean cbs_decode(const unsigned char *pdu, int len, struct cbs *out);
+gboolean cbs_encode(const struct cbs *cbs, int *len, unsigned char *pdu);