licUtiles_V2017/ConexionClienteLicSrv.cpp

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;
}
//*****************************************************************************