From 26b3187e1b3c6fcfeb11609a20022ec6e5a7723b Mon Sep 17 00:00:00 2001
From: Eduardo Machado <emm14@inf.ufpr.br>
Date: Thu, 3 Dec 2015 21:03:23 -0200
Subject: [PATCH] cd indo

---
 src/main.cpp        | 38 ++++++++++++++++++++++----------------
 src/messages.cpp    | 12 ++++++------
 src/submessages.cpp | 23 ++++++++++-------------
 3 files changed, 38 insertions(+), 35 deletions(-)

diff --git a/src/main.cpp b/src/main.cpp
index 9463b57..c480a42 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -40,7 +40,7 @@ int main(int argc, char *argv[]) {
       size = pathconf(".", _PC_PATH_MAX);
       if ((buff = (char *)malloc((size_t)size)) != NULL)
         currentPath = getcwd(buff, (size_t)size);
-      printf("%s (C) ", currentPath);
+      cout << currentPath << "(C) " << endl;
 
       /* Executa o comando escolhido. */
       cin >> command;
@@ -63,21 +63,27 @@ int main(int argc, char *argv[]) {
     cout << "Execução em modo servidor iniciada." << endl;
     cout << "===================================" << endl;
     while(1){
-      recv(soquete, receiptMessage, 68*sizeof(char), 0);
-      serverReceive.stringToObj((unsigned char*)receiptMessage);
-      // Lê começo da mensagem e vê se tem o delimitador de início
-      if(serverReceive.getStartMessage() == 0x7E){ // 0x7E = 01111110
-        if(serverReceive.getType() == 3){
-          if(serverReceive.checkParity()){ // Se a paridade estiver errada
-            resposta.setData((unsigned char*)'0',0,0); // Manda um Nack
-            send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
-          } else {
-            mainMessage.receiveCD(serverReceive.getData());
-            /* Escreve onde você está. */
-            size = pathconf(".", _PC_PATH_MAX);
-            if ((buff = (char *)malloc((size_t)size)) != NULL)
-              currentPath = getcwd(buff, (size_t)size);
-            printf("%s (S) ", currentPath);
+      receiptSize = recv(soquete, receiptMessage, 16, 0);
+      if (receiptSize != -1) {
+        // Lê começo da mensagem e vê se tem o delimitador de início
+        if(receiptMessage[0] == 0x7E){ // 0x7E = 01111110
+          serverReceive.stringToObj((unsigned char*)receiptMessage);
+          // for(int i=0;i<erro;i++){
+          //     bitset<8> x(receiptMessage[i]);
+          //     cout << x << endl;
+          // }
+          if(serverReceive.getType() == 3){
+            if(serverReceive.checkParity()){ // Se a paridade estiver errada
+              resposta.setData((unsigned char*)"0",0,0); // Manda um Nack
+              send(soquete,resposta.objToString(),68, 0);
+            } else {
+              mainMessage.receiveCD(serverReceive.getData());
+              /* Escreve onde você está. */
+              size = pathconf(".", _PC_PATH_MAX);
+              if ((buff = (char *)malloc((size_t)size)) != NULL)
+                currentPath = getcwd(buff, (size_t)size);
+              cout << currentPath << "(S) " << endl;
+            }
           }
         }
       }
diff --git a/src/messages.cpp b/src/messages.cpp
index a634445..35eee58 100644
--- a/src/messages.cpp
+++ b/src/messages.cpp
@@ -15,7 +15,7 @@ int Message::sendCD(unsigned char* dirName){
   ufds[0].events = POLLIN;
 
   changeDir.setData(dirName,3,0);
-cout << changeDir.getType() << " - " << changeDir.getSize() << endl;
+
   while(!success){
     error = send(soquete, changeDir.objToString(), 68, 0);
     if (error == -1){
@@ -31,7 +31,7 @@ cout << changeDir.getType() << " - " << changeDir.getSize() << endl;
           cout << "Erro no recebimento de resposta (messages.cpp::sendCD)" << endl;
           return -1;
         } else {
-          recv(soquete, receiptMessage, 68*sizeof(char), 0);
+          recv(soquete, receiptMessage, 68, 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
@@ -514,17 +514,17 @@ int Message::receiveCD(unsigned char* intendedDirectory){
   errorTest = chdir((char*) intendedDirectory);
   if(errno == ENOENT){
     // Diretorio não existe
-    resposta.setData((unsigned char*)'0',14,0); // Manda um Erro
+    resposta.setData((unsigned char*)"0",14,0); // Manda um Erro
     send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
   } else if(errno == EPERM){
     // Não há permissão para acessar o diretorio
-    resposta.setData((unsigned char*)'1',14,0); // Manda um Erro
+    resposta.setData((unsigned char*)"1",14,0); // Manda um Erro
     send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
   } else if (errorTest == -1){
-    resposta.setData((unsigned char*)'0',0,0); // Manda um Nack
+    resposta.setData((unsigned char*)"0",0,0); // Manda um Nack
     send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
   } else {
-    resposta.setData((unsigned char*)'0',8,0); // Manda um OK
+    resposta.setData((unsigned char*)"0",8,0); // Manda um OK
     send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
   }
 }
diff --git a/src/submessages.cpp b/src/submessages.cpp
index ec91cc8..c480c6c 100644
--- a/src/submessages.cpp
+++ b/src/submessages.cpp
@@ -61,7 +61,6 @@ void SubMessage::setData(unsigned char* dataBody, int type, int seq){
   }
 
   setSizSeqTyp(tamanho, seq, type);
-
   setParity();
 }
 
@@ -108,25 +107,23 @@ unsigned char* SubMessage::objToString(){
   return str;
 }
 
-void SubMessage::stringToObj(unsigned char* string){
+void SubMessage::stringToObj(unsigned char* str){
+  int i, size = 0;
+  sizSeqTyp = 0;
   // Delimitador de início
-  startMessage = string[0];
-
+  startMessage = str[0];
   // Atribuição de tamanho, sequencia e tipo.
-  sizSeqTyp = (sizSeqTyp << 0) | string[1];
-  sizSeqTyp = (sizSeqTyp << 8) | string[2];
-
+  sizSeqTyp = (sizSeqTyp << 0) | str[1];
+  sizSeqTyp = (sizSeqTyp << 8) | str[2];
   // aloca a área de dados.
-  int size = this->getSize();
+  size = getSize();
   data = new unsigned char[size];
-
   // Atribuição de dados.
-  for(int i = 0; i < size+3; ++i){
-    data[i] = string[i+3];
+  for(i = 0; i < size+3; ++i){
+    data[i] = str[i+3];
   }
-
   // Passagem da paridade.
-  parity = string[size+3];
+  parity = str[size+3];
 }
 
 int SubMessage::checkParity(){
-- 
GitLab