#include "StdAfx.h" #include "FileTransferManager.h" #include "DataTransfer.h" #include "_log.h" #include "proceso_cliente.h" #include "sock_sv.h" #include "dir_manager.h" #include "StrArray.h" #define MODULO "ProcClient" //***************************************************************************** FileTransferManager::FileTransferManager(void) { pirate = false; dirRaid[0]=0; } //***************************************************************************** FileTransferManager::~FileTransferManager(void) { } //***************************************************************************** bool FileTransferManager::envia(int id) { return soc->envia_package((BYTE*)&id, sizeof(id)) == TRUE; } //***************************************************************************** bool FileTransferManager::envia(void *buf, int siz) { return soc->envia_package((BYTE*)buf, siz) == TRUE; } //***************************************************************************** void FileTransferManager::run() { DataTransfer dt; Cb_file f; char str[512]; int nr=0; int nraid=0; void *buf; StrArray files,dirs; C_log::log(MODULO, "Iniciada Conexion"); if(!dt.setData(soc,&f) || !dt.setMode(DataTransfer::MODE_SEND)) { C_log::log(MODULO, "error al iniciar buffers de transmision"); pirate =true; } while(!pirate && !*soc->pirate) { if(exSal && *exSal) { C_log::log(MODULO, "Sale por desconexion del socket"); pirate =true; 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)); buf = &((int*)soc->buf)[1]; switch(idp) { case(PETICION_GENERAL_PRESENTA): //pilla usuario, pilla key if(nb!= sizeof(usu)) { C_log::log(MODULO, "Paquete de presentacion defectuoso"); pirate = true; break; } memcpy(&usu, buf,sizeof(usu)); usu.nombre[31] = 0; usu.clave[31] = 0; char claveUser[32]; memcpy(claveUser, usu.clave,32); nraid = 0; dirRaid[0]=0; if(duProv) { if(!duProv->fill(&usu, dirRaid)) { envia(PETICION_GENERAL_NO); C_log::log(MODULO, "Error al pillar datos de usuario: %s",usu.nombre); pirate = true; } } nraid = strlen(dirRaid); if(strcmp(usu.clave, claveUser)) { envia(PETICION_GENERAL_NO); C_log::log(MODULO, "Error clave de usuario incorrecta usuario: %s key: %s",usu.nombre, claveUser); pirate = true; } C_log::log(MODULO, "Presentado usuario %s",usu.nombre); if(!envia(PETICION_GENERAL_OK)) { C_log::log(MODULO, "Error al enviar ok en presentacion"); pirate = true; } break; case(PETICION_GENERAL_OK)://envia descargar archivo //pilla path if(nb!= 256) { C_log::log(MODULO, "Paquete ok defectuoso"); pirate = true; break; } memcpy(str,dirRaid,nraid); memcpy(&str[nraid], buf, 256); str[255]=0; C_log::log(MODULO, "Peticion de descarga de archivo %s", str); if(!f.abre(str,1,FALSE,TRUE)) { if(!envia(PETICION_GENERAL_NO)) { C_log::log(MODULO, "Error al enviar no en descarga"); pirate = true; } break; } if(!envia(PETICION_GENERAL_OK)) { C_log::log(MODULO, "Error al enviar no en descarga"); pirate = true; break; } if(!dt.start()) { C_log::log(MODULO, "Error al iniciar descarga"); pirate = true; break; } while(dt.currando()) Sleep(10); if(dt.isCanceled()) { C_log::log(MODULO, "Error al descargar archivo"); pirate = true; break; } C_log::log(MODULO, "Descarga archivo Exitosa"); break; case(PETICION_GENERAL_NO): if(!envia(PETICION_GENERAL_OK)) { C_log::log(MODULO, "Error al enviar no"); pirate = true; } break; case(PETICION_GENERAL_FIN): C_log::log(MODULO, "Recibida desconexion"); pirate = true; break; case(FILE_TRANSMISION_GET_FILES): C_log::log(MODULO, "Recibida peticion de getFiles"); //pilla path if(nb!= 256) { C_log::log(MODULO, "Paquete ok defectuoso"); pirate = true; break; } memcpy(str,dirRaid,nraid); memcpy(&str[nraid], buf, 256); str[255]=0; if(!Cdir_manager::listar_elementos(str, &files, &dirs)) { if(!envia(PETICION_GENERAL_NO)) { C_log::log(MODULO, "Error al enviar no"); pirate = true; } break; } if(!envia(PETICION_GENERAL_OK)) { C_log::log(MODULO, "Error al enviar ok"); pirate = true; } if(!envia(files.n_i)) { C_log::log(MODULO, "Error al enviar strArray"); pirate = true; } if(!envia(files.str, files.n_str)) { C_log::log(MODULO, "Error al enviar strArray"); pirate = true; } if(!envia(dirs.n_i)) { C_log::log(MODULO, "Error al enviar strArray"); pirate = true; } if(!envia(dirs.str, dirs.n_str)) { C_log::log(MODULO, "Error al enviar strArray"); pirate = true; } break; default: C_log::log(MODULO, "Id cab no reconocido"); pirate = true; break; } } C_log::log(MODULO, "Se desconecta proceso"); } //*****************************************************************************