annotate uptools/sms-pdu-decode/sms-pdu-decode.c @ 465:003e48f8ebe1

rvinterf/etmsync/fsnew.c: cast 0 to (char *) for execl sentinel I generally don't use NULL and use plain 0 instead, based on a "NULL considered harmful" discussion on the classiccmp mailing list many aeons ago (I couldn't find it, and I reason that it must have been 2005 or earlier), but a recent complaint by a packager sent me searching, and I found this: https://ewontfix.com/11/ While I don't give a @#$% about "modern" systems and code-nazi tools, I realized that passing a plain 0 as a pointer sentinel in execl is wrong because it will break on systems where pointers are longer than the plain int type. Again, I don't give a @#$% about the abomination of x86_64 and the like, but if anyone ever manages to port my code to something like a PDP-11 (16-bit int, 32-bit long and pointers), then passing a plain 0 as a function argument where a pointer is expected most definitely won't work: if the most natural stack slot and SP alignment unit is 16 bits, fitting an int, with longs and pointers taking up two such slots, then the call stack will be totally wrong with a plain 0 passed for a pointer. Casting the 0 to (char *) ought to be the most kosher solution for the most retro systems possible.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 11 Feb 2019 00:00:19 +0000
parents bae0fd7285dd
children 542c6d733772
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);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 gsm7_to_ascii_or_ext(alpha_gsm7, alpha_nsep, alpha_decoded, 0,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 ascii_ext_mode, 0, 0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 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
94 pdu[pdu_ptr+1]);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 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
97 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
98 pdu[pdu_ptr+1] == 0x91 ? "+" : "", digits,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 pdu[pdu_ptr+1]);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 pdu_ptr += addr_field_len;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 }
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 handle_pid()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 if (pdu_ptr >= pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 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
109 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 printf("PID: 0x%02X\n", pdu[pdu_ptr++]);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 }
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 handle_dcs()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 u_char dcs;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 char *strtype;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 if (pdu_ptr >= pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 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
122 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 dcs = pdu[pdu_ptr++];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 dcs_distilled = sms_dcs_classify(dcs);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 switch (dcs_distilled) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 case 7:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 strtype = "7-bit";
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 case 8:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 strtype = "raw octets";
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 case 9:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 strtype = "compressed";
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 case 16:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 strtype = "UCS-2";
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 printf("DCS: 0x%02X (%s)\n", dcs, strtype);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 }
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 handle_scts()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 char str[21];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 if (pdu_ptr + 7 > pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 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
150 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 gsm_timestamp_decode(pdu + pdu_ptr, str);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 printf("SC-Timestamp: %s\n", str);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 pdu_ptr += 7;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 }
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 handle_vp_abs()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 char str[21];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 if (pdu_ptr + 7 > pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 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
164 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 gsm_timestamp_decode(pdu + pdu_ptr, str);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 printf("VP-Absolute: %s\n", str);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 pdu_ptr += 7;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 }
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 handle_vp_rel()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 unsigned vprel, hours, min;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 if (pdu_ptr >= pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 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
178 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 vprel = pdu[pdu_ptr++];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 if (vprel <= 143) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 min = (vprel + 1) * 5;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 goto hhmm;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 } else if (vprel <= 167) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 min = (vprel - 143) * 30 + 12 * 60;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 goto hhmm;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 } else if (vprel <= 196) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 printf("VP-Relative: %u days\n", vprel - 166);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 printf("VP-Relative: %u weeks\n", vprel - 192);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 }
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 hhmm: hours = min / 60;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 min %= 60;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 printf("VP-Relative: ");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 if (hours)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 printf(" %u hour%s", hours, hours != 1 ? "s" : "");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 if (min)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 printf(" %u min", min);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 putchar('\n');
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 }
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 handle_vp_enh()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 if (pdu_ptr + 7 > pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 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
210 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 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
213 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
214 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
215 pdu_ptr += 7;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }
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 handle_vp()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 int rc;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 switch (first_octet & 0x18) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 case 0x00:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 rc = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 case 0x08:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 rc = handle_vp_enh();
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 case 0x10:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 rc = handle_vp_rel();
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 case 0x18:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 rc = handle_vp_abs();
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 return(rc);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 }
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 process_pdu()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 unsigned udl, udl_octets;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 unsigned udhl, udh_octets, udh_chars, ud_chars;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 u_char ud7[160], decode_buf[321];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 int do_hexdump;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 unsigned decoded_len, badchars;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 if (handle_sca() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 if (handle_first_octet() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 if (first_octet & 2) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 printf("Decode-Error: MTI not supported\n");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 if (first_octet & 1) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 if (handle_mr() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 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
261 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 if (handle_pid() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 if (handle_dcs() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 if (first_octet & 1) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 if (handle_vp() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 if (handle_scts() < 0)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 if (pdu_ptr >= pdu_length) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 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
275 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 udl = pdu[pdu_ptr++];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 if (dcs_distilled == 7) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 if (udl > 160) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 printf("Decode-Error: UDL %u > 160\n", udl);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 udl_octets = (udl * 7 + 7) / 8;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285 if (udl > 140) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 printf("Decode-Error: UDL %u > 140\n", udl);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 udl_octets = udl;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 if (pdu_length - pdu_ptr != udl_octets) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 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
293 pdu_length - pdu_ptr, udl_octets);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 if (first_octet & 0x40) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 if (!udl) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 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
299 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 udhl = pdu[pdu_ptr];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 udh_octets = udhl + 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 if (udh_octets > udl_octets) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 printf("Decode-Error: UDHL exceeds UDL\n");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 return(-1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 printf("UDH-Length: %u\n", udhl);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 if (dcs_distilled == 7)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 udh_chars = (udh_octets * 8 + 6) / 7;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 else
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 udh_chars = udh_octets;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 udhl = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 udh_octets = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 udh_chars = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 if (udh_chars >= udl) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 ud_chars = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 printf("Length: 0\n");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 ud_chars = udl - udh_chars;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 if (dcs_distilled == 7)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 gsm7_unpack(pdu + pdu_ptr, ud7, udl);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 if (global_hexdump_mode)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 do_hexdump = 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 else switch (dcs_distilled) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 case 7:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 do_hexdump = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 case 8:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 case 9:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 do_hexdump = 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334 case 16:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 if (ud_chars & 1)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 do_hexdump = 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 else
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 do_hexdump = 0;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 if (do_hexdump)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 printf("Length: %u (raw)\n", ud_chars);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 switch (dcs_distilled) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345 case 7:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 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
347 decode_buf, &decoded_len,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 ascii_ext_mode, 1,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349 &badchars);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
351 case 16:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
352 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
353 ud_chars,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354 decode_buf, &decoded_len,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
355 ascii_ext_mode, 1,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
356 &badchars);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
357 break;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
358 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
359 printf("Length: %u", ud_chars);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
360 if (decoded_len != ud_chars)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
361 printf("->%u", decoded_len);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
362 if (badchars)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
363 printf(" (%u bad char%s)", badchars,
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
364 badchars != 1 ? "s" : "");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
365 putchar('\n');
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
366 }
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 if (udhl) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
370 printf("\nUDH:\n");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
371 msg_bits_hexdump(pdu + pdu_ptr + 1, udhl);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
372 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
373 if (!ud_chars)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
374 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
375 putchar('\n');
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
376 if (do_hexdump) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
377 if (dcs_distilled == 7)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
378 msg_bits_hexdump(ud7 + udh_chars, ud_chars);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
379 else
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
380 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
381 } else
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
382 puts(decode_buf);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
383 return(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
384 }
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 process_cmdline(argc, argv)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
387 char **argv;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
388 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
389 int c;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
390 extern int optind;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
391
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
392 while ((c = getopt(argc, argv, "ehpu")) != EOF)
337
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
393 switch (c) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
394 case 'e':
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
395 ascii_ext_mode = 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
396 continue;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
397 case 'h':
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
398 global_hexdump_mode = 1;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
399 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
400 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
401 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
402 continue;
337
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
403 case 'u':
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
404 ascii_ext_mode = 2;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
405 continue;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
406 default:
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
407 fprintf(stderr, "%s: invalid option\n", argv[0]);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
408 exit(1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
409 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
410 if (argc > optind)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
411 infname = argv[optind];
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
412 }
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 swallow_empty_line()
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
415 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
416 int c;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
417
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
418 c = getc(inf);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
419 if (c != '\n')
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
420 ungetc(c, inf);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
421 }
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 main(argc, argv)
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
424 char **argv;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
425 {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
426 char *nl;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
427 int lineno, cc;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
428
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
429 process_cmdline(argc, argv);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
430 if (infname) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
431 inf = fopen(infname, "r");
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
432 if (!inf) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
433 perror(infname);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
434 exit(1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
435 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
436 } else {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
437 inf = stdin;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
438 infname = "stdin";
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
439 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
440 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
441 nl = index(input_line, '\n');
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
442 if (!nl) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
443 fprintf(stderr, "%s line %d: no newline\n",
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
444 infname, lineno);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
445 exit(1);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
446 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
447 *nl = '\0';
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
448 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
449 if (cc <= 0) {
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
450 puts(input_line);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
451 continue;
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
452 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
453 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
454 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
455 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
456 process_pdu();
337
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
457 putchar('\n');
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
458 swallow_empty_line();
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
459 }
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
460 exit(0);
560af437a429 sms-pdu-decode main program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
461 }