Skip to content

Releases: alanmcgovern/monotorrent

v1.0.6

01 Nov 18:43
Compare
Choose a tag to compare

General

  • The local listening port is correctly set when sending the extended handshake message. This will improve peer exchange as the correct port is guaranteed to be used.
  • Removed unnecessary cloning of Lists when picking pieces. Will greatly reduce memory allocations when a large number of peers are connected.
  • Several small tweaks to use the buffer pool instead of instantiating new buffers, primarily around the encrypted connection negotiation code.
  • Replaced frequent calls to Encoding.GetBytes with static buffers.
  • Reduced the quantity of BigInteger instances created by the Dht engine.
  • Added more thorough testing around BigEndianBigInteger and the fallbacks when running under older runtimes not compatible with .NET Standard 2.1.
  • Updated to the 1.0 release of ReusableTasks

v1.0.5

01 Nov 10:32
Compare
Choose a tag to compare

General

  • Bugfix for TorrentManager.HashCheckAsync (true). This will, once again, cause the TorrentManager to enter the Downloading/Seeding mode after the hash check completes. This feature regressed in the 1.0.2 release as part of making the hash check process be paused when TorrentManager.PauseAsync is invoked.

v1.0.4

30 Oct 18:36
Compare
Choose a tag to compare

General

  • Significant reduction in memory allocations while downloading torrents by replacing async Task method declarations with async ReusableTask. This is a feature of the https://github.com/alanmcgovern/ReusableTasks project, which is also available on NuGet https://www.nuget.org/packages/ReusableTasks.
  • The IConnection interface has been superseded by IConnection2. The only difference is that the three main methods, ConnectAsync, SendAsync and ReceiveAsync are now typed as ReusableTask instead of Task. If anyone is implementing their own IConnection it is strongly recommended to use IConnection2 so that the ReusableTask variants of the three methods can be used instead of the Task variants. However, connections which implement IConnection are still fully supported
  • Migrated to System.Numeric.BigInteger instead of an old imported copy of Mono's BigInteger class. The System.Numeric version is significantly more performant than then decade old version from Mono.
  • Small tweak to how peers connection retries operate. If a connection could be established and an encrypted handshake fails, we immediately retry with an unencrypted handshake, and vice versa. This means connectable peers will have both methods checked immediately, increasing the chance of an active connection being established quickly. Previously the peer would be added to the end of the list and would be retried a long time after the initial attempt.

Performance Data

NoDht_Optimised

This screenshot shows the total allocated objects throughout the lifetime of a session which downloaded two torrents, totalling 3.2GB of data. The latest round of optimisations drastically reduced the allocations to 60MB in total.

v1.0.3

16 Oct 12:50
Compare
Choose a tag to compare

General

A new feature called 'Partial Hash Checking' has been introduced. This allows files which are marked with priority DoNotDownload to be excluded from hash checking and also excluded from downloading. The result is that if there is a torrent file with 1000s of files and only a handful are actually going to be downloaded, the hashcheck is restricted to just those parts of the torrent, and only those pieces will be downloaded.

In addition a new property has been added, TorrentManager.PartialProgress. This is the same as the pre-existing Progress property, except it only counts the progress for the files which are not marked as 'DoNotDownload'. For example if 50% of the files are marked as DoNotDownload (and those files represent 50% of the overall data) then the final property values will be PartialProgress = 100.0 and Progress = 50.0 when the remaining files are fully downloaded.

Once PartialProgress reaches 100 then the mode will change to Seeding to indicate that no further pieces will be requested. If files are then moved to Priority.Normal then PartialProgress will change to a smaller value, the Mode will change to Downloading, the new pieces will be hashchecked and any missing pieces will be requested.

v1.0.2

27 Sep 15:15
Compare
Choose a tag to compare

General

  • Made PiecePicker.BasePicker public to make it easier for developers to interact with the chain of PiecePickers.
  • Fixed several issues with rate limiting. The per-torrent and overall upload/download limits should be fully functional now.
  • Made EngineSettings.PrefersEncryption default to true, as the documentation described.
  • DhtEngine no longer throws a NullReferenceException if null is passed in for the initial nodes.
  • Hashing can now be paused/resumed by calling PauseAsync and StartAsync respectively.

v1.0.1

06 Sep 20:49
Compare
Choose a tag to compare

General

  • Patch from @borigas to remove the seed from the Random generator used to generate the PeerID. The existence of the seed meant that if you restarted your client you'd generate the same sequence again, but every ClientEngine created within a single process would be unique. Ideally the sequences should not repeat when restarting the engine. This was a recent regression.

v1.0.0

06 Sep 18:40
Compare
Choose a tag to compare

General

  • No real change from the previous release, other than to make this a 1.0 stable release.

v0.99.136

06 Sep 10:38
Compare
Choose a tag to compare
v0.99.136 Pre-release
Pre-release

General

  • Another API break was introduced in order to move SpeedMonitor to a 64-bit long instead of a 32-bit int in all public API. This allows it to represent speeds/rates in excess of 2GB/sec. It also fixed an issue where much lower speeds could overflow the internal int32 calculations when working out the average speed.

v0.99.134

05 Sep 15:14
Compare
Choose a tag to compare
v0.99.134 Pre-release
Pre-release

General

  • This should be the last API break for the forseeable future.
  • ClientSettings and TorrentSettings no longer have multiple constructor overloads. All the properties are public get/set so just use object initializer syntax to set the properties you want. All properties are documented.
  • Re-namespaced EncryptionTypes.
  • The C# compiler used must support the C# 7.2 language spec. This means, i believe, any recent release of Visual Studio 2017, 2019 or Visual Studio Mac will be fine.
  • Updated the TrackerServer to expose ITrackerItem instead of SimpleTorrentManager. The latter has been made an internal class.
  • Contribution from @justscribe to add some helpful API points to TrackerServer.

Packaging

  • Xml Documentation is now bundled in the nuget so you should get intellisense now.
  • Now classified as a beta release!

v0.99.119

04 Sep 20:10
Compare
Choose a tag to compare
v0.99.119 Pre-release
Pre-release

General

  • Some minor cleanups internally.
  • Improvements to some tests.
  • Updated the packaging step to allow easier generation of alpha/beta releases. As part of this the 'alpha.txt' file has been committed to the repository to signify this releases are alpha level, due to the recurring API/ABI breaks.

NuGet.org

  • These releases are now being shipped on NuGet, under the MonoTorrent package name.