FreeCalypso > hg > themwi-system-sw
annotate mgw/readconf.c @ 32:b3f74df7b808
beginning of themwi-mgw
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Sat, 09 Jul 2022 22:51:44 -0800 | 
| parents | |
| 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 } | 
