FreeCalypso > hg > themwi-system-sw
annotate mgw/readconf.c @ 58:8d311fd1138b
libsip/grok_from.c: fix bug
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Sep 2022 14:38:29 -0800 |
parents | b3f74df7b808 |
children | f280328e7e2e |
rev | line source |
---|---|
32
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * In this module we implement the reading of /var/gsm/themwi-mgw.cfg: |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * we parse and save the configured IP address and port range for each |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * of our two sides, GSM and PSTN. |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/types.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/socket.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <netinet/in.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <arpa/inet.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <ctype.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdio.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdlib.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <string.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <strings.h> |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include "struct.h" |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 struct bind_range_cfg bind_range_gsm, bind_range_pstn; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 static char config_file_pathname[] = "/var/gsm/themwi-mgw.cfg"; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 struct parse_state { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 int lineno; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 int set_mask; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 }; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 static void |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 handle_bind_ip(st, kw, brc, line) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 struct parse_state *st; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 char *kw, *line; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 struct bind_range_cfg *brc; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 char *cp, *np; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 for (cp = line; isspace(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 if (*cp == '\0' || *cp == '#') { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 inv_syntax: fprintf(stderr, |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 "%s line %d: %s setting requires one argument\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 config_file_pathname, st->lineno, kw); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 for (np = cp; *cp && !isspace(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (*cp) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 *cp++ = '\0'; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 while (isspace(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 cp++; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (*cp != '\0' && *cp != '#') |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 goto inv_syntax; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 brc->bind_ip.s_addr = inet_addr(np); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 if (brc->bind_ip.s_addr == INADDR_NONE) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 fprintf(stderr, |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 "%s line %d: invalid IP address argument \"%s\"\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 config_file_pathname, st->lineno, np); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 static void |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 handle_port_range(st, kw, brc, line) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 struct parse_state *st; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 char *kw, *line; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 struct bind_range_cfg *brc; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 char *cp, *np1, *np2; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 for (cp = line; isspace(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 if (!isdigit(*cp)) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 inv_syntax: fprintf(stderr, |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 "%s line %d: %s setting requires two numeric arguments\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 config_file_pathname, st->lineno, kw); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 for (np1 = cp; isdigit(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 if (!isspace(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 goto inv_syntax; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 while (isspace(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 cp++; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 if (!isdigit(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 goto inv_syntax; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 for (np2 = cp; isdigit(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 if (*cp && !isspace(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 goto inv_syntax; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 while (isspace(*cp)) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 cp++; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 if (*cp != '\0' && *cp != '#') |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 goto inv_syntax; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 brc->port_range_start = atoi(np1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 brc->port_range_end = atoi(np2); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 if (brc->port_range_start & 1) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 fprintf(stderr, "%s line %d: start port must be even\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 config_file_pathname, st->lineno); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 if (!(brc->port_range_end & 1)) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 fprintf(stderr, "%s line %d: end port must be odd\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 config_file_pathname, st->lineno); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 if (brc->port_range_end <= brc->port_range_start) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 fprintf(stderr, |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 "%s line %d: end port must be greater than start port\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 config_file_pathname, st->lineno); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 brc->port_next = brc->port_range_start; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 brc->port_tries = (brc->port_range_end - brc->port_range_start + 1) / 2; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 static void |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 process_line(st, line) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 struct parse_state *st; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 char *line; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 char *cp, *np; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 void (*handler)(); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 struct bind_range_cfg *ipside; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 int set_id; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (!index(line, '\n')) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 fprintf(stderr, "%s line %d: too long or missing newline\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 config_file_pathname, st->lineno); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 for (cp = line; isspace(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 if (*cp == '\0' || *cp == '#') |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 return; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 for (np = cp; *cp && !isspace(*cp); cp++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 ; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 if (*cp) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 *cp++ = '\0'; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 if (!strcmp(np, "gsm-ip-addr")) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 handler = handle_bind_ip; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 ipside = &bind_range_gsm; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 set_id = 1; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 } else if (!strcmp(np, "gsm-port-range")) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 handler = handle_port_range; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 ipside = &bind_range_gsm; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 set_id = 2; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 } else if (!strcmp(np, "pstn-ip-addr")) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 handler = handle_bind_ip; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 ipside = &bind_range_pstn; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 set_id = 4; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 } else if (!strcmp(np, "pstn-port-range")) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 handler = handle_port_range; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 ipside = &bind_range_pstn; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 set_id = 8; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 } else { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 fprintf(stderr, "%s line %d: non-understood keyword \"%s\"\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 config_file_pathname, st->lineno, np); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 if (st->set_mask & set_id) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 fprintf(stderr, "%s line %d: duplicate %s setting\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 config_file_pathname, st->lineno, np); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 handler(st, np, ipside, cp); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 st->set_mask |= set_id; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 read_config_file() |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 FILE *inf; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 struct parse_state pst; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 char linebuf[256]; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 inf = fopen(config_file_pathname, "r"); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 if (!inf) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 perror(config_file_pathname); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 pst.set_mask = 0; |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 for (pst.lineno = 1; fgets(linebuf, sizeof linebuf, inf); pst.lineno++) |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 process_line(&pst, linebuf); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 fclose(inf); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 if (pst.set_mask != 15) { |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 fprintf(stderr, "error: %s did not set all required settings\n", |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 config_file_pathname); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 exit(1); |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 } |
b3f74df7b808
beginning of themwi-mgw
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |