Increasing shareholder value since nineteen diggity five
It's been 1952 days since the last release and this will be worth the wait! MonoTorrent 0.80 has been released and it contains all the usual goodness you've come to expect - enhancements, new features and bugfixes. Transfers should be more stable, endgame mode should be faster, handling of errors when writing/reading from the disk has been improved hugely. All this and there's new features too! Other peers transferring the same torrent on the local network can be discovered instantly, torrents can be downloaded without requiring the physical .torrent file to be present. So read on and find out more about the fixes/enhancements in this release and then download away!
- Completed a new alternative endgame mode. This new algorithm is significantly better than the previous one and should complete torrents faster than the previous mode. It also has full support for sending Cancel messages if extra unfillled requests have been made to a peer for a piece which has already been received.
- Added support for downloading via magnet link. This is a complete implementation of the metadata exchange BEP (http://www.bittorrent.org/beps/bep_0009.html). It is now possible to download torrents using just the infohash, though this does require DHT to be active.
- Add support for uTorrent style Local Peer Discovery. This respects the 'private' flag and so will not operate on torrents which are marked as private. This allows you to detect and connect to peers downloading the same torrent as you on the local network. The method used is compatible with uTorrent.
- Reduced memory consumption when encoding peer messages.
- Reduced memory consumption of asynchronous socket IO.
- Optimised the new piece picking pipeline so that the common cases take very little processing time.
- If a list of bootstrap nodes is supplied to the DHT engine and they are all inactive, attempt a second bootstrap using the utorrent servers.
- Optimised DHT to use less memory and CPU time.
- Ensure that malformed DHT messages are correctly ignored by the DHT engine.
- If two active torrents had files with the same name, they could potentially be confused and treated as the same physical file, thus corrupting data.
- Fixed issues when files with a length of zero existing exactly at the boundary between pieces resulted in the start and end index of the files being calculated incorrectly.
- Rewrote the core to better support different download/seedings mode. Metadata exchange support is built on top of this.
- Added much better exception handling around disk IO. Now exceptions which happen while accessing the harddisk will be caught and propagated to the corresponding torrentmanager.
- Global upload and download limits are obeyed more accurately when combined with per-torrent limits.
- Pending connection attempts for a particular torrent are now cancelled immediately when that torrent is stopped.
- Reduced excess string concatenations in the BEncodedString type.
- Fixed a rare null reference exception caused by bad threading when handling incoming connections.
- Ensure that connections which fail to complete the encryption handshaking process within 10 seconds are closed.
- Fixed issue where webseeds may not have been marked as being interesting.
- Fixed overflow in download/upload rate calculations for extremely fast speeds.
- Resolved several possible race conditions when stopping a torrent.
- When creating a new torrent, handle the case where a directory is supplied which only contains a single file.
- Fixed a bug when attempting to detect whether or not a query string contained the 'key' parameter.
- Correctly handle bitfields of length zero, not that anyone would ever download a zero byte torrent...
- Handle decoding negative bencoded numbers without crashing.
- Added the ability to easily add webseeds to torrents created with the TorrentCreator.
- Added an additional check to ensure that the engine doesn't double-announce when starting a torrent.
- Use the correct string for the warning key for udp trackers
As usual, there's a precompiled binary for those of you who just want to get things done. A source tarball is there too, if you want to compile things yourself or package for your linux distro. Finally, you can check the code out from SVN if you so wish.