[85179ef] | 1 | //**************************************************************************************************************************************************** |
---|
[34fc87f] | 2 | // Aplicación OpenGNSys |
---|
| 3 | // Autor: José Manuel Alonso. |
---|
| 4 | // Licencia: Open Source |
---|
| 5 | // Fichero: ogAdmServer.cpp |
---|
| 6 | // Descripción: |
---|
[85179ef] | 7 | // Este módulo de la aplicación OpenGNSys implementa las comunicaciones con el Servidor. |
---|
[34fc87f] | 8 | // **************************************************************************************************************************************************** |
---|
| 9 | #include <sys/types.h> |
---|
| 10 | #include <sys/socket.h> |
---|
| 11 | #include <netinet/in.h> |
---|
| 12 | #include <arpa/inet.h> |
---|
| 13 | #include <stdio.h> |
---|
| 14 | #include <stdlib.h> |
---|
| 15 | #include <string.h> |
---|
| 16 | #include <errno.h> |
---|
| 17 | #include <unistd.h> |
---|
| 18 | #include <time.h> |
---|
| 19 | #include <ctype.h> |
---|
| 20 | #include </usr/include/mysql/mysql.h> |
---|
| 21 | #include <pthread.h> |
---|
| 22 | #include "Database.h" |
---|
[9fd5e97] | 23 | #include "ogAdmLib.h" |
---|
[34fc87f] | 24 | |
---|
[9fd5e97] | 25 | #define MAXCMD_PARAMETROS 200 // Máximo número de parámetros de una trama de comandos |
---|
| 26 | #define MAXIMOS_SOCKETS 4000 // Máximo número de conexiones con ordenadores clientes |
---|
| 27 | #define MAXIMOS_SRVRMB 200 // Máximo número de servidores rembo |
---|
| 28 | #define MAXLON_PARAMETROSIPH 3000 // Máxima longitud de un parametro iph |
---|
[34fc87f] | 29 | |
---|
| 30 | |
---|
| 31 | |
---|
[9fd5e97] | 32 | #define MAXHARDWARE 128 // MÁXIMOS ELEMENTOS HARDSWARE A DETECTAR |
---|
| 33 | #define MAXSOFTWARE 2048 // MÁXIMOS ELEMENTOS SOFTWARE A DETECTAR |
---|
| 34 | |
---|
| 35 | |
---|
[34fc87f] | 36 | |
---|
[b0bb14f] | 37 | #define COMILLAS_SIMPES 0x27 |
---|
| 38 | #define DOBLES_COMILLAS 0x22 |
---|
| 39 | #define BARRA_INVERTIDA 0x5c |
---|
| 40 | |
---|
| 41 | #define LITAMBITO_CENTROS "centros" |
---|
| 42 | #define LITAMBITO_GRUPOSAULAS "gruposaulas" |
---|
| 43 | #define LITAMBITO_AULAS "aulas" |
---|
[34fc87f] | 44 | #define LITAMBITO_GRUPOSORDENADORES "gruposordenadores" |
---|
[b0bb14f] | 45 | #define LITAMBITO_ORDENADORES "ordenadores" |
---|
[34fc87f] | 46 | |
---|
[9fd5e97] | 47 | #define ACCION_EXITOSA "1" // Finalizada con éxito |
---|
[b0bb14f] | 48 | #define ACCION_FALLIDA "2" // Finalizada con errores |
---|
[9fd5e97] | 49 | #define ACCION_TERMINADA "3" // Finalizada manualmente con indicación de éxito |
---|
| 50 | #define ACCION_ABORTADA "4" // Finalizada manualmente con indicación de errores |
---|
[34fc87f] | 51 | #define ACCION_SINERRORES "5" // Activa y sin ningn error |
---|
| 52 | #define ACCION_CONERRORES "6" // Activa y con algn error |
---|
| 53 | |
---|
[9fd5e97] | 54 | #define ACCION_DETENIDA "0" // Acción momentanemente parada |
---|
| 55 | #define ACCION_INICIADA "1" // Acción activa |
---|
| 56 | #define ACCION_FINALIZADA "2" // Acción finalizada |
---|
[34fc87f] | 57 | |
---|
| 58 | #define PROCESOS 0x01 |
---|
| 59 | |
---|
[9fd5e97] | 60 | #define EJECUCION_PROCEDIMIENTO 0x0000 // Acción Procedimiento |
---|
| 61 | #define EJECUCION_COMANDO 0x0001 // Acción Comando |
---|
| 62 | #define EJECUCION_TAREA 0x0002 // Acción Tarea |
---|
| 63 | #define EJECUCION_TRABAJO 0x0003 // Acción Trabajo |
---|
[34fc87f] | 64 | |
---|
| 65 | #define EJECUTOR_servidorHIDRA 0x0001 // Ejecutor Servidor hidra |
---|
| 66 | #define EJECUTOR_clienteREMBO 0x0002 // Ejecutor cliente rembo |
---|
| 67 | #define EJECUTOR_servidorREMBO 0x0003 // Ejecutor Servidor rembo |
---|
| 68 | |
---|
| 69 | #define CLIENTE_REMBO "RMB" // Sistema operativo Rembo |
---|
| 70 | #define CLIENTE_OCUPADO "BSY" // Cliente ocupado |
---|
| 71 | #define CLIENTE_APAGADO "OFF" // Cliente apagado |
---|
| 72 | #define CLIENTE_INICIANDO "INI" // Cliente iniciando |
---|
| 73 | |
---|
[9fd5e97] | 74 | #define AUTOINCORPORACION_OFF 0x0000 // Los ordenadores no se pueden dar de alta autmáticamente |
---|
| 75 | #define AUTOINCORPORACION_ONA 0x0001 // Los ordenadores se pueden dar de alta automáticamente si existe el aula |
---|
| 76 | #define AUTOINCORPORACION_ONX 0x0002 // Los ordenadores se pueden dar de alta automáticamente y si no existe el aula la crea |
---|
| 77 | |
---|
| 78 | |
---|
[34fc87f] | 79 | |
---|
| 80 | |
---|
| 81 | |
---|
| 82 | |
---|
| 83 | |
---|
| 84 | |
---|
[9fd5e97] | 85 | |
---|
| 86 | char ecofile[512],msglog[512]; |
---|
[34fc87f] | 87 | FILE *FLog,*Fconfig; |
---|
| 88 | char AulaUp[2]; |
---|
[9fd5e97] | 89 | int aulaup; // Switch para permitir que un ordenador se de de alta automáticamente en un aula existenta |
---|
[34fc87f] | 90 | // Valores: |
---|
[9fd5e97] | 91 | // 0: El ordenador No se da de alta automáticamente en un aula |
---|
[34fc87f] | 92 | // 1: El ordenador se da de alta en un aula si existe |
---|
| 93 | // 2: El ordenador se da de alta en un aula si existe y si no existe la crea para darse de alta |
---|
| 94 | |
---|
| 95 | char IPlocal[20]; // Ip local |
---|
| 96 | char servidorhidra[20]; // IP servidor HIDRA |
---|
| 97 | char Puerto[20]; // Puerto Unicode |
---|
[9fd5e97] | 98 | int puerto; // Puerto |
---|
[34fc87f] | 99 | char usuario[20]; |
---|
| 100 | char pasguor[20]; |
---|
| 101 | char datasource[20]; |
---|
| 102 | char catalog[50]; |
---|
| 103 | |
---|
| 104 | |
---|
[9fd5e97] | 105 | |
---|
| 106 | struct s_socketCLRMB{ // Estructura usada para guardar información de los clientes |
---|
[34fc87f] | 107 | char ip[16]; // IP del cliente |
---|
| 108 | char estado[4]; // Tipo de sistema Operativo del cliente "RMB"=rembo,"W98"=windows98,"W2K"=windows 2000, etc |
---|
| 109 | SOCKET sock; // Socket por el que se comunica |
---|
| 110 | char ipsrvdhcp[16]; // IP del servidor dhcp |
---|
| 111 | char ipsrvrmb[16]; // IP del servidor rembo |
---|
| 112 | }; |
---|
| 113 | struct s_socketCLRMB tbsockets[MAXIMOS_SOCKETS]; |
---|
| 114 | |
---|
[9fd5e97] | 115 | struct s_socketSRVRMB{ // Estructura usada para guardar información de los servidores REMBO |
---|
[34fc87f] | 116 | char ip[16]; // IP del servidor rembo |
---|
| 117 | int puertorepo; |
---|
| 118 | char ipes[MAXLON_PARAMETROSIPH]; // IP de los clientes rembo |
---|
| 119 | int swenv; // Switch de envio |
---|
| 120 | |
---|
| 121 | }; |
---|
| 122 | struct s_socketSRVRMB tbsocketsSRVRMB[MAXIMOS_SRVRMB]; |
---|
| 123 | |
---|
| 124 | static pthread_mutex_t guardia; // Controla acceso exclusivo de hebras |
---|
| 125 | |
---|
| 126 | // Prototipo de funciones |
---|
| 127 | void* GestionaConexion(void*); |
---|
| 128 | void gestiona_comando(SOCKET s,TRAMA trama); |
---|
| 129 | int manda_comando(SOCKET sock,char* parametros); |
---|
| 130 | int manda_trama(SOCKET sock,TRAMA* trama); |
---|
[9fd5e97] | 131 | |
---|
[34fc87f] | 132 | int manda_trama_servidorrembo(char* ,char *,int); |
---|
| 133 | |
---|
| 134 | SOCKET UDPConnect(char *); |
---|
| 135 | int envia_comandos(SOCKET ,TRAMA* , char* ,int); |
---|
| 136 | |
---|
| 137 | |
---|
| 138 | int hay_hueco(int *); |
---|
| 139 | BOOLEAN cliente_existente(char *,int*); |
---|
| 140 | int hay_huecoservidorrembo(int *); |
---|
| 141 | BOOLEAN servidorrembo_existente(char *,int*); |
---|
| 142 | |
---|
| 143 | |
---|
[9fd5e97] | 144 | |
---|
| 145 | |
---|
| 146 | |
---|
[34fc87f] | 147 | char * corte_iph(char *); |
---|
[b0bb14f] | 148 | char * escaparComillas(char*); |
---|
[34fc87f] | 149 | |
---|
| 150 | int respuesta_cortesia(SOCKET ); |
---|
| 151 | int NoComandosPendientes(SOCKET); |
---|
[dad9f34] | 152 | int Coloca_estado(char *,const char *,SOCKET); |
---|
[34fc87f] | 153 | int actualiza_configuracion(Database , Table ,char* ,int,int ,char* ); |
---|
| 154 | int actualiza_hardware(Database , Table ,char* ,char* ,char*); |
---|
[b1f0d31] | 155 | int actualiza_software(Database , Table ,char* ,char*,char*,char* ,char*); |
---|
[536adc4] | 156 | int CuestionPerfilHardware(Database , Table ,int ,char* ,int *,int ,char*); |
---|
[ec01697] | 157 | int CuestionPerfilSoftware(Database, Table ,int ,char* ,int *,int,char *,char*); |
---|
[536adc4] | 158 | |
---|
[34fc87f] | 159 | void TomaParticiones(char*, char* ,int ); |
---|
| 160 | int Toma_menu(Database,Table,char*,int,int); |
---|
| 161 | int RecuperaItem(SOCKET,char *); |
---|
| 162 | int ComandosPendientes(SOCKET ,char *); |
---|
| 163 | int procesaCOMANDOS(SOCKET ,char *); |
---|
| 164 | int DisponibilidadComandos(SOCKET ,char *); |
---|
| 165 | |
---|
[a6b881e] | 166 | int InclusionCliente(SOCKET,char *); |
---|
[34fc87f] | 167 | int inclusion_srvRMB(char *,int); |
---|
| 168 | int inclusion_REPO(SOCKET,char *); |
---|
| 169 | int inclusion_cliWINLNX(SOCKET ,char *); |
---|
| 170 | |
---|
| 171 | int Sondeo(SOCKET ,char *); |
---|
[2f4f9ff] | 172 | int EcoConsola(SOCKET ,char *); |
---|
[90f061f6] | 173 | int enviaEcoConsola(SOCKET ,const char *); |
---|
[34fc87f] | 174 | int Arrancar(char *); |
---|
| 175 | int Actualizar(char *); |
---|
| 176 | int FicheroOperador(char *); |
---|
| 177 | int IconoItem(TRAMA*); |
---|
| 178 | int Conmutar(char *); |
---|
[2f4f9ff] | 179 | int ConsolaRemota(char *); |
---|
[34fc87f] | 180 | int RenovarItems(char *); |
---|
| 181 | |
---|
[9fd5e97] | 182 | |
---|
| 183 | |
---|
[34fc87f] | 184 | |
---|
| 185 | void PurgarTablaSockets(char *); |
---|
| 186 | int borra_entrada(int); |
---|
| 187 | int RESPUESTA_Arrancar(SOCKET ,char *); |
---|
| 188 | int RESPUESTA_Apagar(SOCKET ,char *); |
---|
| 189 | int RESPUESTA_Reiniciar(SOCKET ,char *); |
---|
[b0bb14f] | 190 | int RESPUESTA_IniciarSesion(SOCKET ,char *); |
---|
[34fc87f] | 191 | int RESPUESTA_Actualizar(SOCKET,char *); |
---|
| 192 | int RESPUESTA_ExecShell(SOCKET ,char *); |
---|
| 193 | int RespuestaEstandar(char *,char *,char *,char*,Database, Table); |
---|
| 194 | int RESPUESTA_CrearPerfilSoftware(SOCKET ,char *); |
---|
| 195 | int RESPUESTA_CrearSoftwareIncremental(SOCKET,char *); |
---|
| 196 | int RESPUESTA_RestaurarImagen(SOCKET,char *); |
---|
| 197 | int RESPUESTA_ParticionaryFormatear(SOCKET ,char *); |
---|
| 198 | int RESPUESTA_Configurar(SOCKET ,char *); |
---|
| 199 | int RESPUESTA_TomaConfiguracion(SOCKET ,char *); |
---|
| 200 | int RESPUESTA_TomaHardware(SOCKET ,char *); |
---|
[536adc4] | 201 | int RESPUESTA_TomaSoftware(SOCKET ,char *); |
---|
[34fc87f] | 202 | |
---|
| 203 | int RESPUESTA_inclusionREPO(TRAMA*); |
---|
| 204 | |
---|
[dad9f34] | 205 | int Actualiza_ordenador_imagen(char *,const char *,char *,Database); |
---|
[34fc87f] | 206 | |
---|
| 207 | int busca_comandos(char* ,char*,char *,int *); |
---|
| 208 | int InsertaNotificaciones(int,int,int,char *,Database); |
---|
| 209 | int comprueba_resultados(int ,Database ); |
---|
| 210 | int comprueba_finalizada(int ,char *,Database ); |
---|
| 211 | |
---|
[90f061f6] | 212 | void EnviaServidoresRembo(char*,int); |
---|
[34fc87f] | 213 | void DesmarcaServidoresRembo(void); |
---|
| 214 | void MarcaServidoresRembo(char*,char*); |
---|
| 215 | |
---|
| 216 | int EjecutarItem(SOCKET,char *); |
---|
| 217 | BOOLEAN TomaIPServidorRembo(char*,int*); |
---|
[277d0cd] | 218 | |
---|
[34fc87f] | 219 | void envia_tarea(char* ); |
---|
| 220 | int EjecutarTarea(int ,int ,int ,int , Database,char * ); |
---|
| 221 | int EjecutarTrabajo(int ,Database,char * ); |
---|
| 222 | int cuestion_nuevoordenador(Database,Table ,int*,char *,char *,char *,char *,char*,char*,char*); |
---|
| 223 | int alta_ordenador(Database db,Table tbl,int*,char *,char *,char*,int,int,int); |
---|
| 224 | int Toma_idservidorres(Database ,Table ,char*,char*,int*,int*); |
---|
[90f061f6] | 225 | int tomaIpRepoPort(char *,char *,char *); |
---|
[34fc87f] | 226 | void cambiacarac(char *,char , char ); |
---|
| 227 | int TomaConfiguracion(char* ); |
---|
[9fd5e97] | 228 | |
---|
| 229 | |
---|
[90f061f6] | 230 | unsigned int TomaEnvio(); |
---|
| 231 | int recibeFichero(char *,char *,char *,char *); |
---|