diff --git a/LEIAME.txt b/LEIAME.txt new file mode 100644 index 0000000000000000000000000000000000000000..bcf821fcb738260ab71976c2145ce55774503bba --- /dev/null +++ b/LEIAME.txt @@ -0,0 +1,34 @@ +------------------------------------------------------ +------- Eduardo Maia Machado - GRR20142062 ----------- +------- Victor Luis Perszel - GRR20144615 ------------ +------------------------------------------------------ + + Este é o relatório referente ao trabalho 1 da disciplina de Redes de Computadores I, implementado pelos alunos Eduardo Machado e Victor Perszel. + Os arquivos e diretórios existentes na pasta raiz do trabalho são: + - include: diretório contendo as bibliotecas do programa, são elas: + - connectionRawSocket.h: contém todos os .h necessários para a compilação dos arquivos e a função do arquivo connectionRawSocket.cpp; + - messages.h: biblioteca para o messages.cpp, contendo a class Message, que contém as funções de envio / recebimento do CD, LS, PUT, GET e DATA; + - submessages.h: biblioteca para o submessages.cpp, contém a class SubMessage, com o protocolo das submensagens conforme especificação (Delimitador de Início, Tamanho, Sequência, etc...) e funções que setam / retornam o valor de cada campo; + - miniShell.h: biblioteca para o miniShell.cpp, detalhado mais abaixo. + - lib: diretório contendo os arquivos .a do programa, gerados apenas após o Makefile, são eles: connectionRawSocket.a, messages.a, submessages.a e miniShell.a; + - obj: diretório contendo os arquivos objeto (.o) do programa, gerados apenas após o Makefile, são eles: connectionRawSocket.o, messages.o, submessages.o e miniShell.o; + - src: diretório contendo o código fonte do programa em si. São arquivos .cpp. A linguagem utilizada para o trabalho foi C++, pois assim podemos trabalhar com orientação a objetos. Há quatro arquivos nesse diretório: + - connectionRawSocket.cpp: arquivo fornecido pelo professor, para a implementação do socket; + - submessages.cpp: implementa as funções das submensagem, tais como setar / retornar delimitador de início, tamanho, sequência, tipo, dados e paridade, além de funções que transformam o objeto em uma string, e vice-versa; + - messages.cpp: contém as funções que fazem tanto as requisições (client) quanto o recebimento / resposta (server) dos comandos CD, LS, PUT e GET; + - miniShell.cpp: controla o shell local, realizado as funções de CD e LS local; + - main.cpp: abre o socket, verifica se é o server ou client e chama as funções corretamente conforme as mensagens vão sendo enviadas / recebidas; + - Makefile: utilizado para compilação do programa. Use “make” para compilar e “make clean” para limpar os arquivos gerados com a compilação; + - connection: o executável do programa. + O executável é o mesmo tanto para o cliente quanto para o servidor. Para executar o programa deve-se digitar “sudo ./connection client” para iniciar como cliente e “sudo ./connection server” para iniciar como servidor. + O cliente e o servidor devem estar conectados com um cabo cross-over. + Inicialmente foi implementado o processo de Janelas Deslizantes, porém, havia sido feito o processo de Volta-N, não Repetição Seletiva (como especificado). O fato de termos que mudar a janela, junto ao fato de o próprio volta-n estar trazendo problemas e o prazo se encurtando, fez com que nós optassemos pela implementação de para-e-espera. Por isso, o código é uma adaptação do que deveria ser uma janela deslizante. + A paridade (implementada em submessages.cpp) foi implementada verticalmente. E sua função de checagem (checkParity) a recalcula e compara com a anterior. + O timeout das mensagens é implentado com a struct pollfd (#include <poll.h>) e verifica se existem mensagens recebidas a cada 500ms. Se forem recebidas 10 mensagens sem sucesso (lixo), as mensagens sem retorno serão reenviadas. + Quando o client manda um CDR (código para CD Remoto), pode obter de retorno um “OK” (que certifica que o diretório foi modificado), um “NACK” que vai reenviar o pedido ou um “ERRO” que pode ser de (0) Diretório Inexistente ou de (1) Sem Permissão para acessar o Diretório. + Caso mande um LSR (código para LS Remoto), o erro possível é de Opção inválida (caso não seja ., -l, -a ou -la. Volta e meia um LSR acaba por crashar (quebrar) o programa. Não se sabe o motivo desse acontecimento, embora ele seja levemente raro. + +Bugs conhecidos: + → “CD ..” pode, raramente, voltar de diretório mais de uma vez. + → LS Remoto pode crashar o programa ocasionalmente. + → O PUT não funciona caso o arquivo não seja do diretório onde o programa foi inicializado.