FreeCalypso > hg > freecalypso-tools
annotate uptools/sms-pdu-decode/pdu-common.c @ 802:1c599681fd60
pcm-sms-decode & sms-pdu-decode: revamp bad char decoding
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 25 Mar 2021 02:58:30 +0000 |
parents | 8dc93aac9a9c |
children | 30fbaa652ea5 |
rev | line source |
---|---|
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 #include <sys/types.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 #include <ctype.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 #include <stdio.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 #include <stdlib.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <string.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <strings.h> |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 int ascii_ext_mode, global_hexdump_mode; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 u_char pdu[176]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 unsigned pdu_length; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 static u_char first_octet; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 static unsigned pdu_ptr; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 static int dcs_distilled; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 handle_sca() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 unsigned sca_len; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 char digits[21]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 sca_len = pdu[0]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 pdu_ptr = 1; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 if (!sca_len) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 if (sca_len < 2 || sca_len > 11) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 printf("Decode-Error: invalid SCA length\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 if (pdu_ptr + sca_len > pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 printf("Decode-Error: SCA goes past PDU end\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 pdu_ptr += sca_len; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 decode_address_digits(pdu + 2, digits, sc_addr_ndigits(pdu)); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 printf("SCA: %s%s (type 0x%02X)\n", pdu[1] == 0x91 ? "+" : "", digits, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 pdu[1]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 handle_first_octet() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 printf("Decode-Error: end of PDU before FO\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 first_octet = pdu[pdu_ptr++]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 printf("First-Octet: 0x%02X\n", first_octet); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 handle_mr() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 printf("Decode-Error: end of PDU before MR\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 printf("MR: 0x%02X\n", pdu[pdu_ptr++]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 handle_user_addr(direction) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 char *direction; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 unsigned addr_field_len, alpha_nsep; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 char digits[21]; |
800
8dc93aac9a9c
pcm-sms-decode & sms-pdu-decode: use new function for
Mychaela Falconia <falcon@freecalypso.org>
parents:
599
diff
changeset
|
71 u_char alpha_gsm7[11]; |
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 printf("Decode-Error: end of PDU before %s address\n", |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 direction); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (pdu[pdu_ptr] > 20) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 printf("Decode-Error: %s address > 20 digits\n", direction); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 addr_field_len = ((pdu[pdu_ptr] + 1) >> 1) + 2; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 if (pdu_ptr + addr_field_len > pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 printf("Decode-Error: %s address goes past PDU end\n", |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 direction); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 if (!pdu[pdu_ptr]) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 printf("%s: empty-addr (type 0x%02X)\n", direction, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 pdu[pdu_ptr+1]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 else if ((pdu[pdu_ptr+1] & 0x70) == 0x50 && |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 alpha_addr_valid(pdu[pdu_ptr], &alpha_nsep)) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 gsm7_unpack(pdu + pdu_ptr + 2, alpha_gsm7, alpha_nsep); |
800
8dc93aac9a9c
pcm-sms-decode & sms-pdu-decode: use new function for
Mychaela Falconia <falcon@freecalypso.org>
parents:
599
diff
changeset
|
94 printf("%s: ", direction); |
8dc93aac9a9c
pcm-sms-decode & sms-pdu-decode: use new function for
Mychaela Falconia <falcon@freecalypso.org>
parents:
599
diff
changeset
|
95 print_gsm7_string_to_file(alpha_gsm7, alpha_nsep, stdout); |
8dc93aac9a9c
pcm-sms-decode & sms-pdu-decode: use new function for
Mychaela Falconia <falcon@freecalypso.org>
parents:
599
diff
changeset
|
96 printf(" (type 0x%02X)\n", pdu[pdu_ptr+1]); |
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 decode_address_digits(pdu + pdu_ptr + 2, digits, pdu[pdu_ptr]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 printf("%s: %s%s (type 0x%02X)\n", direction, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 pdu[pdu_ptr+1] == 0x91 ? "+" : "", digits, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 pdu[pdu_ptr+1]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 pdu_ptr += addr_field_len; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 handle_pid() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 printf("Decode-Error: end of PDU before PID\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 printf("PID: 0x%02X\n", pdu[pdu_ptr++]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 handle_dcs() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 u_char dcs; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 char *strtype; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 printf("Decode-Error: end of PDU before DCS\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 dcs = pdu[pdu_ptr++]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 dcs_distilled = sms_dcs_classify(dcs); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 switch (dcs_distilled) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 case 7: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 strtype = "7-bit"; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 case 8: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 strtype = "raw octets"; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 case 9: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 strtype = "compressed"; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 case 16: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 strtype = "UCS-2"; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 printf("DCS: 0x%02X (%s)\n", dcs, strtype); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 handle_scts() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 char str[21]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 if (pdu_ptr + 7 > pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 printf("Decode-Error: end of PDU before SCTS\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 gsm_timestamp_decode(pdu + pdu_ptr, str); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 printf("SC-Timestamp: %s\n", str); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 pdu_ptr += 7; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 handle_vp_abs() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 char str[21]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 if (pdu_ptr + 7 > pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 printf("Decode-Error: end of PDU before VP-abs\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 gsm_timestamp_decode(pdu + pdu_ptr, str); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 printf("VP-Absolute: %s\n", str); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 pdu_ptr += 7; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 handle_vp_rel() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 unsigned vprel, hours, min; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 printf("Decode-Error: end of PDU before VP-rel\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 vprel = pdu[pdu_ptr++]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 if (vprel <= 143) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 min = (vprel + 1) * 5; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 goto hhmm; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 } else if (vprel <= 167) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 min = (vprel - 143) * 30 + 12 * 60; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 goto hhmm; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 } else if (vprel <= 196) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 printf("VP-Relative: %u days\n", vprel - 166); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 printf("VP-Relative: %u weeks\n", vprel - 192); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 hhmm: hours = min / 60; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 min %= 60; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 printf("VP-Relative: "); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 if (hours) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 printf(" %u hour%s", hours, hours != 1 ? "s" : ""); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 if (min) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 printf(" %u min", min); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 putchar('\n'); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 handle_vp_enh() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 if (pdu_ptr + 7 > pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 printf("Decode-Error: end of PDU before VP-enh\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 printf("VP-Enhanced: %02X %02X %02X %02X %02X %02X %02X\n", |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 pdu[pdu_ptr], pdu[pdu_ptr+1], pdu[pdu_ptr+2], pdu[pdu_ptr+3], |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 pdu[pdu_ptr+4], pdu[pdu_ptr+5], pdu[pdu_ptr+6]); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 pdu_ptr += 7; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 static |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 handle_vp() |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 int rc; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 switch (first_octet & 0x18) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 case 0x00: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 rc = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 case 0x08: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 rc = handle_vp_enh(); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 case 0x10: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 rc = handle_vp_rel(); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 case 0x18: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 rc = handle_vp_abs(); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 return(rc); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 |
599
18bfc10ba20e
sms-pdu-decode: more prep for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
598
diff
changeset
|
249 process_pdu(require_exact_length) |
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 unsigned udl, udl_octets; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 unsigned udhl, udh_octets, udh_chars, ud_chars; |
802
1c599681fd60
pcm-sms-decode & sms-pdu-decode: revamp bad char decoding
Mychaela Falconia <falcon@freecalypso.org>
parents:
800
diff
changeset
|
253 u_char ud7[160], decode_buf[481]; |
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 int do_hexdump; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 unsigned decoded_len, badchars; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 if (handle_sca() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 if (handle_first_octet() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 if (first_octet & 2) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 printf("Decode-Error: MTI not supported\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 if (first_octet & 1) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 if (handle_mr() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 if (handle_user_addr(first_octet & 1 ? "To" : "From") < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 if (handle_pid() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 if (handle_dcs() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 if (first_octet & 1) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 if (handle_vp() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 if (handle_scts() < 0) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 if (pdu_ptr >= pdu_length) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 printf("Decode-Error: end of PDU before UDL\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 udl = pdu[pdu_ptr++]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 if (dcs_distilled == 7) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 if (udl > 160) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 printf("Decode-Error: UDL %u > 160\n", udl); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 udl_octets = (udl * 7 + 7) / 8; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 if (udl > 140) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 printf("Decode-Error: UDL %u > 140\n", udl); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 udl_octets = udl; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 } |
599
18bfc10ba20e
sms-pdu-decode: more prep for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
598
diff
changeset
|
300 if (require_exact_length && pdu_length - pdu_ptr != udl_octets) { |
598
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 printf("Decode-Error: UD length in PDU %u != expected %u\n", |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 pdu_length - pdu_ptr, udl_octets); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 if (first_octet & 0x40) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 if (!udl) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 printf("Decode-Error: UDHI set with UDL=0\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 udhl = pdu[pdu_ptr]; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 udh_octets = udhl + 1; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 if (udh_octets > udl_octets) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 printf("Decode-Error: UDHL exceeds UDL\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 return(-1); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 printf("UDH-Length: %u\n", udhl); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 if (dcs_distilled == 7) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 udh_chars = (udh_octets * 8 + 6) / 7; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 else |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 udh_chars = udh_octets; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 udhl = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 udh_octets = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 udh_chars = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 if (udh_chars >= udl) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 ud_chars = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 printf("Length: 0\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 } else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 ud_chars = udl - udh_chars; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 if (dcs_distilled == 7) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 gsm7_unpack(pdu + pdu_ptr, ud7, udl); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 if (global_hexdump_mode) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 do_hexdump = 1; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 else switch (dcs_distilled) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 case 7: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 do_hexdump = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 case 8: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 case 9: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 do_hexdump = 1; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 case 16: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 if (ud_chars & 1) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 do_hexdump = 1; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 else |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 do_hexdump = 0; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 if (do_hexdump) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 printf("Length: %u (raw)\n", ud_chars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 else { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 switch (dcs_distilled) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 case 7: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 gsm7_to_ascii_or_ext(ud7 + udh_chars, ud_chars, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 decode_buf, &decoded_len, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 ascii_ext_mode, 1, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 &badchars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 case 16: |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 ucs2_to_ascii_or_ext(pdu + pdu_ptr + udh_chars, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 ud_chars, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 decode_buf, &decoded_len, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 ascii_ext_mode, 1, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 &badchars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 break; |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 printf("Length: %u", ud_chars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 if (decoded_len != ud_chars) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 printf("->%u", decoded_len); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 if (badchars) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 printf(" (%u bad char%s)", badchars, |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 badchars != 1 ? "s" : ""); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 putchar('\n'); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 if (udhl) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 printf("\nUDH:\n"); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 msg_bits_hexdump(pdu + pdu_ptr + 1, udhl); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 } |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 if (!ud_chars) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 putchar('\n'); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 if (do_hexdump) { |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 if (dcs_distilled == 7) |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 msg_bits_hexdump(ud7 + udh_chars, ud_chars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 else |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 msg_bits_hexdump(pdu + pdu_ptr + udh_chars, ud_chars); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 } else |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 puts(decode_buf); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 return(0); |
9f7a263ad7f0
sms-pdu-decode split in preparation for pcm-sms-decode addition
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 } |