Teoría para Implementar un MLDonkey para HTTP y FTP

February 15, 2008

No se si alguno de mis lectores habrá probado MLDonkey, un programa que permite realizar descargas desde redes eDonkey, además de permitirse bajar de otras redes como BitTorrent y demás. De haberlo hecho, espero que hayan notado que la característica más notable es que corre como un demonio o un proceso de segundo plano, librando así al usuario de perder sus descargas si cerrara su sesión o si cerrase por error la ventana del programa.

Su interfaz vía web también es otro hecho loable, ya que nos permite configurar un servidor de descargas y controlarlo remotamente.

Pero quizá su punto más débil es que su motor para descargas directas FileTP está aún en estado experimental, por lo que podríamos perder las descargas o dejarlas a la mitad. Eso lo hace, en mi caso indeseable, ya que suelo descargar por HTTP puro. Otra cosa es que el soporte BitTorrent está incompleto, ya que no permite elegir archivos para descargar, sino que baja todo el torrent.

Así que después de comunicarle mis quejas a un amigo… se me dió una respuesta más o menos como esta:

Bien podrías dejar de quejarte y hacerte algo similar. 

Lo estuve pensando un tiempo, pero da la casualidad de que ya poseo un programa libre que hace las descargas directas de maravilla. Y se llama Wget. Por lo tanto, lo único que debería hacer es "demonizar" a Wget para que cumpla con sus funciones. Ya que no se mucho de crear servicios o demonios, voy a dejar mis planteamientos en el blog. Si alguien supiera como llevarlos a la codificación estaría sumamente agradecido de que me informara.

Bien, dicho esto comenzemos:

Interfaz Web:

El proceso debería abrir un puerto cualquiera (El puerto 4085 por ejemplo) y ponerse a escuchar comandos HTTP. No sería tan dificil, ya que solo debería responder a comandos GET y POST. Y debería servir páginas .html basadas en formularios que permitan manejar al proceso en si mismo.

Ingresando Enlaces:

Alguna parte de la interfaz web debería ser capaz de recibir enlaces HTTP o FTP y mandarlos al proceso para iniciar su descarga…

Descarga de Archivos:

Aquí es donde aparecería Wget. Simplemente debería abrirse Wget como un proceso de fondo y pasarle la URL que se entregó por la interfaz web. Adicionalmente si se ha de regular el ancho de banda, podría indicarse la opción ‘–limit-rate’ seguida de un valor en KB.

Regular la Velocidad de Descarga:

Aquí si hay algo problemático. No hay forma de cambiar la velocidad una vez que se inició Wget. La única solución sería matando a Wget y reanudar la descarga con el nuevo límite de descarga elegido. Esto no es para nada práctico, pero no se me ocurre otra cosa. Podría modificarse la velocidad de descarga dinámicamente, pero para eso tendría que trabajarse a nivel de paquetes TCP, algo más complicado.

Reanudar Descargas:

Esto quizá es lo que más me gusta de Wget. En el caso de que se haya perdido la descarga, que se siga almacenando en alguna base de datos, junto con el archivo destino, la URL de origen para que Wget con su argumento ‘-c’ intente reanudar la descarga. También debería permitirse especificar otra URL a resumir, en el caso de las descargas de URL cambiante, como Megaupload y demás…

Ya no se me ocurren más características, o al menos esas son las que hecho de menos en MLDonkey para descargas directas. Si se construyera un aplicativo así, sería muy útil para bajar de Stage6 por ejemplo, donde las descargas pueden reanudarse, pero tienen el problema de a veces cortarse por problemas del servidor. 

Espero sus respuestas e impresiones.