diff --git a/config.c b/config.c index 89adae1..b66f116 100644 --- a/config.c +++ b/config.c @@ -20,6 +20,12 @@ char *config_cdr_pass = MEDIATOR_DEFAULT_CDRPASS; char *config_cdr_db = MEDIATOR_DEFAULT_CDRDB; unsigned int config_cdr_port = MEDIATOR_DEFAULT_CDRPORT; +char *config_prov_host = MEDIATOR_DEFAULT_PROVHOST; +char *config_prov_user = MEDIATOR_DEFAULT_PROVUSER; +char *config_prov_pass = MEDIATOR_DEFAULT_PROVPASS; +char *config_prov_db = MEDIATOR_DEFAULT_PROVDB; +unsigned int config_prov_port = MEDIATOR_DEFAULT_PROVPORT; + static u_int8_t config_pid_path_free = 0; static u_int8_t config_med_host_free = 0; @@ -35,7 +41,7 @@ static u_int8_t config_cdr_db_free = 0; static void config_help(const char *self) { - printf("mediator 1.0 - Creates call detail records from SER accounting.\n" \ + printf("mediator 1.2.0 - Creates call detail records from OpenSER accounting.\n" \ "Usage: %s [-?] [-d] [-D pidpath]\n" \ " -D\tThe path of the PID file (default = '%s').\n" \ " -d\tEnables daemonization of the process (default = disabled).\n" \ @@ -51,10 +57,16 @@ static void config_help(const char *self) " -U\tThe CDR db user (default = '%s').\n" \ " -P\tThe CDR db pass (default = '%s').\n" \ " -B\tThe CDR db name (default = '%s').\n" \ + " -S\tThe prov db host (default = '%s').\n" \ + " -T\tThe prov db port (default = '%d').\n" \ + " -R\tThe prov db user (default = '%s').\n" \ + " -A\tThe prov db pass (default = '%s').\n" \ + " -N\tThe prov db name (default = '%s').\n" \ " -?\tDisplays this message.\n", self, config_pid_path, config_interval, config_med_host, config_med_port, config_med_user, config_med_pass, config_med_db, - config_cdr_host, config_cdr_port, config_cdr_user, config_cdr_pass, config_cdr_db); + config_cdr_host, config_cdr_port, config_cdr_user, config_cdr_pass, config_cdr_db, + config_prov_host, config_prov_port, config_prov_user, config_prov_pass, config_prov_db); } int config_parse_cmdopts(int argc, char **argv) diff --git a/config.h b/config.h index ea0d059..5a2e0ed 100644 --- a/config.h +++ b/config.h @@ -20,6 +20,12 @@ extern char *config_cdr_user; extern char *config_cdr_pass; extern char *config_cdr_db; +extern char *config_prov_host; +extern unsigned int config_prov_port; +extern char *config_prov_user; +extern char *config_prov_pass; +extern char *config_prov_db; + extern unsigned int config_interval; extern u_int8_t config_dumpcdr; diff --git a/mediator.h b/mediator.h index 52c2623..c3c5fa9 100644 --- a/mediator.h +++ b/mediator.h @@ -32,6 +32,12 @@ #define MEDIATOR_DEFAULT_CDRDB "accounting" #define MEDIATOR_DEFAULT_CDRPORT 0 +#define MEDIATOR_DEFAULT_PROVHOST "localhost" +#define MEDIATOR_DEFAULT_PROVUSER "mediator" +#define MEDIATOR_DEFAULT_PROVPASS "GimmeAllUr$$$" +#define MEDIATOR_DEFAULT_PROVDB "provisioning" +#define MEDIATOR_DEFAULT_PROVPORT 0 + #define MED_GW_STRING "gw" #define MED_AS_STRING "as" #define MED_PEER_STRING "peer" diff --git a/medmysql.c b/medmysql.c index 04117c6..fab597d 100644 --- a/medmysql.c +++ b/medmysql.c @@ -21,6 +21,7 @@ static MYSQL *cdr_handler = NULL; static MYSQL *med_handler = NULL; +static MYSQL *prov_handler = NULL; /**********************************************************************/ int medmysql_init() @@ -55,6 +56,20 @@ int medmysql_init() syslog(LOG_CRIT, "Error setting reconnect-option for ACC db: %s", mysql_error(med_handler)); goto err; } + + prov_handler = mysql_init(NULL); + if(!mysql_real_connect(prov_handler, + config_prov_host, config_prov_user, config_prov_pass, + config_prov_db, config_prov_port, NULL, 0)) + { + syslog(LOG_CRIT, "Error connecting to provisioning db: %s", mysql_error(prov_handler)); + goto err; + } + if(mysql_options(prov_handler, MYSQL_OPT_RECONNECT, &recon) != 0) + { + syslog(LOG_CRIT, "Error setting reconnect-option for provisioning db: %s", mysql_error(prov_handler)); + goto err; + } return 0; @@ -76,6 +91,11 @@ void medmysql_cleanup() mysql_close(med_handler); med_handler = NULL; } + if(prov_handler != NULL) + { + mysql_close(prov_handler); + prov_handler = NULL; + } } /**********************************************************************/ @@ -359,14 +379,14 @@ int medmysql_load_maps(GHashTable *host_table, GHashTable *ip_table) snprintf(query, sizeof(query), MED_LOAD_PEER_QUERY); /* syslog(LOG_DEBUG, "q='%s'", query); */ - if(mysql_real_query(med_handler, query, strlen(query)) != 0) + if(mysql_real_query(prov_handler, query, strlen(query)) != 0) { syslog(LOG_CRIT, "Error loading peer hosts: %s", - mysql_error(med_handler)); + mysql_error(prov_handler)); return -1; } - res = mysql_store_result(med_handler); + res = mysql_store_result(prov_handler); while((row = mysql_fetch_row(res)) != NULL) { @@ -439,14 +459,14 @@ int medmysql_load_uuids(GHashTable *uuid_table) snprintf(query, sizeof(query), MED_LOAD_UUID_QUERY); /* syslog(LOG_DEBUG, "q='%s'", query); */ - if(mysql_real_query(med_handler, query, strlen(query)) != 0) + if(mysql_real_query(prov_handler, query, strlen(query)) != 0) { syslog(LOG_CRIT, "Error loading uuids: %s", - mysql_error(med_handler)); + mysql_error(prov_handler)); return -1; } - res = mysql_store_result(med_handler); + res = mysql_store_result(prov_handler); while((row = mysql_fetch_row(res)) != NULL) {