Skip to content
Snippets Groups Projects
Commit da3b4fa9 authored by Victor Perszel's avatar Victor Perszel :top:
Browse files

sendLS respondendo server

parent 34d6e6df
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,9 @@ int Message::sendCD(unsigned char* dirName){
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage changeDir, answer;
ufds[0].fd = soquete;
ufds[0].events = POLLIN;
changeDir.setData(dirName,3,0);
while(!success){
......@@ -21,9 +24,6 @@ int Message::sendCD(unsigned char* dirName){
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){
......@@ -69,7 +69,11 @@ 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;
String listagem;
SubMessage listDir, answer, ack, nack;
ufds[0].fd = soquete;
ufds[0].events = POLLIN;
listDir.setData(options,4,0);
......@@ -81,9 +85,6 @@ int Message::sendLS(unsigned char* options){
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){
......@@ -98,6 +99,33 @@ int Message::sendLS(unsigned char* options){
success = 1;
if(answer.getType() == 10){ // 10 = 0xA --> (A)mostra
// Mostra as mensagens
if(answer.checkParity()){ // Caso a paridade dê errado
nack.setData(answer.getSeq(),0,0); // Manda um nack
send(soquete,nack.objToString(),nack.getSize()+4, 0);
success = 0;
} else {
strcat(listagem,answer.getData()); // Põe o valor recebido em "listagem"
success = 0;
while(!success){
rv = poll(ufds, 1, 500); // Observa por novas mensagens
if(rv){
recv(soquete, receiptMessage, 68*sizeof(char), 0);
answer.stringToObj((unsigned char*)receiptMessage);
if(answer.getStartMessage() == 0x7E){
if(answer.getType() == 10){ // 10 = 0xA --> (A)mostra
strcat(listagem,answer.getData()); // Põe em "listagem"
ack.setData(answer.getSeq(),1,0);
send(soquete, ack.objToString(), ack.getSize()+4, 0); // Manda um ACK
} else if (answer.getType() == 15) { // Se for FIM
ack.setData(answer.getSeq(),1,0);
success = 1;
}
}
} else {
// TIMEOUT
}
}
}
return 0; // YAY
} else if(answer.getType() == 0){ // 0 = NACK
// NACK
......@@ -105,10 +133,7 @@ int Message::sendLS(unsigned char* options){
} 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;
cout << "Opção inválida, por favor tente -l, -a ou -la\n" << endl;
return -1;
} else {
success = 0; // reenvia pedido
......@@ -134,6 +159,9 @@ int Message::sendData(unsigned char* stringMessage){
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage answer, end;
ufds[0].fd = soquete;
ufds[0].events = POLLIN;
// Calcula o tamanho da msg
while( stringMessage[size] != '\0'){
size++;
......@@ -207,9 +235,6 @@ int Message::sendData(unsigned char* stringMessage){
cout << "Problema com o envio da mensagem (messages.cpp::sendData)" << endl;
}
// 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){
......@@ -257,9 +282,6 @@ int Message::sendData(unsigned char* stringMessage){
success = 0;
garbage = 0;
while((garbage < 10) && (!success)){ // Tenta 10 vezes para evitar reenviar a mensagem quando recebe lixo
// 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){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment