Revision 1.2 |
Revision 1.6 |
Line 3 |
Line 3 |
#include "cow_config.h" #include "defines.h"  
|
#include "cow_config.h" #include "defines.h"  
|
|
#undef realloc
|
#define VARMATCH(varname) (0 == strncmp(yytext, varname, strlen(varname))) enum svar { none, sroot, port, hands, verb, maxcon, maxdur, alog,
|
#define VARMATCH(varname) (0 == strncmp(yytext, varname, strlen(varname))) enum svar { none, sroot, port, hands, verb, maxcon, maxdur, alog,
|
elog, unknown };
|
elog, allmime, defmime, disnagle, indexfile, unknown };
|
int yyerror(char*); void set_var(enum svar, char*);
|
int yyerror(char*); void set_var(enum svar, char*);
|
Line 15 |
Line 17 |
char *server_root = NULL; char *access_log = NULL; char *error_log = NULL;
|
char *server_root = NULL; char *access_log = NULL; char *error_log = NULL;
|
|
char *global_mime = NULL;
char *default_mime = NULL;
|
int server_port = 0; int ka_max_con; int ka_max_dur; int max_handler; int verbose = 0;
|
int server_port = 0; int ka_max_con; int ka_max_dur; int max_handler; int verbose = 0;
|
|
int disable_nagle = 0;
idxfilename* index_files = NULL;
|
/* TODO: Why are these here? They should be elsewhere... */ int cow_rto_s; /* cow read/recv timeout in sec */
|
/* TODO: Why are these here? They should be elsewhere... */ int cow_rto_s; /* cow read/recv timeout in sec */
|
Line 27 |
Line 33 |
int cow_noof = 0; /* number of open files (from accept to close) */ /* Variables used for parsing config file */
|
int cow_noof = 0; /* number of open files (from accept to close) */ /* Variables used for parsing config file */
|
enum svar curvar = none;
char *filename;
char *p, value_buffer[256];
int value_len = 0;
int curline = 1;
|
static enum svar curvar = none;
static char *filename;
static char *p, value_buffer[256];
static int value_len = 0;
static int curline = 1;
|
|
static idxfilename* last_idx = NULL;
|
%} %x STRVALUE
|
%} %x STRVALUE
|
Line 52 |
Line 59 |
else if (VARMATCH("KeepAliveMaxDur")) curvar = maxdur; else if (VARMATCH("AccessLog")) curvar = alog; else if (VARMATCH("ErrorLog")) curvar = elog;
|
else if (VARMATCH("KeepAliveMaxDur")) curvar = maxdur; else if (VARMATCH("AccessLog")) curvar = alog; else if (VARMATCH("ErrorLog")) curvar = elog;
|
|
else if (VARMATCH("GlobalMime")) curvar = allmime;
else if (VARMATCH("DefaultMime")) curvar = defmime;
else if (VARMATCH("DisableNagle")) curvar = disnagle;
else if (VARMATCH("IndexFile")) curvar = indexfile;
|
else { curvar = unknown; yyerror("Unrecognized variable"); } }
|
else { curvar = unknown; yyerror("Unrecognized variable"); } }
|
Line 97 |
Line 108 |
* all required variables were set properly. */ void read_config_files(char* cfgfilename) {
|
* all required variables were set properly. */ void read_config_files(char* cfgfilename) {
|
|
struct stat confstat;
|
/* Set default values before parsing config file */ ka_max_con = KA_MAX_CON; ka_max_dur = KA_MAX_DUR;
|
/* Set default values before parsing config file */ ka_max_con = KA_MAX_CON; ka_max_dur = KA_MAX_DUR;
|
Line 115 |
Line 128 |
if (cfgfilename != NULL) { yyin = fopen(cfgfilename, "r"); filename = cfgfilename;
|
if (cfgfilename != NULL) { yyin = fopen(cfgfilename, "r"); filename = cfgfilename;
|
|
} else if (0 == stat("/etc/cow.conf", &confstat)) {
yyin = fopen("/etc/cow.conf", "r");
filename = "/etc/cow.conf";
} else if (0 == stat("/usr/local/etc/cow.conf", &confstat)) {
yyin = fopen("/usr/local/etc/cow.conf", "r");
filename = "/usr/local/etc/cow.conf";
|
} else { yyin = fopen("cow.conf", "r");
|
} else { yyin = fopen("cow.conf", "r");
|
filename = "cow.conf";
|
filename = "./cow.conf";
|
} if (yyin == NULL) {
|
} if (yyin == NULL) {
|
Line 132 |
Line 151 |
void set_var(enum svar var, char* val) {
|
void set_var(enum svar var, char* val) {
|
|
idxfilename* idx;
|
switch(var) { case none: yyerror("Bare value encountered");
|
switch(var) { case none: yyerror("Bare value encountered");
|
Line 177 |
Line 198 |
case elog: error_log = strdup(val); break;
|
case elog: error_log = strdup(val); break;
|
|
case allmime:
global_mime = strdup(val);
break;
case defmime:
default_mime = strdup(val);
break;
case disnagle:
disable_nagle = atoi(val);
break;
case indexfile:
idx = malloc(sizeof(idxfilename));
if (idx == NULL) {
perror("Ran out of memory allocating index file records");
exit(1);
}
idx->name = strdup(val);
idx->next = NULL;
if (last_idx == NULL) {
last_idx = index_files = idx;
} else {
last_idx->next = idx;
last_idx = idx;
}
break;
|
default: yyerror("FIXME: Config file parser needs to be updated!"); }
|
default: yyerror("FIXME: Config file parser needs to be updated!"); }
|
Line 194 |
Line 239 |
return 1; }
|
return 1; }
|