static void loadconfigurationfile(void) { char *cat; struct cw_config *cfg; struct cw_variable *v; cfg = cw_config_load(CONF_FILE); if (!cfg) { /* Standard configuration */ enablecdr = 0; return; } cat = cw_category_browse(cfg, NULL); while (cat) { if (!strcasecmp(cat, "general")) { v = cw_variable_browse(cfg, cat); while (v) { if (!strcasecmp(v->name, "enabled")) { enablecdr = cw_true(v->value); } v = v->next; } } /* Next category */ cat = cw_category_browse(cfg, cat); } cw_config_destroy(cfg); }
static int config_load(void) { struct cw_config *cfg; char *cat; struct osp_provider *osp, *prev = NULL, *next; cw_mutex_lock(&osplock); osp = providers; while(osp) { osp->dead = 1; osp = osp->next; } cw_mutex_unlock(&osplock); cfg = cw_config_load("osp.conf"); if (cfg) { if (!initialized) { cat = cw_variable_retrieve(cfg, "general", "accelerate"); if (cat && cw_true(cat)) if (OSPPInit(1)) { cw_log(LOG_WARNING, "Failed to enable hardware accelleration, falling back to software mode\n"); OSPPInit(0); } else hardware = 1; else OSPPInit(0); initialized = 1; } cat = cw_variable_retrieve(cfg, "general", "tokenformat"); if (cat) { if ((sscanf(cat, "%d", &tokenformat) != 1) || (tokenformat < TOKEN_ALGO_SIGNED) || (tokenformat > TOKEN_ALGO_BOTH)) { tokenformat = TOKEN_ALGO_SIGNED; cw_log(LOG_WARNING, "tokenformat should be an integer from 0 to 2, not '%s'\n", cat); } } cat = cw_category_browse(cfg, NULL); while(cat) { if (strcasecmp(cat, "general")) osp_build(cfg, cat); cat = cw_category_browse(cfg, cat); } cw_config_destroy(cfg); } else cw_log(LOG_NOTICE, "No OSP configuration found. OSP support disabled\n"); cw_mutex_lock(&osplock); osp = providers; while(osp) { next = osp->next; if (osp->dead) { if (prev) prev->next = next; else providers = next; /* XXX Cleanup OSP structure first XXX */ free(osp); } else prev = osp; osp = next; } cw_mutex_unlock(&osplock); return 0; }
static struct cw_config *realtime_directory(char *context) { struct cw_config *cfg; struct cw_config *rtdata; struct cw_category *cat; struct cw_variable *var; char *mailbox; char *fullname; char *hidefromdir; char tmp[100]; /* Load flat file config. */ cfg = cw_config_load(VOICEMAIL_CONFIG); if (!cfg) { /* Loading config failed. */ cw_log(LOG_WARNING, "Loading config failed.\n"); return NULL; } /* Get realtime entries, categorized by their mailbox number and present in the requested context */ rtdata = cw_load_realtime_multientry("voicemail", "mailbox LIKE", "%", "context", context, NULL); /* if there are no results, just return the entries from the config file */ if (!rtdata) return cfg; /* Does the context exist within the config file? If not, make one */ cat = cw_category_get(cfg, context); if (!cat) { cat = cw_category_new(context); if (!cat) { cw_log(LOG_WARNING, "Out of memory\n"); cw_config_destroy(cfg); return NULL; } cw_category_append(cfg, cat); } mailbox = cw_category_browse(rtdata, NULL); while (mailbox) { fullname = cw_variable_retrieve(rtdata, mailbox, "fullname"); hidefromdir = cw_variable_retrieve(rtdata, mailbox, "hidefromdir"); snprintf(tmp, sizeof(tmp), "no-password,%s,hidefromdir=%s", fullname ? fullname : "", hidefromdir ? hidefromdir : "no"); var = cw_variable_new(mailbox, tmp); if (var) cw_variable_append(cat, var); else cw_log(LOG_WARNING, "Out of memory adding mailbox '%s'\n", mailbox); mailbox = cw_category_browse(rtdata, mailbox); } cw_config_destroy(rtdata); return cfg; }
static int load_config(void) { struct cw_variable *var; struct cw_config *cfg; char *cat; res_snmp_enabled = 0; res_snmp_agentx_subagent = 1; cfg = cw_config_load("res_snmp.conf"); if (!cfg) { cw_log(LOG_WARNING, "Could not load res_snmp.conf\n"); return 0; } cat = cw_category_browse(cfg, NULL); while (cat) { var = cw_variable_browse(cfg, cat); if (strcasecmp(cat, "general") == 0) { while (var) { if (strcasecmp(var->name, "subagent") == 0) { if (cw_true(var->value)) res_snmp_agentx_subagent = 1; else if (cw_false(var->value)) res_snmp_agentx_subagent = 0; else { cw_log(LOG_ERROR, "Value '%s' does not evaluate to true or false.\n", var->value); cw_config_destroy(cfg); return 1; } } else if (strcasecmp(var->name, "enabled") == 0) { res_snmp_enabled = cw_true(var->value); } else { cw_log(LOG_ERROR, "Unrecognized variable '%s' in category '%s'\n", var->name, cat); cw_config_destroy(cfg); return 1; } var = var->next; } } else { cw_log(LOG_ERROR, "Unrecognized category '%s'\n", cat); cw_config_destroy(cfg); return 1; } cat = cw_category_browse(cfg, cat); } cw_config_destroy(cfg); return 1; }
int misdn_cfg_init (int this_max_ports) { char config[] = "misdn.conf"; char *cat, *p; int i; struct cw_config *cfg; struct cw_variable *v; if (!(cfg = CW_LOAD_CFG(config))) { cw_log(LOG_WARNING, "missing file: misdn.conf\n"); return -1; } cw_mutex_init(&config_mutex); misdn_cfg_lock(); if (this_max_ports) { /* this is the first run */ max_ports = this_max_ports; map = (int *)calloc(MISDN_GEN_LAST + 1, sizeof(int)); if (_enum_array_map()) return -1; p = (char *)calloc(1, (max_ports + 1) * sizeof(union misdn_cfg_pt *) + (max_ports + 1) * NUM_PORT_ELEMENTS * sizeof(union misdn_cfg_pt)); port_cfg = (union misdn_cfg_pt **)p; p += (max_ports + 1) * sizeof(union misdn_cfg_pt *); for (i = 0; i <= max_ports; ++i) { port_cfg[i] = (union misdn_cfg_pt *)p; p += NUM_PORT_ELEMENTS * sizeof(union misdn_cfg_pt); } general_cfg = (union misdn_cfg_pt *)calloc(1, sizeof(union misdn_cfg_pt *) * NUM_GEN_ELEMENTS); ptp = (int *)calloc(max_ports + 1, sizeof(int)); } else { /* misdn reload */ _free_port_cfg(); _free_general_cfg(); memset(port_cfg[0], 0, NUM_PORT_ELEMENTS * sizeof(union misdn_cfg_pt) * (max_ports + 1)); memset(general_cfg, 0, sizeof(union misdn_cfg_pt *) * NUM_GEN_ELEMENTS); memset(ptp, 0, sizeof(int) * (max_ports + 1)); } cat = cw_category_browse(cfg, NULL); while(cat) { v = cw_variable_browse(cfg, cat); if (!strcasecmp(cat, "general")) { _build_general_config(v); } else { _build_port_config(v, cat); } cat = cw_category_browse(cfg, cat); } _fill_defaults(); misdn_cfg_unlock(); CW_DESTROY_CFG(cfg); return 0; }