FreeCalypso > hg > freecalypso-tools
annotate uptools/sms-pdu-decode/sms-pdu-decode.c @ 469:fd4af8023ce6
CHANGES: null pointer passing fixes documented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 11 Feb 2019 22:51:17 +0000 |
parents | 542c6d733772 |
children | 9f7a263ad7f0 |
rev | line source |
---|---|
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 #include <sys/types.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 #include <ctype.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 #include <stdio.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 #include <stdlib.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <string.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <strings.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <unistd.h> |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 char *infname; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 FILE *inf; |
386
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
11 int ascii_ext_mode, global_hexdump_mode, keep_raw_pdu; |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 char input_line[1024]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 u_char pdu[176], first_octet; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 unsigned pdu_length, pdu_ptr; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 int dcs_distilled; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 handle_sca() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 unsigned sca_len; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 char digits[21]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 sca_len = pdu[0]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 pdu_ptr = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 if (!sca_len) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 if (sca_len < 2 || sca_len > 11) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 printf("Decode-Error: invalid SCA length\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 if (pdu_ptr + sca_len > pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 printf("Decode-Error: SCA goes past PDU end\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 pdu_ptr += sca_len; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 decode_address_digits(pdu + 2, digits, sc_addr_ndigits(pdu)); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 printf("SCA: %s%s (type 0x%02X)\n", pdu[1] == 0x91 ? "+" : "", digits, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 pdu[1]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 handle_first_octet() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 printf("Decode-Error: end of PDU before FO\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 first_octet = pdu[pdu_ptr++]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 printf("First-Octet: 0x%02X\n", first_octet); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 handle_mr() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 printf("Decode-Error: end of PDU before MR\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 printf("MR: 0x%02X\n", pdu[pdu_ptr++]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 handle_user_addr(direction) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 char *direction; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 unsigned addr_field_len, alpha_nsep; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 char digits[21]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 u_char alpha_gsm7[11], alpha_decoded[23]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 printf("Decode-Error: end of PDU before %s address\n", |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 direction); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if (pdu[pdu_ptr] > 20) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 printf("Decode-Error: %s address > 20 digits\n", direction); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 } |
339
7f8f446db97e
sms-pdu-decode: fixed bug in the decoding of From/To address fields
Mychaela Falconia <falcon@freecalypso.org>
parents:
337
diff
changeset
|
79 addr_field_len = ((pdu[pdu_ptr] + 1) >> 1) + 2; |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 if (pdu_ptr + addr_field_len > pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 printf("Decode-Error: %s address goes past PDU end\n", |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 direction); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 if (!pdu[pdu_ptr]) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 printf("%s: empty-addr (type 0x%02X)\n", direction, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 pdu[pdu_ptr+1]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 else if ((pdu[pdu_ptr+1] & 0x70) == 0x50 && |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 alpha_addr_valid(pdu[pdu_ptr], &alpha_nsep)) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 gsm7_unpack(pdu + pdu_ptr + 2, alpha_gsm7, alpha_nsep); |
468
542c6d733772
sms-pdu-decode: null pointer passing fixes
Mychaela Falconia <falcon@freecalypso.org>
parents:
386
diff
changeset
|
91 gsm7_to_ascii_or_ext(alpha_gsm7, alpha_nsep, alpha_decoded, |
542c6d733772
sms-pdu-decode: null pointer passing fixes
Mychaela Falconia <falcon@freecalypso.org>
parents:
386
diff
changeset
|
92 (unsigned *) 0, ascii_ext_mode, 0, |
542c6d733772
sms-pdu-decode: null pointer passing fixes
Mychaela Falconia <falcon@freecalypso.org>
parents:
386
diff
changeset
|
93 (unsigned *) 0); |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 printf("%s: \"%s\" (type 0x%02X)\n", direction, alpha_decoded, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 pdu[pdu_ptr+1]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 decode_address_digits(pdu + pdu_ptr + 2, digits, pdu[pdu_ptr]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 printf("%s: %s%s (type 0x%02X)\n", direction, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 pdu[pdu_ptr+1] == 0x91 ? "+" : "", digits, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 pdu[pdu_ptr+1]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 pdu_ptr += addr_field_len; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 handle_pid() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 printf("Decode-Error: end of PDU before PID\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 printf("PID: 0x%02X\n", pdu[pdu_ptr++]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 handle_dcs() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 u_char dcs; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 char *strtype; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 printf("Decode-Error: end of PDU before DCS\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 dcs = pdu[pdu_ptr++]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 dcs_distilled = sms_dcs_classify(dcs); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 switch (dcs_distilled) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 case 7: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 strtype = "7-bit"; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 case 8: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 strtype = "raw octets"; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 case 9: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 strtype = "compressed"; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 case 16: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 strtype = "UCS-2"; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 printf("DCS: 0x%02X (%s)\n", dcs, strtype); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 handle_scts() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 char str[21]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 if (pdu_ptr + 7 > pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 printf("Decode-Error: end of PDU before SCTS\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 gsm_timestamp_decode(pdu + pdu_ptr, str); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 printf("SC-Timestamp: %s\n", str); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 pdu_ptr += 7; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 handle_vp_abs() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 char str[21]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 if (pdu_ptr + 7 > pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 printf("Decode-Error: end of PDU before VP-abs\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 gsm_timestamp_decode(pdu + pdu_ptr, str); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 printf("VP-Absolute: %s\n", str); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 pdu_ptr += 7; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 handle_vp_rel() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 unsigned vprel, hours, min; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 printf("Decode-Error: end of PDU before VP-rel\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 vprel = pdu[pdu_ptr++]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 if (vprel <= 143) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 min = (vprel + 1) * 5; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 goto hhmm; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 } else if (vprel <= 167) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 min = (vprel - 143) * 30 + 12 * 60; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 goto hhmm; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 } else if (vprel <= 196) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 printf("VP-Relative: %u days\n", vprel - 166); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 printf("VP-Relative: %u weeks\n", vprel - 192); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 hhmm: hours = min / 60; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 min %= 60; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 printf("VP-Relative: "); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 if (hours) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 printf(" %u hour%s", hours, hours != 1 ? "s" : ""); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 if (min) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 printf(" %u min", min); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 putchar('\n'); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 handle_vp_enh() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 if (pdu_ptr + 7 > pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 printf("Decode-Error: end of PDU before VP-enh\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 printf("VP-Enhanced: %02X %02X %02X %02X %02X %02X %02X\n", |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 pdu[pdu_ptr], pdu[pdu_ptr+1], pdu[pdu_ptr+2], pdu[pdu_ptr+3], |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 pdu[pdu_ptr+4], pdu[pdu_ptr+5], pdu[pdu_ptr+6]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 pdu_ptr += 7; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 handle_vp() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 int rc; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 switch (first_octet & 0x18) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 case 0x00: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 rc = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 case 0x08: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 rc = handle_vp_enh(); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 case 0x10: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 rc = handle_vp_rel(); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 case 0x18: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 rc = handle_vp_abs(); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 return(rc); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 process_pdu() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 unsigned udl, udl_octets; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 unsigned udhl, udh_octets, udh_chars, ud_chars; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 u_char ud7[160], decode_buf[321]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 int do_hexdump; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 unsigned decoded_len, badchars; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 if (handle_sca() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 if (handle_first_octet() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 if (first_octet & 2) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 printf("Decode-Error: MTI not supported\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 if (first_octet & 1) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 if (handle_mr() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 if (handle_user_addr(first_octet & 1 ? "To" : "From") < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 if (handle_pid() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 if (handle_dcs() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 if (first_octet & 1) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 if (handle_vp() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 if (handle_scts() < 0) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 if (pdu_ptr >= pdu_length) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 printf("Decode-Error: end of PDU before UDL\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 udl = pdu[pdu_ptr++]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 if (dcs_distilled == 7) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 if (udl > 160) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 printf("Decode-Error: UDL %u > 160\n", udl); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 udl_octets = (udl * 7 + 7) / 8; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 if (udl > 140) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 printf("Decode-Error: UDL %u > 140\n", udl); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 udl_octets = udl; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 if (pdu_length - pdu_ptr != udl_octets) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 printf("Decode-Error: UD length in PDU %u != expected %u\n", |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 pdu_length - pdu_ptr, udl_octets); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 if (first_octet & 0x40) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 if (!udl) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 printf("Decode-Error: UDHI set with UDL=0\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 udhl = pdu[pdu_ptr]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 udh_octets = udhl + 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 if (udh_octets > udl_octets) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 printf("Decode-Error: UDHL exceeds UDL\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 return(-1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 printf("UDH-Length: %u\n", udhl); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 if (dcs_distilled == 7) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 udh_chars = (udh_octets * 8 + 6) / 7; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 else |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 udh_chars = udh_octets; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 udhl = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 udh_octets = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 udh_chars = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 if (udh_chars >= udl) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 ud_chars = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 printf("Length: 0\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 ud_chars = udl - udh_chars; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 if (dcs_distilled == 7) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 gsm7_unpack(pdu + pdu_ptr, ud7, udl); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 if (global_hexdump_mode) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 do_hexdump = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 else switch (dcs_distilled) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 case 7: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 do_hexdump = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 case 8: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 case 9: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 do_hexdump = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 case 16: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 if (ud_chars & 1) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 do_hexdump = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 else |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 do_hexdump = 0; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 if (do_hexdump) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 printf("Length: %u (raw)\n", ud_chars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 switch (dcs_distilled) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 case 7: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 gsm7_to_ascii_or_ext(ud7 + udh_chars, ud_chars, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 decode_buf, &decoded_len, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 ascii_ext_mode, 1, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 &badchars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 case 16: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 ucs2_to_ascii_or_ext(pdu + pdu_ptr + udh_chars, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 ud_chars, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 decode_buf, &decoded_len, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 ascii_ext_mode, 1, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 &badchars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 break; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 printf("Length: %u", ud_chars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 if (decoded_len != ud_chars) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 printf("->%u", decoded_len); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 if (badchars) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 printf(" (%u bad char%s)", badchars, |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 badchars != 1 ? "s" : ""); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 putchar('\n'); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 if (udhl) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 printf("\nUDH:\n"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 msg_bits_hexdump(pdu + pdu_ptr + 1, udhl); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 if (!ud_chars) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 putchar('\n'); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 if (do_hexdump) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 if (dcs_distilled == 7) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 msg_bits_hexdump(ud7 + udh_chars, ud_chars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 else |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 msg_bits_hexdump(pdu + pdu_ptr + udh_chars, ud_chars); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 } else |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 puts(decode_buf); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 return(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 process_cmdline(argc, argv) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 char **argv; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 int c; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 extern int optind; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 |
386
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
393 while ((c = getopt(argc, argv, "ehpu")) != EOF) |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 switch (c) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 case 'e': |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 ascii_ext_mode = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 continue; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 case 'h': |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 global_hexdump_mode = 1; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 continue; |
386
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
401 case 'p': |
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
402 keep_raw_pdu = 1; |
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
403 continue; |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 case 'u': |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 ascii_ext_mode = 2; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 continue; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 default: |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 fprintf(stderr, "%s: invalid option\n", argv[0]); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 exit(1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 if (argc > optind) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 infname = argv[optind]; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 swallow_empty_line() |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 int c; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 c = getc(inf); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 if (c != '\n') |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 ungetc(c, inf); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 main(argc, argv) |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 char **argv; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 char *nl; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 int lineno, cc; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 process_cmdline(argc, argv); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 if (infname) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 inf = fopen(infname, "r"); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 if (!inf) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 perror(infname); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 exit(1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 } else { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 inf = stdin; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 infname = "stdin"; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 for (lineno = 1; fgets(input_line, sizeof input_line, inf); lineno++) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 nl = index(input_line, '\n'); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 if (!nl) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 fprintf(stderr, "%s line %d: no newline\n", |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 infname, lineno); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 exit(1); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 *nl = '\0'; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 cc = decode_hex_line(input_line, pdu, sizeof pdu); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 if (cc <= 0) { |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 puts(input_line); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 continue; |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 pdu_length = cc; |
386
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
455 if (keep_raw_pdu) |
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
456 printf("%s\n\n", input_line); |
bae0fd7285dd
sms-pdu-decode: added -p option to keep the raw PDUs in the output
Mychaela Falconia <falcon@freecalypso.org>
parents:
339
diff
changeset
|
457 process_pdu(); |
337
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 putchar('\n'); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 swallow_empty_line(); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 } |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 exit(0); |
560af437a429
sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 } |