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