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

  * 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 ?
  * 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:

Flush buffers after do_at_exit (wait 5 secondes after exit ?).
Send relative times in the GUI protocol

************************************************************************
Edonkey:
 * 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: 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.

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:
 * 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:
 * Network does currently not work due to missing bindings with common module
 * 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:
 * Network does currently not work due to missing bindings with common module
 * Register files on server
 * Implement Upload completely

Direct-Connect:
 * Network does currently not work due to missing bindings with common module
 * 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.
  * 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.
  * CD get and Collections
  * 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)

