Only USSD needs the special <cr> handling
authorDenis Kenzior <denkenz@gmail.com>
Fri, 5 Jun 2009 22:35:50 +0000 (17:35 -0500)
committerDenis Kenzior <denkenz@gmail.com>
Sat, 6 Jun 2009 00:58:27 +0000 (19:58 -0500)
Apparently all Cell Broadcasts are always 88 bytes long, with a
6 byte header and 82 byte payload.  <cr> character is used as a
terminator and padding for the unused payload

src/smsutil.h
src/util.c
src/util.h

index 146b81d..b5f15c7 100644 (file)
@@ -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,
index 90c36cd..de509c7 100644 (file)
@@ -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 <CR> 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
         * <CR> in clause 6.1.1 is identical to the definition of <CR><CR>.
         */
-       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 <cr> 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);
 }
index 92034c4..3b97109 100644 (file)
@@ -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