diff --git a/src/main.cpp b/src/main.cpp index a9d29301d2e898642861e3393a5c58a32b639abc..9d1e6efe98331677dd334462172631d49e6eaeba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -103,14 +103,15 @@ int main(int argc, char *argv[]) { } }else if(serverReceive.getType() == 5){ if(serverReceive.checkParity()){ // Se a paridade estiver errada - resposta.setData((unsigned char*)"4",0,0); // Manda um Nack + resposta.setData((unsigned char*)"5",0,0); // Manda um Nack send(soquete,resposta.objToString(),68, 0); } else { - resposta.setData((unsigned char*)"4",1,0); // Manda um ack + resposta.setData((unsigned char*)"5",8,0); // Manda um ack send(soquete,resposta.objToString(),68, 0); - if(mainMessage.receivePUT(serverReceive.getData(), currentPath)){ - cout << "ERRO: put."; + if(mainMessage.receivePUT(serverReceive.getData(), currentPath) == 0){ + cout << "arquivo recebido" << endl; } + cout << "ERRO: put." << endl; } } } diff --git a/src/messages.cpp b/src/messages.cpp index fbb318eb585c7090ac7c8912f479da10be2d9097..75f31cb559fb85a0700a51cfae22f450cb3dbe29 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -151,11 +151,11 @@ int Message::sendPUT(unsigned char* fileName){ fileIn.open((char*)fileName, ios::in); fileIn.seekg(0); - +cout << "PUT ===> 1" << endl; while(getline(fileIn, temp)) { fileData += temp + "\n"; } - +cout << "PUT ===> 2" << endl; while(!success){ error = send(soquete, put.objToString(), 68, 0); if (error == -1){ @@ -171,16 +171,22 @@ int Message::sendPUT(unsigned char* fileName){ cout << "Erro no recebimento de resposta (messages.cpp::sendPUT)" << endl; return -1; } else { +cout << "PUT ===> 3" << endl; recv(soquete, receiptMessage, 68, 0); answer.stringToObj((unsigned char*)receiptMessage); +cout << "PUT ===> 4" << endl; // Lê começo da mensagem e vê se tem o delimitador de início if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110 success = 1; +cout << "PUT ===> 5" << endl; if(answer.getType() == 8){ // 8 = OK // OK, mandar tamanho sprintf(fileSize, "%d", fileData.size()); +cout << "PUT ===> 6 (fileSize)" << fileSize << endl; size.setData((unsigned char*)fileSize,9,0); +cout << "PUT ===> 7" << endl; send(soquete, size.objToString(), 68, 0); +cout << "PUT ===> 8" << endl; success = 0; while(!success){ rv = poll(ufds, 1, 500); @@ -189,22 +195,28 @@ int Message::sendPUT(unsigned char* fileName){ cout << "Erro no recebimento de resposta (messages.cpp::sendPUT)" << endl; return -1; } else { +cout << "PUT ===> 9" << endl; recv(soquete, receiptMessage, 68, 0); +cout << "PUT ===> 10" << endl; answer.stringToObj((unsigned char*)receiptMessage); +cout << "PUT ===> 11" << endl; if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110 if(answer.getType() == 8){ +cout << "PUT ===> 12" << endl; success = 1; if(sendData((unsigned char*)fileData.c_str(), 13)){ cout << "Erro ao mandar dados (messages.cpp::sendPUT)" << endl; return -1; } } else if (answer.getType() == 0){ +cout << "PUT ===> 13" << endl; success = 0; } else if (answer.getType() == 15){ // 15 = 0xE --> Erro if(answer.getData()[0] == '2'){ cout << "Não tem espaço para mandar o arquivo" << endl; return -1; } else { +cout << "PUT ===> 14" << endl; success = 0; } } @@ -213,6 +225,7 @@ int Message::sendPUT(unsigned char* fileName){ } } } else if(answer.getType() == 0){ // 0 = NACK +cout << "PUT ===> 15" << endl; // NACK success = 0; // reenvia pedido } @@ -588,13 +601,18 @@ int Message::receivePUT(unsigned char* fileName, char* currentPath){ ufds[0].fd = soquete; ufds[0].events = POLLIN; string receivedFile; - ofstream fileOut; + FILE *fileOut; + fileOut = fopen((char*)fileName, "w"); + if (fileOut == NULL){ + cout << "Erro ao criar arquivo, saindo" << endl; + return -1; + } // Calcula espaço livre if(statvfs(currentPath, buff) == -1){ cout << "Erro ao calcular espaço livre (messages.cpp::receivePUT)" << endl; } - availableSize = buff->f_bsize * buff->f_bfree; + availableSize = buff->f_bsize + buff->f_bfree; while(!success){ rv = poll(ufds, 1, 500); if(rv){ @@ -622,11 +640,10 @@ int Message::receivePUT(unsigned char* fileName, char* currentPath){ // Fica esperando dados receivedFile = receiveData(13); if(receivedFile != ""){ + fputs(receivedFile.c_str(),fileOut); + fclose(fileOut); cout << "Dados recebidos com sucesso!" << endl; - fileOut.open((char*)fileName, ios::binary); - for(i = 0; i < receivedFile.size(); i++){ - fileOut.write((char*)&receivedFile[i], sizeof(unsigned char)); - } + //fileOut.close(); return 0; } else { cout << "Erro ao receber dados (messages.cpp::receivePUT)" << endl; diff --git a/src/miniShell.cpp b/src/miniShell.cpp index f20d3cb5fc91ab6f99eef08ada46619cf31b7ed2..35c88ffc9dc055d09b94901e3f51d13681927550 100644 --- a/src/miniShell.cpp +++ b/src/miniShell.cpp @@ -53,7 +53,7 @@ int lsMini(string parameter, char* currentPath){ // Remove arquivo ls.txt remove(fileName.c_str()); - cout << "mostra:" << mostra << endl; + cout << mostra << endl; return 0; }