source: ogServer-Git/src/ogAdmLib.c @ 0efc182

Last change on this file since 0efc182 was d6789f1, checked in by OpenGnSys Support Team <soporte-og@…>, 4 years ago

#971 linkage error after split

/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmServer.h:25: multiple definition of `servidoradm'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmServer.h:25: first defined here
/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmServer.h:26: multiple definition of `puerto'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmServer.h:26: first defined here
/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmServer.h:35: multiple definition of `tbsockets'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmServer.h:35: first defined here
/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmLib.h:81: multiple definition of `ndebug'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmLib.h:81: first defined here
/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmLib.h:80: multiple definition of `szPathFileLog'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmLib.h:80: first defined here
/usr/bin/ld: src/cfg.o:/home/opengnsys/ogServer/src/ogAdmLib.h:80: multiple definition of `szPathFileCfg'; src/ogAdmServer.o:/home/javi/trabajo/soleta/opengnsys/ogServer/src/ogAdmLib.h:80: first defined here

  • Property mode set to 100644
File size: 11.7 KB
Line 
1// **************************************************************************************************************************************************
2// Libreria: ogAdmLib
3// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
4// Fecha Creación: Marzo-2010
5// Fecha Última modificación: Marzo-2010
6// Nombre del fichero: ogAdmLib.c
7// Descripción: Este fichero implementa una libreria de funciones para uso común de los servicios
8// **************************************************************************************************************************************************
9
10#include <stdio.h>
11#include <string.h>
12#include <stdlib.h>
13#include <ctype.h>
14#include <sys/types.h>
15#include <sys/socket.h>
16#include "ogAdmLib.h"
17
18char szPathFileCfg[4096],szPathFileLog[4096];
19int ndebug;
20
21//______________________________________________________________________________________________________
22// Función: ValidacionParametros
23//
24//       Descripción:
25//              Valida que los parametros de ejecución del programa sean correctos
26//      Parámetros:
27//              - argc: Número de argumentos
28//              - argv: Puntero a cada argumento
29//              - eje:  Tipo de ejecutable (1=Servicio,2=Repositorio o 3=Cliente)
30//      Devuelve:
31//              - TRUE si los argumentos pasados son correctos
32//              - FALSE en caso contrario
33//      Especificaciones:
34//              La sintaxis de los argumentos es la siguiente
35//                      -f      Archivo de configuración del servicio
36//                      -l      Archivo de logs
37//                      -d      Nivel de debuger (mensages que se escribirán en el archivo de logs)
38//      Devuelve:
39//              TRUE: Si el proceso es correcto
40//              FALSE: En caso de ocurrir algún error
41//______________________________________________________________________________________________________
42BOOLEAN validacionParametros(int argc, char*argv[],int eje) {
43        int i;
44
45        switch(eje){
46                case 1: // Administrador
47                        strcpy(szPathFileCfg, "ogserver.cfg"); // Valores por defecto de archivos
48                        strcpy(szPathFileLog, "ogserver.log"); // de configuración y de logs
49                        break;
50                case 2: // Repositorio
51                        strcpy(szPathFileCfg, "ogAdmRepo.cfg"); // Valores por defecto de archivos
52                        strcpy(szPathFileLog, "ogAdmRepo.log"); // de configuración y de logs
53                        break;
54                case 3: // Cliente OpenGnsys
55                        strcpy(szPathFileCfg, "ogAdmClient.cfg"); // Valores por defecto de archivos
56                        strcpy(szPathFileLog, "ogAdmClient.log"); // de configuración y de logs
57                        break;
58                case 4: // Servicios DHCP,BOOTP Y TFTP
59                        strcpy(szPathFileCfg, "ogAdmBoot.cfg"); // Valores por defecto de archivos
60                        strcpy(szPathFileLog, "ogAdmBoot.log"); // de configuración y de logs
61                        break;
62                case 5: // Agente
63                        strcpy(szPathFileCfg, "ogAdmAgent.cfg"); // Valores por defecto de archivos
64                        strcpy(szPathFileLog, "ogAdmAgent.log"); // de configuración y de logs
65                        break;
66                case 6: // Agente
67                        strcpy(szPathFileCfg, "ogAdmWinClient.cfg"); // Valores por defecto de archivos
68                        strcpy(szPathFileLog, "ogAdmWinClient.log"); // de configuración y de logs
69                        break;
70                case 7: // Agente
71                        strcpy(szPathFileCfg, "ogAdmnxClient.cfg"); // Valores por defecto de archivos
72                        strcpy(szPathFileLog, "ogAdmLnxClient.log"); // de configuración y de logs
73                        break;
74        }
75
76        ndebug = 1; // Nivel de debuger por defecto
77
78        for (i = 1; (i + 1) < argc; i += 2) {
79                if (argv[i][0] == '-') {
80                        switch (tolower(argv[i][1])) {
81                        case 'f':
82                                if (argv[i + 1] != NULL)
83                                        strcpy(szPathFileCfg, argv[i + 1]);
84                                else {
85                                        return (FALSE);
86                                }
87                                break;
88                        case 'l':
89                                if (argv[i + 1] != NULL)
90                                        strcpy(szPathFileLog, argv[i + 1]);
91                                else {
92                                        return (FALSE);
93                                }
94                                break;
95                        case 'd':
96                                if (argv[i + 1] != NULL) {
97                                        ndebug = atoi(argv[i + 1]);
98                                        if (ndebug < 1)
99                                                ndebug = 1; // Por defecto el nivel de debug es 1
100                                } else
101                                        ndebug = 1; // Por defecto el nivel de debug es 1
102                                break;
103                        default:
104                                exit(EXIT_FAILURE);
105                                break;
106                        }
107                }
108        }
109        return (TRUE);
110}
111// ________________________________________________________________________________________________________
112// Función: splitCadena
113//
114//      Descripción:
115//                      Trocea una cadena según un carácter delimitador
116//      Parámetros:
117//                      - trozos: Array de punteros a cadenas
118//                      - cadena: Cadena a trocear
119//                      - chd: Carácter delimitador
120//      Devuelve:
121//              Número de trozos en que se divide la cadena
122// ________________________________________________________________________________________________________
123int splitCadena(char **trozos,char *cadena, char chd)
124{
125        int w=0;
126        if(cadena==NULL) return(w);
127
128        trozos[w++]=cadena;
129        while(*cadena!='\0'){
130                if(*cadena==chd){
131                        *cadena='\0';
132                        if(*(cadena+1)!='\0')
133                                trozos[w++]=cadena+1;
134                }
135                cadena++;
136        }
137        return(w); // Devuelve el número de trozos
138}
139// ________________________________________________________________________________________________________
140// Función: escaparCadena
141//
142//      Descripción:
143//                      Sustituye las apariciones de un caracter comila simple ' por \'
144//      Parámetros:
145//                      - cadena: Cadena a escapar
146// Devuelve:
147//              La cadena con las comillas simples sustituidas por \'
148// ________________________________________________________________________________________________________
149char* escaparCadena(char *cadena)
150{
151        int b,c;
152        char *buffer;
153
154        buffer = (char*) reservaMemoria(strlen(cadena)*2); // Toma memoria para el buffer de conversión
155        if (buffer == NULL) { // No hay memoria suficiente para el buffer
156                return (FALSE);
157        }
158
159        c=b=0;
160        while(cadena[c]!=0) {
161                if (cadena[c]=='\''){
162                        buffer[b++]='\\';
163                        buffer[b++]='\'';
164                }
165                else{
166                        buffer[b++]=cadena[c];
167                }
168                c++;
169        }
170        return(buffer);
171}
172
173// ________________________________________________________________________________________________________
174// Función: igualIP
175//
176//      Descripción:
177//              Comprueba si una cadena con una dirección IP está incluida en otra que  contienen varias direcciones ipes
178//              separadas por punto y coma
179//      Parámetros:
180//              - cadenaiph: Cadena de direcciones IPES
181//              - ipcliente: Cadena de la IP a buscar
182//      Devuelve:
183//              TRUE: Si el proceso es correcto
184//              FALSE: En caso de ocurrir algún error
185// ________________________________________________________________________________________________________
186BOOLEAN contieneIP(char *cadenaiph,char *ipcliente)
187{
188        char *posa,*posb;
189        int lon, i;
190
191        posa=strstr(cadenaiph,ipcliente);
192        if(posa==NULL) return(FALSE); // No existe la IP en la cadena
193        posb=posa; // Iguala direcciones
194        for (i = 0; i < LONIP; i++) {
195                if(*posb==';') break;
196                if(*posb=='\0') break;
197                if(*posb=='\r') break;
198                posb++;
199        }
200        lon=strlen(ipcliente);
201        if((posb-posa)==lon) return(TRUE); // IP encontrada
202        return(FALSE);
203}
204// ________________________________________________________________________________________________________
205// Función: rTrim
206//
207//               Descripción:
208//                      Elimina caracteres de espacios y de asci menor al espacio al final de la cadena
209//              Parámetros:
210//                      - cadena: Cadena a procesar
211// ________________________________________________________________________________________________________
212char* rTrim(char *cadena)
213{
214        int i,lon;
215
216        lon=strlen(cadena);
217        for (i=lon-1;i>=0;i--){
218                if(cadena[i]<32)
219                        cadena[i]='\0';
220                else
221                        return(cadena);
222        }
223        return(cadena);
224}
225//______________________________________________________________________________________________________
226// Función: reservaMemoria
227//
228//      Descripción:
229//              Reserva memoria para una variable
230//      Parámetros:
231//              - lon:  Longitud en bytes de la reserva
232//      Devuelve:
233//              Un puntero a la zona de memoria reservada que ha sido previamente rellena con zeros o nulos
234//______________________________________________________________________________________________________
235char* reservaMemoria(int lon)
236{
237        char *mem;
238
239        mem=(char*)malloc(lon);
240        if(mem!=NULL)
241                memset(mem,0,lon);
242        return(mem);
243}
244//______________________________________________________________________________________________________
245// Función: ampliaMemoria
246//
247//      Descripción:
248//              Amplia memoria para una variable
249//      Parámetros:
250//              - ptr:  Puntero al buffer de memoria que se quiere ampliar
251//              - lon:  Longitud en bytes de la amplicación
252//      Devuelve:
253//              Un puntero a la zona de memoria reservada que ha sido previamente rellena con zeros o nulos
254//______________________________________________________________________________________________________
255char* ampliaMemoria(char* ptr,int lon)
256{
257        char *mem;
258
259        mem=(char*)realloc(ptr,lon*sizeof(char*));
260        if(mem!=NULL)
261                return(mem);
262        return(NULL);
263}
264//______________________________________________________________________________________________________
265// Función: liberaMemoria
266//
267//      Descripción:
268//              Libera memoria para una variable
269//      Parámetros:
270//              - ptr:  Puntero al buffer de memoria que se quiere liberar
271//      Devuelve:
272//              Nada
273//______________________________________________________________________________________________________
274void liberaMemoria(void* ptr)
275{
276        if(ptr){
277                free (ptr);
278        }
279}
280// ________________________________________________________________________________________________________
281// Función: sendData
282//
283//      Descripción:
284//              Envía datos por la red a través de un socket
285//      Parametros:
286//                      - sock : El socket por donde se envía
287//                      - datos: El contenido a enviar
288//                      - lon: Cantidad de bites a enviar
289//      Devuelve:
290//              TRUE: Si el proceso es correcto
291//              FALSE: En caso de ocurrir algún error
292// ________________________________________________________________________________________________________
293BOOLEAN sendData(SOCKET *sock, char* datos,int lon)
294{
295        int idx,ret;
296        idx = 0;
297        while (lon > 0) {
298                ret = send(*sock,&datos[idx],lon, 0);
299                if (ret == 0) { // Conexión cerrada por parte del cliente (Graceful close)
300                        break;
301                }
302                else{
303                        if (ret == -1)
304                                return (FALSE);
305                }
306                lon -= ret;
307                idx += ret;
308        }
309        return (TRUE);
310}
311// ________________________________________________________________________________________________________
312// Función: mandaTrama
313//
314//      Descripción:
315//              Envía una trama por la red
316//      Parametros:
317//                      - sock : El socket del host al que se dirige la trama
318//                      - trama: El contenido de la trama
319//                      - lon: Longitud de la parte de parametros de la trama que se va a mandar
320//      Devuelve:
321//              TRUE: Si el proceso es correcto
322//              FALSE: En caso de ocurrir algún error
323// ________________________________________________________________________________________________________
324BOOLEAN mandaTrama(SOCKET *sock, TRAMA* ptrTrama)
325{
326        int lonprm;
327        char *buffer,hlonprm[LONHEXPRM+1];
328        BOOLEAN res;
329
330        lonprm=strlen(ptrTrama->parametros);
331        sprintf(hlonprm,"%05X",LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm); // Convierte en hexadecimal la longitud
332
333        buffer=reservaMemoria(LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm); // Longitud total de la trama
334        if(buffer==NULL)
335                return(FALSE);
336        memcpy(buffer,ptrTrama,LONGITUD_CABECERATRAMA); // Copia cabecera de trama
337        memcpy(&buffer[LONGITUD_CABECERATRAMA],hlonprm,LONHEXPRM); // Copia longitud de la trama
338        memcpy(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],ptrTrama->parametros,lonprm);
339        res=sendData(sock,buffer,LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm);
340        liberaMemoria(buffer);
341        return (res);
342}
343
344//______________________________________________________________________________________________________
345// Función: initParammetros
346//
347//       Descripción:
348//              Libera memoria del buffer de los parametros de la trama y vuelve a reservar espacio
349//      Parámetros:
350//              - parametros : Puntero a la zona donde están los parametros de una trama
351//              - lon : Tamaño de la nueva reserva de espacio para los parametros
352//      Devuelve:
353//              Un puntero a la nueva zona de memoria o NULL si ha habido algún error
354// Especificaciones:
355//              En caso de que el parámetro lon valga cero el tamaño a reservar será el estandar
356//______________________________________________________________________________________________________
357BOOLEAN initParametros(TRAMA* ptrTrama,int lon)
358{
359        if(lon==0) lon=LONGITUD_PARAMETROS;
360        ptrTrama->parametros=(char*)ampliaMemoria(ptrTrama->parametros,lon);
361        if(!ptrTrama->parametros)
362                return(FALSE);
363        else
364                return(TRUE);
365}
Note: See TracBrowser for help on using the repository browser.