TODO list for client
====================

URGENT WORK:
============

(0) Check that removal of the Swarmer after file_completed is not harmful.

(1) Why is the QRT sent so often ?
(2) Implement PUSH in Gnutella and Fasttrack

(9) When a file is commited, it should not be shared anymore in temp/.
    Moreover, in temp, it should not be shared under is URN name.
(10) CANCEL A FILE, AND RESTART THE DOWNLOAD: <<<<<<<<<





Before 2.6:
  * Re-implement contributors in CommonSwarming
  * Re-implement already downloaded files.

  * Why does a BT client appear twice in the upload_fifo ?
  * Secondary file should have '2' if primary file has not 3...
  * Use a strategy for each network that tries to finish partially
      downloaded chunks for itself or the primary network.
  * Does the PartialChunk strategy work ?
  * Why are chunks verified before completeness ?
  * After a while, shared files are not shared anymore ! why ???
  * When a connection succeeds and downloads, we should retry the connection
     ASAP.
  * How to remove servers from disabled networks ?
  * When a file is commited, we should add a flag to say if it has been
      verified or not.

GNUTELLA:
  * Use GET /urn-... type of downloads
  * When is recover_file called ?
  * All slots used ???
  * Why do we lose some ultrapeers ?
  * For files without TTR, use the SHA1 when all chunks are '2'
  * Why is the QRT sent so often ??

BITTORRENT:
  * Why does BT stop uploading after a file is downloaded ?

FASTTRACK:
  * Verify that cancelled files are correctly removed, even the swarmers !
  * What does "precondition failed" means ??
  * Infinite loop somewhere...

SWARMING: disconnect verification scheme from network, at least when the
  network doesn't use bitmaps. Find alternative UIDs for files (Gnutella2)
  and download TigerTree when available.

URGENT:
 * Understand why we ask several times for the same chunks
 * Propagate client bitmaps to GUI
 * Seeding in Bittorrent doesn't work

BUGS:

* "FT not respecting max sources per file settings"
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=3761
FT plugin AFAIK has no limits regarding the size of the serverlist

* FT plugin is not able to get a list of working peers
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=7776

* "Search results appear in the wrong search"
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=6956

Flush buffers after do_at_exit (wait 5 secondes after exit ?).
Share only on some networks.
Add information in the GIU protocol on who uploads what.
Send relative times in the GUI protocol
IP blocking in net/ : http://www.peerguardian.net/pgipdb/guarding.p2p

************************************************************************
Edonkey:
 * Extension to download small files immediatly (files smaller than 10k for
   example)
 * Verify that make_xs is always synchronized with sources searches.
 * Add command 'export_temp' so that they can be used from emule/edonkey
 * EmuleMobile ?
 * BUG: commited files are not shared
 * BUG: MLdonkey client generates "Exceeding Block Boundaries" errors which
     loses bandwidth
 * Implement more Emule packets
    OP_REASKFILEPING (0x90) (size=16)
    OP_QUEUEFULL (0x93)
    OP_REASKACK (0x91) (size=2)
    OP_FILENOTFOUND (0x92)
 * Extended search doesnot work after connect because no ping was sent.
 * BUG: Cancel and Redownload doesnot work
 * BUG: Files randomly pause

BitTorrent:
 * Implement file availability as in edonkey.
 * Content-Encoding: gzip
 * bt 3.2 ... a want= and have= parameter 
 * Check that after the commit, we don't call the tracker, except if we
      continue to share the file
 * started and completed should only be sent once
    * Pause/resume file
    * Reserve upload slots
    * Share downloaded files
    * Commited or not

FastTrack:
 * Fifo to reconnect to clients PER FILE, limited by the number of currently
    downloading clients

Gnutella2:
 * Why doesn't TigerTree work on Mac ? 
 * Allow browsing other clients.
 * ADD urn:sha1:<HASH> and urn:tree:tiger/:<HASH> to QRT
 * Search using all URI (ed2k, etc...)
 * Act as an ultra-peer

Gnutella:
 * Upload: use CommonUploads queues
 * Send more information in HTTP/1.1 headers (alt-locs, thex)

