Projeto de Implementação do protocolo Gnutella

Revisão do Documento 0.1
Status: em produção

Introdução

Esse projeto visa a implementação de um servent da rede Gnutella, de acordo com a especificação do protocolo Gnutella versão 0.4, revisão 1.6 . 
O servent é divido em duas partes, uma servidor e outra cliente. Porém, as duas partes são vistas apenas como uma pelo usuário.

Figura 1 - DFD nível 0

Figura 2 – DFD nível 1
Funções

•	Conexão

É feita através de uma consulta na lista de servents. Consulta-se o primeiro host declarado na estrutura e tenta fazer a conexão, caso não tenha sucesso, segue para o próximo host. Se todas tentativas falharem, uma mensagem é enviada para o usuário.

função conexao(arquivo  lista_servents)
enquanto possuir host na lista_servents faça:	
pegue primeiro host no arquivo
tente conectar nesse host
se falha: volta ao inicio
se fim de arquivo: mensagem_para_usuario(“A conexão falhou, tente outros servents.”)

Ping
Pong
Query
QueryHits
Push

Estrutura de dados

Descritores
Contém a definição de todos os descritores do protocolo, declarados de forma estática em um função do programa.
	Função: constantes(void)
definir PING 		0x00
definir PONG 	0x01
definir QUERY 	0x80
definir QUERYHITS	0x81
definir PUSH 	0x40
definir BYE 		0x02

Lista de servents
Arquivo texto (servents.ini) com hosts que já estão conectados a rede, lista obtida através de sites na internet.
	Estrutura do arquivo:
	<nome do host>:<porta>
	gnet.ath.cx:6346
	gnet2.ath.cx:6346
	gnet3.ath.cx:6346
	gnet4.ath.cx:6346
	gnet5.ath.cx:6346
	gnotella.fileflash.com:6346
	gnutellahosts.com:6346

Buscas
Diretório de arquivos

Diagrama de estados

Bibliografia
http://rfc-gnutella.sourceforge.net/
http://www.gnutelliums.com/
hosts: http://gnutella.da.ru/