132 lines
2.8 KiB
C++
132 lines
2.8 KiB
C++
#include "StdAfx.h"
|
|
#include "ConexionClienteLicSrv.h"
|
|
#define MODULO "ConexionClienteLicSrv"
|
|
#include "_log.h"
|
|
#include "licencia.h"
|
|
|
|
ConexionClienteLicSrv::ConexionClienteLicSrv(void)
|
|
{
|
|
pirate =false;
|
|
}
|
|
|
|
ConexionClienteLicSrv::~ConexionClienteLicSrv(void)
|
|
{
|
|
}
|
|
|
|
void ConexionClienteLicSrv::run()
|
|
{
|
|
int nr =0;
|
|
C_log::log(MODULO, "Iniciada Conexion");
|
|
Licencia lic;
|
|
BYTE bufout[sizeof(int)+sizeof(Licencia)];
|
|
if(!manager)
|
|
pirate =true;
|
|
while(!pirate && (!soc->pirate || !*soc->pirate))
|
|
{
|
|
if(soc->sock_cerrado)
|
|
{
|
|
pirate = true;
|
|
C_log::log(MODULO, "Cliente desconectado");
|
|
continue;
|
|
}
|
|
if(!soc->recibe_package(0))
|
|
{
|
|
nr++;
|
|
if(nr>1000)
|
|
{
|
|
pirate = true;
|
|
C_log::log(MODULO, "Sobrepasado tiempo de espera.");
|
|
}
|
|
else
|
|
Sleep(1);
|
|
continue;
|
|
}
|
|
nr =0;
|
|
//recive package-------------
|
|
if(soc->nb<sizeof(int))
|
|
{
|
|
C_log::log(MODULO, "Datos erroneos");
|
|
pirate = true;
|
|
continue;
|
|
}
|
|
int idp = *(int*)soc->buf;
|
|
int nb =soc->nb-(sizeof(int));
|
|
|
|
void* buf = &((int*)soc->buf)[1];
|
|
|
|
switch(idp)
|
|
{
|
|
case(PETICION_GENERAL_OK):
|
|
if(!envia(PETICION_GENERAL_OK))
|
|
{
|
|
C_log::log(MODULO, "Error al enviar no");
|
|
pirate = true;
|
|
}
|
|
break;
|
|
case(PETICION_GENERAL_PRESENTA):
|
|
if(nb!=sizeof(Licencia))
|
|
{
|
|
C_log::log(MODULO, "Presenta defectuoso");
|
|
envia(PETICION_GENERAL_NO);
|
|
|
|
pirate = true;
|
|
break;
|
|
}
|
|
|
|
if(!lic.setLic(buf))
|
|
{
|
|
C_log::log(MODULO, "Licencia defectuosa");
|
|
envia(PETICION_GENERAL_NO);
|
|
|
|
pirate = true;
|
|
break;
|
|
}
|
|
//seguridad--------------
|
|
lic.set_nulls();
|
|
C_log::log(MODULO, "Peticion licencia: user: %s produc: %s, clave: %s, version: %s idm: %s", lic.nombre_user, lic.nombre_producto, lic.clave, lic.version_producto, lic.idm);
|
|
|
|
if(!manager->Get(&lic) || !lic.getLic((void*)&bufout[sizeof(int)]))
|
|
{
|
|
|
|
C_log::log(MODULO, "Licencia No conseguida");
|
|
envia(PETICION_GENERAL_NO);
|
|
|
|
pirate = true;
|
|
}
|
|
if(lic.id<0)
|
|
{
|
|
C_log::log(MODULO, "Sin licencia");
|
|
envia(PETICION_GENERAL_NO);
|
|
}
|
|
(*(int*)bufout) = PETICION_GENERAL_OK;
|
|
if(!envia(bufout, sizeof(int)+sizeof(Licencia)))
|
|
{
|
|
C_log::log(MODULO, "Error al enviar licencia");
|
|
pirate = true;
|
|
}
|
|
break;
|
|
|
|
case(PETICION_GENERAL_NO):
|
|
C_log::log(MODULO, "Peticion de fin");
|
|
pirate = true;
|
|
|
|
break;
|
|
default:
|
|
C_log::log(MODULO, "id no reconocido");
|
|
|
|
pirate = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
//*****************************************************************************
|
|
bool ConexionClienteLicSrv::envia(int id)
|
|
{
|
|
return soc->envia_package((BYTE*)&id, sizeof(id)) == TRUE;
|
|
}
|
|
//*****************************************************************************
|
|
bool ConexionClienteLicSrv::envia(void *buf, int siz)
|
|
{
|
|
return soc->envia_package((BYTE*)buf, siz) == TRUE;
|
|
}
|
|
//*****************************************************************************
|