|
|
|
@ -27,6 +27,7 @@
|
|
|
|
|
#include <parse_events.h> |
|
|
|
|
#include <bridge/bridge.h> |
|
|
|
|
#include <transfer/transfer.h> |
|
|
|
|
#include <queue/queue.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -72,7 +73,7 @@ int parse_event_coreshowchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
*context = NULL, *uniqueid = NULL, *linkedid = NULL, *bge_uniqueid = NULL, *duration = NULL; |
|
|
|
|
int channelstate = 0, priority = 0, seconds_multiplier = 3600; |
|
|
|
|
unsigned long long int call_duration_seconds = 0; |
|
|
|
|
char *str_peer = NULL, *token = NULL; |
|
|
|
|
char *exten_number = NULL, *token = NULL; |
|
|
|
|
RESPONSE_MARIADB *rmdb_channel_insert = NULL, *rmdb_get_channel = NULL, |
|
|
|
|
*rmdb_bridge_member_insert = NULL, *rmdb_get_bridge_member = NULL; |
|
|
|
|
|
|
|
|
@ -100,17 +101,15 @@ int parse_event_coreshowchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
token = strtok(NULL, ":"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
str_peer = (char *) alloc( 1, strlen_n( channel_name ) ); |
|
|
|
|
struct s_peer *peer = get_peer( channel_peer_split( channel_name, str_peer ) ); |
|
|
|
|
if( !peer ){ |
|
|
|
|
FAIL("channel sem peer %s - peer \"%s\"", channel_name, str_peer ); |
|
|
|
|
} |
|
|
|
|
exten_number = split_exten_number_from_channel_name( channel_name ); |
|
|
|
|
struct s_peer *peer = get_peer( exten_number ); |
|
|
|
|
struct s_list_queue *queue = get_queue_number (exten_number); |
|
|
|
|
|
|
|
|
|
/* Procura o canal no banco de dados e insere se não encontrar */ |
|
|
|
|
rmdb_get_channel = get_channel_id_db(Select_channel_id, uniqueid); |
|
|
|
|
if (rmdb_get_channel) { |
|
|
|
|
if (!rmdb_get_channel->data){ |
|
|
|
|
rmdb_channel_insert = insert_channel_db( Insert_channel, peer->callerid_number, channel_name, channelstate, channelstatedesc, |
|
|
|
|
rmdb_channel_insert = insert_channel_db( Insert_channel, exten_number, channel_name, channelstate, channelstatedesc, |
|
|
|
|
( strcmp_n( calleridnum, "<unknown>" ) ? calleridnum : NULL ), |
|
|
|
|
( strcmp_n( calleridname, "<unknown>" ) ? calleridname : NULL ), |
|
|
|
|
( strcmp_n( connectedlinenum, "<unknown>" ) ? connectedlinenum : NULL ),
|
|
|
|
@ -147,11 +146,12 @@ int parse_event_coreshowchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
node_chn->call_duration_seconds = call_duration_seconds; |
|
|
|
|
node_chn->priority = priority; |
|
|
|
|
|
|
|
|
|
newstrncpy( &node_chn->identification_number, channel_peer_split( channel_name, str_peer ) ); |
|
|
|
|
newstrncpy( &node_chn->identification_number, exten_number); |
|
|
|
|
|
|
|
|
|
node_chn->node_up = peer; |
|
|
|
|
node_chn->peer_node_up = peer; |
|
|
|
|
node_chn->queue_node_up = queue; |
|
|
|
|
|
|
|
|
|
insert_peer_channel( peer->callerid_number, node_chn ); |
|
|
|
|
insert_channel( exten_number, node_chn ); |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
_ERROR("create_channel retornou NULL"); |
|
|
|
@ -181,7 +181,7 @@ int parse_event_coreshowchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
FAIL("Falha na função %s ao inserir o channel %s (%s) na ponte de uniqueid %s", __func__, bge_uniqueid, channel_name, uniqueid); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(str_peer) free(str_peer); |
|
|
|
|
if(exten_number) { free(exten_number); } |
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_channel_insert ); |
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_get_channel ); |
|
|
|
|
FREE_RESPONSE_MARIADB( rmdb_bridge_member_insert, free_table_bridge_member, struct s_table_bridge_member ); |
|
|
|
@ -189,8 +189,7 @@ int parse_event_coreshowchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
if(str_peer) free(str_peer); |
|
|
|
|
|
|
|
|
|
if(exten_number) { free(exten_number); } |
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_channel_insert ); |
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_get_channel ); |
|
|
|
|
FREE_RESPONSE_MARIADB( rmdb_bridge_member_insert, free_table_bridge_member, struct s_table_bridge_member ); |
|
|
|
@ -291,7 +290,7 @@ int parse_event_newchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
*calleridname, *connectedlinenum, *connectedlinename, *accountcode, |
|
|
|
|
*context, *uniqueid, *linkedid; |
|
|
|
|
int channelstate = 0, priority = 0; |
|
|
|
|
char *str_peer = NULL; |
|
|
|
|
char *exten_number = NULL; |
|
|
|
|
RESPONSE_MARIADB *rmdb_insert = NULL; |
|
|
|
|
|
|
|
|
|
channel = ami_get_value( smanager->ami, event->args, "Channel" ); |
|
|
|
@ -326,14 +325,12 @@ int parse_event_newchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
linkedid = ami_get_value( smanager->ami, event->args, "Linkedid" ); |
|
|
|
|
if( !linkedid ){ FAIL( "Fail linkedid - function %s", __func__ ); } |
|
|
|
|
|
|
|
|
|
str_peer = (char *) alloc( 1, strlen_n( channel ) ); |
|
|
|
|
struct s_peer *peer = get_peer( channel_peer_split( channel, str_peer ) ); |
|
|
|
|
if( !peer ){ |
|
|
|
|
FAIL("channel sem peer %s - peer \"%s\" - uniqueid %s", channel, str_peer, uniqueid ); |
|
|
|
|
} |
|
|
|
|
exten_number = split_exten_number_from_channel_name( channel ); |
|
|
|
|
struct s_peer *peer = get_peer( exten_number ); |
|
|
|
|
struct s_list_queue *queue = get_queue_number (exten_number); |
|
|
|
|
|
|
|
|
|
{ /* banco de dados */ |
|
|
|
|
rmdb_insert = insert_channel_db( Insert_channel, peer->callerid_number, channel, channelstate, channelstatedesc, |
|
|
|
|
rmdb_insert = insert_channel_db( Insert_channel, exten_number, channel, channelstate, channelstatedesc, |
|
|
|
|
( strcmp_n( calleridnum, "<unknown>" ) ? calleridnum : NULL ), |
|
|
|
|
( strcmp_n( calleridname, "<unknown>" ) ? calleridname : NULL ), |
|
|
|
|
( strcmp_n( connectedlinenum, "<unknown>" ) ? connectedlinenum : NULL ), |
|
|
|
@ -362,13 +359,14 @@ int parse_event_newchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
newstrncpy( &node_chn->uniqueid, uniqueid ); |
|
|
|
|
newstrncpy( &node_chn->linkedid, linkedid ); |
|
|
|
|
|
|
|
|
|
node_chn->node_up = peer; |
|
|
|
|
node_chn->peer_node_up = peer; |
|
|
|
|
node_chn->queue_node_up = queue; |
|
|
|
|
|
|
|
|
|
// dado para uso do AMID devido a inconsistencias das informações do asterisk/extensions
|
|
|
|
|
// quanto ao registro de numeros de identificação do canal em casos de transferencia
|
|
|
|
|
node_chn->identification_number = ( strcmp_n( calleridnum, "<unknown>" ) ? newstrncpy( &node_chn->identification_number, calleridnum ) : NULL ); |
|
|
|
|
|
|
|
|
|
insert_peer_channel( peer->callerid_number, node_chn ); |
|
|
|
|
insert_channel( exten_number, node_chn ); |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
_ERROR("ERROR create_channel retornou NULL"); |
|
|
|
@ -376,13 +374,13 @@ int parse_event_newchannel(EVENT *event, s_manager *smanager){
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(str_peer) free(str_peer); |
|
|
|
|
if(exten_number) {free(exten_number); } |
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_insert ); |
|
|
|
|
// _LOG("Success New Channel Uniqueid=%s", uniqueid);
|
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
if(str_peer) free(str_peer); |
|
|
|
|
if(exten_number) { free(exten_number); } |
|
|
|
|
|
|
|
|
|
FREE_RESPONSE_MARIADB_CHANNEL( rmdb_insert ); |
|
|
|
|
|
|
|
|
|