|
|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
#include <my_global.h>
|
|
|
|
|
#include <m_string.h>
|
|
|
|
|
#include <mysql.h>
|
|
|
|
|
#include <mysql/errmsg.h>
|
|
|
|
|
|
|
|
|
|
#include "medmysql.h"
|
|
|
|
|
#include "config.h"
|
|
|
|
|
@ -26,6 +27,27 @@ static MYSQL *prov_handler = NULL;
|
|
|
|
|
static int medmysql_flush_cdr(struct medmysql_batches *);
|
|
|
|
|
static int medmysql_flush_medlist(struct medmysql_str *);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int mysql_query_wrapper(MYSQL *mysql, const char *stmt_str, unsigned long length) {
|
|
|
|
|
int ret;
|
|
|
|
|
int i;
|
|
|
|
|
unsigned int err;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
|
|
|
ret = mysql_real_query(mysql, stmt_str, length);
|
|
|
|
|
if (!ret)
|
|
|
|
|
return ret;
|
|
|
|
|
err = mysql_errno(mysql);
|
|
|
|
|
if (err == CR_SERVER_GONE_ERROR || err == CR_SERVER_LOST) {
|
|
|
|
|
syslog(LOG_WARNING, "Lost connection to SQL server during query, retrying...");
|
|
|
|
|
sleep(10);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**********************************************************************/
|
|
|
|
|
int medmysql_init()
|
|
|
|
|
{
|
|
|
|
|
@ -117,7 +139,7 @@ int medmysql_fetch_callids(med_callid_t **callids, u_int64_t *count)
|
|
|
|
|
|
|
|
|
|
/*syslog(LOG_DEBUG, "q='%s'", query);*/
|
|
|
|
|
|
|
|
|
|
if(mysql_real_query(med_handler, query, strlen(query)) != 0)
|
|
|
|
|
if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0)
|
|
|
|
|
{
|
|
|
|
|
syslog(LOG_CRIT, "Error getting acc callids: %s",
|
|
|
|
|
mysql_error(med_handler));
|
|
|
|
|
@ -175,7 +197,7 @@ int medmysql_fetch_records(med_callid_t *callid,
|
|
|
|
|
|
|
|
|
|
/*syslog(LOG_DEBUG, "q='%s'", query);*/
|
|
|
|
|
|
|
|
|
|
if(mysql_real_query(med_handler, query, strlen(query)) != 0)
|
|
|
|
|
if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0)
|
|
|
|
|
{
|
|
|
|
|
syslog(LOG_CRIT, "Error getting acc records for callid '%s': %s",
|
|
|
|
|
callid->value, mysql_error(med_handler));
|
|
|
|
|
@ -382,7 +404,7 @@ 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(prov_handler, query, strlen(query)) != 0)
|
|
|
|
|
if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0)
|
|
|
|
|
{
|
|
|
|
|
syslog(LOG_CRIT, "Error loading peer hosts: %s",
|
|
|
|
|
mysql_error(prov_handler));
|
|
|
|
|
@ -462,7 +484,7 @@ 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(prov_handler, query, strlen(query)) != 0)
|
|
|
|
|
if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0)
|
|
|
|
|
{
|
|
|
|
|
syslog(LOG_CRIT, "Error loading uuids: %s",
|
|
|
|
|
mysql_error(prov_handler));
|
|
|
|
|
@ -499,9 +521,9 @@ out:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int medmysql_batch_start(struct medmysql_batches *batches) {
|
|
|
|
|
if (mysql_real_query(cdr_handler, "start transaction", 17))
|
|
|
|
|
if (mysql_query_wrapper(cdr_handler, "start transaction", 17))
|
|
|
|
|
return -1;
|
|
|
|
|
if (mysql_real_query(med_handler, "start transaction", 17))
|
|
|
|
|
if (mysql_query_wrapper(med_handler, "start transaction", 17))
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
batches->cdrs.len = 0;
|
|
|
|
|
@ -522,7 +544,7 @@ static int medmysql_flush_cdr(struct medmysql_batches *batches) {
|
|
|
|
|
batches->cdrs.len--;
|
|
|
|
|
batches->cdrs.str[batches->cdrs.len] = '\0';
|
|
|
|
|
|
|
|
|
|
if(mysql_real_query(cdr_handler, batches->cdrs.str, batches->cdrs.len) != 0)
|
|
|
|
|
if(mysql_query_wrapper(cdr_handler, batches->cdrs.str, batches->cdrs.len) != 0)
|
|
|
|
|
{
|
|
|
|
|
batches->cdrs.len = 0;
|
|
|
|
|
syslog(LOG_CRIT, "Error inserting cdrs: %s",
|
|
|
|
|
@ -542,7 +564,7 @@ static int medmysql_flush_medlist(struct medmysql_str *str) {
|
|
|
|
|
|
|
|
|
|
str->str[str->len - 1] = ')';
|
|
|
|
|
|
|
|
|
|
if(mysql_real_query(med_handler, str->str, str->len) != 0)
|
|
|
|
|
if(mysql_query_wrapper(med_handler, str->str, str->len) != 0)
|
|
|
|
|
{
|
|
|
|
|
str->len = 0;
|
|
|
|
|
syslog(LOG_CRIT, "Error executing query: %s",
|
|
|
|
|
@ -565,9 +587,9 @@ int medmysql_batch_end(struct medmysql_batches *batches) {
|
|
|
|
|
if (medmysql_flush_medlist(&batches->to_delete))
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
if (mysql_real_query(cdr_handler, "commit", 6))
|
|
|
|
|
if (mysql_query_wrapper(cdr_handler, "commit", 6))
|
|
|
|
|
return -1;
|
|
|
|
|
if (mysql_real_query(med_handler, "commit", 6))
|
|
|
|
|
if (mysql_query_wrapper(med_handler, "commit", 6))
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|