aboutsummaryrefslogblamecommitdiffstats
path: root/config_load.c
blob: 7824501ed98348c2d2644f3e716dbc79c4532e7f (plain) (tree)
1
2
3
4



                                                         
















































































































































                                                                                                       
#include "config_load.h"

int config_load_ini(char *ini_fname, config_ini **config)
{
	config_ini *res_conf=NULL;

	if (!ini_fname)
	{
		PERM();
		return -1;
	}

	if (!config)
	{
		PERM();
		return -1;
	}
	
	res_conf = calloc(1,sizeof(config_ini));

	res_conf->ini = iniparser_load(ini_fname);
	if (!res_conf->ini)
	{
		ERROR("Cant parse ini file %s\n",ini_fname);
		free(res_conf);
		return -1;
	}

	*config = res_conf;

	return 0;
}


int config_server_num(config_ini *config)
{
	int ret=-1;
	if (!config)
	{
		PERM();
		return -1;
	}

	ret = iniparser_getnsec(config->ini);

	return ret;
}


int config_get_irc_config(config_ini *config, int n, irc_server_conf *server_conf)
{

	int i;
	size_t buf_sz=128;
	char buf[buf_sz];
	char *section_name=NULL;
	dictionary *ini;
	char *ini_str;
	int ini_int;
	int count;
	sds params;
	sds *tokens=NULL;

	if (!config)
	{
		PERM();
		return -1;
	}

	if (!server_conf)
	{
		PERM();
		return -1;
	}

	if (n<0)
	{
		PERM();
		return -1;
	}

	ini = config->ini;
	section_name = (char *)iniparser_getsecname(ini, n);
	if (!section_name)
	{
		PERM();
		return -1;
	}

	//section name
	server_conf->name = (char *)alloc_new_str(section_name);

	//get server name
	snprintf(buf, buf_sz, "%s:server", section_name);
	ini_str = (char *)iniparser_getstring(ini, buf, NULL);
	server_conf->server = alloc_new_str(ini_str);

	//get user name
	snprintf(buf, buf_sz, "%s:user", section_name);
	ini_str = (char *)iniparser_getstring(ini, buf, NULL);
	server_conf->user = alloc_new_str(ini_str);

	//get port number
	snprintf(buf, buf_sz, "%s:port", section_name);
	ini_str = (char *)iniparser_getstring(ini, buf, NULL);
	server_conf->port = (char *)alloc_new_str(ini_str);

	//get enabled
	snprintf(buf, buf_sz, "%s:enabled", section_name);
	ini_int = (int)iniparser_getint(ini, buf, -1);
	server_conf->enabled = ini_int;

	//get ssl
	snprintf(buf, buf_sz, "%s:ssl", section_name);
	ini_int = (int)iniparser_getint(ini, buf, -1);
	server_conf->ssl = ini_int;

	//get channel list
	snprintf(buf, buf_sz, "%s:channels", section_name);
	ini_str = (char *)iniparser_getstring(ini, buf, NULL);
	params = sdsnew(ini_str);
	tokens = sdssplitlen(params,sdslen(params),",",1,&count);
	for (i=0;(i<count)&&(i<15);i++)//woop woop dirty hack, max chan nums is 16 not constanteniuated
	{
		server_conf->channels[i] = alloc_new_str(tokens[i]);
	}
	server_conf->channels[i]=NULL;
	sdsfree(params);
	sdsfreesplitres(tokens,count);

	return 0;
}


void config_free(config_ini *config)
{
	if (!config)
	{
		PERM();
		return;
	}

	iniparser_freedict(config->ini);
	config->ini = NULL;

	free(config);
	config = NULL;

}