#30 El codigo esta aqui: https://github.com/vrnvu/rust-bittorrent/blob/master/bt/src/peer_download.rs
Un archivo a transmitir en torrent se parte en N trozos que representan bloques de memoria del archivo. De cada trozo se hace un SHA1 para validar. Cuando te descargas un trozo de un archivo, para cada trozo haces request de paquetes mas pequeños download_piece
, puedes validar que la descarga es correcta porque el hash SHA1 sera igual. Cuando tienes todos los trozos de un archivo descargados, los puedes concatenar en memoria y te darán un archivo valido.
Desde el punto de vista del peer_downloader:
Linea 1 itero los trozos y me los descargo del peer, cuando me los descargo se valida el hash y si es correcto se guardan en memoria en un buffer de buffers: downloaded_torrent
Linea 10, hago un "concat" de mi buffer de buffers para tener un buffer aplanado con todos los trozos correctamente descargados y lo escribo en un archivo.
NOTA: TODO ESTO SE PODRIA OPTIMIZAR, ESTA ES LA VERSION DUMMY
Codigo de validation del hash:
Linea 194, miro el hash que me proporciona el torrent file, Linea 5 calculo mi hash de lo que me he descargado, compruebo si es correcto o no.
El tracker solo sirve para descubrir peers, no necesita almacenar ninguna información.
Demo con #27:
La calidad parece muy mala, no se si se esta terminado de procesar o que... Si no subiré el demo a YouTube.