summaryrefslogtreecommitdiffstats
path: root/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp')
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp186
1 files changed, 147 insertions, 39 deletions
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
index 25316dff..6f4a4785 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
@@ -1,11 +1,11 @@
-// ********************************************************************************************************
+// *******************************************************************************************************
// Servicio: ogAdmServer
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: Marzo-2010
// Fecha Última modificación: Marzo-2010
// Nombre del fichero: ogAdmServer.cpp
// Descripción :Este fichero implementa el servicio de administración general del sistema
-// ********************************************************************************************************
+// *******************************************************************************************************
#include "ogAdmServer.h"
#include "ogAdmLib.c"
//________________________________________________________________________________________________________
@@ -130,6 +130,7 @@ BOOLEAN gestionaTrama(SOCKET *socket_c)
char modulo[] = "gestionaTrama()";
ptrTrama=recibeTrama(socket_c);
+
if (ptrTrama){
INTROaFINCAD(ptrTrama);
nfn = copiaParametro("nfn",ptrTrama); // Toma dirección/es IP
@@ -424,6 +425,113 @@ BOOLEAN hayHueco(int *idx) {
return (FALSE);
}
// ________________________________________________________________________________________________________
+// Función: InclusionClienteWin
+//
+// Descripción:
+// Esta función incorpora el socket de un nuevo cliente Windows o Linux a la tabla de clientes
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN InclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama)
+ {
+ char modulo[] = "InclusionClienteWinLnx()";
+ int res,idordenador,lon;
+ char nombreordenador[LONFIL];
+
+ res=procesoInclusionClienteWinLnx(socket_c, ptrTrama,&idordenador,nombreordenador);
+
+ // Prepara la trama de respuesta
+
+ initParametros(ptrTrama,0);
+ ptrTrama->tipo=MSG_RESPUESTA;
+ lon = sprintf(ptrTrama->parametros, "nfn=RESPUESTA_InclusionClienteWinLnx\r");
+ lon += sprintf(ptrTrama->parametros + lon, "ido=%d\r", idordenador);
+ lon += sprintf(ptrTrama->parametros + lon, "npc=%s\r", nombreordenador);
+ lon += sprintf(ptrTrama->parametros + lon, "res=%d\r", res);
+
+ if (!mandaTrama(socket_c, ptrTrama)) {
+ errorLog(modulo, 26, FALSE);
+ return (FALSE);
+ }
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: procesoInclusionClienteWinLnx
+//
+// Descripción:
+// Implementa el proceso de inclusión en el sistema del Cliente Windows o Linux
+// Parámetros de entrada:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Parámetros de salida:
+// - ido: Identificador del ordenador
+// - nombreordenador: Nombre del ordenador
+// Devuelve:
+// Código del error producido en caso de ocurrir algún error, 0 si el proceso es correcto
+// ________________________________________________________________________________________________________
+BOOLEAN procesoInclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama,int *idordenador,char* nombreordenador)
+ {
+ char msglog[LONSTD], sqlstr[LONSQL];
+ Database db;
+ Table tbl;
+
+ char *iph;
+ char modulo[] = "procesoInclusionClienteWinLnx()";
+
+ // Toma parámetros
+ iph = copiaParametro("iph",ptrTrama); // Toma ip
+
+ if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexión con la BD
+ errorLog(modulo, 20, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (20);
+ }
+
+ // Recupera los datos del cliente
+ sprintf(sqlstr,
+ "SELECT idordenador,nombreordenador FROM ordenadores "
+ " WHERE ordenadores.ip = '%s'", iph);
+
+ if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (21);
+ }
+
+ if (tbl.ISEOF()) { // Si no existe el cliente
+ errorLog(modulo, 22, FALSE);
+ return (22);
+ }
+
+ if (ndebug == DEBUG_ALTO) {
+ sprintf(msglog, "%s IP:%s", tbMensajes[2], iph);
+ infoDebug(msglog);
+ }
+ if (!tbl.Get("idordenador", *idordenador)) {
+ tbl.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ if (!tbl.Get("nombreordenador", nombreordenador)) {
+ tbl.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ db.Close();
+
+ if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets
+ errorLog(modulo, 25, FALSE);
+ return (25);
+ }
+ return(0);
+}
+// ________________________________________________________________________________________________________
// Función: InclusionCliente
//
// Descripción:
@@ -448,7 +556,7 @@ BOOLEAN InclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
}
}
return (TRUE);
-}
+}
// ________________________________________________________________________________________________________
// Función: procesoInclusionCliente
//
@@ -469,7 +577,7 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
char *iph, *cfg;
char nombreordenador[LONFIL];
int lon, resul, idordenador, idmenu, cache, idproautoexec, idaula, idcentro;
- char modulo[] = "InclusionCliente()";
+ char modulo[] = "procesoInclusionCliente()";
// Toma parámetros
iph = copiaParametro("iph",ptrTrama); // Toma ip
@@ -599,22 +707,25 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
{
char msglog[LONSTD], sqlstr[LONSQL];
int lon, p, c, i, dato, swu, idsoi, idsfi,k;
- char *ptrPar[MAXPAR], *ptrCfg[5], *ptrDual[2], tbPar[LONSTD];
- char *par, *cpt, *sfi, *soi, *tam; // Parametros que definen una partición
+ char *ptrPar[MAXPAR], *ptrCfg[6], *ptrDual[2], tbPar[LONSTD];
+ char *disk, *par, *cpt, *sfi, *soi, *tam; // Parametros que definen una partición
char modulo[] = "actualizaConfiguracion()";
lon = sprintf(tbPar, "(");
p = splitCadena(ptrPar, cfg, '\n');
for (i = 0; i < p; i++) {
c = splitCadena(ptrCfg, ptrPar[i], '\t');
- par = cpt = sfi = soi = tam = NULL;
+ disk = par = cpt = sfi = soi = tam = NULL;
splitCadena(ptrDual, ptrCfg[0], '=');
- par = ptrDual[1]; // Número de partición
+ disk = ptrDual[1]; // Número de disco
splitCadena(ptrDual, ptrCfg[1], '=');
+ par = ptrDual[1]; // Número de partición
+
+ splitCadena(ptrDual, ptrCfg[2], '=');
cpt = ptrDual[1]; // Código de partición
- k=splitCadena(ptrDual, ptrCfg[2], '=');
+ k=splitCadena(ptrDual, ptrCfg[3], '=');
if(k==2){
sfi = ptrDual[1]; // Sistema de ficheros
/* Comprueba existencia del sistema de ficheros instalado */
@@ -623,7 +734,7 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
else
idsfi=0;
- k=splitCadena(ptrDual, ptrCfg[3], '=');
+ k=splitCadena(ptrDual, ptrCfg[4], '=');
if(k==2){ // Sistema operativo detecdtado
soi = ptrDual[1]; // Nombre del S.O. instalado
/* Comprueba existencia del sistema operativo instalado */
@@ -632,16 +743,14 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
else
idsoi=0;
- splitCadena(ptrDual, ptrCfg[4], '=');
+ splitCadena(ptrDual, ptrCfg[5], '=');
tam = ptrDual[1]; // Tamaño de la partición
lon += sprintf(tbPar + lon, "%s,", par);
- sprintf(
- sqlstr,
- "SELECT numpar,codpar,tamano,idsistemafichero,idnombreso"
- " FROM ordenadores_particiones WHERE idordenador=%d AND numpar=%s",
- ido, par);
+ sprintf(sqlstr, "SELECT numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso"
+ " FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
+ ido, disk, par);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -649,12 +758,10 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
return (FALSE);
}
if (tbl.ISEOF()) { // Si no existe el registro
- sprintf(
- sqlstr,
- "INSERT INTO ordenadores_particiones(idordenador,numpar,codpar,tamano,idsistemafichero,idnombreso,idimagen)"
- " VALUES(%d,%s,0x%s,%s,%d,%d,0)", ido, par, cpt, tam,
- idsfi, idsoi);
-
+ sprintf(sqlstr, "INSERT INTO ordenadores_particiones(idordenador,numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso,idimagen)"
+ " VALUES(%d,%s,%s,0x%s,%s,%d,%d,0)",
+ ido, disk, par, cpt, tam, idsfi, idsoi);
+ errorInfo(modulo,sqlstr);
if (!db.Execute(sqlstr, tbl)) { // Error al insertar
db.GetErrorErrStr(msglog);
errorInfo(modulo, msglog);
@@ -699,10 +806,9 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
" idnombreso=%d,"
" idimagen=%d,"
" idperfilsoft=%d"
- " WHERE idordenador=%d AND numpar=%s"\
-, cpt, tam, idsfi,
- idsoi, 0, 0, ido, par);
-
+ " WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
+ cpt, tam, idsfi, idsoi, 0, 0, ido, disk, par);
+ errorInfo(modulo,sqlstr);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -714,10 +820,8 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
}
lon += sprintf(tbPar + lon, "%d)", 0);
// Eliminar particiones almacenadas que ya no existen
- sprintf(
- sqlstr,
- "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND numpar NOT IN %s",
- ido, tbPar);
+ sprintf(sqlstr, "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar NOT IN %s",
+ ido, disk, tbPar);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -995,7 +1099,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
errorInfo(modulo, msglog);
return (FALSE);
}
- sprintf(sqlstr,"SELECT sesion,parametros,length( parametros) as lonprm"\
+ sprintf(sqlstr,"SELECT idaccion,parametros,length( parametros) as lonprm"\
" FROM acciones WHERE idordenador=%s AND estado='%d' ORDER BY idaccion", ido, ACCION_INICIADA);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
@@ -1007,7 +1111,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
db.Close();
return (FALSE); // No hay comandos pendientes
} else { // Busca entre todas las acciones de diversos ambitos
- if (!tbl.Get("sesion", *ids)) { // Toma identificador de la acción
+ if (!tbl.Get("idaccion", *ids)) { // Toma identificador de la acción
tbl.GetErrorErrStr(msglog); // Error al acceder al registro
errorInfo(modulo, msglog);
return (FALSE);
@@ -1044,13 +1148,14 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) {
- char *iph, *tpc;
+ char *iph, *tpc,msglog[LONSTD];
int idx;
char modulo[] = "DisponibilidadComandos()";
- iph = copiaParametro("iph",ptrTrama); // Toma ip
- tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
+ tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
+ iph = copiaParametro("iph",ptrTrama); // Toma ip
+
if (!clienteExistente(iph, &idx)) { // Busca índice del cliente
errorLog(modulo, 47, FALSE);
return (FALSE);
@@ -1093,7 +1198,7 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
return (TRUE);
sprintf(sqlstr,
- "SELECT * FROM acciones WHERE idordenador=%s AND sesion=%s", ido,
+ "SELECT * FROM acciones WHERE idordenador=%s AND idaccion=%s", ido,
ids);
if (!db.Execute(sqlstr, tbl)) { // Error al consultar
errorLog(modulo, 21, FALSE);
@@ -1113,7 +1218,7 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
sprintf(
sqlstr,
"UPDATE acciones SET resultado='%s',estado='%d',fechahorafin='%s',descrinotificacion='%s'"\
- " WHERE idordenador=%s AND sesion=%s",
+ " WHERE idordenador=%s AND idaccion=%s",
res, ACCION_FINALIZADA, fechafin, der, ido, ids);
if (!db.Execute(sqlstr, tbl)) { // Error al actualizar
db.GetErrorErrStr(msglog);
@@ -1138,7 +1243,8 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado) {
+BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado)
+ {
char *iph, *Ipes, *ptrIpes[MAXIMOS_CLIENTES];
int i, idx, lon;
char modulo[] = "enviaComando()";
@@ -2858,7 +2964,6 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
}
return (TRUE); // No existen registros
}
-
// ********************************************************************************************************
// PROGRAMA PRINCIPAL (SERVICIO)
// ********************************************************************************************************
@@ -2904,6 +3009,9 @@ int main(int argc, char *argv[]) {
strcpy(tbfuncionesServer[cf].nf, "InclusionCliente");
tbfuncionesServer[cf++].fptr = &InclusionCliente;
+ strcpy(tbfuncionesServer[cf].nf, "InclusionClienteWinLnx");
+ tbfuncionesServer[cf++].fptr = &InclusionClienteWinLnx;
+
strcpy(tbfuncionesServer[cf].nf, "AutoexecCliente");
tbfuncionesServer[cf++].fptr = &AutoexecCliente;