Example #1
0
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);
}
Example #2
0
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;
}
Example #3
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;
}
Example #4
0
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;
}
Example #5
0
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;
}