|
|
@ -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 ); |
|
|
@ -91,43 +92,53 @@ int parse_event_extensionstatus(EVENT *event, s_manager *smanager){ |
|
|
|
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)) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* atualiza a linha da extensão no banco de dados */ |
|
|
|
if( update_extensionstatus_db( Update_extensionstatus, i_status, status_text, peer_trunk, table_peer->id ) == -1 ){ |
|
|
|
if( update_extensionstatus_db( Update_extensionstatus, i_status, status_text, peer_trunk, table_peer->id ) == -1 ){ |
|
|
|
_WARNING("Falha %s %d\n", exten, __LINE__); |
|
|
|
_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 ){ |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
@ -338,20 +367,18 @@ 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__ ); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|