diff options
Diffstat (limited to 'admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp')
-rw-r--r-- | admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp | 186 |
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; |