FreeCalypso > hg > gsm-codec-lib
annotate frtest/dlcap-sync.c @ 585:3c6bf0d26ee7
TW-TS-005 reader: fix maximum line length bug
TW-TS-005 section 4.1 states:
The maximum allowed length of each line is 80 characters, not
including the OS-specific newline encoding.
The implementation of this line length limit in the TW-TS-005 hex file
reader function in the present suite was wrong, such that lines of
the full maximum length could not be read. Fix it.
Note that this bug affects comment lines too, not just actual RTP
payloads. Neither Annex A nor Annex B features an RTP payload format
that goes to the maximum of 40 bytes, but if a comment line goes to
the maximum allowed length of 80 characters not including the
terminating newline, the bug will be triggered, necessitating
the present fix.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 25 Feb 2025 07:49:28 +0000 |
parents | 285381a001fc |
children |
rev | line source |
---|---|
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
2 * This program reads a TCH/FS downlink capture file from a FreeCalypso GSM MS |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
3 * that was produced in a session in which seqsync PCMA or PCMU input |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
4 * (seqsyn_[au].inp) was fed into the test call from IP-PSTN side. It looks |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
5 * for FRv1 DHF followed by specific frame patterns given by ETSI in |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
6 * syn???_[au].cod files, and reports what it finds. Matches indicate |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
7 * a particular alignment between the input sequence and encoder frame |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
8 * boundaries, if the network speech transcoder implements the encoder |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
9 * homing feature which is optional for FRv1. |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 */ |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <ctype.h> |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdio.h> |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdint.h> |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdlib.h> |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <string.h> |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <strings.h> |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
18 #include "../libgsmfr2/tw_gsmfr.h" |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
20 extern const uint8_t sync_from_pcma[160*33]; |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
21 extern const uint8_t sync_from_pcmu[160*33]; |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 static int |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 check_for_match(input, table) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 const uint8_t *input, *table; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 unsigned n; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
29 for (n = 0; n < 160; n++) { |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
30 if (!bcmp(input, table + n * 33, 33)) |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 return n; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 return -1; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 main(argc, argv) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 char **argv; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 FILE *inf; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 char linebuf[128]; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 int lineno, rc; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 uint16_t status_words[3]; |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
43 uint8_t tidsp_bytes[33], libgsm_bytes[33]; |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 const uint8_t *match_table; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 int dhf_state; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 if (argc != 3) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 usage: fprintf(stderr, "usage: %s dlcap-file alaw|ulaw\n", argv[0]); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 exit(1); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 inf = fopen(argv[1], "r"); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 if (!inf) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 perror(argv[1]); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 exit(1); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (!strcmp(argv[2], "alaw")) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 match_table = sync_from_pcma; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 else if (!strcmp(argv[2], "ulaw")) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 match_table = sync_from_pcmu; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 else |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 goto usage; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 dhf_state = 0; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 /* support both old and new formats */ |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 if (isxdigit(linebuf[0]) && isxdigit(linebuf[1]) && |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 isxdigit(linebuf[2]) && isxdigit(linebuf[3])) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 rc = parse_dlcap_common(linebuf, status_words, |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 tidsp_bytes); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 if (rc < 0) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 invalid: fprintf(stderr, |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 "error: %s is not in the expected format\n", |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 argv[1]); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 exit(1); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
75 } else if (!strncmp(linebuf, "FR ", 3)) { |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
76 rc = parse_dlcap_common(linebuf + 3, status_words, |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 tidsp_bytes); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (rc < 0) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 goto invalid; |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
80 if (linebuf[84] != ' ') |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 goto invalid; |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
82 if (!isdigit(linebuf[85])) |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 goto invalid; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 } else |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 goto invalid; |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
86 if ((status_words[0] & 0xC004) != 0xC000) { |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 dhf_state = 0; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 continue; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 } |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
90 gsm0610_tidsp_to_libgsm(tidsp_bytes, libgsm_bytes); |
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
91 if (!bcmp(libgsm_bytes, gsmfr_decoder_homing_frame, 33)) { |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 dhf_state = 1; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 continue; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 if (!dhf_state) |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 continue; |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
97 rc = check_for_match(libgsm_bytes, match_table); |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 if (rc >= 0 && rc <= 159) { |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 printf( |
474
285381a001fc
new program gsmfr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
472
diff
changeset
|
100 "line %d: match to expected sync frame for offset %d\n", |
468
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 lineno, rc); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 dhf_state = 0; |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 } |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 exit(0); |
4104b0390fab
efrtest: new program gsmefr-dlcap-sync
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 } |