Browse Source

tratar reconexão do banco de dados e a ami(asterisk)

pull/9/head
Rodgger 2 years ago
parent
commit
12bcc69b61
  1. 7
      dev
  2. 33
      src/database/database.c
  3. 68
      src/database/database.h
  4. 18
      src/log/log.h
  5. 10
      src/main.h
  6. 115
      src/peer/peer.c
  7. 35
      src/peer/peer.h
  8. 40
      src/peer/peer_db.c
  9. 1
      src/queue/queue_db.c
  10. 42
      src/settings/settings.c

7
dev

@ -0,0 +1,7 @@
Developer
Rodgger Bruno
- Colocar a estrutura RESPONSE_MARIADB como está na função para os eventos
parse_event_extensionstatus e banco de dados get_extensionstatus_db

33
src/database/database.c

@ -128,13 +128,24 @@ pthread_mutex_t m_db = PTHREAD_MUTEX_INITIALIZER;
*/ */
int db_connection(){ int db_connection(){
pthread_mutex_lock(&m_db); pthread_mutex_lock(&m_db);
if(mysql_ping( _database.mariadb)){ if(mysql_ping( _database.mariadb)){
_WARNING("Não foi possível reconectar ao banco de dados."); if(_database.disconnected == 0){
_WARNING("Não foi possível reconectar ao banco de dados.");
}
_database.disconnected = 1;
goto fail; goto fail;
} }
else{ //Banco de dados conectado
if(_database.disconnected == 1){ //banco de dados estava desconectado
_database.thread_id = 0;
_database.disconnected = 0;
}
}
if(_database.thread_id != mysql_thread_id(_database.mariadb)){ if(_database.thread_id != mysql_thread_id(_database.mariadb)){
_database.disconnected = 0;
_NOTICE("Banco de dados reconectado"); _NOTICE("Banco de dados reconectado");
_database.thread_id = mysql_thread_id(_database.mariadb); _database.thread_id = mysql_thread_id(_database.mariadb);
if(init_stmt() == -1){ if(init_stmt() == -1){
@ -144,6 +155,7 @@ int db_connection(){
pthread_mutex_unlock(&m_db); pthread_mutex_unlock(&m_db);
return 0; return 0;
fail: fail:
pthread_mutex_unlock(&m_db); pthread_mutex_unlock(&m_db);
return -1; return -1;
@ -183,6 +195,7 @@ int connect_db(s_manager *smanager){
else { else {
_NOTICE("Banco de dados connectado"); _NOTICE("Banco de dados connectado");
_database.disconnected = 0;
_database.thread_id = mysql_thread_id(_database.mariadb); _database.thread_id = mysql_thread_id(_database.mariadb);
break; break;
} }
@ -202,6 +215,7 @@ void *init_thread(void *param){
s_manager *smanager = param; s_manager *smanager = param;
_database.reconnect = 1; _database.reconnect = 1;
_database.disconnected = 0;
_database.mariadb = mysql_init(NULL); _database.mariadb = mysql_init(NULL);
@ -234,18 +248,26 @@ void *init_thread(void *param){
} }
} }
else{ else{
if(log_active_connect == 1){ if( log_active_connect == 1 ){
log_active_connect = 0; log_active_connect = 0;
_NOTICE("Reconectado com a AMI"); _NOTICE( "Reconectado com a AMI" );
action_complete(ZERO_FILL_ACTION, smanager);
} }
} }
unsigned short int p = _database.disconnected;
if( db_connection() == 0 && p != _database.disconnected){
action_complete(ZERO_FILL_ACTION, smanager);
}
/* se existe retorno de action */ /* se existe retorno de action */
verify_action( smanager ); verify_action( smanager );
/* se existe eventos do asterisk */ /* se existe eventos do asterisk */
verify_event ( smanager ); verify_event ( smanager );
/* cada 0,05 segundos esse loop será executado */ /* cada 0,05 segundos esse loop será executado */
usleep(50000); usleep(50000);
} }
@ -841,7 +863,10 @@ MARIADB_BIND *get_bind_result(MYSQL_STMT *stmt){
bind = create_bind_manager( size_columns ); bind = create_bind_manager( size_columns );
rs_metadata = mysql_stmt_result_metadata(stmt); rs_metadata = mysql_stmt_result_metadata(stmt);
if( rs_metadata == NULL ) goto fail; if( rs_metadata == NULL ){
destroy_bind_manager(bind);
goto fail;
}
fields = mysql_fetch_fields(rs_metadata); fields = mysql_fetch_fields(rs_metadata);

68
src/database/database.h

@ -21,6 +21,7 @@
#define DATABASE_H 1 #define DATABASE_H 1
#include <mariadb/mysql.h> #include <mariadb/mysql.h>
#include <main.h>
#define LEN_VARCHAR 255 #define LEN_VARCHAR 255
@ -33,7 +34,7 @@
#define SET_STMT(stmt, type_stmt, integer) \ #define SET_STMT(stmt, type_stmt, integer) \
stmt = get_stmt(type_stmt); \ stmt = get_stmt(type_stmt); \
if(!stmt){ \ if(!stmt){ \
return (integer == 0 ? 0 : -1); \ FAIL(NULL); \
} }
typedef unsigned int stmt_t; typedef unsigned int stmt_t;
@ -100,9 +101,23 @@ typedef struct {
MYSQL *mariadb; MYSQL *mariadb;
my_bool reconnect; my_bool reconnect;
unsigned long thread_id; unsigned long thread_id;
unsigned short int disconnected;
unsigned int seconds;
}s_database; }s_database;
typedef struct {
long int error;
int success:1;
int no_data;
unsigned int row;
int data_truncated;
void *data;
} RESPONSE_MARIADB;
typedef struct MARIADB_BIND{ typedef struct MARIADB_BIND{
MYSQL_BIND *bind; MYSQL_BIND *bind;
int id; int id;
@ -123,23 +138,48 @@ typedef struct MARIADB_BIND{
} MARIADB_BIND; } MARIADB_BIND;
/* row exten */ #define BIND_PARAM 1 //Para identificar as bind para destruir
/*struct s_table_exten { #define BIND_RESULT 2 //bind para resultado são usado calloc e destroy_bind_manager free
unsigned long long int id;
unsigned long long exten;
int status;
char *type;
char *status_text;
char *context;
struct s_table_exten *next;
};
*/
#define NEW_RESPONSE_MARIADB(ptr) \
ptr = (RESPONSE_MARIADB *) calloc( 1, sizeof(RESPONSE_MARIADB) ); \
if(!ptr){ \
_EMERG( "calloc retornou NULL RESPONSE_MARIADB" ); \
ptr->error = -1; \
ptr->success = 0; \
ptr->data = NULL; \
goto fail; \
}
#define SET_SUCCESS_MARIADB( ptr, boolean ) \
ptr->success = boolean
#define SET_ERROR_MARIADB( ptr, stmt ) \
ptr->error = (long int) mysql_stmt_errno(stmt)
#define BIND_PARAM 1 //Para identificar as bind para destruir #define GET_ERROR_MARIADB( ptr ) \
#define BIND_RESULT 2 //bind para resultado são usado calloc e destroy_bind_manager free ptr->error
#define GET_SUCCESS_MARIADB( ptr ) \
ptr->success
#define GET_DATA_MARIADB( ptr ) \
ptr->data
#define SET_DATA_MARIADB( ptr, table ) \
ptr->data = (void *) table
#define SET_TRUNCATED_MARIADB( ptr ) \
ptr->data_truncated = 1;
#define INCREMENT_ROW_MARIADB(ptr) \
ptr->row++
#define FREE_RESPONSE_MARIADB( ptr, func, a ) \
func( (a **)&ptr->data ); \
free( ptr ); \
ptr = NULL;
/* QUERYS PARA PREPARED */ /* QUERYS PARA PREPARED */
#define QueryInsertexten "INSERT INTO exten ( exten, context, status, status_text, exten_type) VALUES (?, ?, ?, ?, ?)" #define QueryInsertexten "INSERT INTO exten ( exten, context, status, status_text, exten_type) VALUES (?, ?, ?, ?, ?)"

18
src/log/log.h

@ -55,16 +55,16 @@
#define FLAG_LOG_FILE O_APPEND #define FLAG_LOG_FILE O_APPEND
#define _EMERG(a, ...) system_log( FLAG_EMERG, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _EMERG(str, ...) system_log( FLAG_EMERG, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _ALERT(a, ...) system_log( FLAG_ALERT, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _ALERT( str, ...) system_log( FLAG_ALERT, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _CRIT(a, ...) system_log( FLAG_CRIT, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _CRIT( str, ...) system_log( FLAG_CRIT, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _ERROR(a, ...) system_log( FLAG_ERR, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _ERROR( str, ...) system_log( FLAG_ERR, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _WARNING(a, ...) system_log( FLAG_WARNING, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _WARNING( str, ...) system_log( FLAG_WARNING, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _NOTICE(a, ...) system_log( FLAG_NOTICE, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _NOTICE( str, ...) system_log( FLAG_NOTICE, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _INFO(a, ...) system_log( FLAG_INFO, a, ##__VA_ARGS__) /* Envia log amid e syslog */ #define _INFO( str, ...) system_log( FLAG_INFO, str, ##__VA_ARGS__) /* Envia log amid e syslog */
#define _LOG(a, ...) system_log( 0, a, ##__VA_ARGS__) /* Envia apenas log amid sem syslog */ #define _LOG( str, ...) system_log( 0, str, ##__VA_ARGS__) /* Envia apenas log amid sem syslog */
#ifdef DEBUG #ifdef DEBUG
#define _DEBUG(str) system_log(FLAG_DEBUG, str, __LINE__, __FILE__) #define _DEBUG(str, ...) system_log( FLAG_DEBUG, str, ##__VA_ARGS__ )
#endif #endif

10
src/main.h

@ -47,6 +47,16 @@
#define AST_UPDATE 240 /* tempo para atualizar dados do asterisk, isto é, peer(tronco e ramal), agents, queue, queue_member, exten */ #define AST_UPDATE 240 /* tempo para atualizar dados do asterisk, isto é, peer(tronco e ramal), agents, queue, queue_member, exten */
#ifdef DEBUG
#define FAIL(str, ...) \
if(str != NULL) \
_DEBUG(str, ##__VA_ARGS__); \
goto fail
#else
#define FAIL(useless, ...) \
goto fail
#endif
/* status da ligação - dial status /* status da ligação - dial status

115
src/peer/peer.c

@ -27,11 +27,12 @@
/* /*!
* field peer_callerid_number * Essa função será chamada para analisar e manipular event
* peer_callerid_name (mesmo que peer_callerid_number) * extensionstatus
* type *
* peer_trunk * \param event estrutura do evento extensionstatus
* \param smanager principal estrutura amid
*/ */
int parse_event_extensionstatus(EVENT *event, s_manager *smanager){ int parse_event_extensionstatus(EVENT *event, s_manager *smanager){
@ -74,7 +75,7 @@ int parse_event_extensionstatus(EVENT *event, s_manager *smanager){
int i_status, peer_trunk; int i_status, peer_trunk;
exten = ami_get_value( smanager->ami, event->args, "Exten" ); exten = ami_get_value( smanager->ami, event->args, "Exten" );
if( !exten ) goto fail; if( !exten ){ FAIL( "Fail Exten - function %s", __func__ ); } // str em FAIL, apenas para debug
{ // analisar se é um tronco { // analisar se é um tronco
struct s_peer *peer = get_peer( exten ); struct s_peer *peer = get_peer( exten );
@ -87,47 +88,57 @@ int parse_event_extensionstatus(EVENT *event, s_manager *smanager){
} }
status = ami_get_value( smanager->ami, event->args, "Status"); status = ami_get_value( smanager->ami, event->args, "Status" );
if(!status) { i_status = 0; } else{ i_status = atoi(status); } if( !status ) { i_status = 0; } else{ i_status = atoi( status ); }
status_text = ami_get_value( smanager->ami, event->args, "StatusText"); status_text = ami_get_value( smanager->ami, event->args, "StatusText" );
if(!status_text) { goto fail; } if( !status_text ) { FAIL("FAIL StatusText - function %s", __func__ ); }
{/* banco de dados */ { /* banco de dados */
struct s_table_peer *table_peer; struct s_table_peer *table_peer;
RESPONSE_MARIADB *response_mariadb = NULL;
response_mariadb = get_extensionstatus_db( Select_extensionstatus, exten );
if( !GET_SUCCESS_MARIADB( response_mariadb ) ){
FREE_RESPONSE_MARIADB( response_mariadb, free_table_peer, struct s_table_peer );
FAIL( "FAIL get_extensionstatus_db - function %s", __func__ );
}
table_peer = get_extensionstatus_db( Select_extensionstatus, exten ); table_peer = (struct s_table_peer *) GET_DATA_MARIADB(response_mariadb);
if( table_peer ){ if( table_peer ){
/* Retirar extension */
if( i_status == -2 || i_status == -1 ){ if( i_status == -2 || i_status == -1 ){
/* delete row no banco /* delete row no banco
* The extension was removed from the dialplan. */ * The extension was removed from the dialplan. */
delete_extensionstatus_db(Delete_extensionstatus, table_peer->id); delete_extensionstatus_db(Delete_extensionstatus, table_peer->id);
struct s_peer *peer = get_peer(exten); FREE_RESPONSE_MARIADB( response_mariadb, free_table_peer, struct s_table_peer );
if(peer){
remove_peer(peer);
}
free_table_peer(&table_peer);
goto fail;
} }
/* verifica se houve mudança na extension */
else if( (table_peer->trunk != peer_trunk) || else if( (table_peer->trunk != peer_trunk) ||
table_peer->exten_status != i_status || table_peer->exten_status != i_status ||
strcmp_n(table_peer->exten_statustext, status_text)) { strcmp_n(table_peer->exten_statustext, status_text)) {
if(update_extensionstatus_db(Update_extensionstatus, i_status, status_text, peer_trunk, table_peer->id) == -1){ /* atualiza a linha da extensão no banco de dados */
_WARNING("Falha %s %d\n", exten, __LINE__); if( update_extensionstatus_db( Update_extensionstatus, i_status, status_text, peer_trunk, table_peer->id ) == -1 ){
_WARNING("ERRO update row %s %s\n", exten, __func__);
FREE_RESPONSE_MARIADB( response_mariadb, free_table_peer, struct s_table_peer );
FAIL( "FAIL update_extensionstatus_db - function %s", __func__ );
} }
} }
free_table_peer(&table_peer);
} }
else if (i_status != -2) { /* inserir novo extension no banco */ else if (i_status != -2) { /* inserir novo extension no banco */
insert_extensionstatus_db(Insert_extensionstatus, exten, i_status, status_text, peer_trunk); if( insert_extensionstatus_db(Insert_extensionstatus, exten, i_status, status_text, peer_trunk) == -1){
_WARNING("ERRO insert row %s %s\n", exten, __func__);
FREE_RESPONSE_MARIADB( response_mariadb, free_table_peer, struct s_table_peer );
FAIL( "FAIL insert_extensionstatus_db - function %s", __func__ );
}
} }
FREE_RESPONSE_MARIADB( response_mariadb, free_table_peer, struct s_table_peer );
} }
{/* camada de persistência */ {/* camada de persistência */
@ -196,7 +207,13 @@ fail:
} }
/*!
* Essa função será chamada para analisar e manipular event
* peerentry
*
* \param event estrutura do evento peerentry
* \param smanager principal estrutura
*/
int parse_event_peerentry( EVENT *event, s_manager *smanager ){ int parse_event_peerentry( EVENT *event, s_manager *smanager ){
/* /*
Event: PeerEntry Event: PeerEntry
@ -224,10 +241,11 @@ int parse_event_peerentry( EVENT *event, s_manager *smanager ){
int peer_trunk; int peer_trunk;
channeltype = ami_get_value(smanager->ami, event->args, "Channeltype"); channeltype = ami_get_value(smanager->ami, event->args, "Channeltype");
if(!channeltype) goto fail; _LOG("Channeltype - %s function %s", channeltype, __func__ );
if(!channeltype){ FAIL("FAIL Channeltype - function %s", __func__ ); }
objectname = ami_get_value(smanager->ami, event->args, "ObjectName"); objectname = ami_get_value(smanager->ami, event->args, "ObjectName");
if(!objectname) goto fail; if(!objectname){ FAIL( "FAIL ObjectName - function %s", __func__);}
ipaddress = ami_get_value(smanager->ami, event->args, "IPaddress"); ipaddress = ami_get_value(smanager->ami, event->args, "IPaddress");
if(!strncmp(ipaddress, "-none-", 6)){ if(!strncmp(ipaddress, "-none-", 6)){
@ -263,13 +281,19 @@ int parse_event_peerentry( EVENT *event, s_manager *smanager ){
(strcmp_n(table_peer->protocol, channeltype) != 0) || (strcmp_n(table_peer->protocol, channeltype) != 0) ||
(strcmp_n(table_peer->address, ipaddress) != 0) ) { (strcmp_n(table_peer->address, ipaddress) != 0) ) {
update_peerentry_db(Update_peerentry, channeltype, ipaddress, table_peer->trunk, table_peer->id); if(update_peerentry_db(Update_peerentry, channeltype, ipaddress, table_peer->trunk, table_peer->id) == -1){
_WARNING("ERRO update row %s %s\n", objectname, __func__ );
FAIL( "FAIL update_peerentry_db - function %s", __func__ );
}
} }
free_table_peer(&table_peer); free_table_peer(&table_peer);
} }
else{ else{
insert_peerentry_db(Insert_peerentry, objectname, channeltype, ipaddress, peer_trunk); if( insert_peerentry_db(Insert_peerentry, objectname, channeltype, ipaddress, peer_trunk) == -1 ){
_WARNING("ERRO insert row %s %s\n", objectname, __func__);
FAIL( "FAIL insert_peerentry_db - function %s", __func__ );
}
} }
} }
@ -309,7 +333,6 @@ int parse_event_peerentry( EVENT *event, s_manager *smanager ){
} }
} }
return 1; return 1;
fail: fail:
@ -317,7 +340,13 @@ fail:
} }
/*!
* Essa função será chamada para analisar e manipular event
* peerstatus
*
* \param event estrutura do evento peerstatus
* \param smanager principal estrutura
*/
int parse_event_peerstatus( EVENT *event, s_manager *smanager ){ int parse_event_peerstatus( EVENT *event, s_manager *smanager ){
/* /*
@ -337,21 +366,19 @@ int parse_event_peerstatus( EVENT *event, s_manager *smanager ){
const char *protocol, *peer, *status, *address, *exten; const char *protocol, *peer, *status, *address, *exten;
protocol = ami_get_value(smanager->ami, event->args, "Channeltype"); protocol = ami_get_value( smanager->ami, event->args, "Channeltype" );
if(!protocol) goto fail; // if(!protocol){ FAIL( "ERRO Channeltype - function %s", __func__ ); }
peer = ami_get_value(smanager->ami, event->args, "Peer"); peer = ami_get_value( smanager->ami, event->args, "Peer" );
if(!peer) goto fail; if(!peer){ FAIL( "ERRO Peer - function %s", __func__ ); }
exten = get_parse_exten(peer); exten = get_parse_exten(peer);
if(!exten) goto fail; // if(!exten){ FAIL( "ERRO get_parse_exten - function %s", __func__ ); }
status = ami_get_value(smanager->ami, event->args, "PeerStatus"); status = ami_get_value(smanager->ami, event->args, "PeerStatus" );
address = ami_get_value(smanager->ami, event->args, "Address"); address = ami_get_value(smanager->ami, event->args, "Address" );
{ /* Database { /* Database
*
*
*/ */
struct s_table_peer *table_peer = NULL; struct s_table_peer *table_peer = NULL;
table_peer = get_peerstatus_db( Select_peerstatus, exten ); table_peer = get_peerstatus_db( Select_peerstatus, exten );
@ -360,13 +387,19 @@ int parse_event_peerstatus( EVENT *event, s_manager *smanager ){
strcmp_n( table_peer->address, ( !strcasecmp_n(status, "Reachable") ? table_peer->address : address )) || strcmp_n( table_peer->address, ( !strcasecmp_n(status, "Reachable") ? table_peer->address : address )) ||
strcmp_n( table_peer->status, status )){ strcmp_n( table_peer->status, status )){
update_peerstatus_db( Update_peerstatus, protocol, status, address, table_peer->id ); if(update_peerstatus_db( Update_peerstatus, protocol, status, address, table_peer->id ) == -1){
_WARNING("ERRO update row %s %s\n", peer, __func__ );
FAIL( "FAIL update_peerstatus_db - function %s", __func__ );
}
} }
free_table_peer(&table_peer); free_table_peer(&table_peer);
} }
else { else {
insert_peerstatus_db( Insert_peerstatus, exten, protocol, status, address ); if(insert_peerstatus_db( Insert_peerstatus, exten, protocol, status, address ) == -1){
_WARNING("ERRO update row %s %s\n", peer, __func__ );
FAIL( "FAIL insert_peerstatus_db - function %s", __func__ );
}
} }
} }

35
src/peer/peer.h

@ -40,6 +40,39 @@ struct s_table_peer {
}; };
#define column_id(tb) \
tb->id
#define column_callerid_number(tb) \
tb->callerid_number
#define column_callerid_name(tb) \
tb->callerid_name
#define column_protocol(tb) \
tb->protocol
#define column_status(tb) \
tb->status
#define column_exten_status(tb) \
tb->exten_status
#define column_exten_statustext(tb) \
tb->exten_statustext
#define column_address(tb) \
tb->address
#define column_trunk(tb) \
tb->trunk
#define column__time(tb) \
tb->_time
int parse_event_peerentry( EVENT *event, s_manager *smanager ); int parse_event_peerentry( EVENT *event, s_manager *smanager );
int parse_event_peerlistcomplete(EVENT *event, s_manager *smanager); int parse_event_peerlistcomplete(EVENT *event, s_manager *smanager);
int parse_event_peerstatus( EVENT *event, s_manager *smanager ); int parse_event_peerstatus( EVENT *event, s_manager *smanager );
@ -61,7 +94,7 @@ int update_extensionstatus_db( stmt_t type_stmt,
const char *status_text, const char *status_text,
int peer_trunk, int peer_trunk,
unsigned long long int id ); unsigned long long int id );
struct s_table_peer *get_extensionstatus_db(stmt_t type_stmt, const char *peer_callerid_number); RESPONSE_MARIADB *get_extensionstatus_db(stmt_t type_stmt, const char *peer_callerid_number);
int delete_extensionstatus_db(stmt_t type_stmt, unsigned long long peer_id); int delete_extensionstatus_db(stmt_t type_stmt, unsigned long long peer_id);
int update_peer_dynamic(stmt_t type_stmt, int dynamic, unsigned long long peer_id); int update_peer_dynamic(stmt_t type_stmt, int dynamic, unsigned long long peer_id);

40
src/peer/peer_db.c

@ -127,10 +127,12 @@ fail:
/* ExtensionStatus */ /* ExtensionStatus */
struct s_table_peer *get_extensionstatus_db(stmt_t type_stmt, const char *peer_callerid_number){ RESPONSE_MARIADB *get_extensionstatus_db(stmt_t type_stmt, const char *peer_callerid_number){
// SELECT id, callerid_number, trunk, exten_status, exten_statustext FROM peer where callerid_number = ?; // SELECT id, callerid_number, trunk, exten_status, exten_statustext FROM peer where callerid_number = ?;
MYSQL_STMT *stmt; RESPONSE_MARIADB *response_mariadb = NULL;
MYSQL_STMT *stmt = NULL;
NEW_RESPONSE_MARIADB( response_mariadb );
SET_STMT( stmt, type_stmt, 0 ); SET_STMT( stmt, type_stmt, 0 );
pthread_mutex_lock(&m_db); pthread_mutex_lock(&m_db);
@ -138,22 +140,24 @@ struct s_table_peer *get_extensionstatus_db(stmt_t type_stmt, const char *peer_c
MARIADB_BIND *bind = create_bind_manager( 1 ); MARIADB_BIND *bind = create_bind_manager( 1 );
set_in_mariadb_column(&bind[0], ARG_STR_DB((char *)peer_callerid_number), (char *)peer_callerid_number, 0, isNULL(peer_callerid_number)); set_in_mariadb_column(&bind[0], ARG_STR_DB((char *)peer_callerid_number), (char *)peer_callerid_number, 0, isNULL(peer_callerid_number));
if(mariadb_stmt_execute(stmt, bind) == -1){ if(mariadb_stmt_execute(stmt, bind) == -1){
_CRIT("ERRO: %s - FILE %s - Line %d\n", mysql_stmt_error(stmt), __FILE__, __LINE__); SET_ERROR_MARIADB( response_mariadb, stmt );
_CRIT("ERRO: %s - FUNC:%s", mysql_stmt_error(stmt), __func__ );
goto fail; goto fail;
} }
MARIADB_BIND *bind_result; MARIADB_BIND *bind_result;
bind_result = get_bind_result(stmt); bind_result = get_bind_result(stmt);
if(!bind_result){
SET_SUCCESS_MARIADB(response_mariadb, 0);
goto fail;
}
struct s_table_peer *table_peer = NULL, *table_peer_next = NULL; SET_SUCCESS_MARIADB( response_mariadb, 1 );
int returnf = 0;
while(1){
returnf = mysql_stmt_fetch(stmt);
if(returnf == 1 || returnf == MYSQL_NO_DATA){ struct s_table_peer *table_peer = NULL, *table_peer_next = NULL;
break; while(!mysql_stmt_fetch(stmt)){
}
table_peer_next = (struct s_table_peer *)calloc(1, sizeof(struct s_table_peer)); table_peer_next = (struct s_table_peer *)calloc(1, sizeof(struct s_table_peer));
if(!table_peer_next){ break; } if(!table_peer_next){ break; }
@ -184,16 +188,22 @@ struct s_table_peer *get_extensionstatus_db(stmt_t type_stmt, const char *peer_c
table_peer_next->exten_statustext = NULL; table_peer_next->exten_statustext = NULL;
} }
add_table_peer(&table_peer, table_peer_next); INCREMENT_ROW_MARIADB( response_mariadb );
add_table_peer( &table_peer, table_peer_next );
} }
destroy_bind_manager(bind_result); destroy_bind_manager( bind_result );
pthread_mutex_unlock( &m_db );
SET_DATA_MARIADB( response_mariadb, table_peer );
//s response_mariadb->data = (void *) table_peer;
return response_mariadb;
pthread_mutex_unlock(&m_db);
return table_peer;
fail: fail:
pthread_mutex_unlock(&m_db); pthread_mutex_unlock(&m_db);
return NULL; return response_mariadb;
} }

1
src/queue/queue_db.c

@ -250,6 +250,7 @@ struct s_table_queue_member_update *get_queue_member_update_db(stmt_t type_stmt)
destroy_bind_manager(bind_result); destroy_bind_manager(bind_result);
pthread_mutex_unlock(&m_db); pthread_mutex_unlock(&m_db);
return table_member_update; return table_member_update;
fail: fail:

42
src/settings/settings.c

@ -44,27 +44,27 @@ int parse_response_CoreSettings(RESPONSE *response, s_manager *smanager, const c
return -1; return -1;
} }
char *amiversion = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_AMIversion ); // char *amiversion = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_AMIversion );
char *asteriskversion = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_AsteriskVersion ); // char *asteriskversion = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_AsteriskVersion );
char *systemname = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_SystemName ); // char *systemname = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_SystemName );
char *coremaxcalls = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxCalls ); // char *coremaxcalls = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxCalls );
char *coremaxloadavg = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxLoadAvg ); // char *coremaxloadavg = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxLoadAvg );
char *corerunuser = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRunUser ); // char *corerunuser = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRunUser );
char *corerungroup = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRunGroup ); // char *corerungroup = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRunGroup );
char *coremaxfilehandles = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxFilehandles ); // char *coremaxfilehandles = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreMaxFilehandles );
char *corerealtimeenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRealTimeEnabled ); // char *corerealtimeenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreRealTimeEnabled );
char *corecdrenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreCDRenabled ); // char *corecdrenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreCDRenabled );
char *corehttpenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreHTTPenabled ); // char *corehttpenabled = ami_get_value( smanager->ami, response->args, KEY_SETTINGS_CoreHTTPenabled );
//
{ // DATABASE // { // DATABASE
//
/* AMIversion */ // /* AMIversion */
struct s_table_settings *table_settings = NULL; // struct s_table_settings *table_settings = NULL;
// table_settings = get_settings_db( Select_key_settings, KEY_SETTINGS_AMIversion ); // // table_settings = get_settings_db( Select_key_settings, KEY_SETTINGS_AMIversion );
//
//
//
} // }
return 0; return 0;

Loading…
Cancel
Save