From 219a94a50212ae506329ee52aeb17d6cba4ee587 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 5 Jun 2009 17:35:50 -0500 Subject: [PATCH] Only USSD needs the special handling Apparently all Cell Broadcasts are always 88 bytes long, with a 6 byte header and 82 byte payload. character is used as a terminator and padding for the unused payload --- src/smsutil.h | 2 ++ src/util.c | 22 +++++++++++----------- src/util.h | 8 ++++---- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/smsutil.h b/src/smsutil.h index 146b81db..b5f15c76 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -22,6 +22,8 @@ #ifndef __SMSUTIL_H__ #define __SMSUTIL_H__ +#define CBS_PAYLOAD_CHARACTERS 93 + enum sms_type { SMS_TYPE_DELIVER = 0, SMS_TYPE_DELIVER_REPORT_ACK, diff --git a/src/util.c b/src/util.c index 90c36cd9..de509c70 100644 --- a/src/util.c +++ b/src/util.c @@ -503,7 +503,7 @@ char *encode_hex(const unsigned char *in, long len, unsigned char terminator) } unsigned char *unpack_7bit_own_buf(const unsigned char *in, long len, - int byte_offset, gboolean cb, + int byte_offset, gboolean ussd, long max_to_unpack, long *items_written, unsigned char terminator, unsigned char *buf) @@ -517,7 +517,7 @@ unsigned char *unpack_7bit_own_buf(const unsigned char *in, long len, return NULL; /* In the case of CB, unpack as much as possible */ - if (cb == TRUE) + if (ussd == TRUE) max_to_unpack = len * 8 / 7; for (i = 0; (i < len) && ((out-buf) < max_to_unpack); i++) { @@ -562,7 +562,7 @@ unsigned char *unpack_7bit_own_buf(const unsigned char *in, long len, * the message ends on an octet boundary with as the last * character. */ - if (cb && (((out - buf) % 8) == 0) && (*(out-1) == '\r')) + if (ussd && (((out - buf) % 8) == 0) && (*(out-1) == '\r')) out = out - 1; if (terminator) @@ -575,18 +575,18 @@ unsigned char *unpack_7bit_own_buf(const unsigned char *in, long len, } unsigned char *unpack_7bit(const unsigned char *in, long len, int byte_offset, - gboolean cb, long max_to_unpack, + gboolean ussd, long max_to_unpack, long *items_written, unsigned char terminator) { unsigned char *buf = g_new(unsigned char, len * 8 / 7 + (terminator ? 1 : 0)); - return unpack_7bit_own_buf(in, len, byte_offset, cb, max_to_unpack, + return unpack_7bit_own_buf(in, len, byte_offset, ussd, max_to_unpack, items_written, terminator, buf); } unsigned char *pack_7bit_own_buf(const unsigned char *in, long len, - int byte_offset, gboolean cb, + int byte_offset, gboolean ussd, long *items_written, unsigned char terminator, unsigned char *buf) @@ -640,13 +640,13 @@ unsigned char *pack_7bit_own_buf(const unsigned char *in, long len, * but this will not result in misoperation as the definition of * in clause 6.1.1 is identical to the definition of . */ - if (cb && ((total_bits % 8) == 1)) + if (ussd && ((total_bits % 8) == 1)) *out |= '\r' << 1; if (bits != 7) out++; - if (cb && ((total_bits % 8) == 0) && (in[len-1] == '\r')) { + if (ussd && ((total_bits % 8) == 0) && (in[len-1] == '\r')) { *out = '\r'; out++; } @@ -657,7 +657,7 @@ unsigned char *pack_7bit_own_buf(const unsigned char *in, long len, } unsigned char *pack_7bit(const unsigned char *in, long len, int byte_offset, - gboolean cb, long *items_written, + gboolean ussd, long *items_written, unsigned char terminator) { int bits = 7 - (byte_offset % 7); @@ -683,11 +683,11 @@ unsigned char *pack_7bit(const unsigned char *in, long len, int byte_offset, total_bits += bits; /* Round up number of bytes, must append if true */ - if (cb && ((total_bits % 8) == 0) && (in[len-1] == '\r')) + if (ussd && ((total_bits % 8) == 0) && (in[len-1] == '\r')) buf = g_new(unsigned char, (total_bits + 14) / 8); else buf = g_new(unsigned char, (total_bits + 7) / 8); - return pack_7bit_own_buf(in, len, byte_offset, cb, items_written, + return pack_7bit_own_buf(in, len, byte_offset, ussd, items_written, terminator, buf); } diff --git a/src/util.h b/src/util.h index 92034c45..3b971098 100644 --- a/src/util.h +++ b/src/util.h @@ -41,23 +41,23 @@ char *encode_hex(const unsigned char *in, long len, unsigned char terminator); unsigned char *unpack_7bit_own_buf(const unsigned char *in, long len, - int byte_offset, gboolean cb, + int byte_offset, gboolean ussd, long max_to_unpack, long *items_written, unsigned char terminator, unsigned char *buf); unsigned char *unpack_7bit(const unsigned char *in, long len, int byte_offset, - gboolean cb, long max_to_unpack, + gboolean ussd, long max_to_unpack, long *items_written, unsigned char terminator); unsigned char *pack_7bit_own_buf(const unsigned char *in, long len, - int byte_offset, gboolean cb, + int byte_offset, gboolean ussd, long *items_written, unsigned char terminator, unsigned char *buf); unsigned char *pack_7bit(const unsigned char *in, long len, int byte_offset, - gboolean cb_or_ussd, + gboolean ussd, long *items_written, unsigned char terminator); #endif