Soulseek:
 * In case of Message from server LOGIN FAILURE INVALIDPASS
    prevent any new reconnection without changing the password. Done ?
 + Implement more of the protocol
 + Directory download using MultiFile
 + Check that we don't download several times the file list of friends.
 + Add a button in the tab_result to add to friend a file source (gui
      protocol -> file sources)
 + Use (file_name, size) keys for files_by_key, and iter on the table on
       upload requests to find the correct file.
 + Very long messages (several Megs) for shared file lists...
 + Remove all downloads from a given user
 + Display the number of new message per room

Opennap:
 * Register files on server
 * Implement Upload completely

Direct-Connect:
 * Implement Upload completely
 * How do you know your IP in Direct-Connect if you are behind a firewall
 * Send replies to active searches
 * When a download is finished, can the link be reused ?
 * Don't always download from incoming peer the files list
 * Reply to active search requests
 * For some reason, mldc cannot talk on some servers... France AVI for example.

***********************************************************************
Core:
  * LittleEndian: is buf_int correct with negative values
  * Change ClientKind so that it does not depend on edonkey anymore.
  * Configurable map to translate characters appearing in the file names.
  * BUG: What happens when the writes are buffered, mtime does not correspond to
     the real value ? We should probably call Unix2.flush_all before saving
     the config.
  * Download one file from multiple networks: 
    1) A download must be started on a verified network (donkey, bittorrent
        or gnutella)
    2) Complementary downloads can be started from other networks:
      2a) Start a download as attached to a main download
      2b) The attached download does not create a main file, but a set of
             chunks that are potentially downloaded
      2c) If the download of the attached file is finished, and the file
             can be verified, then the attchaed download can be permuted 
             with the main download (the attached download becomes the main
	     download, and reciprocally).
  * Associate kinds with networks, and only download useful urls
  * Make difference between Subscribe and Submit searches clear: Submit
      searches all networks and stops when all servers have replied. 
      Subscribe is a long term search, it should query the servers
      periodically, and display new results (and probably save them).
      Not implemented yet anyway.
  * CD get and Collections
  * Change temporary files names to allow recover on all networks.
  * Socks 5 support
  * The core sends more File_info messages than File_downloaded, which is
     not normal !
  * Send messages to GUI with a classifier (to be able to display messages
     in different consoles, server console, download console, clients console)

***********************************************************************
GUI:
  * Suppress all classes in newgui: object-oriented programming makes
      modifying the GUI even harder, and is not useful at all. We should
      replace classes by simple records when possible.
  * Give more information on why a connection failed: we should now at
      which stage a connection has failed, when it was, and when was the
      last correct connection.
  * Interactive downloads (popups for one file with progress bar): for
      example, it could be used when starting a download under bittorrent
      (use a network flag to say when it should be used ?) from a
      WEB navigator so that the user see a popup from the GUI immediatly
      and see the progress of the download (as does the python bittorrent).
  * Change the color of tabs when things change
  * Add information about: 
     * When a download was started and when a file was last seen _complete_:
         3d/8d : we have been downloading this file for 8 days, and
            saw it complete three days ago
         --/8d : idem, but we have never seen it complete


***********************************************************************

   And bug reports

***********************************************************************
Fasttrack
=========
FT not respecting max sources per file settings
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=3761


GUI bugs
========
"max hits" doesn't work
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=3675

Source-state error in GUI
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=2443

Commited file is not removed from GUI
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=3705

Right click to file option save doesn't show all file names
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=3179

"old" gtk gui column sizes
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=6917


HTML_mods bugs
==============
Cancel and Pause-"Feature" at same time
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=3227


Requests for GUI enhancements
=============================
Change the serach-for field into a combo box
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=3445

Remember current tab on exit
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=3476

Better GUI for identifying what files are in good states
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=4316

ed2k-links of all files available (might be best for html_mods)
https://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=4378


Others
======
Wrong filename used when downloading ed2k links? (Patch attached)
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=4080

Handling of foreign characters
http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=4154
