source: admin/Services/ogAdmClient/sources/ogAdmClient.h @ 74c04a0

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since 74c04a0 was c3e2eb6a, checked in by alonso <alonso@…>, 15 years ago

git-svn-id: https://opengnsys.es/svn/trunk@1024 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 10.5 KB
RevLine 
[85179ef]1//****************************************************************************************************************************************************
2//      Aplicación OpenGNSys
3//      Autor: José Manuel Alonso.
4//      Licencia: Open Source
[9182fd9]5//      Fichero: ogAdmClient.cpp
[85179ef]6//      Descripción:
7//              Este módulo de la aplicación OpenGNSys implementa las comunicaciones con el Cliente.
8// ****************************************************************************************************************************************************
[c77c7d2]9#include <sys/types.h>
10#include <sys/wait.h>
11#include <arpa/inet.h>
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <errno.h>
16#include <unistd.h>
17#include <ctype.h>
18#include <time.h>
[b0bb14f]19#include <signal.h>
[4e60c64]20#include "ogAdmLib.h"
21
[c77c7d2]22
[b0bb14f]23#define LONGITUD_SCRIPTSALIDA 4064      // Longitud máxima de la informacin devuelta por un script
[4e60c64]24#define LONGITUD_PARAMETROS_TRAMA 4024  // Longitud máxima de la información de la trama (parametros)
25
26#define LONGITUD_CONFIGURACION 1024     // Longitud máxima de las configuraciones de partición
27
28
[c77c7d2]29#define MAXITEMS 100
30#define MAXHTMLMNU 4000
31#define MAXPARTICIONES 24
[4e60c64]32#define MAXINFOSO 5 // Numero máximo de nemónicos enla inforamción del S.O. de una partición
[c77c7d2]33#define MAXARGS 16 // Numero máximo de argumentos enviados a un scripts
34#define LONSTD 512 // Longitud de memoria estandar
35#define LONSTDC 256 // Longitud de memoria estandar corta
36
37
38
39TRAMA trama[1];
40
41char IPlocal[20];               // Ip local
[a6b881e]42char Servidorhidra[20]; // IP servidor de Administración
[c77c7d2]43char Puerto[20];                // Puerto Unicode
44
[4e60c64]45
[c77c7d2]46
47//___________________________________________________________________________________________________
48// Variables y estructuras
49//___________________________________________________________________________________________________
50
51char cmdshell[LONSTD];
52char parametros[LONSTD];
53char* argumentos[MAXARGS];
54char msglog[LONSTD];
55char msgcon[LONSTD];
56char filecmdshell[LONSTDC];
[b0bb14f]57char urlpag[LONSTDC];
[c77c7d2]58char fileini[LONSTDC];
59char filecmd[LONSTDC];
60
61struct excepcion {
62        int herror;
63        char msg[LONSTDC];
64        char modulo[LONSTDC];   
65};
66struct excepcion e;
67
68int ndebug=1; // Nivel de debuger por defecto
69
70// Nemónicos
71int MsDos=1;
72int Win98=2;
73int Win2K=3;
74int WinXP=4;
75int Linux=5;
76               
[4e60c64]77BOOLEAN PROCESO=true;                   // Indicador de la actividad del proceso principal
78BOOLEAN CACHEEXISTS;                    // Indica si existe cache
[c77c7d2]79
80char HIDRACHEIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en la caché)
[a6b881e]81char HIDRASRVIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en el repositorio)
82char HIDRASRVCMD[LONSTDC];      // Path del directorio del repositorio donde se depositan los comandos para el cliente
83char HIDRASCRIPTS[LONSTDC];     // Path al directorio donde están los scripts de la interface con la APi de funciones de OpenGnsys (en el cliente )
[b0bb14f]84char URLMENU[LONSTDC]; // Url de la pagina de menu para el browser
85char URLMSG[LONSTDC]; // Url de la página de mensajed para el browser
86
[c77c7d2]87
[a6b881e]88int HIDRAVER;   // Versión de la apliación de Administración
[4e60c64]89int TPAR ;      // Tamaño de la partición
[c77c7d2]90       
91SOCKET sock;    // Socket
92
93struct s_CabMnu {
[4e60c64]94        char resolucion[2];                      // Resolución de pantalla
95        char titulo[LONSTDC];                                           // Título del menú
[c77c7d2]96        char coorx[4];                                  // Coordenada x
97        char coory[4];                                  // Coordenada y
[4e60c64]98        char modalidad[2];              // modalidad ( número de items por línea )
99        char scoorx[4];                         // Coordenada x // Menú privado
[c77c7d2]100        char scoory[4];                         // Coordenada y
[4e60c64]101        char smodalidad[LONSTDC];               // modalidad ( número de items por línea )
102        char htmmenupub[64];    // Nombre del fichero que contiene el html del menú (público)
103        char htmmenupri[64];            // Nombre del fichero que contiene el html del menú (privado)
[c77c7d2]104} CabMnu;  // Estructura con los datos de los menús
105       
[4e60c64]106BOOLEAN swmnu=false; // Indicador de menú asignado
[c77c7d2]107       
108struct s_Item{
109        char idaccionmenu[16];  // Identificador del item a ejecutar
[4e60c64]110        char urlimg[64];        // Nombre de la imagen de fondo del botón
[c77c7d2]111        char literal[LONSTDC];  // Literal del item
[4e60c64]112        char tipoitem[2];       // Tipo de item ( público o privado)
113        char tipoaccion[2];     // Tipo de acción que ejecuta el item
[c77c7d2]114} ;
115       
116struct s_Propiedades {
[c3e2eb6a]117        char idordenador[16]; // Identificador del ordenador
118        char nombreordenador[64]; // Nombre del ordenador
119        char idaula[16]; // Identificador del aula
120        char servidorhidra[16]; // IP  del servidor Opengnsys
121        char puerto[16]; // Puerto
122        char iprepo[16]; // Dirección IP repositorio
123        char puertorepo[16]; // Puerto
124        char idperfilhard[16]; // Identificador del perfil hardware
125        char IPlocal[16]; // Dirección IP del cliente
126        char cache[16]; // Tamaño de la cache
127        char ipmulticast[16]; // Dirección IP multicast
128        char pormulticast[16]; // Puerto multicast
129        char modmulticast[16]; // Modo de transmisión multicast
130        char velmulticast[16]; // Velocidad de transmisión multicast
131
[c77c7d2]132} Propiedades;    // Estructura con los datos del odenador
133       
134struct s_Particiones{
135        char tiposo[64];                                // Tipo de sistema operativo
[4e60c64]136        char tipopart[16];                      // Tipo de partición
137        char tamapart[16];              // Tamao de la partición
138        char numpart[5];                // Nmero de la partición
[c77c7d2]139        char nombreso[64];    // Nombre del S.O.
140};
141       
142struct s_Hardware{
143        char nemonico[4];                               // Tipo de sistema operativo
144        char tipo[45];                  // Tipo de hardware
[4e60c64]145        char codigovalor[256];                  // Código o descripción
[c77c7d2]146}
147;       
148struct tiposo {
149  char *tipopart;
150  char *tiposo;
151  char *nombreso; 
152};     
[90f061f6]153
154char* tbPathImg[]={"CLIEN","CACHE","REPO"};
[c3e2eb6a]155char* tbmodmul[]={"","half-duplex","full-duplex"};
[90f061f6]156
[c77c7d2]157struct tiposo tiposos[] = {
158                {"BIGDOS", "MsDos","MsDos"},
159                {"NTFS","Windows NT Platafom","Windows 2000,XP,2003"},
160                {"FAT32","Windows","Windos 98,SE,Millenium"},                   
161                {"EXT","Extendida","Extendida"},
162                {"EXT3","Linux","Linux"},
163                {"EXT2","Linux","Linux"},       
164                {"VFAT","VFAT","VFAT"},
165                {"CACHE","CACHE","CACHE"},                     
166                {"UNKNOWN","UNKNOWN","UNKNOWN"},                       
167                {"EMPTY","Libre","Libre"},
168                {"LINUX-SWAP","","Linux-swap"}};
169               
170int ntiposo = sizeof (tiposos) / sizeof (struct tiposo);
171
172struct s_Item tbMenu[MAXITEMS];                 // Tabla con los items del menu
173int contitems;                  // Contador items del menu
174       
[4e60c64]175BOOLEAN PRCCMD;         // Indicador de comandos interactivos
176BOOLEAN CMDPTES;        // Indicador de comandos pendientes
[c77c7d2]177       
[4e60c64]178//char modulo[64];      // Nombre de la función donde se produce el error
[c77c7d2]179
[4e60c64]180BOOLEAN aut = false; // Variable para controlar el acceso al menú de administración
[c77c7d2]181
[b0bb14f]182pid_t  pidmenu;
[c77c7d2]183
184char* tbErrores[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
185                "001-No hay memoria suficiente para el buffer",\
[a6b881e]186                "002-No se puede establecer conexión con el servidor de administración",\
[c77c7d2]187                "003-El fichero especificado no existe o bien no puede crearse o abrirse",\
188                "004-Comando Error",\
189                "005-El fichero est vacio",\
190                "006-Error en la ejecución del fichero autoexec",\
191                "007-Error en la recuperacion del Menu principal",\
192                "008-No hay espacio reservado para la cache en este disco",\
193                "009-Ha ocurrido algún error generando el perfil software",\
194                "010-IPlocal, NO se ha definido este parámetro",\
195                "011-IPhidra, NO se ha definido este parámetro",\
196                "012-Puerto, NO se ha definido este parámetro",\
197                "013-NO existe fichero de configuración o contiene un error de sintaxis",\
198                "014-Fallo de sintaxis en los parámetros: Debe especificar -f nombre_del_fichero_de_configuración",\
199                "015-No se ha podido crear socket para comunicación con el repositorio",\
200                "016-No se ha podido comunicar con el repositorio",\
201                "017-No existe Menu principal",\
202                "018-No se ha podido recuperar la configuración hardware del ordenador",\
[a6b881e]203                "019-El cliente no se ha podido incluir en el sistema por un fallo en la conexión con el Servidor de Administración",\
[c77c7d2]204                "020-No se ha podido crear la carpeta en el repositorio",\
[a6b881e]205                "021-Error en el envío de tramas al Servidor de Administración",\
206                "022-Error en la recepción de tramas desde el Servidor de Administración",\
[af74007]207                "023-Error al crear Proceso Hijo para  mostrar Menú",\
208                "024-Error desconocido",\
[c77c7d2]209                };             
[af74007]210                #define MAXERROR 24             // Error máximo cometido
[a6b881e]211
212char* tbErroresScripts[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
213                "001-Formato de ejecución incorrecto.",\
214                "002-Fichero o dispositivo no encontrado",\
215                "003-Error en partición de disco",\
216                "004- Partición o fichero bloqueado",\
217                "005-Error al crear o restaurar una imagen",\
218                "006-Sin sistema operativo",\
[b0bb14f]219                "007-Programa o función no ejecutable",\
220                "008-Error en la eliminación del archivo temporal de intercambio",\
221                "009-Error en la lectura del archivo temporal de intercambio",\
222                "010-Error al ejecutar código de la shell",\
223                "011-Error desconocido",       
[a6b881e]224                };             
[b0bb14f]225        #define MAXERRORSCRIPT 11               // Error máximo cometido
[c77c7d2]226
227// Prototipos de funciones
228char* Desencriptar(char *);
229char* Encriptar(char *);
230int ValidacionParametros(int,char**);
231int CrearArchivoLog(char*);
232int LeeFileConfiguracion();
233void Log(char*);
234void UltimoError(int,char*);
[a6b881e]235void UltimoErrorScript(int,char*);
236
[c77c7d2]237int EjecutarScript (char*,char* ,char*,int);
238char* ReservaMemoria(int);
[4e60c64]239int EjecutarCodigo (char*,char* ,char*,int);
[c77c7d2]240
241SOCKET TCPConnect(char *,char* );
242void TCPClose(SOCKET);
243int AbreConexionTCP(void);
244void CierraConexionTCP(void);
245int EnviaTramasHidra(SOCKET,TRAMA*);
[4e60c64]246
[c77c7d2]247int TCPWrite(SOCKET ,TRAMA*);
[4e60c64]248
[c77c7d2]249SOCKET UDPConnect();
250int EnviaTramaRepo(SOCKET,TRAMA*,char*,char*);
[90f061f6]251int RecibeTramaRepo(SOCKET,int);
[c77c7d2]252
253long CreateTextFile(char*,char*);
254int ExisteFichero(char*);
255int RemoveFile(char *);
256int LoadTextFile(char *);
257
258int ProcesaComandos();
259int DisponibilidadComandos(int);
260int GestionTramas(TRAMA *);
261
262int Cortesia();
263int NoComandosPtes();
264int TomaIPlocal();
[a6b881e]265int InclusionCliente();
266int RESPUESTA_InclusionCliente(TRAMA*);
[c77c7d2]267int ComandosPendientes(void);
268int Arrancar(TRAMA *,TRAMA *);
269int Apagar(TRAMA*,TRAMA*);
270int Reiniciar(TRAMA*,TRAMA*);
[b0bb14f]271int IniciarSesion(TRAMA*,TRAMA*);
[c77c7d2]272int Actualizar();
273int CrearPerfilSoftware(TRAMA*,TRAMA*);
274int CrearPerfil(char*,char*,char*,char*,char*);
275int Nemonico(char*);
276int RestaurarImagen(TRAMA*,TRAMA*);
[c3e2eb6a]277int RestaurandoImagen(char* ,char *,char* ,char *,char *,char *,char *);
[90f061f6]278
[c77c7d2]279int ParticionaryFormatear(TRAMA*,TRAMA*);
280int Particionar(char*,char*,char* );
281int Particionando(char*,char*,char*);
282int Formatear(char*,char*);
283int SetCachePartitionSize(int);
284int AutoexecClienteHidra(void);
285char* LeeConfiguracion(char*);
286char* TomaNomSO(char*,int);
287int InventarioHardware(TRAMA *,TRAMA *);
[5eae07e]288int InventarioSoftware(TRAMA *,TRAMA *);
[c77c7d2]289int TomaConfiguracion(TRAMA *,TRAMA *);
290int RespuestaEjecucionComando(TRAMA* , TRAMA *, int);
291int ExecShell(TRAMA *,TRAMA *);
[2f4f9ff]292int ConsolaRemota(TRAMA *,TRAMA *);
[b0bb14f]293int ExecBash(char*);
[c77c7d2]294char* URLDecode(char*);
[da3981e]295char* URLEncode(char *);
[b0bb14f]296int MuestraMenu(char*);
[da3981e]297void MuestraMensaje(int,char*);
[90f061f6]298int cuestionCache(char*);
[c3e2eb6a]299int sesionMulticast(char *,char *,char *);
Note: See TracBrowser for help on using the repository browser.