Skip to content
Sayooj Samuel edited this page Nov 17, 2020 · 1 revision

Project Dev Notes

dragonload Distributed Downlaod Manager

Tasks

  • [-] Design a robust backend
  • [-] Manage the protocol
  • [ ] Create a config directory in POSIX and MAC machines. This about NS machines later. Config directory is necessary to store the db and the config file. DB is necessary for the downloading to happen. Also fix the directory where the downloading happens. Parital downloads in the temp directory or the main download directory.
  • [ ] Test the platform
  • [ ] Try to convert the commands to python only; platform independance

Tesing

  • [-] Check for partial download
  • [ ] Test the merge functionality

Protocol

Splitfire Protocol

This protocol is responsible for managing all the interested parties into one pool.

Objective

  • Create Pool for interested Parties; N party proto
  • Check the file size;
  • Split the fileSize by a multiple of N
  • Collect user IP’s
  • Generate the download script. Notify the CNC after each successful download; Realtime progress for the pool
  • Schedule Download??? Take care of the sleep
  • Manage Parties who leave in between the protocol
  • Split part of the remaining itemsList to the newcomming member; Dynamic Pool Model

-

ChainRain Protocol

This protocol is for efficiently sharing the files after partly download among the decorated users.

Objectives

  • Verify if parties are still active during the process
  • Check connection with the CNC
  • Share files parallely, efficiently and equally among the users. (check for corruptions)
  • Test if local hosting is proper
  • Share in a binary Tree manner - Will it work out?
  • Merge the parts as and when they arrive. Notify other about the status of the proces

Dragonvault Protocol

This is the main server application, which will handle the whole download manager. This can be implemented in two ways:

  • A centralized main server
  • A requirement based

Ideas

[ ] Simustaneous running of Splitfile and ChainRain in pipeline

[ ] Add MultiThreaded Download for individual parts

[ ] Authenticated Private Rooms

[X] curses based application

[ ] Use click and pyinquirer, prompt-toolkit

[ ] Use grpc for client, server, and all comms

[ ] Create robust framework, and build curses app, web app on top

Necessary Reads

Pathlib: Article to make os independent paths

py_cui: alternative to ncurses

ISSUES:

  • [ ] Fix the port issue. Update the server with the users port address in addition to the IP address. Code everything in __main__ file.

ENHANCEMENTS:

  • [ ] Use python dataclasses
  • [ ] Make a custom URI scheme (dragon://)
  • [ ] Gossip framework for status sharing??

Config File

from dragonload.dragonload import startDragonload

url = "http://www.google.com/movies/security.mp4"
user_count = 2
user_id = 0 # set 1 in other user
user_list = [(0, "192.168.29.108"), (1, "192.168.29.194")]
startDragonload(url, user_count, user_id, user_list)