Esempio n. 1
0
//Constructor
FicherosConf::FicherosConf(QWidget *parent)
	: InkjetForm(parent)
{
	//Titulos de las secciones
	this->SetTitleInfo("In2 Printing Solutions");
	this->SetTitleStatus("Estado");
	this->SetTitleOptions("Opciones");

	//Boton para control de usuarios
	m_LoadConfig = new QPushButton(this->m_OptionZone);
	m_LoadConfig->setText("Cargar\nConfiguración");    	
	m_LoadConfig->setIcon(QPixmap(":/res/images/load.png"));
	m_LoadConfig->setIconSize(QSize(WICONSIZE,HICONSIZE));

	m_SaveConfig = new QPushButton(this->m_OptionZone);
	m_SaveConfig->setText("Guardar\nConfiguración");    	
	m_SaveConfig->setIcon(QPixmap(":/res/images/save.png"));
	m_SaveConfig->setIconSize(QSize(WICONSIZE,HICONSIZE));

	m_BackButton = new QPushButton(this->m_OptionZone);
    m_BackButton->setText("Atrás");    	
	m_BackButton->setIcon(QPixmap(":res/images/back.png"));
	m_BackButton->setIconSize(QSize(WICONSIZE,HICONSIZE));

	this->ShowInfo();

	this->OrdenaBotonesOpciones();
	CargaDatos();
	QObject::connect(m_BackButton, SIGNAL(clicked()),this, SLOT(Atras()));
	QObject::connect(m_LoadConfig, SIGNAL(clicked()),this, SLOT(CargarConfiguracion()));
	QObject::connect(m_SaveConfig, SIGNAL(clicked()),this, SLOT(GuardarConfiguracion()));
	//connect((Principal*)this->GetMainWindow(), SIGNAL(ActualizaData()),this, SLOT(ActualizaDataSlot()));
	TestRoot();
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    struct sockaddr_in sckLocal;
    struct sockaddr_in sckSrvFile;
    struct sockaddr_in sckClient;
    /*******************************/
    /*PARA IMPLEMENTACION DE SELECT*/
    /*******************************/
    int visockCliente[MAXCLIENTES];/* Descriptores de sockets con clientes */
    fd_set descriptoresLectura;	/* Descriptores de interes para select() */
    int numeroClientes = 0;			/* Número clientes conectados */
    /*******************************/
    struct hostent *stcNombre_host;
    TipoHeaderTP HeaderResp /*, HeaderTP*/; /*encabezado PING-PONG-QUERY-QUERYHIT*/
    TipoMensaje stcPeticion;
    int iPuertoSrvFile;
    int iPuertoLocal;
    int isock_srvFile;
    int isock_local;
    int isock_client;
    int isock_clientWin;
    int iResult;
    char pcharArchivoBuscado[LARGO_ARCHIVO_BUSCADO];
    char *strBufferRta;
    /*IMPLEMENTACION ENTREGA 4*/
    int iTipoMensaje=0;
    char strHead[1024];
    TipoNodo *nodoCliente;
    TipoLista *listaCliente;
    TipoClienteWin datoNodoBuscado;
    TipoMensajeIPC stcMensajeIpc;
    char ipUpload[13];
    /*SOLO PARA TESTING*/
    /*char vTempMensaje[1024];
    int iIndiceTest;*/

    /**************************************************/
    /*CAMBIO EL NOMBRE DEL PROCESO                   */	
    /*************************************************/
    strcpy(nombreModulo,argv[0]);
    sprintf(nombreModulo, "Srvnet[%d]", getpid());
    strncpy(argv[0],nombreModulo,strlen(argv[0]));

    /*************************************************/
    /*CARGA LA CONFIGURACION DESDE EL ARCHIVO DE CONF*/	
    /*************************************************/
    CargarConfiguracion("configuracion");
    Log("Se cargo el archivo de configuracion...",LOGINFO);
    /*strcpy(argv[0],Config.nombreModulo);*/
    
    iPuertoSrvFile = atoi(Config.puertoSrvFile);
    iPuertoLocal = atoi(Config.puertoLocal);
    Copiar(ipUpload,Config.ipSrvFile, 13);
    Log(ipUpload, LOGINFO);
    Trim(Config.ipSrvFile);
    if((stcNombre_host=gethostbyname("192.168.0.102"))==NULL){
            perror("Ocurrio un error al resolver el nombre...");
            Log("Ocurrio un error al resolver el nombre...",LOGERROR);
	    exit(0); 
    }
    
    /**************************************************/
    /* SETEO LA ATENCION DE LAS SENIALES              */
    /**************************************************/
    /*func_PreparaAtSeniales();*/
    signal (SIGALRM, func_AtiendeSenial);
    
    /*************************************************************/
    /* CREA EL SOCKET PARA CONECTARSE CON EL SERVIDOR DE ARCHIVOS*/
    /*************************************************************/
    if ((isock_srvFile=socket(AF_INET, SOCK_STREAM, 0))==-1){
	    perror("Ocurrio un error al crear el socket para Gnutella");
	    Log("Ocurrio un error al crear el socket para Gnutella",LOGERROR);
	    exit(0);
    }
    
    /*************************************************************/
    /* CREA EL SOCKET PARA PARA BINDEARLO CON EL CLIENTE WINDOWS */
    /*************************************************************/
    if ((isock_local=socket(AF_INET, SOCK_STREAM, 0))==-1){
	    perror("Ocurrio un error al crear el socket Local");
	    Log("Ocurrio un error al crear el socket Local",LOGERROR);
	    exit(0);
    }
    /**************************************************/
    /*Configura la estructura del servidor de archivos*/
    /**************************************************/
    sckSrvFile.sin_family= AF_INET; 
    sckSrvFile.sin_port = htons(iPuertoSrvFile); 
    sckSrvFile.sin_addr= *((struct in_addr *)stcNombre_host->h_addr_list[0]); 
    
    /*************************************************/
    /*Configura la estructura local                  */
    /*************************************************/
    Log("Configurando socket local... ",LOGINFO);
    sckLocal.sin_family = AF_INET;
    sckLocal.sin_addr.s_addr = INADDR_ANY;
    sckLocal.sin_port = htons(atoi(Config.puertoLocal));
    Log("OK Configuracion Socket Local",LOGINFO);
    
    /***************************************************/
    /*Asocia el sock de escucha con la estructura local */
    /***************************************************/
    Log("Bindeando el socket local...",LOGINFO);
    if (bind(isock_local, (struct sockaddr *)&sckLocal, sizeof(sckLocal)) == -1){
	    perror("Error en la llamada para unir");
	    Log("Error en la funcion Bind del srvNet (isock_local)",LOGERROR);
	    exit(-1);
    }
    
    Log("Funcion listen... ",LOGINFO);
    if (listen(isock_local,20) == -1){
	    perror("llamada para escuchar");
	    Log("No pudo ejecutarse con exito la funcion LISTEN",LOGERROR);
	    exit(0);
    }
    /***********************************************************************/
    /*Se identifica el servidor de Red como tal con el servidor de archivos*/
    /***********************************************************************/
    if (func_Identificacion(isock_srvFile, &sckSrvFile) == -1){	
	    perror("No se pudo identificar el servidor");
	    Log("No se pudo identificar el servidor de red",LOGERROR);
	    exit(0);
    }
    Log("Se identifico correctamente con el servidor gnutella...",LOGINFO);
    /* Acepta la conexión con el cliente, guardándola en el array */
    visockCliente[numeroClientes] = isock_srvFile;
    numeroClientes++;
    
    /* Si se ha superado el maximo de clientes, se cierra la conexión,
	* se deja todo como estaba y se vuelve. */
    if ((numeroClientes) >= MAXCLIENTES)
    {
	    close (visockCliente[numeroClientes -1]);
	    numeroClientes--;
    }
    
    /***********************************/
    /* Inicializo la lista de clientes */
    /***********************************/
    listaCliente = (TipoLista *) malloc(sizeof(NULL)*2);
    listaCliente->primero = NULL;
    listaCliente->ultimo = NULL;

    alarm(Config.iTiempoEspera);
    Log("Alarma cargada...",LOGINFO);
   while(1){

   	/*strHead = (char *) malloc(1024);*/
   	iTipoMensaje=func_recibirSelect(isock_local,&sckClient,&descriptoresLectura,visockCliente,&numeroClientes,strHead,&isock_client,listaCliente);
        
        /****************************************************/
        /*VERIFICO SI HAY ALARMA PARA ATENDER               */
        /****************************************************/
        if (func_ResponderClientes(listaCliente,NO) == -1){
            Log("Error al dar la respuesta al cliente",LOGERROR);
        }

	if (iTipoMensaje== -1){
		/*perror("Ocurrio un error en la funcion func_recibirSelect");	*/
		Log("No se pudo recibir una respuesta correcta del cliente. Error en func_recibirDeCliente",LOGINFO);
	}
	if (iTipoMensaje == REQUEST){
	   
	    stcPeticion = *((TipoMensaje *) strHead);
	    strcpy(pcharArchivoBuscado,stcPeticion.nombreArchivo);
	    
	    /****************************************************/
	    /*Agrego el cliente que hizo la peticion a la lista*/
	    /***************************************************/
	    nodoCliente = CrearElemento(sizeof(TipoNodo));
	    nodoCliente->dato->strNombreBuscado = (char *) malloc(strlen(stcPeticion.nombreArchivo));
	    strcpy(nodoCliente->dato->IDMensaje,stcPeticion.IDMensaje);
	    nodoCliente->dato->iSock_ClienteWin = isock_client;
	    strcpy(nodoCliente->dato->strNombreBuscado, stcPeticion.nombreArchivo);
	    nodoCliente->dato->strResultados = NULL;
	    nodoCliente->dato->tTiempoLlegada = time(NULL);
	    AgregarElemento(listaCliente, nodoCliente);
	    
	    if(DatosGlobales.isock_Cache != 0){
	       if (func_envioPeticionCache(listaCliente,stcPeticion,pcharArchivoBuscado) <= 0){
	           /*Log("Se envio la peticion al servidor gnutella...",LOGINFO);*/
	           func_envioPeticionGnutella(stcPeticion,pcharArchivoBuscado,isock_srvFile);
	       }
	    }else{
	       /*Log("Se envio la peticion al servidor gnutella...",LOGINFO);*/
	       func_envioPeticionGnutella(stcPeticion,pcharArchivoBuscado,isock_srvFile);
	    }
	    
	}else /*End if (iTipoMensaje == REQUEST)*/
	if (iTipoMensaje == QUERYHIT){
	    /***********************************************************************/
	    /*Recibe la cabecera del la respuesta que envia el Server Gnutella     */
	    /***********************************************************************/
	    HeaderResp = *((TipoHeaderTP *) strHead);
	    memcpy(datoNodoBuscado.IDMensaje,HeaderResp.IDMensaje,16);
	    nodoCliente = BuscarElemento(listaCliente, &datoNodoBuscado, (void *)func_esMismoId);
	    
	    if (nodoCliente != NULL){
		isock_clientWin = nodoCliente->dato->iSock_ClienteWin;
		Log("Recibio Header QueryHit",LOGINFO);
		
		
		/***********************************************************************/
		/*Se verifica que el header sea del formato correcto                   */
		/***********************************************************************/
		if (HeaderResp.ucTipo != QUERYHIT){
			perror("El formato del Header no es el esperado");
			/*Log("El formato del header no es el esperado",LOGERROR);	*/
		}		
		
		Log("El formato de Header Query Hit es CORRECTO se esta recibiendo la respuesta a la peticion",LOGINFO);
		    
	    
		/***********************************************************************/
		/*Se reciben los datos del servidor Gnutella                           */
		/***********************************************************************/
		strBufferRta = (char *)calloc(HeaderResp.nLongMensaje, sizeof(char));
		iResult = recv(isock_srvFile,(char *)strBufferRta,HeaderResp.nLongMensaje,0);
		
		
		if (iResult == -1){
			perror("Error al recibir los datos del servidor Gnutella");
			Log("No se pudo recibir la respuesta del servidor Gnutella exitosamente",LOGERROR);
		}
    
		/*for (iIndiceTest=0;iIndiceTest<65;iIndiceTest++){
		    vTempMensaje[iIndiceTest] = nodoCliente->dato->strResultados[iIndiceTest];
		}*/
    
		func_agregarResultado(nodoCliente,strBufferRta,iResult);
            }else{
                Log("Se recibio un QUERYHIT luego de que se haya enviado la respuesta...",LOGINFO);
            }

	}else/*End if (iTipoMensaje == QUERYHIT)*/
	if (iTipoMensaje == IPC_CACHE_CONNECT){
	
            func_preparoMensajeIPC(&stcMensajeIpc,IPC_OK_CONNECT,0);
	    if(send(isock_client,&stcMensajeIpc,sizeof(stcMensajeIpc),0)==-1){
		    perror("Ocurrio un error al conectarse con el servidor de Cache");
		    Log("No se pudo mandar el mensaje al servidor Cache",LOGERROR);
		    return -1;
	    }else{
	       DatosGlobales.isock_Cache = isock_client;
	       Log("Conexion con servidor cache...OK",LOGINFO);
	    }
	}else/*End if (iTipoMensaje == IPC_OK_CONNECT)*/
        if (iTipoMensaje == IPC_QUERYHIT){
	
            /***********************************************************************/
	    /*Recibe la cabecera del la respuesta que envia el Server Gnutella     */
	    /***********************************************************************/
	    HeaderResp = *((TipoHeaderTP *) strHead);
	    strcpy(datoNodoBuscado.IDMensaje,HeaderResp.IDMensaje);
	    nodoCliente = BuscarElemento(listaCliente, &datoNodoBuscado, (void *)func_esMismoId);
	    isock_clientWin = nodoCliente->dato->iSock_ClienteWin;
	    Log("Recibio Header QueryHit",LOGINFO);
	    
	    
	}
	strHead[0]='\0';
	/*free(strHead);*/
	/*End if (iTipoMensaje == IPC_OK_CONNECT)*/
	/*else
	if (iTipoMensaje == 255 && isock_client != 0){
	   close(isock_client);
	}*/
	
   }   
   
   
  return 0;
}