diff --git a/sql/ami_mariadb.sql b/sql/ami_mariadb.sql index 3e86c78..ce078a3 100644 --- a/sql/ami_mariadb.sql +++ b/sql/ami_mariadb.sql @@ -140,6 +140,8 @@ CREATE TABLE `channel` ( `peer_id` bigint(20) DEFAULT NULL, `queue_id` bigint(20) DEFAULT NULL, `name` varchar(128) NOT NULL, + `uniqueid` varchar(160) NOT NULL, + `linkedid` varchar(160) NOT NULL, `channel_state` int(11) NOT NULL DEFAULT 0, `channel_state_desc` varchar(16) DEFAULT NULL, `caller_id_num` varchar(64) DEFAULT NULL, @@ -149,8 +151,6 @@ CREATE TABLE `channel` ( `account_code` varchar(32) DEFAULT NULL, `context` varchar(100) DEFAULT NULL, `priority` int(10) unsigned DEFAULT NULL, - `uniqueid` varchar(160) NOT NULL, - `linkedid` varchar(160) NOT NULL, `chn_id_ref` bigint(20) DEFAULT NULL, `follow_ch_id` bigint(20) unsigned DEFAULT NULL, `transfer_from_chn_id` bigint(20) unsigned DEFAULT NULL, diff --git a/sql/queries_for_visual_debugging.sql b/sql/queries_for_visual_debugging.sql index 7f47f89..ef659b4 100644 --- a/sql/queries_for_visual_debugging.sql +++ b/sql/queries_for_visual_debugging.sql @@ -4,18 +4,17 @@ -- Informações das calls SELECT c.call_uniqueid AS call_name, - p.callerid_number AS peer_name, - ch.name AS channel_name, - cm.number, - cm.calling_queue -FROM - call_member cm -LEFT JOIN - `call` c ON cm.call_id = c.id -LEFT JOIN - peer p ON cm.peer_id = p.id -LEFT JOIN - channel ch ON cm.channel_id = ch.id; + c.call_type, + c.init_date, + ch1.name AS caller_channel, + ch2.name AS callee_channel, + p1.callerid_number AS caller_peer, + p2.callerid_number AS callee_peer +FROM `call` AS c +LEFT JOIN channel AS ch1 ON c.caller_channel_id = ch1.id +LEFT JOIN channel AS ch2 ON c.callee_channel_id = ch2.id +LEFT JOIN peer AS p1 ON ch1.peer_id = p1.id +LEFT JOIN peer AS p2 ON ch2.peer_id = p2.id -- Visualizar bridges e pontes SELECT diff --git a/src/frame/bridge_frame.c b/src/frame/bridge_frame.c index d2de4d2..9c1f37a 100644 --- a/src/frame/bridge_frame.c +++ b/src/frame/bridge_frame.c @@ -177,23 +177,23 @@ struct s_list_bridge_member *create_bridge_member(){ return bridge_member; } -int insert_bridge_member( const char *bridge_uniqueid, struct s_list_bridge_member *next ){ +int insert_bridge_member( const char *bridge_uniqueid, struct s_list_bridge_member *bridge_member ){ struct s_list_bridge *bridge = get_bridge( bridge_uniqueid ); if(!bridge){ return -1;} struct s_list_bridge_member **BM = &bridge->bridge_member ; - LAST_NODE( BM, next ); + LAST_NODE( BM, bridge_member ); return 0; } -struct s_list_bridge_member *get_bridge_member( const char *bridge_uniqueid, const char *uniqueid ){ +struct s_list_bridge_member *get_bridge_member( const char *bridge_uniqueid, const char *channel_uniqueid ){ struct s_list_bridge *bridge = get_bridge( bridge_uniqueid ); if(!bridge){ return NULL; } struct s_list_bridge_member **BM = &bridge->bridge_member ; - SEARCH_NODE( BM, uniqueid, uniqueid ); + SEARCH_NODE( BM, uniqueid, channel_uniqueid ); return NULL; } diff --git a/src/frame/bridge_frame.h b/src/frame/bridge_frame.h index 71fb5a3..7823106 100644 --- a/src/frame/bridge_frame.h +++ b/src/frame/bridge_frame.h @@ -98,9 +98,9 @@ int verify_bridge_transfer( const char *bridge_uniqueid ); struct s_list_bridge_member *create_bridge_member(); -int insert_bridge_member( const char *bridge_uniqueid, struct s_list_bridge_member *next ); +int insert_bridge_member( const char *bridge_uniqueid, struct s_list_bridge_member *bridge_member ); -struct s_list_bridge_member *get_bridge_member( const char *bridge_uniqueid, const char *uniqueid ); +struct s_list_bridge_member *get_bridge_member( const char *bridge_uniqueid, const char *channel_uniqueid ); int remove_bridge_member( const char *bridge_uniqueid, const char *uniqueid ); diff --git a/src/parse_events.h b/src/parse_events.h index 54e06a0..3943a68 100644 --- a/src/parse_events.h +++ b/src/parse_events.h @@ -25,7 +25,7 @@ #include #include -/* Obtém o valor do "argumento" em um evento. +/* Obtém o valor de um "argumento" que sempre existirá em um evento. * Requer as estruturas s_manager e EVENT * Deve-se ter um fail: na função * Formato: ("NomeDoArgumentoNoAMI", variavel) */ @@ -33,7 +33,13 @@ value = ami_get_value(smanager->ami, event->args, argument); \ if(!value){ FAIL("Erro na função %s na obtenção do valor do argumento "argument" do evento", __func__);} -/* Obtém o valor inteiro do "argumento" em um evento. +/* Obtém o valor de um "argumento" que nem sempre existirá em um evento. +* Requer as estruturas s_manager e EVENT +* Formato: ("NomeDoArgumentoNoAMI", variavel) */ +#define GET_EVENT_OPTIONAL_ARGUMENT_VALUE(argument, value) \ +value = ami_get_value(smanager->ami, event->args, argument); \ + +/* Obtém o valor de um "argumento" em um evento e o converte para um integer. * Requer as estruturas s_manager e EVENT * Formato: ("NomeDoArgumentoNoAMI", variavel) */ #define GET_EVENT_ARGUMENT_INTEGER_VALUE(argument, value) \