[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" |
---|
| 23 | |
---|
| 24 | #define LONGITUD_PARAMETROS 4000 // Longitud m�ima de la informaci� de la trama (parametros) |
---|
| 25 | #define LONGITUD_TRAMA LONGITUD_PARAMETROS+11 // Longitud m�ima de la trama completa |
---|
| 26 | #define MAXCMD_PARAMETROS 200 // M�imo numero de par�etros de una trama de comandos |
---|
| 27 | #define MAXIMOS_SOCKETS 4000 // M�imo numero de conexiones con ordenadores clientes |
---|
| 28 | #define MAXIMOS_SRVRMB 200 // Maximo numero de servidores rembo |
---|
| 29 | #define MAXLON_PARAMETROSIPH 3000 // M�ima longitud de un parametro iph |
---|
| 30 | |
---|
| 31 | #define MAX_INTERFACE_LIST 20 |
---|
| 32 | #define MAX_NUM_CSADDRS 20 |
---|
| 33 | |
---|
| 34 | #define MAXHARDWARE 30 // mÁXIMOS ELEMENTOS HARDSWARE A DETECTAR |
---|
| 35 | |
---|
| 36 | #define PUERTOMINUSER 40000 |
---|
| 37 | #define PUERTOMAXUSER 60000 |
---|
| 38 | |
---|
| 39 | #define LITAMBITO_CENTROS "centros" |
---|
| 40 | #define LITAMBITO_GRUPOSAULAS "gruposaulas" |
---|
| 41 | #define LITAMBITO_AULAS "aulas" |
---|
| 42 | #define LITAMBITO_GRUPOSORDENADORES "gruposordenadores" |
---|
| 43 | #define LITAMBITO_ORDENADORES "ordenadores" |
---|
| 44 | |
---|
| 45 | #define ACCION_EXITOSA "1" // Finalizada con exito |
---|
| 46 | #define ACCION_FALLIDA "2" // Finalizada con errores |
---|
| 47 | #define ACCION_TERMINADA "3" // Finalizada manualmente con indicacion de exito |
---|
| 48 | #define ACCION_ABORTADA "4" // Finalizada manualmente con indicacion de errores |
---|
| 49 | #define ACCION_SINERRORES "5" // Activa y sin ningn error |
---|
| 50 | #define ACCION_CONERRORES "6" // Activa y con algn error |
---|
| 51 | |
---|
| 52 | #define ACCION_DETENIDA "0" // Acci� momentanemente parada |
---|
| 53 | #define ACCION_INICIADA "1" // Acci� activa |
---|
| 54 | #define ACCION_FINALIZADA "2" // Accion finalizada |
---|
| 55 | |
---|
| 56 | #define PROCESOS 0x01 |
---|
| 57 | |
---|
| 58 | #define EJECUCION_PROCEDIMIENTO 0x0000 // Accion Procedimiento |
---|
| 59 | #define EJECUCION_COMANDO 0x0001 // Accion Comando |
---|
| 60 | #define EJECUCION_TAREA 0x0002 // Accion Tarea |
---|
| 61 | #define EJECUCION_TRABAJO 0x0003 // Accion Trabajo |
---|
| 62 | |
---|
| 63 | #define EJECUTOR_servidorHIDRA 0x0001 // Ejecutor Servidor hidra |
---|
| 64 | #define EJECUTOR_clienteREMBO 0x0002 // Ejecutor cliente rembo |
---|
| 65 | #define EJECUTOR_servidorREMBO 0x0003 // Ejecutor Servidor rembo |
---|
| 66 | |
---|
| 67 | #define CLIENTE_REMBO "RMB" // Sistema operativo Rembo |
---|
| 68 | #define CLIENTE_OCUPADO "BSY" // Cliente ocupado |
---|
| 69 | #define CLIENTE_APAGADO "OFF" // Cliente apagado |
---|
| 70 | #define CLIENTE_INICIANDO "INI" // Cliente iniciando |
---|
| 71 | |
---|
| 72 | #define AUTOINCORPORACION_OFF 0x0000 // Los ordenadores no se pueden dar de alta autm�icamente |
---|
| 73 | #define AUTOINCORPORACION_ONA 0x0001 // Los ordenadores se pueden dar de alta autom�icamente si existe el aula |
---|
| 74 | #define AUTOINCORPORACION_ONX 0x0002 // Los ordenadores se pueden dar de alta autom�icamente y si no existe el aula la crea |
---|
| 75 | |
---|
| 76 | #define MAX_NUM_CSADDRS 20 |
---|
| 77 | #define MAX_INTERFACE_LIST 20 |
---|
| 78 | |
---|
| 79 | #define TRUE 1 |
---|
| 80 | #define FALSE 0 |
---|
| 81 | |
---|
| 82 | #define true 1 |
---|
| 83 | #define false 0 |
---|
| 84 | |
---|
| 85 | #define SOCKET_ERROR (-1) |
---|
| 86 | #define INVALID_SOCKET (SOCKET)(~0) |
---|
| 87 | |
---|
| 88 | // __________________________________________________________________________________________________________ |
---|
| 89 | typedef unsigned long DWORD; |
---|
| 90 | typedef unsigned short WORD; |
---|
| 91 | typedef int BOOLEAN; |
---|
| 92 | typedef char BYTE; |
---|
| 93 | typedef int SOCKET; |
---|
| 94 | // __________________________________________________________________________________________________________ |
---|
| 95 | |
---|
[ae04987] | 96 | char szPathFileLog[128],szPathFileCfg[128],msglog[250]; |
---|
[34fc87f] | 97 | FILE *FLog,*Fconfig; |
---|
| 98 | char AulaUp[2]; |
---|
| 99 | int aulaup; // Switch para permitir que un ordenador se de de alta autom�icamente en un aula existenta |
---|
| 100 | // Valores: |
---|
| 101 | // 0: El ordenador No se da de alta autom�icamente en un aula |
---|
| 102 | // 1: El ordenador se da de alta en un aula si existe |
---|
| 103 | // 2: El ordenador se da de alta en un aula si existe y si no existe la crea para darse de alta |
---|
| 104 | |
---|
| 105 | char IPlocal[20]; // Ip local |
---|
| 106 | char servidorhidra[20]; // IP servidor HIDRA |
---|
| 107 | char Puerto[20]; // Puerto Unicode |
---|
| 108 | int puerto; // Puerto |
---|
| 109 | char usuario[20]; |
---|
| 110 | char pasguor[20]; |
---|
| 111 | char datasource[20]; |
---|
| 112 | char catalog[50]; |
---|
| 113 | |
---|
| 114 | typedef struct{ // Estructura de la trama recibida |
---|
| 115 | char arroba; // Caracter arroba siempre |
---|
| 116 | char identificador[9]; // Identificador de la trama, siempre JMMLCAMDJ: |
---|
| 117 | char ejecutor; // Identificador del encargado de ejecutar la funci� ( 1= Servidor 2=Cliente rembo: |
---|
| 118 | char parametros[LONGITUD_PARAMETROS]; // Contenido de la trama (par�etros) |
---|
| 119 | }TRAMA; |
---|
| 120 | |
---|
| 121 | struct s_socketCLRMB{ // Estructura usada para guardar informaci� de los clientes |
---|
| 122 | char ip[16]; // IP del cliente |
---|
| 123 | char estado[4]; // Tipo de sistema Operativo del cliente "RMB"=rembo,"W98"=windows98,"W2K"=windows 2000, etc |
---|
| 124 | SOCKET sock; // Socket por el que se comunica |
---|
| 125 | char ipsrvdhcp[16]; // IP del servidor dhcp |
---|
| 126 | char ipsrvrmb[16]; // IP del servidor rembo |
---|
| 127 | }; |
---|
| 128 | struct s_socketCLRMB tbsockets[MAXIMOS_SOCKETS]; |
---|
| 129 | |
---|
| 130 | struct s_socketSRVRMB{ // Estructura usada para guardar informaci� de los servidores REMBO |
---|
| 131 | char ip[16]; // IP del servidor rembo |
---|
| 132 | int puertorepo; |
---|
| 133 | char ipes[MAXLON_PARAMETROSIPH]; // IP de los clientes rembo |
---|
| 134 | int swenv; // Switch de envio |
---|
| 135 | |
---|
| 136 | }; |
---|
| 137 | struct s_socketSRVRMB tbsocketsSRVRMB[MAXIMOS_SRVRMB]; |
---|
| 138 | |
---|
| 139 | static pthread_mutex_t guardia; // Controla acceso exclusivo de hebras |
---|
| 140 | |
---|
| 141 | // Prototipo de funciones |
---|
| 142 | void* GestionaConexion(void*); |
---|
| 143 | void gestiona_comando(SOCKET s,TRAMA trama); |
---|
| 144 | int manda_comando(SOCKET sock,char* parametros); |
---|
| 145 | int manda_trama(SOCKET sock,TRAMA* trama); |
---|
| 146 | int recibe_trama(SOCKET sock,TRAMA* trama); |
---|
| 147 | int manda_trama_servidorrembo(char* ,char *,int); |
---|
| 148 | |
---|
| 149 | SOCKET UDPConnect(char *); |
---|
| 150 | int envia_comandos(SOCKET ,TRAMA* , char* ,int); |
---|
| 151 | |
---|
| 152 | |
---|
| 153 | int hay_hueco(int *); |
---|
| 154 | BOOLEAN cliente_existente(char *,int*); |
---|
| 155 | int hay_huecoservidorrembo(int *); |
---|
| 156 | BOOLEAN servidorrembo_existente(char *,int*); |
---|
| 157 | BOOLEAN IgualIP(char*,char*); |
---|
| 158 | |
---|
| 159 | void INTROaFINCAD(char* ); |
---|
| 160 | void FINCADaINTRO(char*,char*); |
---|
| 161 | |
---|
| 162 | int cuenta_ipes(char*); |
---|
[277d0cd] | 163 | char * toma_parametro(const char*,char *); |
---|
[34fc87f] | 164 | char * corte_iph(char *); |
---|
| 165 | |
---|
| 166 | int respuesta_cortesia(SOCKET ); |
---|
| 167 | int NoComandosPendientes(SOCKET); |
---|
[dad9f34] | 168 | int Coloca_estado(char *,const char *,SOCKET); |
---|
[34fc87f] | 169 | int actualiza_configuracion(Database , Table ,char* ,int,int ,char* ); |
---|
| 170 | int actualiza_hardware(Database , Table ,char* ,char* ,char*); |
---|
| 171 | int CuestrionPerfilHardware(Database , Table ,int ,char* ,int *,int ,char*); |
---|
| 172 | void TomaParticiones(char*, char* ,int ); |
---|
| 173 | int Toma_menu(Database,Table,char*,int,int); |
---|
| 174 | int RecuperaItem(SOCKET,char *); |
---|
| 175 | int ComandosPendientes(SOCKET ,char *); |
---|
| 176 | int procesaCOMANDOS(SOCKET ,char *); |
---|
| 177 | int DisponibilidadComandos(SOCKET ,char *); |
---|
| 178 | |
---|
| 179 | int InclusionClienteHIDRA(SOCKET,char *); |
---|
| 180 | int inclusion_srvRMB(char *,int); |
---|
| 181 | int inclusion_REPO(SOCKET,char *); |
---|
| 182 | int inclusion_cliWINLNX(SOCKET ,char *); |
---|
| 183 | |
---|
| 184 | int Sondeo(SOCKET ,char *); |
---|
| 185 | int Arrancar(char *); |
---|
| 186 | int Actualizar(char *); |
---|
| 187 | int FicheroOperador(char *); |
---|
| 188 | int IconoItem(TRAMA*); |
---|
| 189 | int Conmutar(char *); |
---|
| 190 | int RenovarItems(char *); |
---|
| 191 | |
---|
| 192 | SOCKET AbreConexion(char *,int); |
---|
[277d0cd] | 193 | void RegistraLog(const char *,int); |
---|
[34fc87f] | 194 | |
---|
| 195 | void PurgarTablaSockets(char *); |
---|
| 196 | int borra_entrada(int); |
---|
| 197 | int RESPUESTA_Arrancar(SOCKET ,char *); |
---|
| 198 | int RESPUESTA_Apagar(SOCKET ,char *); |
---|
| 199 | int RESPUESTA_RemboOffline(SOCKET ,char *); |
---|
| 200 | int RESPUESTA_Reiniciar(SOCKET ,char *); |
---|
| 201 | int RESPUESTA_Actualizar(SOCKET,char *); |
---|
| 202 | int RESPUESTA_ExecShell(SOCKET ,char *); |
---|
| 203 | int RespuestaEstandar(char *,char *,char *,char*,Database, Table); |
---|
| 204 | int RESPUESTA_CrearPerfilSoftware(SOCKET ,char *); |
---|
| 205 | int RESPUESTA_CrearSoftwareIncremental(SOCKET,char *); |
---|
| 206 | int RESPUESTA_RestaurarImagen(SOCKET,char *); |
---|
| 207 | int RESPUESTA_ParticionaryFormatear(SOCKET ,char *); |
---|
| 208 | int RESPUESTA_Configurar(SOCKET ,char *); |
---|
| 209 | int RESPUESTA_TomaConfiguracion(SOCKET ,char *); |
---|
| 210 | int RESPUESTA_TomaHardware(SOCKET ,char *); |
---|
| 211 | |
---|
| 212 | int RESPUESTA_inclusionREPO(TRAMA*); |
---|
| 213 | |
---|
[dad9f34] | 214 | int Actualiza_ordenador_imagen(char *,const char *,char *,Database); |
---|
[34fc87f] | 215 | |
---|
| 216 | int busca_comandos(char* ,char*,char *,int *); |
---|
| 217 | int InsertaNotificaciones(int,int,int,char *,Database); |
---|
| 218 | int comprueba_resultados(int ,Database ); |
---|
| 219 | int comprueba_finalizada(int ,char *,Database ); |
---|
| 220 | |
---|
| 221 | void EnviaServidoresRembo(char*); |
---|
| 222 | void DesmarcaServidoresRembo(void); |
---|
| 223 | void MarcaServidoresRembo(char*,char*); |
---|
| 224 | |
---|
| 225 | int EjecutarItem(SOCKET,char *); |
---|
| 226 | BOOLEAN TomaIPServidorRembo(char*,int*); |
---|
[277d0cd] | 227 | |
---|
[34fc87f] | 228 | void envia_tarea(char* ); |
---|
| 229 | int EjecutarTarea(int ,int ,int ,int , Database,char * ); |
---|
| 230 | int EjecutarTrabajo(int ,Database,char * ); |
---|
| 231 | int cuestion_nuevoordenador(Database,Table ,int*,char *,char *,char *,char *,char*,char*,char*); |
---|
| 232 | int alta_ordenador(Database db,Table tbl,int*,char *,char *,char*,int,int,int); |
---|
| 233 | int Toma_idservidorres(Database ,Table ,char*,char*,int*,int*); |
---|
| 234 | |
---|
| 235 | void cambiacarac(char *,char , char ); |
---|
| 236 | int TomaConfiguracion(char* ); |
---|
[277d0cd] | 237 | int split_parametros(char **,char *, char *); |
---|
[34fc87f] | 238 | struct tm * TomaHora(); |
---|