- Change the handshake signal arguments.

- Hmm... change dropped, check error != 0.


== Rework the file* API ==

- Make sure we properly handle low split size/large files.


- Move signals to their respective classes in the interface.


Hmm... This might be fscked if we didn't reset?

    int toRead = enc_pad_size + m_encryption.sync_length() - m_readBuffer.remaining();


- Add a check to see if there's enough space on disk for the torrent.


!!! Test hashing very large torrents. You got one queued ;)

- Allow setting the source port. Also move stuff like bind address.

===

rtorrent: DownloadList::hash_done(...) !download->is_open().

Weirdness, failed during hash check, or something... Though it
shouldn't have been doing hashing atm.




! Consider single file multi-file torrents.

- Mark protected/private as hidden.

| Configurable tracker request behavior.





! Remove the chunk range from File, use actual bytes for progress
  instead?

- Make using max file size safe by forcing various checks, file size
  (should already be done) and non-split original files.

- Allow flags when starting/opening that do extra error checking or
  ignore them.


== Encryption patch ==

* Do I like the formating of the errors variables?

* Do I like ConnectionManager::HandshakeMessage? Probably don't want an enum for this.

* Should be configurable?

  static const uint32_t protocol_bitfield = 5;


* Look through the patch once more.

* Check all fill_*_buffer for size.

    // Don't we need to fill this?
    char discard[1024];

* Use the handshake buffer, or something else for the random data for
  moving the encryption stuff.

* Remember how far we've searched for the sync string.

* Move encrypt buffer init.



- Consider the SocketFile::set_size hack.


- New global torrent class.

- Add an option for hiding various parts of the info screen.


Check that resume data isn't removed when loading files.


== Preloading ==

- Add a timer/flag to the chunk thing for when we last time
  preloaded. Possibly reset after unmapping.

- Protect against numerous small requests.


== Stats ==

Disk stats.



- Fix the resume interface.


Consider why the size isn't in available in std::array.

Make sure we properly clear PeerInfo's id before exposing it.



Get rid of the content.h dependency in handshake.cc.

! For the release, disable the extra-debug borkage.


- Tracker dump does not show failed tracker connects.

- Write in the man page about the cost of the various encryption settings.

- Change the default compiler flag for both branches when 4.1.x is detected?

- Check that we correctly stop (or fixed the stopping) of torrents
  that fail hash checks.


When it does the missing files thing, it actually creates the missing file... bad.

http://libtorrent.rakshasa.no/ticket/505 hashing bug.



Make sure doing a hashing doesn't reset downloaded.




== Tracker ==

Allow us to shut down without causing all the tracker stuff to happen,
as some kind of short pause, rather than real stop.


==

Use a common cache for have piece messages. Timestamp and index, make
sure it handles cases where indices are added on the same timestamps
as PC's have sent and updated their stamp. So it might need to be
either geq or use unique timestamp+n.

Handshakes will save the timestamp of their bitfield.
