EA878:2009 2S:atividade 6

De DCA-Wiki

Objetivos

Esta atividade consiste em adicionar ao servidor HTTP em desenvolvimento a capacidade de interação com navegadores comerciais através da rede.

O servidor deverá receber as mensagens HTTP de um socket (isto é, da rede) e não mais de um arquivo em disco. A mensagem vinda do browser é lida de um descritor de arquivo através da chamada de sistema read (da mesma forma que a leitura de um arquivo em disco).

Analogamente, o resultado do processamento deve ser remetido de volta para o cliente, utilizando uma chamada write em um socket para tal.

Veja no tutorial sobre sockets que acompanha este roteiro como incorporar as funções de rede ao seu servidor.

Relatório

O relatório em seu caderno de laboratório deverá conter:

  • código-fonte das partes do programa do servidor relacionadas com a recepção e o envio de dados pela rede documentado com uma descrição detalhada do seu funcionamento;
  • pelo menos 3 testes diferentes mostrando sucesso na obtenção de um recurso (usando caminhos completo e incompleto até o recurso);
  • pelo menos 1 teste que resulte em erro tipo "comando não-implementado";
  • pelo menos 1 teste que resulte em erro tipo "recurso não-existente";
  • pelo menos 2 testes diferentes que resultem em erro tipo "acesso negado", sendo que um deles deve ser uma tentativa de acessar recursos fora do webspace de seu servidor.

Observações:

  • Tenha cuidado com a correta identificação de caracteres CR-LF ao final das linhas de requisição vindas dos navegadores.
  • Assim como nas atividades anteriores, você deverá continuar usando o parser criado com as ferramentas lex (flex) e yacc (bison).
  • Faça com que o seu parser leia os dados diretamente do socket de entrada (lembre-se que o lex lê seus dados de entrada a partir de um descritor chamado yyin).
  • Uma alternativa possível é fazer com que o parser leia de um buffer na memória (que contenha o que foi lido de um socket previamente) usando a chamada yy_scan_string().
  • Não use a solução de redirecionar a entrada e/ou saída para resolver o problema de leitura do parser, pois elas serão necessárias para outras coisas.
Ferramentas pessoais