Skip to content

Cliente BitTorrent con funcionalidades acotadas que permite descargar y servir concurrentemente archivos a partir de un .torrent

Notifications You must be signed in to change notification settings

imontecalvo/Cliente-BitTorrent-Taller-1-7542--FIUBA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

22C1 - Cliente BitTorrent - PROYECTO TALLER I

Objetivo

El objetivo del proyecto es implementar un Cliente BitTorrent con funcionalidades acotadas, que se detallan en el enunciado. El objetivo secundario del proyecto consiste en el desarrollo de un proyecto real de software de mediana envergadura aplicando buenas prácticas de desarrollo de software, incluyendo entregas y revisiones usando un sistema de control de versiones. Se presente emular, en la medida de lo posible, el proceso de desarrollo de la Industria de Software.

DEMO

demo.mp4

Dependencias

En caso de error al ejecutar en Ubuntu, asegurarse de tener instalado: libssl-dev y libgtk-3-dev

sudo apt install libssl-dev
sudo apt install libgtk-3-dev

Ejecución

Se debe ejecutar el siguiente comando, estando en /bittorrent_client:

cargo run <ruta .torrent / directorio> <ruta archivo configuración>

Parámetros

  • Ruta .torrent / directorio: Admite una ruta específica a un archivo .torrent como así también a un directorio. En el segundo caso, recorrerá todo el directorio obteniendo los archivos .torrents localizados para posteriormente descargarlos
  • Ruta archivo configuración: Se puede usar un archivo personalizado o el archivo por defecto localizado en /bittorrent_client/settings.txt

Funcionamiento

Flujo general

  1. Parseo de la configuración.
  2. Escaneo de torrents (parsear torrents y detectar si ya hay piezas descargadas pudiendo reanudar descargas previas)
  3. Ejecución del servidor
  4. Ejecución de el/los clientes (se intancia uno por cada torrent, como máximo pueden haber tres clientes en paralelo).
  5. Logging de eventos
  6. Interfaz gráfica

Diagramas

Interacción general

Threads

Descarga de piezas

La descarga de piezas sucede de forma simultánea (concurrente) en los threads de cada PeerConnection. Estos threads comparten la** cola con las piezas restantes**, por lo que pedirán el lock e intentarán retirar una pieza de la misma.

Puede darse la situación de que un thread intenta tomar una pieza de la cola y esta se encuentra vacía. Que la cola se encuentre vacía no es indicador de que todas las piezas hayan sido descargadas, dado que puede ocurrir que algún thread que tomó una de las piezas para descargar no pueda hacerlo.

Debido a eso es necesario un mecanismo de control para saber que piezas fueron correctamente descargadas. Para ello se utiliza el mismo bitfield representativo de las piezas del torrent, donde se distinguen las descargadas de las pendientes. En caso de que la cola esté vacía:

  • Se chequea si la descarga finalizó fijándose si el bitfield de piezas descargadas posee todas las piezas en 1. En este caso, la conexión se termina.
  • Si el peer no posee ninguna pieza de las restantes, también finalizará la conexión.
  • En caso contrario, intentará nuevamente retirar una pieza de la cola llamando previamente a ”yield now”.

Si la cola no estaba vacía, se intenta descargar la pieza obtenida siguiendo el protocolo de BitTorrent. En caso de algún error, ya sea que la pieza es inválida, el peer nos bloqueó, no tiene la pieza o simplemente no nos contesta, la pieza extraída se devuelve a la cola de piezas pendientes. Por otro lado, si la pieza se descargó con éxito, la misma se escribe en disco y se notifica al cliente para que actualice el bitfield

Integrantes

  • Luis Anibal Arillo
  • Santiago Marczewski
  • Ignacio Montecalvo
  • Tomas Sabao

About

Cliente BitTorrent con funcionalidades acotadas que permite descargar y servir concurrentemente archivos a partir de un .torrent

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published