Releases: alanmcgovern/monotorrent
v3.0.0-beta-0159
General
Just adding a little more logging to help diagnose issues in future. Functionally identical to release 3.0.0-beta-0157 when logging is not enabled.
Full Changelog: release-v3.0.0-beta-0157...release-v3.0.0-beta-0159
v3.0.0-beta-0157
General
This release has several improvements to how IPv6 support is implemented, adding support for IPv6 Tracker Extension and including support for the latest refresh of both BEP 11 and BEP 15.
Additionally, it is now possible to call TorrentManager.MoveFileAsync
while a torrent is actively downloading, and support for dynamically moving files is compatible with EngineSettings.UsePartialFiles
. There are also several tweaks to BEP52/BEP47 support, improving support for hybrid torrents which contain multiple sequential empty files.
What's Changed
- [core] Fix creating ipv6 uris by @alanmcgovern in #589
- [IPV6] Support setting multiple listeners and reported endpoints by @alanmcgovern in #590
- [core] Support ipv4 and ipv6 compact addresses by @alanmcgovern in #592
- [core] Add full ipv6 support for PeerExchange by @alanmcgovern in #593
- [ipv6] Add ipv6 udp tracker support by @alanmcgovern in #594
- [PieceWriter] Add a test covering 'unlimited' open files by @alanmcgovern in #596
- [core] Refresh the 'AmInterested' status regularly by @alanmcgovern in #601
- [core] Allow moving files at any point by @alanmcgovern in #604
- [core] Fix several bugs with 'EngineSettings.UsePartialFiles' by @alanmcgovern in #608
- [core] Fix a BEP52 related regression by @alanmcgovern in #611
- [bep52|bep47] Fix file ordering sanity check and padding for empty files by @alanmcgovern in #612
- Integration tests ipv6 by @alanmcgovern in #614
- [core] Ratelimiters should allow requests larger than chunk size by @alanmcgovern in #617
- [ipv6] Use the correct prefix for IPv6 non-compact peers by @alanmcgovern in #616
- [core] Tweak ratelimiting a little better for low rates by @alanmcgovern in #618
Full Changelog: release-v3.0.0-beta-0106...release-v3.0.0-beta-0157
v2.0.7
v3.0.0-beta-0106
v3.0.0-beta-0104
What's Changed
- [core] Properly specify the System.Memory reference by @alanmcgovern in #582
Full Changelog: release-v3.0.0-beta-0102...release-v3.0.0-beta-0104
v3.0.0-beta-0102
General
- Several fixes to how webseeds are implemented/integrated, thanks to @borigas .
- If a regular block of data is requested from a peer and they do not fulfil that request, a timeout is applied and the connection is closed. The same timeout is now applied when requesting metadata and bittorrent v2 piece hashes from peers. This fixes a bug whereby a peer who does not fulfil the request would result in the engine stalling instead of re-fetching the metadata/v2 piece hash from another peer.
What's Changed
- [tests] Stop the HttpListener as part of teardown by @alanmcgovern in #574
- Simplify how modes are implemented in the engine by @alanmcgovern in #575
- Ensure the engine re-announces on a regular cadence when in Metadata mode (i.e. downloading with a magnet link) and PieceHashes mode (when fetching bittorrent v2 piece hashes from other peers).
- Start web seed if the speed trigger is 0 by @borigas in #577
- Web Seed Integration Tests by @borigas in #576. This also includes fixes for several issues with support for bittorrent v2 and padding files (BEP52 and BEP47).
- [tests] Close the response after writing the status code by @alanmcgovern in #578
- Specify 'Release' configurations properly by @alanmcgovern in #579
Full Changelog: release-v3.0.0-beta-0068...release-v3.0.0-beta-0102
v3.0.0-beta-0068
What's Changed
- [core] Refactor how announce requests are handled. by @alanmcgovern in #572 . Torrents which have 10, or more, tiers of trackers will have significantly reduced memory consumption in the event trackers within those tiers are non-responsive or offline.
Full Changelog: release-v3.0.0-beta-0064...release-v3.0.0-beta-0068
v3.0.0-beta-0064
What's Changed
- Removed
PieceRequesterSettings.IgnoreChokeState
. This was an experiment used to port 'Metadata' mode and 'PieceHashes' mode to use the same piece picking logic as when actual torrent data is downloaded. This was a success and this behaviour was implemented using a customIRequester
instead, eliminating the need for this hacky behaviour. - Fixed a bug where 'endgame' mode wasn't enabled when fetching metadata from other peers, resulting in slower performance when fetching the torrent metadata for a magnet link.
- Fixed a bug where outstanding requests for 'metadata' or bittorrent v2 'piece hahes' were not always cancelled when a peer disconnected.
- Integration tests by @borigas in #567
- Handle timeouts requesting metadata by @alanmcgovern in #568
Full Changelog: release-v3.0.0-beta-0050...release-v3.0.0-beta-0064
v3.0.0-beta-0050
What's Changed
- Optimised PeerInfo.CompactPeer so it have a zero-allocation codepath when converting a peer to the 6 byte compact representation for .NET 4.7.2 and newer.
- When allocating reusable byte buffers under .NET 5.0 or newer, the
GC.AllocateUninitializedArray
capability is used to allocate pinned arrays in the pinned object heap. This reduces GC fragmentation. - Fixed a long standing issues where a peer which has disconnected was unintentionally retained for a short term by the code which manages choking/unchoking peers when all upload slots are in-use. If that peer is unchoked during that time period, an error would be raised.
- The 'meta version' attribute used to identify bittorrent v2 torrents was not written to the
info
dictionary as per spec, now it is. - [bep52] Fix creating v2 torrents with zero length files by @alanmcgovern in #562
- More fixes for empty files by @alanmcgovern in #565
Several contributions from @borigas, including identifying all of the issues caused by zero length files.
Full Changelog: release-v3.0.0-beta-0034...release-v3.0.0-beta-0050
release-v3.0.0-beta-0034
What's Changed
- Set up CI with Azure Pipelines yaml by @alanmcgovern in #552
- Tidy up DiskWriter by @alanmcgovern in #557
- Small perf and memory optimisations by @alanmcgovern in #558
- Added more tweaks to TorrentCreator to improve how events are emitted after the recent refactorings.
- Misc API changes to migrate some classes to structs, and some structs to readonly structs.
- Migrated
PiecePicker
to exclusively usePieceSegment
rather thanBlockInfo
. Selecting pieces just needs the piece index and block index. It does not need the block length, which is what BlockInfo provides. BitTorrent V2 makes block length a much more complex thing to define. - Updated how the built-in disk writer handles concurrency when writing to the same file. When targeting .NET 6.0 and above the new, higher performance, RandomAccess API is used to read/write data. For .NET versions older than 6.0 multiple concurrent
FileStreams
are opened to allow safe concurrent reads/writes. - AllowedFast messages are now combined into an AllowedFastBundle to save a small amount of memory
- Messages used to be decoded using a Dictionary lookup. This was converted to a simple array lookup, which makes it a much cheaper operation for one of the most commonly called codepaths in the library.
Full Changelog: release-v3.0.0-beta-0010...release-v3.0.0-beta-0034