1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** reading options.conf and filling structure **
10 \*****************************************************************************/
15 char *gsm_conf_error = (char *)"";
19 * read options from options.conf
21 int gsm_conf(struct gsm_conf *gsm_conf)
33 SCPY(gsm_conf->debug, "");
34 SCPY(gsm_conf->interface_bsc, "mISDN_l1loop.1");
35 SCPY(gsm_conf->interface_lcr, "mISDN_l1loop.2");
36 SCPY(gsm_conf->hlr, "hlr.sqlite3");
37 SCPY(gsm_conf->openbsc_cfg, "openbsc.cfg");
38 gsm_conf->reject_cause = 0;
39 gsm_conf->keep_l2 = 0;
40 gsm_conf->noemergshut = 0;
42 SPRINT(filename, "%s/gsm.conf", CONFIG_DATA);
44 if (!(fp=fopen(filename,"r"))) {
45 SPRINT(gsm_conf_error, "Cannot open %s\n",filename);
50 while((fgets(buffer,sizeof(buffer),fp))) {
52 buffer[sizeof(buffer)-1]=0;
53 if (buffer[0]) buffer[strlen(buffer)-1]=0;
56 while(*p <= 32) { /* skip spaces */
61 if (*p==0 || *p=='#') /* ignore comments and empty line */
65 i=0; /* read option */
67 if (i+1 >= sizeof(option)) {
68 SPRINT(gsm_conf_error, "Error in %s (line %d): option too long.\n",filename,line);
75 while(*p <= 32) { /* skip spaces */
83 while(*p!=0 && *p!='#' && pnum < 10) { /* param */
86 if (i+1 >= sizeof(params[pnum])) {
87 SPRINT(gsm_conf_error, "Error in %s (line %d): param too long.\n",filename,line);
90 params[pnum][i+1] = '\0';
91 params[pnum][i++] = *p++;
93 while(*p <= 32) { /* skip spaces */
102 /* at this point we have option and param */
105 if (!strcmp(option,"debug")) {
106 if (params[0][0]==0) {
107 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line,option);
110 SCPY(gsm_conf->debug, params[0]);
113 if (!strcmp(option,"interface-bsc")) {
114 if (params[0][0]==0) {
115 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
118 SCPY(gsm_conf->interface_bsc, params[0]);
121 if (!strcmp(option,"interface-lcr")) {
122 if (params[0][0]==0) {
123 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
126 SCPY(gsm_conf->interface_lcr, params[0]);
129 if (!strcmp(option,"config")) {
130 if (params[0][0]==0) {
131 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
134 SCPY(gsm_conf->openbsc_cfg, params[0]);
137 if (!strcmp(option,"hlr")) {
138 if (params[0][0]==0) {
139 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
142 SCPY(gsm_conf->hlr, params[0]);
145 if (!strcmp(option,"reject-cause")) {
146 if (params[0][0]==0) {
147 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
150 gsm_conf->reject_cause = atoi(params[0]);
153 if (!strcmp(option,"allow-all")) {
154 gsm_conf->allow_all = 1;
156 if (!strcmp(option,"keep-l2")) {
157 gsm_conf->keep_l2 = 1;
160 if (!strcmp(option,"no-mergency-shutdown")) {
161 gsm_conf->noemergshut = 1;
163 if (!strcmp(option,"rtp-proxy")) {
164 gsm_conf->rtp_proxy = 1;
166 if (!strcmp(option,"pcapfile")) {
167 if (params[0][0]==0) {
168 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
171 SCPY(gsm_conf->pcapfile, params[0]);
173 SPRINT(gsm_conf_error, "Error in %s (line %d): wrong option keyword %s.\n", filename,line,option);