diff options
author | alonso <alonso@us.es> | 2010-06-29 11:50:45 +0000 |
---|---|---|
committer | alonso <alonso@us.es> | 2010-06-29 11:50:45 +0000 |
commit | 81b43511317aad3531f28c8d3b204b9f62c9c32a (patch) | |
tree | af0d866a1154e21448abe791dddd31bf6dbe90ac /admin | |
parent | 29b9d13e8bbb9b1759d3b337509648b44ae10031 (diff) |
git-svn-id: https://opengnsys.es/svn/trunk@1073 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'admin')
-rw-r--r-- | admin/Services/ogAdmClient/sources/ogAdmClient.c | 43 | ||||
-rw-r--r-- | admin/Services/ogAdmRepo/sources/ogAdmRepo.cpp | 26 | ||||
-rw-r--r-- | admin/Services/ogAdmServer/sources/ogAdmServer.cpp | 64 | ||||
-rw-r--r-- | admin/Services/ogAdmServer/sources/ogAdmServer.h | 1 |
4 files changed, 89 insertions, 45 deletions
diff --git a/admin/Services/ogAdmClient/sources/ogAdmClient.c b/admin/Services/ogAdmClient/sources/ogAdmClient.c index ea8b8aa6..b7eb195c 100644 --- a/admin/Services/ogAdmClient/sources/ogAdmClient.c +++ b/admin/Services/ogAdmClient/sources/ogAdmClient.c @@ -927,6 +927,45 @@ int sesionMulticast(char *fileimg,char *nipes,char *ide) // ________________________________________________________________________________________________________ int ProcesaComandos() { + int lon; + + while(TRUE){ + lon=sprintf(trama->parametros,"nfn=DisponibilidadComandos\r"); + lon+=sprintf(trama->parametros+lon,"swd=1\r"); // Disponible + + if(AbreConexionTCP()){ + if(!EnviaTramasHidra(sock,trama)){ + UltimoError(21,"ProcesaComandos()"); // No se pudo enviar trama + return(false); + } + if(!recibe_tramas(sock,trama)){ + UltimoError(22,"ProcesaComandos()"); // No se pudo recuperar trama + return(false); + } + CierraConexionTCP(); + GestionTramas(trama); // Analiza procesa la trama + } + else{ + UltimoError(2,"ProcesaComandos()"); + return(false); + } + } + return(true); +} +//______________________________________________________________________________________________________ +// Función: ProcesaComandos +// +// Descripción: +// Espera comando desde el Servidor de Administración para ejecutarlos +// Parámetros: +// Ninguno +// Devuelve: +// true si el archivo se ha eliminado correctamente o false en caso contrario +// ________________________________________________________________________________________________________ +/* +int ProcesaComandos() + +{ sprintf(filecmd,"/comandos/CMD_%s",Propiedades.IPlocal); // Nombre del fichero de comandos if(ExisteFichero(filecmd)) // Borra fichero de comandos si previamente exista de anteriores procesos RemoveFile(filecmd); @@ -959,6 +998,8 @@ int ProcesaComandos() } return(true); } +*/ + //______________________________________________________________________________________________________ // Función: DisponibilidadComandos // @@ -969,6 +1010,7 @@ int ProcesaComandos() // Devuelve: // true si el proceso es correcto y false en caso contrario // ________________________________________________________________________________________________________ +/* int DisponibilidadComandos(int swdis) { int lon; @@ -997,6 +1039,7 @@ int DisponibilidadComandos(int swdis) } return(true); } +*/ //______________________________________________________________________________________________________ // Función: GestionTramas // diff --git a/admin/Services/ogAdmRepo/sources/ogAdmRepo.cpp b/admin/Services/ogAdmRepo/sources/ogAdmRepo.cpp index 42c95f8c..b93b9f92 100644 --- a/admin/Services/ogAdmRepo/sources/ogAdmRepo.cpp +++ b/admin/Services/ogAdmRepo/sources/ogAdmRepo.cpp @@ -645,7 +645,7 @@ BOOLEAN respuesta_clienteHidra(TramaRepos *trmInfo) Encriptar((char*)&trmInfo->trama); ret=sendto(trmInfo->sck,(char*)&trmInfo->trama,strlen(trmInfo->trama.parametros)+11,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); if (ret == SOCKET_ERROR){ - RegistraLog("***sendto() fallo al enviar respuesta modulo respuesta_clienteHidra() :",true); + RegistraLog("sendto() fallo al enviar respuesta modulo respuesta_clienteHidra() :",true); return(false); } return(true); @@ -679,7 +679,7 @@ BOOLEAN respuesta_peticion(TramaRepos *trmInfo,const char *LitRes,char* swf,char Encriptar((char*)trama); ret=sendto(trmInfo->sck,(char*)trama,lon+11,0,(struct sockaddr*)&trmInfo->cliente,trmInfo->sockaddrsize); if (ret == SOCKET_ERROR){ - RegistraLog("***sendto() fallo al enviar respuesta a peticin de comando:",true); + RegistraLog("sendto() fallo al enviar respuesta a peticin de comando:",true); return(false); } return(true); @@ -821,7 +821,7 @@ BOOLEAN sesionMulticast(TramaRepos *trmInfo) sprintf(cmdshell,"%s/sendFileMcast %s \"%s:%s:%s:%sM:%s:%s\"",reposcripts,img,pom,mom,ipm,vlm,nip,"0"); res=system(cmdshell); if(res>0) - RegistraLog("*** Ha habido algún problema al iniciar sesión multicast",false); + RegistraLog(" Ha habido algún problema al iniciar sesión multicast",false); } return(true); } @@ -853,7 +853,7 @@ BOOLEAN iniSesionMulticast(char *iph,char *ide,char *nip) } if(!sw){ // No existe la entrada de la sesión if (!hay_hueco(&idx)){ // Busca hueco para el nuevo cliente - RegistraLog("*** No hay hueco para nueva sesión multicast",false); + RegistraLog(" No hay hueco para nueva sesión multicast",false); return(false); // No hay huecos } strcpy(tbsmul[idx].ides,ide);// Copia identificador de la sesión @@ -909,7 +909,7 @@ char * Buffer(int l) char *buf; buf=(char*)malloc(l); if(buf==NULL){ - RegistraLog("*** fallo de reserva de memoria en modulo Buffer()",true); + RegistraLog(" fallo de reserva de memoria en modulo Buffer()",true); return(false); } memset(buf,0,l); @@ -1048,14 +1048,14 @@ int main(int argc, char **argv) tbsmul[i].ipes=(char)NULL; } - RegistraLog("***Inicio de sesion***",false); + RegistraLog("Inicio de sesion***",false); socket_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Crea socket para UDP if (socket_s == SOCKET_ERROR){ - RegistraLog("***Error al crear socket para servicio del Repositorio:",true); + RegistraLog("Error al crear socket para servicio del Repositorio:",true); exit(EXIT_FAILURE); } - RegistraLog("***Creando Socket para comunicaciones***",false); + RegistraLog("Creando Socket para comunicaciones***",false); local.sin_addr.s_addr = inet_addr(IPlocal);// selecciona interface local.sin_family = AF_INET; @@ -1063,14 +1063,14 @@ int main(int argc, char **argv) // Enlaza socket if (bind(socket_s,(struct sockaddr *)&local,sizeof(local)) == SOCKET_ERROR){ - RegistraLog("***Error al enlazar socket con interface para servicio de Repositorio Hidra",true); + RegistraLog("Error al enlazar socket con interface para servicio de Repositorio Hidra",true); exit(EXIT_FAILURE);; } - RegistraLog("***Enlazado Socket para comunicaciones***",false); + RegistraLog("Enlazado Socket para comunicaciones***",false); while(true){ trmInfo = (TramaRepos*)malloc(sizeof(TramaRepos)); // Crea estructura de control para hebra if (trmInfo == NULL){ - RegistraLog("***Fallo al crear estructura de control para protocolo REPO",false); + RegistraLog("Fallo al crear estructura de control para protocolo REPO",false); exit(EXIT_FAILURE);; } // Inicializa trmInfo @@ -1080,7 +1080,7 @@ int main(int argc, char **argv) // Espera trmInfos Repositorio ret = recvfrom(trmInfo->sck,(char *)&trmInfo->trama, sizeof(trmInfo->trama),0,(struct sockaddr *)&trmInfo->cliente, &trmInfo->sockaddrsize); if (ret == SOCKET_ERROR){ - RegistraLog("***Error al recibir mensaje de cliente hidra. Se para el servicio de repositorio",true); + RegistraLog("Error al recibir mensaje de cliente hidra. Se para el servicio de repositorio",true); exit(EXIT_FAILURE); } else{ @@ -1088,7 +1088,7 @@ int main(int argc, char **argv) /* resul=pthread_create(&hThread,NULL,GestionaServicioRepositorio,(LPVOID)trmInfo); if(resul!=0){ - RegistraLog("***Fallo al crear la hebra cliente de repositorio Hidra",false); + RegistraLog("Fallo al crear la hebra cliente de repositorio Hidra",false); exit(EXIT_FAILURE); } pthread_detach(hThread); diff --git a/admin/Services/ogAdmServer/sources/ogAdmServer.cpp b/admin/Services/ogAdmServer/sources/ogAdmServer.cpp index 653712eb..848f2c47 100644 --- a/admin/Services/ogAdmServer/sources/ogAdmServer.cpp +++ b/admin/Services/ogAdmServer/sources/ogAdmServer.cpp @@ -219,7 +219,6 @@ void gestiona_comando(SOCKET s, TRAMA trama) { resul = strcmp(nombrefuncion, "DisponibilidadComandos"); if (resul == 0) { DisponibilidadComandos(s, parametros); - respuesta_cortesia(s); return; } resul = strcmp(nombrefuncion, "EcoConsola"); @@ -374,12 +373,12 @@ void gestiona_comando(SOCKET s, TRAMA trama) { estado_cliente = strcmp(tbsockets[i].estado, CLIENTE_REMBO); if (estado_cliente == 0) { // Cliente Rembo ... strcpy(tbsockets[i].estado, CLIENTE_OCUPADO); - contOG++; - MarcaServidoresRembo(tbsockets[i].ipsrvrmb, - tbsockets[i].ip); + //contOG++; + //MarcaServidoresRembo(tbsockets[i].ipsrvrmb,tbsockets[i].ip); + manda_comando(tbsockets[i].sock, parametros); + close(tbsockets[i].sock); } else { - estado_cliente = strcmp(tbsockets[i].estado, - CLIENTE_OCUPADO); + estado_cliente = strcmp(tbsockets[i].estado,CLIENTE_OCUPADO); if (estado_cliente != 0) { // Cliente Windows(Windows98,Windows2000,windows XP...) y Linux strcpy(tbsockets[i].estado, CLIENTE_OCUPADO); manda_comando(tbsockets[i].sock, parametros); @@ -391,7 +390,7 @@ void gestiona_comando(SOCKET s, TRAMA trama) { } } } - EnviaServidoresRembo(parametros, contOG); + //EnviaServidoresRembo(parametros, contOG); } } // ________________________________________________________________________________________________________ @@ -434,7 +433,7 @@ int manda_trama(SOCKET sock, TRAMA* trama) { if (ret == 0) { break; } else if (ret == SOCKET_ERROR) { - RegistraLog("***send() fallo en hebra cliente", true); + RegistraLog("send() fallo en hebra cliente", true); return (FALSE); } nLeft -= ret; @@ -460,7 +459,7 @@ int recibe_trama(SOCKET sock, TRAMA* trama) { break; else { if (ret == SOCKET_ERROR) { - RegistraLog("***recv() fallo en recepcion trama", true); + RegistraLog("recv() fallo en recepcion trama", true); return (FALSE); } else // Datos recibidos @@ -1902,6 +1901,7 @@ int DisponibilidadComandos(SOCKET s, char *parametros) { if (cliente_existente(iph, &i)) // Si ya existe la IP ... resul = borra_entrada(i); // Cliente apagado } + swcSocket=true; return (resul); } // ________________________________________________________________________________________________________ @@ -2170,33 +2170,30 @@ int Actualizar(char *parametros) { if (!trama) return (false); int i, estado_cliente, lon; - char *iph, *rmb; + char *iph; + //char *rmb; iph = toma_parametro("iph", parametros); // Toma ip - rmb = toma_parametro("rmb", parametros); // Toma ipe del servidor rembo + //rmb = toma_parametro("rmb", parametros); // Toma ipe del servidor rembo for (i = 0; i < MAXIMOS_SOCKETS; i++) { if (strncmp(tbsockets[i].ip, "\0", 1) != 0) { // Si es un cliente activo if (IgualIP(iph, tbsockets[i].ip)) { // Si existe la IP en la cadena estado_cliente = strcmp(tbsockets[i].estado, CLIENTE_OCUPADO); if (estado_cliente != 0) { // Cliente NO OCUPADO ... - estado_cliente = strcmp(tbsockets[i].estado, - CLIENTE_INICIANDO); + estado_cliente = strcmp(tbsockets[i].estado,CLIENTE_INICIANDO); if (estado_cliente != 0) { // Cliente NO INICIANDO ... - estado_cliente = strcmp(tbsockets[i].estado, - CLIENTE_REMBO); - if (estado_cliente != 0) { // Cliente windows o linux ... - lon - = sprintf(trama->parametros, - "nfn=Actualizar\r"); - manda_comando(tbsockets[i].sock, - (char*) trama->parametros); - } + //estado_cliente = strcmp(tbsockets[i].estado,CLIENTE_REMBO); + //if (estado_cliente != 0) { // Cliente windows o linux ... + lon = sprintf(trama->parametros,"nfn=Actualizar\r"); + manda_comando(tbsockets[i].sock,(char*) trama->parametros); + //} borra_entrada(i); } } } } } + /* int j; for (j = 0; j < MAXIMOS_SRVRMB; j++) { if (strcmp(rmb, tbsocketsSRVRMB[j].ip) == 0) { // Si existe la IP ... @@ -2205,7 +2202,8 @@ int Actualizar(char *parametros) { tbsocketsSRVRMB[j].puertorepo)); } } - return (false); + */ + return (true); } // ________________________________________________________________________________________________________ // Función: ConsolaRemota @@ -3298,7 +3296,7 @@ int recibeFichero(char *ipr, char *rep, char *nomfilesrc, char *nomfiledst) { f = fopen(nomfiledst, "wb"); if (!f) { - RegistraLog("*** No se ha podido crear archivo", false); + RegistraLog(" No se ha podido crear archivo", false); close(udpsock); return (false); } @@ -3321,7 +3319,7 @@ int recibeFichero(char *ipr, char *rep, char *nomfilesrc, char *nomfiledst) { return (true); } } else { - RegistraLog("*** Error de recepción de archivo", false); + RegistraLog(" Error de recepción de archivo", false); break; } envia_comandos(udpsock, &trama, ipr, atoi(rep)); @@ -3771,7 +3769,7 @@ int envia_comandos(SOCKET s, TRAMA* trama, char* ipsrv, int puerto) { ret = sendto(s, (char *) trama, lon, 0, (struct sockaddr *) &addrRepo, sizeof(addrRepo)); if (ret == SOCKET_ERROR) { - RegistraLog("***send() fallo en envío al repositorio", true); + RegistraLog("send() fallo en envío al repositorio", true); return (FALSE); } return true; @@ -4445,11 +4443,11 @@ int main(int argc, char *argv[]) { tbsockets[i].ip[0] = '\0'; // Inicializa IP tbsockets[i].sock = INVALID_SOCKET; // Inicializa Socket } - RegistraLog("***Inicio de sesion***", false); + RegistraLog("Inicio de sesion***", false); socket_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Crea socket if (socket_s == SOCKET_ERROR) { - RegistraLog("***socket() fallo:", true); + RegistraLog("socket() fallo:", true); } local.sin_addr.s_addr = htonl(INADDR_ANY); // selecciona interface local.sin_family = AF_INET; @@ -4457,7 +4455,7 @@ int main(int argc, char *argv[]) { if (bind(socket_s, (struct sockaddr *) &local, // Enlaza socket sizeof(local)) == SOCKET_ERROR) { - RegistraLog("***bind() fallo:", true); + RegistraLog("bind() fallo:", true); exit(EXIT_FAILURE); } @@ -4467,18 +4465,20 @@ int main(int argc, char *argv[]) { while (true) { // Bucle para escuchar peticiones de clientes socket_c = accept(socket_s, (struct sockaddr *) &cliente, &iAddrSize); if (socket_c == INVALID_SOCKET) { - RegistraLog("***accept() fallo:", true); + RegistraLog("accept() fallo:", true); break; } + swcSocket=true; //resul=pthread_create(&hThread,NULL,GestionaConexion,(void*)&socket_c); GestionaConexion(&socket_c); /*if(resul!=0){2 - RegistraLog("***Fallo al crear la hebra cliente",false); + RegistraLog("Fallo al crear la hebra cliente",false); break; } */ //pthread_detach(hThread); - close(socket_c); // Cierra la conexión con el servidor hidra + if(!swcSocket) + close(socket_c); // Cierra la conexión sólo cuando el cliente no espera comandos interactivos } close(socket_s); exit(EXIT_SUCCESS); diff --git a/admin/Services/ogAdmServer/sources/ogAdmServer.h b/admin/Services/ogAdmServer/sources/ogAdmServer.h index 87c78ff9..e2ac4006 100644 --- a/admin/Services/ogAdmServer/sources/ogAdmServer.h +++ b/admin/Services/ogAdmServer/sources/ogAdmServer.h @@ -44,6 +44,7 @@ char pasguor[20]; char datasource[20]; char catalog[50]; +int swcSocket; struct s_socketCLRMB{ // Estructura usada para guardar información de los clientes char ip[16]; // IP del cliente |