annotate libtest/tw5reader.c @ 585:3c6bf0d26ee7 default tip

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 4d2cccaeb4a7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
2 * Here we implement our twts005_read_frame() function.
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 */
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
5 #include <ctype.h>
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <stdio.h>
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdint.h>
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
8 #include <string.h>
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
9 #include <strings.h>
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
10 #include "tw5reader.h"
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
12 static int decode_hex_digit(char c)
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 {
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
14 if (isdigit(c))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
15 return c - '0';
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
16 else if (isupper(c))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
17 return c - 'A' + 10;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
18 else
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
19 return c - 'a' + 10;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
20 }
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
21
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
22 int twts005_read_frame(FILE *hexf, unsigned *lineno, uint8_t *frame,
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
23 unsigned *lenp)
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
24 {
585
3c6bf0d26ee7 TW-TS-005 reader: fix maximum line length bug
Mychaela Falconia <falcon@freecalypso.org>
parents: 522
diff changeset
25 char linebuf[82];
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
26 char *cp, *np;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
27 uint8_t *dp;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
28 unsigned len;
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
30 for (;;) {
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
31 if (!fgets(linebuf, sizeof linebuf, hexf))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
32 return 0;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
33 (*lineno)++;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
34 if (!index(linebuf, '\n'))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
35 return -2;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
36 for (cp = linebuf; isspace(*cp); cp++)
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
37 ;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
38 if (*cp != '\0' && *cp != '#')
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
39 break;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
40 }
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
41 for (np = cp; *cp && !isspace(*cp); cp++)
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
42 ;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
43 if (*cp)
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
44 *cp++ = '\0';
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
45 while (isspace(*cp))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
46 cp++;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
47 if (*cp != '\0' && *cp != '#')
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 return -1;
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
49 if (!strcasecmp(np, "NULL")) {
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
50 *lenp = 0;
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 return 1;
522
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
52 }
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
53
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
54 dp = frame;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
55 len = 0;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
56 for (cp = np; *cp; cp += 2) {
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
57 if (!isxdigit(cp[0]) || !isxdigit(cp[1]))
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
58 return -1;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
59 *dp++ = (decode_hex_digit(cp[0]) << 4) |
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
60 decode_hex_digit(cp[1]);
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
61 len++;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
62 }
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
63 *lenp = len;
4d2cccaeb4a7 libtest: implement TW-TS-005 reader function
Mychaela Falconia <falcon@freecalypso.org>
parents: 10
diff changeset
64 return 1;
10
820d88b97924 libtest: implement binary file reader
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 }