source: admin/Services/ogAdmClient/sources/ogAdmClient.h @ af6c52a

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 af6c52a was d08ec1cc, checked in by alonso <alonso@…>, 16 years ago

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

  • Property mode set to 100644
File size: 9.8 KB
Line 
1//****************************************************************************************************************************************************
2//      Aplicación OpenGNSys
3//      Autor: José Manuel Alonso.
4//      Licencia: Open Source
5//      Fichero: ogAdmServer.cpp
6//      Descripción:
7//              Este módulo de la aplicación OpenGNSys implementa las comunicaciones con el Cliente.
8// ****************************************************************************************************************************************************
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>
19 
20#define LEER            0
21#define ESCRIBIR        1
22
23#define LONGITUD_SCRIPTSALIDA 1024      // Longitud máima de la informacin devuelta por un script
24#define LONGITUD_PARAMETROS 4048        // Longitud m?ima de la informacin de la trama (parametros)
25#define LONGITUD_TRAMA LONGITUD_PARAMETROS+11   // Longitud m?ima de la trama completa
26#define LONGITUD_CONFIGURACION 1024     // Longitud mxima de las configuraciones de particin
27#define MAX_NUM_CSADDRS        20
28#define MAX_INTERFACE_LIST     20
29#define MAXCNX 5                // Mximos intentos de conexión al servidor HIDRA
30#define MAXITEMS 100
31#define MAXHTMLMNU 4000
32#define MAXPARTICIONES 24
33#define MAXINFOSO 5 // Numero máximo de nemonicos enla inforamción del S.O. de una partición
34#define MAXARGS 16 // Numero máximo de argumentos enviados a un scripts
35#define LONSTD 512 // Longitud de memoria estandar
36#define LONSTDC 256 // Longitud de memoria estandar corta
37
38#define PUERTOMINUSER 20000
39#define PUERTOMAXUSER 60000
40
41#define TRUE 1
42#define FALSE 0
43
44#define true 1
45#define false 0
46
47#define SOCKET_ERROR            (-1)
48#define INVALID_SOCKET  (SOCKET)(~0)
49
50typedef unsigned short  WORD;
51typedef  int  BOOL;
52typedef char  BYTE;
53typedef  int  SOCKET;
54
55typedef struct{         // EstructUra de la trama recibida
56        char arroba;    // cabecera de la trama
57        char identificador[9];  // identificador de la trama
58        char ejecutor;  // ejecutor de la trama 1=el servidor hidra  2=el cliente hidra 3=el repositorio
59        char parametros[LONGITUD_PARAMETROS]; // Contenido de la trama (par?etros)
60}TRAMA;
61
62TRAMA trama[1];
63
64char IPlocal[20];               // Ip local
65char Servidorhidra[20]; // IP servidor HIDRA
66char Puerto[20];                // Puerto Unicode
67
68char szPathFileCfg[128];
69char szPathFileLog[128];
70
71//___________________________________________________________________________________________________
72// Variables y estructuras
73//___________________________________________________________________________________________________
74
75char cmdshell[LONSTD];
76char parametros[LONSTD];
77char* argumentos[MAXARGS];
78char msglog[LONSTD];
79char msgcon[LONSTD];
80char filecmdshell[LONSTDC];
81char filemenu[LONSTDC];
82char fileitem[LONSTDC];
83char fileini[LONSTDC];
84char filecmd[LONSTDC];
85
86struct excepcion {
87        int herror;
88        char msg[LONSTDC];
89        char modulo[LONSTDC];   
90};
91struct excepcion e;
92
93int ndebug=1; // Nivel de debuger por defecto
94
95// Nemónicos
96int MsDos=1;
97int Win98=2;
98int Win2K=3;
99int WinXP=4;
100int Linux=5;
101               
102BOOL PROCESO=true;                      // Indicador de la actividad del proceso principal
103BOOL CACHEEXISTS;                       // Indica si existe cache
104
105char HIDRACHEIMAGENES[LONSTDC]; // Path al directorio donde están las imágenes (en la caché)
106char HIDRASRVIMAGENES[LONSTDC]; // Path al directorio hidra donde están las imágenes (en el repositorio)
107char HIDRASRVCMD[LONSTDC];      // Path del directorio del repositorio donde se depositan los comandos para el cliente hidra
108char HIDRASCRIPTS[LONSTDC];     // Path al directorio donde están los scripts de hidra (en el cliente hidra)
109
110int HIDRAVER;   // Versión Hidra
111int TPAR ;      // Tamaño de la particin
112       
113SOCKET sock;    // Socket
114
115struct s_CabMnu {
116        char resolucion[2];                      // Resolucin de pantalla
117        char titulo[LONSTDC];                                           // Titulo del menu
118        char coorx[4];                                  // Coordenada x
119        char coory[4];                                  // Coordenada y
120        char modalidad[2];              // modalidad ( numero de items por linea )
121        char scoorx[4];                         // Coordenada x // Menu privado
122        char scoory[4];                         // Coordenada y
123        char smodalidad[LONSTDC];               // modalidad ( numero de items por linea )
124        char htmmenupub[64];    // Nombre del fichero que contiene el html del menu (público)
125        char htmmenupri[64];            // Nombre del fichero que contiene el html del menu (privado)
126} CabMnu;  // Estructura con los datos de los menús
127       
128BOOL swmnu=false; // Indicador de menu asignado
129       
130struct s_Item{
131        char idaccionmenu[16];  // Identificador del item a ejecutar
132        char urlimg[64];        // Nombre de la imagen de fonfo del botn
133        char literal[LONSTDC];  // Literal del item
134        char tipoitem[2];       // Tipo de otem ( público o privado)
135        char tipoaccion[2];     // Tipo de accin que ejecuta el item
136} ;
137       
138struct s_Propiedades {
139        char idordenador[16];                            // Identificador del ordenador
140        char nombreordenador[64];                // Nombre del ordenador
141        char idaula[16];                                                                // Identificador del aula
142        char servidorhidra[64];                         // IP  del servidor HUDRA
143        char puerto[16];                                                                // Puerto
144        char iprepo[16];                                                                // Direción IP repositorio     
145        char puertorepo[16];                                                            // Puerto       
146        char idperfilhard[16];                                  // Identificador del perfil hardware
147        char IPlocal[16];                                               // Ip local
148} Propiedades;    // Estructura con los datos del odenador
149       
150struct s_Particiones{
151        char tiposo[64];                                // Tipo de sistema operativo
152        char tipopart[16];                      // Tipo de particin
153        char tamapart[16];              // Tamao de la particin
154        char numpart[5];                // Nmero de la particin
155        char nombreso[64];    // Nombre del S.O.
156};
157       
158struct s_Hardware{
159        char nemonico[4];                               // Tipo de sistema operativo
160        char tipo[45];                  // Tipo de hardware
161        char codigovalor[256];                  // Codigo o descripcion
162}
163;       
164struct tiposo {
165  char *tipopart;
166  char *tiposo;
167  char *nombreso; 
168};     
169struct tiposo tiposos[] = {
170                {"BIGDOS", "MsDos","MsDos"},
171                {"NTFS","Windows NT Platafom","Windows 2000,XP,2003"},
172                {"FAT32","Windows","Windos 98,SE,Millenium"},                   
173                {"EXT","Extendida","Extendida"},
174                {"EXT3","Linux","Linux"},
175                {"EXT2","Linux","Linux"},       
176                {"VFAT","VFAT","VFAT"},
177                {"CACHE","CACHE","CACHE"},                     
178                {"UNKNOWN","UNKNOWN","UNKNOWN"},                       
179                {"EMPTY","Libre","Libre"},
180                {"LINUX-SWAP","","Linux-swap"}};
181               
182int ntiposo = sizeof (tiposos) / sizeof (struct tiposo);
183
184struct s_Item tbMenu[MAXITEMS];                 // Tabla con los items del menu
185int contitems;                  // Contador items del menu
186       
187BOOL PRCCMD;            // Indicador de comandos interactivos
188BOOL CMDPTES;   // Indicador de comandos pendientes
189       
190//char modulo[64];      // Nombre de la funcin donde se produce el error
191
192BOOL aut = false; // Variable para controlar el acceso al menu de administracion
193
194
195char* tbErrores[]={"000-Se han generado errores. No se puede continuar la ejecución de este módulo",\
196                "001-No hay memoria suficiente para el buffer",\
197                "002-No se puede establecer conexión con el servidor Hidra",\
198                "003-El fichero especificado no existe o bien no puede crearse o abrirse",\
199                "004-Comando Error",\
200                "005-El fichero est vacio",\
201                "006-Error en la ejecución del fichero autoexec",\
202                "007-Error en la recuperacion del Menu principal",\
203                "008-No hay espacio reservado para la cache en este disco",\
204                "009-Ha ocurrido algún error generando el perfil software",\
205                "010-IPlocal, NO se ha definido este parámetro",\
206                "011-IPhidra, NO se ha definido este parámetro",\
207                "012-Puerto, NO se ha definido este parámetro",\
208                "013-NO existe fichero de configuración o contiene un error de sintaxis",\
209                "014-Fallo de sintaxis en los parámetros: Debe especificar -f nombre_del_fichero_de_configuración",\
210                "015-No se ha podido crear socket para comunicación con el repositorio",\
211                "016-No se ha podido comunicar con el repositorio",\
212                "017-No existe Menu principal",\
213                "018-No se ha podido recuperar la configuración hardware del ordenador",\
214                "019-El cliente no se ha podido incluir en el sistema por un fallo en la conexión con el Servidor Hidra",\
215                "020-No se ha podido crear la carpeta en el repositorio",\
216                "021-Error en el envío de tramas al servidor Hidra",\
217                "022-Error en la recepción de tramas desde el servidor Hidra",\
218                "023-Error desconocido",\
219                };             
220               
221#define MAXERROR 23             // Error máximo cometido
222
223// Prototipos de funciones
224char* Desencriptar(char *);
225char* Encriptar(char *);
226int ValidacionParametros(int,char**);
227int CrearArchivoLog(char*);
228int LeeFileConfiguracion();
229void Log(char*);
230void UltimoError(int,char*);
231void INTROaFINCAD(char*);
232char* TomaParametro(char*,char*);
233int SplitParametros(char**,char*, char*);
234
235int EjecutarScript (char*,char* ,char*,int);
236char* ReservaMemoria(int);
237
238SOCKET TCPConnect(char *,char* );
239void TCPClose(SOCKET);
240int AbreConexionTCP(void);
241void CierraConexionTCP(void);
242int EnviaTramasHidra(SOCKET,TRAMA*);
243int RecibeTramasHidra(SOCKET,TRAMA*);
244int TCPWrite(SOCKET ,TRAMA*);
245int TCPRead(SOCKET ,TRAMA*);
246SOCKET UDPConnect();
247int EnviaTramaRepo(SOCKET,TRAMA*,char*,char*);
248int RecibeTramaRepo(SOCKET);
249
250long CreateTextFile(char*,char*);
251int ExisteFichero(char*);
252int RemoveFile(char *);
253int LoadTextFile(char *);
254
255int ProcesaComandos();
256int DisponibilidadComandos(int);
257int GestionTramas(TRAMA *);
258
259int Cortesia();
260int NoComandosPtes();
261int TomaIPlocal();
262int InclusionClienteHIDRA();
263int RESPUESTA_InclusionClienteHIDRA(TRAMA*);
264int ComandosPendientes(void);
265int Arrancar(TRAMA *,TRAMA *);
266int Apagar(TRAMA*,TRAMA*);
267int Reiniciar(TRAMA*,TRAMA*);
268int Actualizar();
269int CrearPerfilSoftware(TRAMA*,TRAMA*);
270int CrearPerfil(char*,char*,char*,char*,char*);
271int Nemonico(char*);
272int RestaurarImagen(TRAMA*,TRAMA*);
273int RestaurandoImagen(char*,char*,char*,char*,char*,char*,char*);
274int ParticionaryFormatear(TRAMA*,TRAMA*);
275int Particionar(char*,char*,char* );
276int Particionando(char*,char*,char*);
277int Formatear(char*,char*);
278int SetCachePartitionSize(int);
279int AutoexecClienteHidra(void);
280char* LeeConfiguracion(char*);
281char* TomaNomSO(char*,int);
282int InventarioHardware(TRAMA *,TRAMA *);
283int TomaConfiguracion(TRAMA *,TRAMA *);
284int RespuestaEjecucionComando(TRAMA* , TRAMA *, int);
285int ExecShell(TRAMA *,TRAMA *);
286char* URLDecode(char*);
Note: See TracBrowser for help on using the repository browser.