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