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