static unsigned long SendRequest(u_size op_code,u_size total_objects,void *packet, u_size size) { header_t header; void *to_send; int socket; int ret; ack_t *ack_ptr; void *data; u_size header_size; /* Tipo de pedido */ header.opCode = op_code; header.total_objects = total_objects; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); header_size = GetHeaderData(header, &data); /* Concateno los paquetes header y pedido */ if( (to_send = malloc(header_size+size)) == NULL ) return CONNECT_ERROR; memmove(to_send, data, header_size); free(data); /* Chequeo si realmente se manda un paquete asociado al pedido */ if( packet != NULL ) { memmove(to_send+header_size, packet, size); } /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(to_send); return CONNECT_ERROR; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, to_send,header_size+size); free(to_send); if(exitPipe==1) { exitPipe=0; close(socket); return TIMEOUT_ERROR; } /* Espero por la respuesta del servidor */ ack_ptr = receiveTCP(socket); if(ack_ptr==NULL) { close(socket); return TIMEOUT_ERROR; } ret = ack_ptr->ret_code; free(ack_ptr); /* Cierro la conexion????? */ close(socket); return ret; }
static download_header_t SendDownloadRequest(void *packet, u_size size) { header_t header; void *to_send; int socket; download_header_t download_info; void *data; u_size header_size; void *ack_data; download_info.ret_code = CONNECT_ERROR; /* Tipo de pedido */ header.opCode = __DOWNLOAD__; header.total_objects = 1; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); header_size = GetHeaderData(header, &data); /* Concateno los paquetes header y pedido */ if( (to_send = malloc(header_size+size)) == NULL ) return download_info; memmove(to_send, data, header_size); memmove(to_send+header_size, packet, size); free(data); /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(to_send); return download_info; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, to_send,header_size+size); free(to_send); if(exitPipe==1) { exitPipe=0; close(socket); return download_info; } /* Espero por la respuesta del servidor */ ack_data = receiveTCP(socket); if(ack_data==NULL) { close(socket); return download_info; } GetDownloadHeaderPack(ack_data, &download_info); /* Cierro la conexion????? */ close(socket); return download_info; }
static status SendSignal(u_size op_code, void *packet, u_size size) { header_t header; void *to_send; int socket; u_size header_size; void *data; /* Tipo de senial */ header.opCode = op_code; header.total_objects = 1; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); /* Concateno los paquetes header y pedido */ header_size = GetHeaderData(header, &data); if( (to_send = malloc(header_size+size)) == NULL ) return ERROR; memmove(to_send, data, header_size); memmove(to_send + header_size,packet,size); free(data); /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(to_send); return ERROR; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, to_send,header_size+size); free(to_send); if(exitPipe==1) { exitPipe=0; close(socket); return ERROR; } close(socket); return OK; }
// Read Header // Run through the rest of the header information bool trpgr_Archive::ReadHeader(bool readAllBlocks) { int ret; if (!fp || headerRead) return false; headerRead = true; // Next int64 should be the header size trpgEndian cpuNess = trpg_cpu_byte_order(); int32 headerSize; if (fread(&headerSize,sizeof(int32),1,fp) != 1) return false; if (ness != cpuNess) headerSize = trpg_byteswap_int(headerSize); int headLen = headerSize; if (headLen < 0) return false; // Read in the header whole trpgMemReadBuffer buf(ness); buf.SetLength(headLen); char *data = buf.GetDataPtr(); if ((ret = GetHeaderData(data,headLen,fp)) != headLen) return false; // Set up a parser // Catch the tables we need for the archive trpgMatTable1_0 oldMatTable; trpgTexTable1_0 oldTexTable; trpgr_Parser parser; parser.AddCallback(TRPGHEADER,&header); parser.AddCallback(TRPGMATTABLE,&materialTable); // Went back to oldest style for 2.0 parser.AddCallback(TRPGMATTABLE2,&oldMatTable); // Added 11-14-98 (1.0 material table) parser.AddCallback(TRPGTEXTABLE,&oldTexTable); parser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 parser.AddCallback(TRPGMODELTABLE,&modelTable); parser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 parser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 parser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 parser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); parser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); // Don't read the tile table for v1.0 archives // It's only really used for 2.0 archives parser.AddCallback(TRPGTILETABLE2,&tileTable); // Parse the buffer if (!parser.Parse(buf)) return false; if(header.GetIsMaster()) { // bool firstBlock = true; //if the master has textures, we want to use them instead of the tables in the //block archives // int numTiles = 0; //tileTable. int totalrows,totalcols; trpg2dPoint mhdr_swExtents; trpg2dPoint mhdr_neExtents; trpg3dPoint mhdr_Origin; // integrate header information from the block header. header.GetExtents(mhdr_swExtents,mhdr_neExtents); header.GetOrigin(mhdr_Origin); header.GetBlocks(totalrows,totalcols); if(readAllBlocks) { for(int row=0;row<totalrows;row++) { for(int col=0;col<totalcols;col++) { // Read each block -- Warning, this can take a while!!! ReadSubArchive( row, col, cpuNess); } } } else { ReadSubArchive( 0, 0, cpuNess);//Get the first archive! } } tileTable.SetCurrentBlock(-1,-1,false); // 1.0 Compatibility // If we see an older style material table, convert it to the new style // This isn't terribly memory efficient, but it does work if (oldMatTable.isValid()) materialTable = oldMatTable; if (oldTexTable.isValid()) texTable = oldTexTable; // Set up a tile cache, if needed trpgTileTable::TileMode tileMode; tileTable.GetMode(tileMode); if (tileMode == trpgTileTable::Local) { if (tileCache) delete tileCache; char fullBase[1060]; sprintf(fullBase,"%s" PATHSEPERATOR "tileFile",dir); tileCache = GetNewRAppFileCache(fullBase,"tpf"); } valid = true; return true; }
/** * Read a sub block from a 2.2 TXP database. This can be called any time after ReadHeader is called * if ReadHeader is called with the false parameter to specify not to read all the sub-archives. * This can make a huge improvement in startup time for loading a very large archive with many blocks. **/ bool trpgr_Archive::ReadSubArchive(int row, int col, trpgEndian cpuNess) { int ret; trpgHeader blockHeader; trpgr_Parser bparser; char blockpath[1060]; //open the block archive // the block archive will be in the base dir + \\cols\\row\\archive.txp sprintf(blockpath,"%s%s%d%s%d%sarchive.txp",dir,PATHSEPERATOR,col,PATHSEPERATOR,row,PATHSEPERATOR); FILE *bfp = osgDB::fopen(blockpath,"rb"); if(!bfp) { return false; } // Look for a magic # and endianness int32 bmagic; if (fread(&bmagic,sizeof(int32),1,bfp) != 1) { //close the block archive fclose(bfp); return false; } // The block archive will always be the same endianness as the master if ( (bmagic != GetMagicNumber()) && (trpg_byteswap_int(bmagic) != GetMagicNumber()) ) { //close the block archive fclose(bfp); return false; } int32 bheaderSize=0; if (fread(&bheaderSize,sizeof(int32),1,bfp) != 1) { //close the block archive fclose(bfp); return false; } if (ness != cpuNess) bheaderSize = trpg_byteswap_int(bheaderSize); int bheadLen = bheaderSize; if (bheadLen < 0) { //close the block archive fclose(bfp); return false; } // Read in the header whole trpgMemReadBuffer bbuf(ness); bbuf.SetLength(bheadLen); char *bdata = bbuf.GetDataPtr(); if ((ret = GetHeaderData(bdata,bheadLen,bfp)) != bheadLen) { //close the block archive fclose(bfp); return false; } //keep track of where this came from in the master table. tileTable.SetCurrentBlock(row,col,true); texTable.SetCurrentBlock(row,col); bparser.AddCallback(TRPGHEADER,&blockHeader); bparser.AddCallback(TRPGMATTABLE,&materialTable); // Went back to oldest style for 2.0 //if(!headerHasTexTable) { bparser.AddCallback(TRPGTEXTABLE2,&texTable); // Added for 2.0 //} bparser.AddCallback(TRPGMODELTABLE,&modelTable); bparser.AddCallback(TRPGLIGHTTABLE,&lightTable); // Added for 2.0 bparser.AddCallback(TRPGRANGETABLE,&rangeTable); // Added for 2.0 bparser.AddCallback(TRPG_TEXT_STYLE_TABLE,&textStyleTable); // Added for 2.1 bparser.AddCallback(TRPG_SUPPORT_STYLE_TABLE,&supportStyleTable); bparser.AddCallback(TRPG_LABEL_PROPERTY_TABLE,&labelPropertyTable); // Don't read the tile table for v1.0 archives // It's only really used for 2.0 archives bparser.AddCallback(TRPGTILETABLE2,&tileTable); // Parse the buffer if (!bparser.Parse(bbuf)) return false; //close the block archive fclose(bfp); tileTable.SetCurrentBlock(-1,-1,false); return true; }
static int SendListMoviesRequest(void *data, u_size size, movie_t ***out_ptr) { header_t header; header_t ack_header; void *ack_movies; void *to_send; void * ackHeader; int socket; void *header_data; u_size header_size; /* Tipo de pedido */ header.opCode = __LIST_MOVIES_BY_GEN__; header.total_objects = 1; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); header_size = GetHeaderData(header, &header_data); /* Concateno los paquetes header y pedido */ if( (to_send = malloc(header_size+size)) == NULL ) return CONNECT_ERROR; memmove(to_send, header_data, header_size); free(header_data); /* Chequeo si realmente se manda un paquete asociado al pedido */ memmove(to_send+header_size, data, size); /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(to_send); return -1; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, to_send,header_size+size); free(to_send); if(exitPipe==1) { exitPipe=0; close(socket); return TIMEOUT_ERROR; } /* Espero por la respuesta del servidor */ ackHeader=receiveTCP(socket); if(ackHeader==NULL) { close(socket); return TIMEOUT_ERROR; } GetHeaderPack(ackHeader,&ack_header); fflush(stdout); if( ack_header.opCode == __LIST_OK__ ) { ack_movies = receiveTCP(socket); if(ack_movies==NULL) { close(socket); return TIMEOUT_ERROR; } *out_ptr = GetMovies(ack_movies,ack_header.total_objects); free(ack_movies); } else ack_header.total_objects = 0; close(socket); return ack_header.total_objects; }
static int SendListUsersRequest(client_t ***out_ptr) { header_t header; header_t ack_header; void *ack_users; void * ackHeader; int socket; void *header_data; u_size header_size; char * decripted; /* Tipo de pedido */ header.opCode = __LIST_USERS__; header.total_objects = 1; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); header_size = GetHeaderData(header, &header_data); /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(header_data); return -1; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, header_data,header_size); free(header_data); if(exitPipe==1) { exitPipe=0; close(socket); return -1; } /* Espero por la respuesta del servidor */ ackHeader=receiveTCP(socket); if(ackHeader==NULL) { close(socket); return -1; } GetHeaderPack(ackHeader,&ack_header); if( ack_header.opCode == __LIST_USERS_OK__ ) { ack_users = receiveTCP(socket); if(ack_users==NULL) { close(socket); return -1; } decripted=Decypher(ack_users,ack_header.total_objects*(MAX_USER_LEN+MAX_USER_MAIL+MAX_USER_DESC+sizeof(unsigned char)),log_passwd); *out_ptr = GetUsersList(decripted,ack_header.total_objects); free(decripted); free(ack_users); } else { if( ack_header.opCode == __USER_ACCESS_DENY__ || ack_header.opCode == __USER_IS_NOT_LOG__ ) return -2; else return -1; } close(socket); return ack_header.total_objects; }
static int SendListGensRequest(list_movie_request_t ***out_ptr) { header_t header; header_t ack_header; void *ack_gens; void * dataAux; int socket; void *header_data; u_size header_size; /* Tipo de pedido */ header.opCode = __LIST_GENS__; header.total_objects = 1; /* Identificacion del usuario */ strcpy(header.user,log_user); strcpy(header.passwd,log_passwd); header_size = GetHeaderData(header, &header_data); /* Me conecto al servidor */ if( (socket=connectTCP(server_host,server_port)) < 0 ){ free(header_data); return -1; } setSocketTimeout(socket,TIMEOUT_DEFAULT); /* Mando el paquete */ sendTCP(socket, header_data,header_size); free(header_data); if(exitPipe==1) { exitPipe=0; close(socket); return -1; } /* Espero por la respuesta del servidor */ dataAux=receiveTCP(socket); if(dataAux==NULL) { close(socket); return -1; } GetHeaderPack(dataAux,&ack_header); if( ack_header.opCode == __LIST_OK__ ) { ack_gens = receiveTCP(socket); if(ack_gens==NULL) { close(socket); return -1; } *out_ptr = GetGenList(ack_gens,ack_header.total_objects); free(ack_gens); } else { return -1; } close(socket); return ack_header.total_objects; }