diff --git a/src/messages.cpp b/src/messages.cpp index 42bf901e7c55af8231141a17cb9bb905ace018f9..4f3b079010e9fecc5461e5b3f212a258d44c2a2e 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -12,7 +12,7 @@ int Message::sendMessage(unsigned char* stringMessage){ unsigned char* mesgReturn; // mensagem que recebe de retorno (ack, erro, etc) char *receiptMessage = (char*)malloc(sizeof(char*)*64); char erro1[10], erro2[10], sucesso[10], buffer[10]; - struct pollfd ufds[1]; + struct pollfd ufds[1]; // usado para timeout em recv // Calcula o tamanho da msg while( stringMessage[size] != '\0'){ @@ -26,9 +26,11 @@ int Message::sendMessage(unsigned char* stringMessage){ numberOfMessages = (size/64); } sizeLastMessage = size%64; + // Cria as sub mensagens SubMessage subMensagem[numberOfMessages]; + // Atribui os tipo if(stringMessage[0] == 'l' && stringMessage[1] == 's'){ tipo = 0x4; } else if (stringMessage[0] == 'c' && stringMessage[1] == 'd'){ @@ -41,24 +43,31 @@ int Message::sendMessage(unsigned char* stringMessage){ tipo = 0xD; } + // string usada para dividir a mensagem de entrada e colocar na parte de data das SubMessages subData = (unsigned char*) malloc(sizeof(unsigned char) * 64); + // Divide a mensagem for(i = 0; i < numberOfMessages-1; ++i){ for(j = 0; j < 64; ++j){ subData[j] = stringMessage[(i*64)+j]; } + subMensagem[i].setStartMessage(); subMensagem[i].setData(subData, tipo, i); } if (sizeLastMessage){ + // Caso a última mensagem não seja completa realoca subData para o tamanho da última mensagem subData = (unsigned char*) realloc(subData, sizeof(unsigned char) * sizeLastMessage); for(j = 0; j < sizeLastMessage; ++j){ subData[j] = stringMessage[(i*64)+j]; } + subMensagem[i].setStartMessage(); subMensagem[i].setData(subData, tipo, i); }else{ + // Caso contrario continua com o tamanho maior for(j = 0; j < 64; ++j){ subData[j] = stringMessage[(i*64)+j]; } + subMensagem[i].setStartMessage(); subMensagem[i].setData(subData, tipo, i); }