annotate uptools/sms-pdu-decode/sms-pdu-decode.c @ 496:3d73d4d3527f

target-utils: removed osmo_delay_ms() from ABB access code
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 25 May 2019 20:17:27 +0000
parents 542c6d733772
children 9f7a263ad7f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }