/* Funcion que genera la cadena de bytes para almacenar la Formacion. Debe recibir por * referencia un int que pueda almacenar el tamaño de la cadena, para su guardado * posterior en el archivo. */ Byte * CampoCadena::obtenerRegistro(int *tam){ //Obtengo el tamaño de la cadena y lo serializo int tamDescripcion = this->descripcion.size()+1; //agrego 1 para incluir el caracter nulo Byte *sizeString = intToBytes(tamDescripcion); // Serializo la descripcion Byte *string = convertirAByte(this->descripcion); // Defino el tamaño de 'sizeString'+'string' y lo serializo int tamRegistro = (int)sizeof(int) + tamDescripcion; Byte *sizeRegistro = intToBytes(tamRegistro); // Defino el tamaño total que va a tener la serializacion *tam = sizeof(int)*2 + tamDescripcion; // concateno los integer Byte *tmp; concatenar(&tmp, sizeRegistro, 4, sizeString, 4); // concateno el tmp con la descripcion Byte *registro; concatenar(®istro, tmp, 8, string, tamDescripcion); // elimino los punteros internos delete sizeString; delete string; delete tmp; //retorno return registro; }
void IpcClient::sendCommand(const QString& command, ElevateMode const elevate) { QDataStream stream(m_Socket); stream.writeRawData(kIpcMsgCommand, 4); std::string stdStringCommand = command.toStdString(); const char* charCommand = stdStringCommand.c_str(); int length = strlen(charCommand); char lenBuf[4]; intToBytes(length, lenBuf, 4); stream.writeRawData(lenBuf, 4); stream.writeRawData(charCommand, length); char elevateBuf[1]; // Refer to enum ElevateMode documentation for why this flag is mapped this way elevateBuf[0] = (elevate == ElevateAlways) ? 1 : 0; stream.writeRawData(elevateBuf, 1); }
bool XMLRPC::stringListToBytes(const t_strList* _source) { t_int const list_size = _source->size(); // Write the length of the list: BTG_ICHECK( intToBytes(&list_size) ); // Write the characters in the string to the byte array: t_strList::const_iterator ci; std::string ii(""); for (ci = _source->begin(); ci != _source->end(); ci++) { ii = ""; ii = *ci; BTG_ICHECK( stringToBytes(&ii) ); } return true; }
/* Envoi d'une requète R_demandePartieSuivanteFichier au serveur. Ecris la partie du fichier dans buf */ int partieSuivante(client *cl, char *buf, int partFichier){ int nbrTentative = 0; int nbrMaxTentative = 5; int erreur = 0; char buffer[R_tailleMaxReq]; requete reqSend; requete reqRecv; intToBytes(buffer, partFichier); // Initialise une requète de type R_demandePartieSuivanteFichier et la converti en octets initRequete(&reqSend, R_demandePartieSuivanteFichier, cl->id, sizeof(int), buffer); requeteToBytes(buffer,reqSend); do{ erreur = sendto(cl->fdSocket, buffer, sizeofReq(reqSend), 0, (struct sockaddr*) &(cl->addrSend), sizeof(struct sockaddr_in)); if (erreur < 0){ perror("Erreur lors de l'appel à partieSuivante, sendto renvois une erreur"); return -6; } erreur = definirTimeOut(cl->fdSocket, C_timeoutDemandeFichier); if (erreur < 0){ perror("Erreur lors de l'appel à partieSuivante, problème lors du select"); return -2; }else if(erreur == 0){ nbrTentative++; initRequete(&reqSend, R_demandePartieSuivanteFichier, cl->id, sizeof(int), buffer); requeteToBytes(buffer,reqSend); }else{ /* si le serveur à reçu la demande de connexion */ socklen_t fromlen = sizeof(struct sockaddr_in); erreur = recvfrom(cl->fdSocket,buffer,R_tailleMaxReq, 0,(struct sockaddr*) &(cl->addrRecv),&fromlen); if (erreur < 0){ perror("Erreur lors de l'appel à partieSuivante, recvfrom renvois une erreur"); return -3; } // Initialise une requète avec les octets envoyer par le serveur initRequeteFromBytes(&reqRecv, buffer); if (reqRecv.typeReq == R_okPartieSuivanteFichier){ memcpy(buf, reqRecv.data, reqRecv.tailleData); return reqRecv.tailleData; }else if(reqRecv.typeReq == R_finFichier){ printf("Fichier finit\n"); return -1; }else if (reqRecv.typeReq == R_fichierAudioNonTrouver){ printf("Erreur lors de partieSuivante, le serveur ne trouve pas le fichier\n"); return -7; }else if(reqRecv.typeReq == R_idInexistant){ printf("Le serveur ne reconnais pas l'id qui à été envoyer lors de la demande de fichier\n"); }else{ printf("La requète reçu en réponse à la demande de fichier n'est pas prévue: %d\n",reqRecv.typeReq); return -4; } } } while (nbrTentative < nbrMaxTentative); printf("Echec de demande de fichier, aucune réponse\n"); return -5; }