Fix improper length of sms message stored in User Data Length field
[project/uqmi.git] / commands-wms.c
index 47d4d76..2e4e08f 100644 (file)
@@ -70,6 +70,7 @@ pdu_decode_7bit_char(char *dest, int len, unsigned char c, bool *escape)
        fprintf(stderr, " %02x", c);
        dest += len;
        if (*escape) {
+               *escape = false;
                switch(c) {
                case 0x0A:
                        *dest = 0x0C;
@@ -179,11 +180,16 @@ static int decode_udh(const unsigned char *data)
                        break;
 
                switch (type) {
-               case 0:
+               case 0x00:
                        blobmsg_add_u32(&status, "concat_ref", (uint32_t) val[0]);
                        blobmsg_add_u32(&status, "concat_part", (uint32_t) val[2]);
                        blobmsg_add_u32(&status, "concat_parts", (uint32_t) val[1]);
                        break;
+               case 0x08:
+                       blobmsg_add_u32(&status, "concat_ref", (uint32_t) (val[0] << 8 | val[1]));
+                       blobmsg_add_u32(&status, "concat_part", (uint32_t) val[3]);
+                       blobmsg_add_u32(&status, "concat_parts", (uint32_t) val[2]);
+                       break;
                default:
                        break;
                }
@@ -554,7 +560,7 @@ pdu_encode_number(unsigned char *dest, const char *str, bool smsc)
        }
 
        for (i = 0; str[i]; i++) {
-               if (str[i] >= '0' || str[i] <= '9')
+               if (str[i] >= '0' && str[i] <= '9')
                        continue;
 
                ascii = true;
@@ -585,7 +591,7 @@ pdu_encode_data(unsigned char *dest, const char *str)
 
        dest[len++] = 0;
        len += pdu_encode_7bit_str(&dest[len], str);
-       dest[0] = len - 1;
+       dest[0] = strlen(str);
 
        return len;
 }