FreeCalypso > hg > freecalypso-tools
annotate uptools/atcmd/smdump.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 | b88a37d4f148 |
children | dc2fd8e6f42c |
rev | line source |
---|---|
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This utility retrieves a dump of all stored SMS records in PDU mode. |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include <sys/types.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <stdio.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdlib.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <string.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <strings.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <unistd.h> |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include "../../rvinterf/include/exitcodes.h" |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "resp_parse.h" |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 extern char at_response[]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
16 struct delafter { |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
17 unsigned msgid; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
18 struct delafter *next; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
19 }; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
20 |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
21 int delete_after_flag; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
22 struct delafter *delafter_head, **delafter_tail = &delafter_head; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
23 |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 int pdu_state; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 char *msgtype; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 u_char pbname_gsm[40]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 unsigned pbname_len, header_len; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 u_char pdu_bin[176]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
30 add_delafter_record(msgid) |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
31 unsigned msgid; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
32 { |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
33 struct delafter *rec; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
34 |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
35 rec = malloc(sizeof(struct delafter)); |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
36 if (!rec) |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
37 return; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
38 rec->msgid = msgid; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
39 rec->next = 0; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
40 *delafter_tail = rec; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
41 delafter_tail = &rec->next; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
42 } |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
43 |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 validate_pbname_7bit() |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 unsigned n; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 for (n = 0; n < pbname_len; n++) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (pbname_gsm[n] & 0x80) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 return(-1); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return(0); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 cmgl_header() |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 struct resp_field fields[4]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 int cc; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 /* skip empty lines */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 if (!at_response[1]) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 return; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 /* if not empty, it MUST be +CMGL */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 if (strncmp(at_response+1, "+CMGL: ", 7)) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 fprintf(stderr, "error: response from target is not +CMGL\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 if (parse_structured_response(at_response+8, fields, 4) != 4) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 malformed: fprintf(stderr, "error: malformed +CMGL response\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 if (fields[0].type != RESP_FIELD_NUMBER || |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 fields[1].type != RESP_FIELD_NUMBER || |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 fields[3].type != RESP_FIELD_NUMBER) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 goto malformed; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if (fields[2].type != RESP_FIELD_STRING && |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 fields[2].type != RESP_FIELD_EMPTY) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 goto malformed; |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
78 if (delete_after_flag) |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
79 add_delafter_record(fields[0].num); |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 switch (fields[1].num) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 case 0: |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 case 1: |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 msgtype = "Received"; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 break; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 case 2: |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 msgtype = "Stored unsent"; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 break; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 case 3: |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 msgtype = "Sent"; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 break; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 default: |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 fprintf(stderr, |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 "error: invalid message status code in +CMGL response\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 if (fields[2].type == RESP_FIELD_STRING) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 cc = decode_hex_line(fields[2].str, pbname_gsm, |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 sizeof pbname_gsm); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 if (cc >= 1) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 pbname_len = cc; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 if (validate_pbname_7bit() < 0) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 pbname_len = 0; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } else |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 pbname_len = 0; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 } else |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 pbname_len = 0; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 header_len = fields[3].num; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 pdu_state = 1; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 emit_pb_name() |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 u_char decoded_name[81]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 gsm7_to_ascii_or_ext(pbname_gsm, pbname_len, decoded_name, 0, 0, 0, 0); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 printf("Phonebook-Name: %s\n", decoded_name); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 cmgl_pdu() |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 int cc; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 unsigned sca_len; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 cc = decode_hex_line(at_response+1, pdu_bin, sizeof pdu_bin); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 if (cc < 1) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 fprintf(stderr, "error: expected PDU not received\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 sca_len = pdu_bin[0]; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 if (1 + sca_len + header_len != cc) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 fprintf(stderr, "error: PDU length mismatch\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 printf("%s message:\n", msgtype); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 if (pbname_len) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 emit_pb_name(); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 puts(at_response+1); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 putchar('\n'); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 pdu_state = 0; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 cmgl_callback() |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 if (pdu_state) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 cmgl_pdu(); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 else |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 cmgl_header(); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
150 delete_after_process() |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
151 { |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
152 struct delafter *rec; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
153 char cmgd_cmd[32]; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
154 |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
155 for (rec = delafter_head; rec; rec = rec->next) { |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
156 sprintf(cmgd_cmd, "AT+CMGD=%u", rec->msgid); |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
157 atinterf_exec_cmd_needok(cmgd_cmd, 0, 0); |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
158 } |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
159 } |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
160 |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 main(argc, argv) |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 char **argv; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 int c; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 extern int optind; |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
167 while ((c = getopt(argc, argv, "B:dnp:RX:")) != EOF) { |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
168 if (atinterf_cmdline_opt(c)) |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
169 continue; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
170 else if (c == 'd') |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
171 delete_after_flag = 1; |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
172 else { |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 /* error msg already printed */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 exit(ERROR_USAGE); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 } |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
176 } |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 if (argc != optind) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 fprintf(stderr, "usage: %s [options]\n", argv[0]); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 exit(ERROR_USAGE); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 } |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 atinterf_init(); |
364
ac311a48630e
fcup-smdump & fcup-smsend: send AT+CMEE=2 first
Mychaela Falconia <falcon@freecalypso.org>
parents:
353
diff
changeset
|
182 /* enable verbose error messages */ |
ac311a48630e
fcup-smdump & fcup-smsend: send AT+CMEE=2 first
Mychaela Falconia <falcon@freecalypso.org>
parents:
353
diff
changeset
|
183 atinterf_exec_cmd_needok("AT+CMEE=2", 0, 0); |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 /* put the 07.05 modem in PDU mode */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 atinterf_exec_cmd_needok("AT+CMGF=0", 0, 0); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 /* HEX charset for phonebook names */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 atinterf_exec_cmd_needok("AT+CSCS=\"HEX\"", 0, 0); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 /* main command */ |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 atinterf_exec_cmd_needok("AT+CMGL=4", 0, cmgl_callback); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 if (pdu_state) { |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 fprintf(stderr, "error: wrong state at the end of +CMGL\n"); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 exit(ERROR_TARGET); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 } |
353
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
194 if (delete_after_flag) |
3bcc56883b17
fcup-smdump: -d delete-after-dump option implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
352
diff
changeset
|
195 delete_after_process(); |
406
b88a37d4f148
fcup-smdump: set AT+CSCS="IRA" at the end (don't leave HEX)
Mychaela Falconia <falcon@freecalypso.org>
parents:
364
diff
changeset
|
196 /* be nice and restore IRA charset for manual AT command users */ |
b88a37d4f148
fcup-smdump: set AT+CSCS="IRA" at the end (don't leave HEX)
Mychaela Falconia <falcon@freecalypso.org>
parents:
364
diff
changeset
|
197 atinterf_exec_cmd_needok("AT+CSCS=\"IRA\"", 0, 0); |
352
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 exit(0); |
02d6c8469535
fcup-smdump implemented, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 } |