From 0058f41c6d9c9f752666cac524def82679036f8b Mon Sep 17 00:00:00 2001 From: Victor Perszel <vlp14@inf.ufpr.br> Date: Sun, 29 Nov 2015 17:28:23 -0200 Subject: [PATCH] sendLS incompleto --- src/messages.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/messages.cpp b/src/messages.cpp index c0fd212..5c9a10d 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -10,7 +10,7 @@ int Message::sendCD(unsigned char* dirName){ char *receiptMessage = (char*)malloc(sizeof(char*)*64); struct pollfd ufds[1]; // usado para timeout em recv SubMessage changeDir, answer; - + changeDir.setData(dirName,3,0); while(!success){ @@ -65,6 +65,66 @@ int Message::sendCD(unsigned char* dirName){ } } +int Message::sendLS(unsigned char* options){ + int error, success = 0, garbage, rv; + char *receiptMessage = (char*)malloc(sizeof(char*)*64); + struct pollfd ufds[1]; // usado para timeout em recv + SubMessage listDir, answer; + + listDir.setData(options,4,0); + + while(!success){ + error = send(soquete, changeDir.objToString(), changeDir.getSize()+4, 0); + if (error == -1){ + cout << "Erro ao tentar mudar de diretório (messages.cpp::sendCD)" << endl; + } + + garbage = 0; + while((garbage < 10) && (!success)){ + // recebe resposta + ufds[0].fd = soquete; + ufds[0].events = POLLIN; + // vetor de pollfd, numero de buffers observados, timeout(ms) + rv = poll(ufds, 1, 500); + if(rv){ + if(rv == -1){ + cout << "Erro no recebimento de resposta (messages.cpp::sendData)" << endl; + return -1; + } else { + recv(soquete, receiptMessage, 68*sizeof(char), 0); + answer.stringToObj((unsigned char*)receiptMessage); + // Lê começo da mensagem e vê se tem o delimitador de início + if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110 + success = 1; + if(answer.getType() == 10){ // 10 = 0xA --> (A)mostra + // Mostra as mensagens + return 0; // YAY + } else if(answer.getType() == 0){ // 0 = NACK + // NACK + success = 0; // reenvia pedido + } else if(answer.getType() == 14){ //14 = 0xE --> Erro + // ERRO + if(answer.getData()[0] == '0'){ + cout << "Diretório Inexistente\n" << endl; + return -1; + } else if (answer.getData()[0] == '1'){ + cout << "Sem permissão para acessar o diretório\n" << endl; + return -1; + } else { + success = 0; // reenvia pedido + } + } + } + } + } else{ + cout << "Tempo limite de resposta excedido :c\n" << endl; + cout << "TIMEOUT ATINGIDO (messages.cpp::sendData)" << endl; + } + garbage++; + } + } +} + int Message::sendData(unsigned char* stringMessage){ int numberOfMessages, sizeLastMessage, size=0; int i, j, k, garbage, error, rv, success = 0; -- GitLab