summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOpenGnSys Support Team <soporte-og@soleta.eu>2019-05-17 16:56:41 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2020-03-04 14:54:21 +0100
commitecff9948e762e42889e35a358fae5131ba443ebc (patch)
tree468961d3bded5ca59af9db00c65860b64c09256a
parent0fbdcf260cbbd2e8a267342eff3b10ea13919319 (diff)
#941 use dbi layer from AutoexecCliente()
-rw-r--r--sources/ogAdmServer.cpp52
-rw-r--r--sources/ogAdmServer.h4
2 files changed, 25 insertions, 31 deletions
diff --git a/sources/ogAdmServer.cpp b/sources/ogAdmServer.cpp
index 46e2211..1c0d4b6 100644
--- a/sources/ogAdmServer.cpp
+++ b/sources/ogAdmServer.cpp
@@ -790,11 +790,11 @@ static bool AutoexecCliente(TRAMA *ptrTrama, struct og_client *cli)
{
int socket_c = og_client_socket(cli);
int lon;
- char *iph, *exe, msglog[LONSTD];
- Database db;
+ char *iph, *exe;
FILE *fileexe;
char fileautoexec[LONPRM];
char parametros[LONGITUD_PARAMETROS];
+ struct og_dbi *dbi;
iph = copiaParametro("iph",ptrTrama); // Toma dirección IP del cliente
exe = copiaParametro("exe",ptrTrama); // Toma identificador del procedimiento inicial
@@ -807,14 +807,14 @@ static bool AutoexecCliente(TRAMA *ptrTrama, struct og_client *cli)
return false;
}
- if (!db.Open(usuario, pasguor, datasource, catalog)) {
- db.GetErrorErrStr(msglog);
- syslog(LOG_ERR, "cannot open connection database (%s:%d) %s\n",
- __func__, __LINE__, msglog);
+ dbi = og_dbi_open(&dbi_config);
+ if (!dbi) {
+ syslog(LOG_ERR, "cannot open connection database (%s:%d)\n",
+ __func__, __LINE__);
return false;
}
initParametros(ptrTrama,0);
- if (recorreProcedimientos(db, parametros, fileexe, exe)) {
+ if (recorreProcedimientos(dbi, parametros, fileexe, exe)) {
lon = sprintf(ptrTrama->parametros, "nfn=RESPUESTA_AutoexecCliente\r");
lon += sprintf(ptrTrama->parametros + lon, "nfl=%s\r", fileautoexec);
lon += sprintf(ptrTrama->parametros + lon, "res=1\r");
@@ -823,7 +823,7 @@ static bool AutoexecCliente(TRAMA *ptrTrama, struct og_client *cli)
lon += sprintf(ptrTrama->parametros + lon, "res=0\r");
}
- db.Close();
+ og_dbi_close(dbi);
fclose(fileexe);
if (!mandaTrama(&socket_c, ptrTrama)) {
@@ -847,46 +847,38 @@ static bool AutoexecCliente(TRAMA *ptrTrama, struct og_client *cli)
// true: Si el proceso es correcto
// false: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-bool recorreProcedimientos(Database db, char *parametros, FILE *fileexe, char *idp)
+bool recorreProcedimientos(struct og_dbi *dbi, char *parametros, FILE *fileexe, char *idp)
{
+ char idprocedimiento[LONPRM];
int procedimientoid, lsize;
- char idprocedimiento[LONPRM], msglog[LONSTD], sqlstr[LONSQL];
- Table tbl;
+ const char *msglog, *param;
+ dbi_result result;
- /* Busca procedimiento */
- sprintf(sqlstr,
+ result = dbi_conn_queryf(dbi->conn,
"SELECT procedimientoid,parametros FROM procedimientos_acciones"
" WHERE idprocedimiento=%s ORDER BY orden", idp);
- // Ejecuta consulta
- if (!db.Execute(sqlstr, tbl)) {
- db.GetErrorErrStr(msglog);
+ if (!result) {
+ dbi_conn_error(dbi->conn, &msglog);
syslog(LOG_ERR, "failed to query database (%s:%d) %s\n",
__func__, __LINE__, msglog);
return false;
}
- while (!tbl.ISEOF()) { // Recorre procedimientos
- if (!tbl.Get("procedimientoid", procedimientoid)) { // Toma dato
- tbl.GetErrorErrStr(msglog); // Error al acceder al registro
- og_info(msglog);
- return false;
- }
+ while (dbi_result_next_row(result)) {
+ procedimientoid = dbi_result_get_uint(result, "procedimientoid");
if (procedimientoid > 0) { // Procedimiento recursivo
sprintf(idprocedimiento, "%d", procedimientoid);
- if (!recorreProcedimientos(db, parametros, fileexe, idprocedimiento)) {
+ if (!recorreProcedimientos(dbi, parametros, fileexe, idprocedimiento)) {
return false;
}
} else {
- if (!tbl.Get("parametros", parametros)) { // Toma dato
- tbl.GetErrorErrStr(msglog); // Error al acceder al registro
- og_info(msglog);
- return false;
- }
- strcat(parametros, "@");
+ param = dbi_result_get_string(result, "parametros");
+ sprintf(parametros, "%s@", param);
lsize = strlen(parametros);
fwrite(parametros, 1, lsize, fileexe); // Escribe el código a ejecutar
}
- tbl.MoveNext();
}
+ dbi_result_free(result);
+
return true;
}
// ________________________________________________________________________________________________________
diff --git a/sources/ogAdmServer.h b/sources/ogAdmServer.h
index 22ffd30..bc3e612 100644
--- a/sources/ogAdmServer.h
+++ b/sources/ogAdmServer.h
@@ -36,13 +36,15 @@ typedef struct{ // Estructura usada para guardar información de los clientes
}SOCKETCL;
SOCKETCL tbsockets[MAXIMOS_CLIENTES];
+struct og_dbi;
+
bool registraCliente(char *);
bool procesoInclusionClienteWinLnx(int socket, TRAMA*,int*,char*);
bool procesoInclusionCliente(struct og_client *, TRAMA*);
bool clienteExistente(char *,int *);
bool clienteDisponible(char *,int *);
bool actualizaConfiguracion(Database , Table ,char* ,int);
-bool recorreProcedimientos(Database ,char* ,FILE*,char*);
+bool recorreProcedimientos(struct og_dbi *,char* ,FILE*,char*);
bool buscaComandos(char *,TRAMA *,int *);
bool respuestaConsola(int socket, TRAMA *,int);
bool enviaComando(TRAMA *ptrTrama,const char*);