|
|
|
@ -24,161 +24,136 @@
|
|
|
|
|
#include <string_functions.h> |
|
|
|
|
#include <stdlib.h> |
|
|
|
|
#include <parse_actions.h> |
|
|
|
|
#include <parse_events.h> |
|
|
|
|
|
|
|
|
|
int parse_event_agents( EVENT *event, s_manager *smanager ){ |
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
* Receberá o evento agents |
|
|
|
|
* \param event estrutura do evento agents |
|
|
|
|
* \param principal estrutura |
|
|
|
|
* \return 1 em caso de sucesso e -1 em caso de falha |
|
|
|
|
*/ |
|
|
|
|
int parse_event_agents( PARAM_EVENT_SMANAGER ){ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Agent - Agent ID of the agent. |
|
|
|
|
* Name - User friendly name of the agent. |
|
|
|
|
* Status - Current status of the agent. |
|
|
|
|
* The valid values are: |
|
|
|
|
* AGENT_LOGGEDOFF - desconectado |
|
|
|
|
* AGENT_IDLE - disponível |
|
|
|
|
* AGENT_ONCALL - em chamada |
|
|
|
|
* |
|
|
|
|
* TalkingToChan - BRIDGEPEER value on agent channel. |
|
|
|
|
* Present if Status value is AGENT_ONCALL. |
|
|
|
|
* CallStarted - Epoche time when the agent started talking with the caller. |
|
|
|
|
* Present if Status value is AGENT_ONCALL. |
|
|
|
|
* LoggedInTime - Epoche time when the agent logged in. |
|
|
|
|
* Present if Status value is AGENT_IDLE or AGENT_ONCALL. |
|
|
|
|
* Channel |
|
|
|
|
* ChannelState - A numeric code for the channel's current state, related to ChannelStateDesc |
|
|
|
|
* ChannelStateDesc |
|
|
|
|
* Down |
|
|
|
|
* Rsrvd |
|
|
|
|
* OffHook |
|
|
|
|
* Dialing |
|
|
|
|
* Ring |
|
|
|
|
* Ringing |
|
|
|
|
* Up |
|
|
|
|
* Busy |
|
|
|
|
* Dialing Offhook |
|
|
|
|
* Pre-ring |
|
|
|
|
* Unknown |
|
|
|
|
* CallerIDNum |
|
|
|
|
* CallerIDName |
|
|
|
|
* ConnectedLineNum |
|
|
|
|
* ConnectedLineName |
|
|
|
|
* Language |
|
|
|
|
* AccountCode |
|
|
|
|
* Context |
|
|
|
|
* Exten |
|
|
|
|
* Priority |
|
|
|
|
* Uniqueid |
|
|
|
|
* Linkedid - Uniqueid of the oldest channel associated with this channel. |
|
|
|
|
* ActionID - ActionID for this transaction. Will be returned. |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Atendimento automático aparecerá logado, porém outros aparecerá logoff |
|
|
|
|
*/ |
|
|
|
|
// Caso o agente esteja desconectado ou em modo manual.
|
|
|
|
|
|
|
|
|
|
// Event: Agents
|
|
|
|
|
// Agent: 1000
|
|
|
|
|
// Name: admin
|
|
|
|
|
// Status: AGENT_LOGGEDOFF
|
|
|
|
|
|
|
|
|
|
// Caso o agente esteja em modo automatico e em espera.
|
|
|
|
|
|
|
|
|
|
// Event: Agents
|
|
|
|
|
// Agent: 1000
|
|
|
|
|
// Name: admin
|
|
|
|
|
// Status: AGENT_IDLE
|
|
|
|
|
// LoggedInTime: 1719496232
|
|
|
|
|
// Channel: SIP/1001-000000c3
|
|
|
|
|
// ChannelState: 6
|
|
|
|
|
// ChannelStateDesc: Up
|
|
|
|
|
// CallerIDNum: 1001
|
|
|
|
|
// CallerIDName: <unknown>
|
|
|
|
|
// ConnectedLineNum: 1000
|
|
|
|
|
// ConnectedLineName: Aguardando
|
|
|
|
|
// Language: en
|
|
|
|
|
// AccountCode:
|
|
|
|
|
// Context: app-login
|
|
|
|
|
// Exten: **62
|
|
|
|
|
// Priority: 8
|
|
|
|
|
// Uniqueid: 1719496230.541
|
|
|
|
|
// Linkedid: 1719496230.541
|
|
|
|
|
|
|
|
|
|
// Caso o agente esteja em modo automatico e em ligação.
|
|
|
|
|
|
|
|
|
|
// Event: Agents
|
|
|
|
|
// Agent: 1000
|
|
|
|
|
// Name: admin
|
|
|
|
|
// Status: AGENT_ONCALL
|
|
|
|
|
// TalkingToChan: Local/1001@app-callcenter-0000003a;2
|
|
|
|
|
// CallStarted: 1719496294
|
|
|
|
|
// LoggedInTime: 1719496232
|
|
|
|
|
// Channel: SIP/1001-000000c3
|
|
|
|
|
// ChannelState: 6
|
|
|
|
|
// ChannelStateDesc: Up
|
|
|
|
|
// CallerIDNum: 1001
|
|
|
|
|
// CallerIDName: <unknown>
|
|
|
|
|
// ConnectedLineNum: 1002
|
|
|
|
|
// ConnectedLineName: 1002
|
|
|
|
|
// Language: en
|
|
|
|
|
// AccountCode:
|
|
|
|
|
// Context: app-login
|
|
|
|
|
// Exten: **62
|
|
|
|
|
// Priority: 8
|
|
|
|
|
// Uniqueid: 1719496230.541
|
|
|
|
|
// Linkedid: 1719496230.541
|
|
|
|
|
|
|
|
|
|
const char *matricula, *name, *status; |
|
|
|
|
unsigned int is_login_auto = 0, is_login_manual = 0; |
|
|
|
|
RESPONSE_MARIADB *rmdb = NULL, *rmdb_update = NULL, *rmdb_insert = NULL; |
|
|
|
|
|
|
|
|
|
matricula = ami_get_value( smanager->ami, event->args, "Agent" ); |
|
|
|
|
if( !matricula ) { goto fail; } |
|
|
|
|
|
|
|
|
|
name = ami_get_value( smanager->ami, event->args, "Name" ); |
|
|
|
|
if( !name ){ goto fail; } |
|
|
|
|
|
|
|
|
|
status = ami_get_value( smanager->ami, event->args, "Status" ); |
|
|
|
|
if( !status ) { goto fail; } |
|
|
|
|
|
|
|
|
|
/* 3 valores
|
|
|
|
|
* AGENT_LOGGEDOFF - login manual ou desconectado |
|
|
|
|
* AGENT_IDLE - login automático |
|
|
|
|
* AGENT_ONCALL - login automático |
|
|
|
|
*/ |
|
|
|
|
// Obtem os valores do evento.
|
|
|
|
|
GET_EVENT_ARGUMENT_VALUE("Agent", matricula); |
|
|
|
|
GET_EVENT_ARGUMENT_VALUE("Name", name); |
|
|
|
|
GET_EVENT_ARGUMENT_VALUE("Status", status); |
|
|
|
|
|
|
|
|
|
// Verifica se é agente automatico ou manual/desconectado.
|
|
|
|
|
is_login_auto = strcmp_n( "AGENT_LOGGEDOFF", status ) ? TRUE : FALSE ; |
|
|
|
|
|
|
|
|
|
is_login_manual = exists_agent_in_queue( matricula ) == 1 ? ( is_login_auto == 0 ? TRUE : FALSE ) : FALSE ; |
|
|
|
|
// Se não for agente automatico, verifica se o agente está em alguma fila. Se estiver, é agente manual.
|
|
|
|
|
is_login_manual = is_agent_in_any_queue( matricula ) == 1 ? ( is_login_auto == 0 ? TRUE : FALSE ) : FALSE ; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ //banco de dados
|
|
|
|
|
rmdb = get_agents_db( Select_agents, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL get_agents_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
TABLE_TYPE_AGENT *table_agent = (struct s_table_agent *)GET_DATA_MARIADB(rmdb); |
|
|
|
|
if (table_agent) { |
|
|
|
|
/* dados na tabela agente */ |
|
|
|
|
|
|
|
|
|
int same_name = (strcmp_n( table_agent->name, name ) == 0
|
|
|
|
|
? TRUE
|
|
|
|
|
: FALSE |
|
|
|
|
); |
|
|
|
|
int same_login_auto = (is_login_auto == table_agent->login_auto
|
|
|
|
|
? TRUE
|
|
|
|
|
: FALSE |
|
|
|
|
); |
|
|
|
|
int same_login_manual = (is_login_manual == table_agent->login_manual
|
|
|
|
|
? TRUE
|
|
|
|
|
: FALSE |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if( !same_name || !same_login_auto || !same_login_manual ){ |
|
|
|
|
|
|
|
|
|
/* atualizar linha de dados da tabela agent */ |
|
|
|
|
rmdb_update = update_agents_db( Update_agents, name, is_login_auto, is_login_manual, NULL, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_update ) ){ /* falha de update dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL update_agents_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
// Procura o agente no banco de dados.
|
|
|
|
|
rmdb = get_agent_db( Select_agent, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb ) ){ // Falha na busca no banco de dados.
|
|
|
|
|
FAIL( "FAIL get_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
TABLE_TYPE_AGENT *table_agent = (struct s_table_agent *)GET_DATA_MARIADB(rmdb); |
|
|
|
|
// Se o agente ja existe no banco de dados, verifica se há diferenças entre as informações do evento e as do banco de dados.
|
|
|
|
|
if (table_agent) { |
|
|
|
|
int same_name = (strcmp_n( table_agent->name, name ) == 0 ? TRUE : FALSE ); |
|
|
|
|
int same_login_auto = (is_login_auto == table_agent->login_auto ? TRUE : FALSE ); |
|
|
|
|
int same_login_manual = (is_login_manual == table_agent->login_manual ? TRUE : FALSE ); |
|
|
|
|
|
|
|
|
|
// Em caso de diferença, atualiza o banco de dados com as informações do evento.
|
|
|
|
|
if( !same_name || !same_login_auto || !same_login_manual ){ |
|
|
|
|
rmdb_update = update_agent_db( Update_agent, name, is_login_auto, is_login_manual, NULL, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_update ) ){ // Falha no update do banco de dados.
|
|
|
|
|
FAIL( "FAIL update_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
// inseri uma linha na tabela
|
|
|
|
|
rmdb_insert = insert_agents_db( Insert_agents, name, matricula, is_login_auto, is_login_manual ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_insert ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL insert_agents_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { // Se o agente não existe no banco de dados, insere o agente .
|
|
|
|
|
rmdb_insert = insert_agent_db( Insert_agent, name, matricula, is_login_auto, is_login_manual ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_insert ) ){ // Falha na inserção do agente no banco de dados.
|
|
|
|
|
FAIL( "FAIL insert_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // camada de persistência (CP)
|
|
|
|
|
struct s_list_agents *agent = get_agents(matricula); |
|
|
|
|
// Procura o agente na frame.
|
|
|
|
|
struct s_list_agent *agent = get_agent(matricula); |
|
|
|
|
|
|
|
|
|
if(agent){ |
|
|
|
|
|
|
|
|
|
if( strcasecmp_n( agent->name, name ) ){ |
|
|
|
|
free( agent->name ); |
|
|
|
|
newstrncpy( &agent->name, name ); |
|
|
|
|
} |
|
|
|
|
if( strcasecmp_n( agent->status, status ) ){ |
|
|
|
|
free( agent->status ); |
|
|
|
|
newstrncpy( &agent->status, status ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
agent->login_manual = is_login_manual; |
|
|
|
|
|
|
|
|
|
agent->login_auto = is_login_auto; |
|
|
|
|
|
|
|
|
|
agent->action_update = TRUE; // esse agente existe no asterisk
|
|
|
|
|
} |
|
|
|
|
else{ // criar um novo agente na persistência que existe no asteriks
|
|
|
|
|
agent = create_agents(); |
|
|
|
|
|
|
|
|
|
newstrncpy( &agent->matricula, matricula ); |
|
|
|
|
// Se o agente ja existe na frame, atualiza se houver diferença.
|
|
|
|
|
if(agent){ |
|
|
|
|
if( strcasecmp_n( agent->name, name ) ){ |
|
|
|
|
free( agent->name ); |
|
|
|
|
newstrncpy( &agent->name, name ); |
|
|
|
|
} |
|
|
|
|
if( strcasecmp_n( agent->status, status ) ){ |
|
|
|
|
free( agent->status ); |
|
|
|
|
newstrncpy( &agent->status, status ); |
|
|
|
|
agent->login_manual = is_login_manual; |
|
|
|
|
agent->login_auto = is_login_auto; |
|
|
|
|
agent->action_update = TRUE; |
|
|
|
|
|
|
|
|
|
insert_agents( agent ); |
|
|
|
|
} |
|
|
|
|
agent->login_manual = is_login_manual; |
|
|
|
|
agent->login_auto = is_login_auto; |
|
|
|
|
agent->action_update = 1; // Marca o agente como existente no asterisk.
|
|
|
|
|
} |
|
|
|
|
else{ // Se o agente não existe na frame, insere um novo agente na frame.
|
|
|
|
|
agent = create_agent(); |
|
|
|
|
|
|
|
|
|
newstrncpy( &agent->matricula, matricula ); |
|
|
|
|
newstrncpy( &agent->name, name ); |
|
|
|
|
newstrncpy( &agent->status, status ); |
|
|
|
|
agent->login_manual = is_login_manual; |
|
|
|
|
agent->login_auto = is_login_auto; |
|
|
|
|
agent->action_update = 1; // Marca o agente como existente no asterisk.
|
|
|
|
|
|
|
|
|
|
insert_agent( agent ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Libera a memoria das respostas das queries feitas ao banco de dados.
|
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_insert ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_update ); |
|
|
|
@ -194,80 +169,58 @@ fail:
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* lida com o eventos agentscomplete. |
|
|
|
|
* esse evento é recebido quando terminou a lista de eventos dos agentes, por isso o nome |
|
|
|
|
* Esse evento é usado para sincronizar agentes com o asterisk |
|
|
|
|
*/ |
|
|
|
|
int parse_event_agentscomplete(EVENT *event, s_manager *smanager){ |
|
|
|
|
|
|
|
|
|
/* agent->action_update = 0 - agente não está definido asterisk *
|
|
|
|
|
* agent->action_update = 1 - agente está definido no asterisk */ |
|
|
|
|
|
|
|
|
|
/* Informar que o comando foi terminado */ |
|
|
|
|
action_complete(AGENTS_OK, smanager); |
|
|
|
|
|
|
|
|
|
// Event: AgentsComplete
|
|
|
|
|
// EventList: Complete
|
|
|
|
|
// ListItems: 5
|
|
|
|
|
|
|
|
|
|
// Não deve acontecer, mas se a eventlist não for "Complete", cria um registro no log.
|
|
|
|
|
if( strcasecmp_n( ami_get_value(smanager->ami, event->args, "Eventlist"), "Complete" ) ) { |
|
|
|
|
return -1; |
|
|
|
|
FAIL ("Evento 'AgentsComplete' não veio com 'EventList: Complete'"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Excluí agentes na camada de persistência que não estão no asterisk
|
|
|
|
|
// Remove da frame agentes marcados para exclusão (action_update == 0).
|
|
|
|
|
agent_update(); |
|
|
|
|
|
|
|
|
|
// Excluí agentes no banco de dados que não estão na camada de persistência
|
|
|
|
|
/* { */ |
|
|
|
|
RESPONSE_MARIADB *rmdb = get_agents_all_db(Select_agents_update); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL get_agents_all_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
struct s_table_agent *table_agent = GET_DATA_MARIADB(rmdb); |
|
|
|
|
|
|
|
|
|
while(table_agent){ |
|
|
|
|
struct s_list_agents *agent = get_agents(table_agent->matricula); |
|
|
|
|
|
|
|
|
|
if(!agent){ |
|
|
|
|
delete_agents_db(Delete_agents, table_agent->matricula); |
|
|
|
|
} else { |
|
|
|
|
// Remove do banco de dados agentes não encontrados na frame.
|
|
|
|
|
RESPONSE_MARIADB *rmdb_get_all_agents = get_all_agents_db(Select_agent_update); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_get_all_agents ) ){ // Falha na busca no banco de dados.
|
|
|
|
|
FAIL( "FAIL get_all_agents_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
struct s_table_agent *table_agent = GET_DATA_MARIADB(rmdb_get_all_agents); |
|
|
|
|
|
|
|
|
|
if(!agent->action_update){ |
|
|
|
|
delete_agents_db(Delete_agents, table_agent->matricula); |
|
|
|
|
} |
|
|
|
|
while(table_agent){ |
|
|
|
|
struct s_list_agent *agent = get_agent(table_agent->matricula); |
|
|
|
|
|
|
|
|
|
/* Na próxima atualização verificará se ainda
|
|
|
|
|
* está no asterisk. Se estiver, o resultado |
|
|
|
|
* da action irá definir 1 */ |
|
|
|
|
agent->action_update = 0; |
|
|
|
|
if(!agent){ |
|
|
|
|
delete_agent_db(Delete_agent, table_agent->matricula); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
table_agent = table_agent->next; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
table_agent = table_agent->next; |
|
|
|
|
} |
|
|
|
|
/* } */ |
|
|
|
|
// Libera a memoria das respostas das queries feitas ao banco de dados.
|
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_get_all_agents ); |
|
|
|
|
|
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb ); |
|
|
|
|
// Fim da action "Agents" e inicio da proxima action da sequencia
|
|
|
|
|
action_complete(AGENTS_OK, smanager); |
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb ); |
|
|
|
|
// Libera a memoria das respostas das queries feitas ao banco de dados.
|
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_get_all_agents ); |
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verificar se essa matricula está conectada em alguma fila |
|
|
|
|
* Não diz qual é a fila, apenas se esse agent está conectado |
|
|
|
|
*/ |
|
|
|
|
int exists_agent_in_queue( const char *matricula ){ |
|
|
|
|
int is_agent_in_any_queue( const char *matricula ){ |
|
|
|
|
|
|
|
|
|
int exist = 0; |
|
|
|
|
RESPONSE_MARIADB *rmdb = NULL; |
|
|
|
|
rmdb = exist_agents_queue_db( Exist_agents_queue, matricula ); |
|
|
|
|
rmdb = is_agent_in_any_queue_db( Exist_agent_in_any_queue, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL get_agents_db - function %s", __func__ ); |
|
|
|
|
FAIL( "FAIL get_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TABLE_TYPE_AGENT *table_agent = (struct s_table_agent *)GET_DATA_MARIADB(rmdb); |
|
|
|
@ -281,16 +234,14 @@ fail:
|
|
|
|
|
return -1; // erro consulta sql
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// atualiza o login do agent e o peer number
|
|
|
|
|
int update_agent_login_and_peer_number( const char *matricula, const char *peer_number, unsigned int log_auto, unsigned int log_manual){ |
|
|
|
|
|
|
|
|
|
RESPONSE_MARIADB *rmdb = NULL, *rmdb_update = NULL; |
|
|
|
|
RESPONSE_MARIADB *rmdb_get_agent = NULL, *rmdb_update_agent = NULL; |
|
|
|
|
|
|
|
|
|
/* camada de persistência */ |
|
|
|
|
struct s_list_agents *agent = get_agents( matricula ); |
|
|
|
|
// Procura o agent na frame e atualiza o peer_number e o status de login.
|
|
|
|
|
struct s_list_agent *agent = get_agent( matricula ); |
|
|
|
|
if( !agent ){ |
|
|
|
|
goto fail; |
|
|
|
|
FAIL("Erro na função %s, agente com matricula %s e numero peer %s não encontrado na frame!", __func__, matricula, peer_number); |
|
|
|
|
} |
|
|
|
|
if (!agent->peer_number) { |
|
|
|
|
newstrncpy(&agent->peer_number, peer_number); |
|
|
|
@ -298,12 +249,12 @@ int update_agent_login_and_peer_number( const char *matricula, const char *peer_
|
|
|
|
|
agent->login_auto = log_auto; |
|
|
|
|
agent->login_manual = log_manual; |
|
|
|
|
|
|
|
|
|
/* banco de dados */ |
|
|
|
|
rmdb = get_agents_db( Select_agents, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL get_agents_db - function %s", __func__ ); |
|
|
|
|
// Procura o agent no banco de dados
|
|
|
|
|
rmdb_get_agent = get_agent_db( Select_agent, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_get_agent ) ){ // Falha na busca no banco de dados.
|
|
|
|
|
FAIL( "FAIL get_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
TABLE_TYPE_AGENT *table_agent = (struct s_table_agent *)GET_DATA_MARIADB(rmdb); |
|
|
|
|
TABLE_TYPE_AGENT *table_agent = (struct s_table_agent *)GET_DATA_MARIADB(rmdb_get_agent); |
|
|
|
|
if (!table_agent) { |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
@ -315,22 +266,18 @@ int update_agent_login_and_peer_number( const char *matricula, const char *peer_
|
|
|
|
|
if( !same_login_auto || !same_login_manual || !same_peer_number){ |
|
|
|
|
|
|
|
|
|
/* atualizar linha de dados da tabela agent */ |
|
|
|
|
rmdb_update = update_agents_db( Update_agents, table_agent->name, agent->login_auto, agent->login_manual, peer_number, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_update ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL update_agents_db - function %s", __func__ ); |
|
|
|
|
rmdb_update_agent = update_agent_db( Update_agent, table_agent->name, agent->login_auto, agent->login_manual, peer_number, matricula ); |
|
|
|
|
if( !GET_SUCCESS_MARIADB( rmdb_update_agent ) ){ /* falha de buscar dados do banco de dados */ |
|
|
|
|
FAIL( "FAIL update_agent_db - function %s", __func__ ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_update ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_update_agent ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_get_agent ); |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_update ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_update_agent ); |
|
|
|
|
FREE_RESPONSE_MARIADB_AGENT( rmdb_get_agent ); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|