Releases: arvidn/libtorrent
Release list
v2.1.1
Changelog 2.1.1
- fix merkle tree issue
- require webtorrent RTC offer IDs to be exactly 20 bytes
- fix point-to-point interfaces without a route to the internet being used for outgoing traffic
- apply IP filter to DHT node
- fix use of a stack buffer past its lifetime when sending i2p SAM commands
- optimize RC4
- fail validation of DHT mutable items whose salt exceeds the 64 byte limit
- improve dont-count-slow-torrents
- improve performance of checking files
- add ip_ban_alert for IPs banned internally by libtorrent
- fix peer DSCP marking on outgoing TCP connections
What's Changed
- fix: validate peer-supplied endpoints against local addresses (SSRF) by @acts-1631 in #8530
- persist BEP-21 upload_only on peer_list entry (RC_2_0) by @reardonia in #8557
- Optimize CPU usage in the DH key exchange hot path by @anthonyryan1 in #8565
- attempt to fix an invariant check failure by @arvidn in #8572
- back-port want_peers_finished() invariant check failure by @arvidn in #8575
- cache the results of enumerating ip interfaces by @arvidn in #8567
- don't install vendored headers by @arvidn in #8573
- fix mistake in workflows syntax by @arvidn in #8577
- set NO_EXAMPLES=ON for bundled libdatachannel by @trim21 in #8576
- Test merge by @arvidn in #8580
- restore UPnP host validation to reject loopback by @arvidn in #8578
- address flaky python test by @arvidn in #8581
- experiment with bencher integration by @arvidn in #8582
- disable clang-format for certain parts of settings by @arvidn in #8584
- improve ABI compatibility in the C binding by @arvidn in #8589
- fix formatting of libtorrent_alert.h by @arvidn in #8591
- fix consistency between hash_value() and operator==() by @arvidn in #8590
- add benchmark for RC4 crypto by @arvidn in #8592
- handle ReadFile() returning a short read, by retrying by @arvidn in #8597
- Test merge by @arvidn in #8599
- Fix missing includes by @georgthegreat in #8594
- fix destruction order of m_fence_flush and m_file_pool in pread_disk_io by @arvidn in #8601
- merge reads into whole pieces when checking files by @arvidn in #8598
- address flaky test; test_priority by @arvidn in #8602
- fix undefined std::toupper on signed char in base32decode by @isl-Ramzi in #8600
- bencher benchmark by @arvidn in #8605
- abort trackers by @arvidn in #8603
- Abort trackers 2.0 by @arvidn in #8604
- add piece_picker benchmarks to bencher by @arvidn in #8608
- fix out of bounds read in from_hex on odd number of digits by @isl-Ramzi in #8611
- fix python binding for renamed files in resume data by @arvidn in #8610
- fix external_ip_alert not being posted when UPnP/NAT-PMP succeeds by @rts-kotori in #8607
- Test merge by @arvidn in #8614
- tracker_manager by @arvidn in #8613
- improve dont-count-slow-torrents by @arvidn in #8612
- inactive torrent fix, back-port by @arvidn in #8617
- don't report a utf8 sequence length longer than the input by @isl-Ramzi in #8618
- fix torrent updates for idle torrents by @arvidn in #8620
- bump versions of github actions by @arvidn in #8619
- Glassez fix resume tracker tiers by @arvidn in #8624
- fix stack buffer overflow in dht canonical_string on large salt by @isl-Ramzi in #8606
- Fix empty tracker tiers are incorrectly saved by @arvidn in #8625
- factor out fragile logic to track active, seeding and finished time by @arvidn in #8623
- fix out of bounds write in hashes_rejected on block hash requests by @isl-Ramzi in #8630
- Test merge by @arvidn in #8632
- check ABI changes for PRs by @arvidn in #8627
- optimize RC4 implementation by @arvidn in #8631
- Add alert for internally banned IPs by @101Dude in #8574
- reject all-zero node hashes in merkle_validate_and_insert_proofs by @isl-Ramzi in #8635
- don't hand a stack buffer to async_write in i2p_stream by @isl-Ramzi in #8634
- fuzzer for hash_picker by @arvidn in #8638
- improve abidiff's supressions file by @arvidn in #8640
- fix Python stub CI by @arvidn in #8639
- back-port: don't hand a stack buffer to async_write in i2p_stream by @arvidn in #8641
- reject out-of-range numbers instead of truncating them with atoi by @isl-Ramzi in #8621
- address some debug-only string handling issues by @arvidn in #8643
- fix test build with dht=off by @arvidn in #8646
- apply IP filter to DHT traffic by @arvidn in #8645
- fix setup_transfer to capture all fields of add_torrent_params by @arvidn in #8651
- add benchmark for ip_filter by @arvidn in #8648
- Test speedups by @arvidn in #8655
- Speedup tests2 by @arvidn in #8656
- fix DSCP marking on outgoing TCP peers by @jiaming-shi in #8652
- Cmake install tarball by @arvidn in #8659
- Fix wrapped packet buffer range checks by @M-Hassan-Raza in #8658
- configure thresholds for bencher results by @arvidn in #8662
- back-port Fix wrapped packet buffer range checks by @arvidn in #8661
- snprintf() can return -1 by @arvidn in #8665
- fixup IP filter being applied to the DHT by @arvidn in #8666
- make test_priority less flaky by @arvidn in #8669
- Fix Fast Extension piece validation after metadata by @M-Hassan-Raza in #8664
- cleanup is_in_range() by @arvidn in #8667
- update SECURITY.md by @arvidn in #8671
- hoist the alloca call out of the loop, to avoid risking stack overflow by @arvidn in #8674
- check the chunk size before adding it to m_chunk_pos by @arvidn in #8670
- back-port web seed chunk size check by @arvidn in #8672
- fix point-to-point interfaces by @arvidn in #8657
- fix GCC format string warnings by @arvidn in #8673
- disable legacy TLS versions by @arvidn in #8679
- ignore vendored libraries in CodeQL scan by @arvidn in #8678
- cleanup inconsistency in websocket_tracker_connection::fail by @arvidn in #8681
- use libcrypto's bignum in DH key exchange by @arvidn in #8660
- bump 2.0.14 version by @arvidn in #8684
- Test merge by @arvidn in #8686
- require webtorrent RTC offer IDs to be exactly 20 bytes by @arvidn in #8685
- fix piece-picker invariant by @arvidn in #8691
- fix webtorrent tracker announces to post response handlers reliably by @arvidn in #8688
- build with newer versions of C++ in CI by @arvidn in #8693
- Sanitize settings by @arvidn in #8695
- fix codeql workflow file by @arvidn in #8696
- cache Montgomery context for DH key ex...
v2.0.14
Changelog 2.0.14
- fix issue in merkle tree
- fix use of a stack buffer past its lifetime when sending i2p SAM commands
- fix issues with active_time, seeding_time and finished_time
- fix torrent updates for idle torrents
- improve dont-count-slow-torrents
- fix external_ip_alert not being posted under some conditions when UPnP/NAT-PMP is enabled
- fix issue with stuck trackers on session pause
- fix windows disk read, possibly causing short-read errors
- fix blocking UDP socket in LSD and NAT-PMP
- fix web seed requests for single-file torrents in multi-file mode
- fix duplicate filenames in magnet links
- fix blocking UDP socket in UPnP
- fix corruption bug in mmap_storage
- fix bug where torrent_status::total was not set for seeds
What's Changed
- harden merkle_tree proof validation by @arvidn in #8466
- Fix web seed Host header ports by @hussainarslan in #8460
- use the new host_header functions in more places by @arvidn in #8471
- Add Linux CA certificate probing in start_session() by @trim21 in #8488
- torrent_status::total by @arvidn in #8524
- fix use-after-free in uTP failure socket shutdown path by @arvidn in #8528
- fix incorrect hint in mmap_storage::write that could cause corruption by @arvidn in #8542
- disk_write_mode setting by @arvidn in #8546
- fix blocking UDP socket in UPnP by @arvidn in #8555
- backport: fix duplicate filenames in magnet links by @arvidn in #8556
- fix web seed requests for single-file torrents in multi-file mode by @arvidn in #8559
- fix integer overflow in download_queue_time() by @arvidn in #8560
- non-blocking UDP socket in LSD and NAT-PMP by @arvidn in #8566
- persist BEP-21 upload_only on peer_list entry (RC_2_0) by @reardonia in #8557
- Optimize CPU usage in the DH key exchange hot path by @anthonyryan1 in #8565
- back-port want_peers_finished() invariant check failure by @arvidn in #8575
- fix mistake in workflows syntax by @arvidn in #8577
- handle ReadFile() returning a short read, by retrying by @arvidn in #8597
- fix undefined std::toupper on signed char in base32decode by @isl-Ramzi in #8600
- Abort trackers 2.0 by @arvidn in #8604
- fix out of bounds read in from_hex on odd number of digits by @isl-Ramzi in #8611
- fix external_ip_alert not being posted when UPnP/NAT-PMP succeeds by @rts-kotori in #8607
- inactive torrent fix, back-port by @arvidn in #8617
- don't report a utf8 sequence length longer than the input by @isl-Ramzi in #8618
- fix torrent updates for idle torrents by @arvidn in #8620
- Fix empty tracker tiers are incorrectly saved by @arvidn in #8625
- factor out fragile logic to track active, seeding and finished time by @arvidn in #8623
- fix out of bounds write in hashes_rejected on block hash requests by @isl-Ramzi in #8630
- reject all-zero node hashes in merkle_validate_and_insert_proofs by @isl-Ramzi in #8635
- back-port: don't hand a stack buffer to async_write in i2p_stream by @arvidn in #8641
- back-port Fix wrapped packet buffer range checks by @arvidn in #8661
- back-port web seed chunk size check by @arvidn in #8672
- bump 2.0.14 version by @arvidn in #8684
- back port of merkle tree fix by @arvidn in #8711
New Contributors
- @anthonyryan1 made their first contribution in #8565
- @rts-kotori made their first contribution in #8607
Full Changelog: v2.0.13...v2.0.14
v2.1.0
There are some changes to the API in this version. They are documented here. The headline features for this release are:
webtorrent support
Thanks to Paul-Louis Ageneau https://github.com/paullouisageneau, and apologies for this feature having been unreleased for so long.
This feature is now enabled by default. The last push to get this ready has been to add fuzz targets for WebRTC specific features, rtc_parse_endpoint, rtc_peer_conn, rtc_tracker_offer and sdp_offer. The dependencies for webtorrent support are pulled in as submodules in the repository. webtorrent also adds a new dependency on boost-json.
Note that the webtorrent support significantly widens the attack surface of libtorrent, if you don't need this feature, it's probably best disabled (webtorrent=off / -Dwebtorrent=OFF)
pread_disk_io
A new disk I/O backend that uses pwritev and preadv (and windows counterparts). This is hopefully addressing the misstep of transitioning all disk I/O over to memory mapped files. The mmap disk backend is still available and is probably more efficient for local NVMe drives. But for spinning disks, network mounts or FUSE drives, regular I/O calls should be a lot more efficient. pread_disk_io is now the default.
One of the main challenges with the new disk I/O has been to get the multi-threading right. It computes piece hashes on dedicated threads, separate from those making the I/O calls. This lets us advertise and upload pieces before they're flushed to disk, maintaining high throughput.
Other highlights are:
- add max_directory_depth limit to load_torrent_limits to bound file path depth when loading torrents
- fix race in wait_for_alert(), and update its return value
- optimize torrent_handle::torrent_file()
- add option to not validate v1 hashes for hybrid torrents
- add post_file_status() to query them asynchronously
- add post_file_priorities() to query them asynchronously
- fix local service discovery not being correctly staggered
- make the save path for part files configurable
- retry failed SAM connection (for i2p)
- deprecated remap_files(), and prevent it from breaking v2 torrents
- fix peer_info holding an i2p destination
- implement i2p_pex, peer exchange support for i2p torrents
- deprecate torrent_alert::torrent_name()
- requires OpenSSL minimum version 1.1.0 with SNI support
- try harder to bind TCP and UDP sockets to the same port
- made disk_interface's status_t type a flags type
- optimize resume data format to use less space
- add a simpler overload to bencode() returning a vector
- introduced a new API for creating torrents, enabling file_storage optimizations
- default build to not include functions deprecated in libtorrent 1.1 and earlier
- add comment, created_by and creation_date to add_torrent_params
- move session_flags to session_params
- the entry class is now a standard variant type
- use std::string_view instead of boost counterpart
- libtorrent now requires C++17 to build
- removed support for BEP 17 web seeds (in favor of BEP 19)
- fix bug where torrent_status::total was not set for seeds
full commit log
- bump C++ version to 17 by @arvidn in #4167
- Use time_duration instead of int for predictive pieces by @vktr in #4707
- remove some noexcept-movable hacks that are no longer necessary by @arvidn in #4708
- [clang-tidy] use bool literals by @neheb in #4757
- [clang-tidy] remove bad const by @neheb in #4759
- [clang-tidy] use using instead of typedef by @neheb in #4756
- [clang-tidy] use make-unique by @neheb in #4751
- Test merge by @arvidn in #4765
- WebTorrent support by @paullouisageneau in #4123
- add readability-redundant-member-init clang_tidy checker by @arvidn in #4792
- apply (most of) readability-qualified-auto changes by @arvidn in #4789
- enable redundant preprocessor directive check in travis by @FranciscoPombal in #4790
- Test merge by @arvidn in #4862
- fix test_transfer on appveyor by @arvidn in #4865
- use standard string_view by @arvidn in #4704
- minor formatting update to netlink types by @arvidn in #4834
- Fix Jamfile in libdatachannel by @paullouisageneau in #4867
- Fix Jamfile libjuice crypto dependencies by @paullouisageneau in #4882
- moved torrent and choker to aux by @aldenml in #4488
- moved bloom_filter.hpp and bt_peer_connection.hpp to aux by @aldenml in #4885
- moved hash_picker.hpp and http_parser.hpp to aux by @aldenml in #4887
- moved crc32c.hpp and xml_parse.hpp to aux by @aldenml in #4888
- fixup C-binding by @arvidn in #4869
- Test merge by @arvidn in #4894
- moved http_connection.hpp to aux by @aldenml in #4895
- Test merge by @arvidn in #4905
- moved ip_voter.hpp and io.hpp to aux by @aldenml in #4902
- Update libdatachannel to fix usrsctp callback crash by @paullouisageneau in #4907
- moved peer_list.hpp and stack_allocator.hpp to aux by @aldenml in #4908
- Test merge by @arvidn in #4915
- moved web_connection_base.hpp, web_peer_connection.hpp and http_seed_connection.hpp to aux by @aldenml in #4920
- fixing warnings of tests and logging=off by @aldenml in #4935
- setup of travis tests for s390x architecture by @aldenml in #4937
- mounting /sys when chroot to be able to use lscpu by @aldenml in #4941
- Test merge by @arvidn in #4950
- Test merge by @arvidn in #4997
- Test merge by @arvidn in #5002
- Test merge by @arvidn in #5023
- moved torrent_peer.hpp and torrent_peer_allocator.hpp to aux by @aldenml in #4938
- Opt wcslen(L"\DEVICE\TCPIP_") by @pavel-pimenov in #5032
- Update C++ compile features list for C++17 by @FranciscoPombal in #5003
- moved stat.hpp and stat_cache.hpp to aux by @aldenml in #5041
- remove old work-around by @arvidn in #5080
- Cleanup license header by @arvidn in #5088
- remove support for BEP 17 web seeds by @arvidn in #5071
- Test merge by @arvidn in #5101
- Test merge by @arvidn in #5106
- moved udp_socket.hpp and udp_tracker_connection.hpp to aux by @aldenml in #5107
- Test merge by @arvidn in #5136
- moved http_tracker_connection.hpp to aux by @aldenml in #5145
- Test merge by @arvidn in #5169
- clang-tidy updates by @arvidn in #5177
- fix calculation in tracker_manager::num_requests when webtorrent is enable by @aldenml in #5146
- replaced boost::optional with std::optional by @aldenml in #5185
- WebTorrent: Update libdatachannel by @paullouisageneau in #5188
- WebTorrent: Fix peer list sorting by @paullouisageneau in #5184
- Test merge by @arvidn in #5191
- using structured binding by @aldenml in #5196
- modernize entry type to use std::variant by @arvidn in #5089
- Aligned union by @arvidn in #5090
- WebTorrent: Prevent protocol encryption over WebRTC by @paullouisageneau in #5200
- Test merge by @arvidn in #5213
- Test merge by @arvidn in #5238
- Test merge by @arvidn in #5267
- Test merge by @arvidn in #5282
- Test merge by @arvidn in #5328
- fix compilation when using boost >= 1.75 and json by @aldenml in #5738
- Test merge by @arvidn in #5740
- fix python binding build with deprecated functions by @arvidn in #5744
- move session flags into ...
v2.1.0-rc3
What's Changed
- Add Linux CA certificate probing in start_session() by @trim21 in #8488
- fix race in updating blocked_disk_jobs counter, in disk_job_fence by @arvidn in #8495
- improve some torrent_alert message strings by @arvidn in #8506
- address false positive warning with -Wms-bitfield-padding by @arvidn in #8509
- add fuzzer for SDP offer by @arvidn in #8510
- fuzzers for parse RTC endpoint and RTC tracker offer by @arvidn in #8514
- torrent_status::total by @arvidn in #8524
- Test merge by @arvidn in #8525
- fix use-after-free in uTP failure socket shutdown path by @arvidn in #8528
- Test merge by @arvidn in #8529
- fix TORRENT_DISK_LATENCY_STATS in cmake file and config.hpp by @arvidn in #8535
- fix bug in tracker stop request for webRTC by @arvidn in #8534
- fix clang-tidy warnings, and disable for dependencies by @arvidn in #8533
- Release CI workflow by @arvidn in #8536
- handle exception from libdatachannel sendBuffer() by @arvidn in #8537
- fix edge case causing memory leak in rtc_stream_impl::write_data() by @arvidn in #8539
- enable webtorrent by default by @arvidn in #8532
- fix incorrect hint in mmap_storage::write that could cause corruption by @arvidn in #8542
- upload tarballs for release candidates too by @arvidn in #8543
- disk_write_mode setting by @arvidn in #8546
- Test merge by @arvidn in #8547
- fixes related to force-reannounce and priority announce by @arvidn in #8540
- fix CMake test_rtc.cpp by @arvidn in #8545
New Contributors
Full Changelog: v2.1.0-rc2...v2.1.0-rc3
v2.1.0-rc2
What's Changed
- build against boost.json as header only. This makes it easier to chan… by @arvidn in #8279
- fix recent merge typo in torrent::force_tracker_request() by @arvidn in #8283
- new fuzzers by @arvidn in #8197
- Use Boost 1.91.0 in Windows CI by @xavier2k6 in #8281
- fix CIFuzz issue by @arvidn in #8290
- Update cibuildwheel workflow by @xavier2k6 in #8287
- document that support for BEP17 web seeds were removed by @arvidn in #8289
- Header only boost by @arvidn in #8291
- address python tests using deprecated functions by @arvidn in #8296
- fix support for multi-buffer writes in pread_storage by @arvidn in #8292
- address a data race in pread_disk_io by @arvidn in #8294
- NATPMP fixes by @arvidn in #8297
- Test merge by @arvidn in #8298
- fix flaky python test by @arvidn in #8295
- Add Python MacOS x86_64 builds to cibuildwheel by @qstokkink in #8285
- fix flaky test involving web_server.py in windows by @arvidn in #8300
- Clang tidy by @arvidn in #8301
- post peer_disconnected_alert even if the peer never completed the han… by @arvidn in #8302
- Bump some pre-commit hook revs by @xavier2k6 in #8288
- fixed piece-picker accounting issue for filtered pieces by @arvidn in #8305
- add clang-format configuration and a pre-commit rule for migration by @arvidn in #8303
- fix issue in filtered piece accounting in the piece_picker by @arvidn in #8304
- Use Boost.JSON as header-only via cmake by @Chocobo1 in #8280
- add feature to tick_interval setting to allow all work to run every m… by @arvidn in #8307
- update clang-tidy config by @arvidn in #8311
- fix race in session_handle::wait_for_alert() by @arvidn in #8312
- backport the wait_for_alert() fix from RC_2_1 by @arvidn in #8313
- Test merge by @arvidn in #8315
- disable python's and pytest's faulthandler by @arvidn in #8314
- make web seed connections fail earlier on invalid data by @arvidn in #8308
- update claude instructions by @arvidn in #8309
- Use header-only boost in Windows cmake workflow by @Chocobo1 in #8310
- clean up some strncmp() by using string_view by @arvidn in #8320
- fix socks5 parsing edge case by @arvidn in #8321
- stricter checking of tracker URLs by @arvidn in #8318
- tighten validation of v2 hash requests by @arvidn in #8322
- fix off-by-one in loading banned peers from resume data by @arvidn in #8323
- fix edge case in socks5 UDP unwrap() by @arvidn in #8324
- make parse_magnet_uri() stricter by @arvidn in #8325
- remove cirrus CI by @arvidn in #8326
- add warning message to read_resume_data() by @arvidn in #8328
- Test merge by @arvidn in #8329
- authenticate webtorrent tracker certificates by default by @arvidn in #8330
- fix incorrect invariant check in torrent.cpp by @arvidn in #8331
- GHA CI: Replace
third partyaction withnode24 compatiblevariant by @xavier2k6 in #8327 - Fix resume file save trigger on PEX/LSD change by @Bonstra in #8333
- optimize sanitization of symlinks when loading torrents by @arvidn in #8334
- optimizations to avoid unnecessary calls to piece_size_for_req() by @arvidn in #8335
- web seed fixes by @arvidn in #8337
- Fixup web seed by @arvidn in #8336
- Test merge by @arvidn in #8338
- fix clang warnings by @arvidn in #8339
- add max_directory_depth limit to load_torrent_limits by @arvidn in #8340
- sanitize add_torrent_params by @arvidn in #8341
- script to measure fuzzer code coverage by @arvidn in #8342
- Add torrent fuzzer by @arvidn in #8343
- fuzzer for parse_piece_layers by @arvidn in #8346
- improve sanitization of filenames, and symlinks in particular by @arvidn in #8344
- strengthen peer encryption (obfuscation) by @arvidn in #8350
- pe_crypto_state fuzzer by @arvidn in #8347
- fuzzer for identify_client by @arvidn in #8348
- in create_torrent, store symbolic links according to BEP 47 by @arvidn in #8349
- Test merge by @arvidn in #8351
- fix bug in combine_path by @arvidn in #8352
- address potential dangling pointers in smart_ban by @arvidn in #8357
- sanitize time counters in add_torrent_params by @arvidn in #8358
- Test merge by @arvidn in #8360
- add another phase to flushing blocks from the disk cache by @arvidn in #8359
- address data race in pread_disk_io by @arvidn in #8361
- utp_stream fuzzer by @arvidn in #8364
- fuzzer for local service discovery by @arvidn in #8363
- add fuzzer for udp tracker by @arvidn in #8362
- extend the UPnP fuzzer to actaually exercise the port mapping logic by @arvidn in #8365
- add NAT-PMP fuzzer by @arvidn in #8375
- fix bug in post_download_queue() when a torrent complete by @arvidn in #8376
- add two documentation comments for portmaps by @arvidn in #8371
- Fix quoted I2P SAM values by @M-Hassan-Raza in #8369
- Fix bandwidth channel iteration by @M-Hassan-Raza in #8374
- Return partial byte count from pwrite_all on error by @M-Hassan-Raza in #8380
- fix connection_tester with allow-fast by @arvidn in #8379
- add fuzzer for socks5 udp associate by @arvidn in #8378
- Connection tester by @arvidn in #8382
- fix race when removing an auto managed torrent by @arvidn in #8383
- Fix UPnP content-type checks by @M-Hassan-Raza in #8370
- don't print warning for some undocumented functions by @arvidn in #8385
- use v2 hashes for hybrid torrents, instead of smart_ban by @arvidn in #8386
- Handle short reads from part files by @M-Hassan-Raza in #8381
- Test merge by @arvidn in #8387
- add python binding alert.timestamp() by @milahu in #8368
- update run_benchmark.py by @arvidn in #8390
- improve performance of disk job pool by @arvidn in #8391
- Test merge by @arvidn in #8392
- add feature to connection_tester to generate resume data by @arvidn in #8394
- Improve benchmark by @arvidn in #8396
- fix generating v2 resume data in connection_tester by @arvidn in #8397
- fix bug in tracker announcements involving i2p trackers by @arvidn in #8398
- factor out shared code in portmap fuzzers by @arvidn in #8400
- fix v2 piece hash generation in connection_test...
v2.0.13
2.0.13 released
- stricter basic auth handling for web seed
- fix bug in tracker announcements involving i2p trackers
- improve performance of disk job pool
- fix race when removing an auto managed torrent
- fix bug in post_download_queue() when a torrent complete
- in create_torrent, store symbolic links according to BEP 47
- strengthen peer encryption (obfuscation)
- improve HTTP response parsing
- optimize sanitization of symlinks when loading torrents
- stricter checking of tracker URLs
- fixed piece-picker accounting issue for filtered pieces
- add setting for NAT-PMP lease duration
- optimize v2 request sizes
- fix socks5 issues
- fix issue in loading v2 resume data merkle trees
What's Changed
- fix issue in loading v2 resume data merkle trees by @arvidn in #8213
- Update
nick-fields/retryaction fornode 24compatibility by @xavier2k6 in #8219 - cmake - fix python install path being treated as absolute by @Andrej730 in #8221
- Reserve vector space before use by @Chocobo1 in #8232
- fix socks5 issues by @arvidn in #8229
- fix to_req() to not request pad-space for v2-only torrents by @arvidn in #8231
- fixup recent change to piece_size_for_req() by @arvidn in #8236
- Allow multiple connections from the same Peer ID by @lzhzh1 in #8215
- add setting for NAT-PMP lease duration by @arvidn in #8239
- fix flaky test in test_flags by @arvidn in #8254
- backport fixes detected by cppcheck in master by @arvidn in #8261
- Static OpenSSL Windows Action by @qstokkink in #8240
- Add support for OpenSSL 4.0 by @Chocobo1 in #8270
- add warning to get_download_queue() documentation by @arvidn in #8272
- V2 piece check fix by @arvidn in #8274
- add ubuntu-arm to Python binding CI by @arvidn in #8275
- Use Boost 1.91.0 in Windows CI by @xavier2k6 in #8281
- fix CIFuzz issue by @arvidn in #8290
- Update cibuildwheel workflow by @xavier2k6 in #8287
- NATPMP fixes by @arvidn in #8297
- Add Python MacOS x86_64 builds to cibuildwheel by @qstokkink in #8285
- fix flaky test involving web_server.py in windows by @arvidn in #8300
- Bump some pre-commit hook revs by @xavier2k6 in #8288
- fixed piece-picker accounting issue for filtered pieces by @arvidn in #8305
- backport the wait_for_alert() fix from RC_2_1 by @arvidn in #8313
- clean up some strncmp() by using string_view by @arvidn in #8320
- fix socks5 parsing edge case by @arvidn in #8321
- stricter checking of tracker URLs by @arvidn in #8318
- tighten validation of v2 hash requests by @arvidn in #8322
- fix off-by-one in loading banned peers from resume data by @arvidn in #8323
- fix edge case in socks5 UDP unwrap() by @arvidn in #8324
- make parse_magnet_uri() stricter by @arvidn in #8325
- remove cirrus CI by @arvidn in #8326
- add warning message to read_resume_data() by @arvidn in #8328
- fix incorrect invariant check in torrent.cpp by @arvidn in #8331
- GHA CI: Replace
third partyaction withnode24 compatiblevariant by @xavier2k6 in #8327 - Fix resume file save trigger on PEX/LSD change by @Bonstra in #8333
- optimize sanitization of symlinks when loading torrents by @arvidn in #8334
- Fixup web seed by @arvidn in #8336
- sanitize add_torrent_params by @arvidn in #8341
- strengthen peer encryption (obfuscation) by @arvidn in #8350
- in create_torrent, store symbolic links according to BEP 47 by @arvidn in #8349
- fix bug in combine_path by @arvidn in #8352
- address potential dangling pointers in smart_ban by @arvidn in #8357
- sanitize time counters in add_torrent_params by @arvidn in #8358
- fix bug in post_download_queue() when a torrent complete by @arvidn in #8376
- add two documentation comments for portmaps by @arvidn in #8371
- Fix quoted I2P SAM values by @M-Hassan-Raza in #8369
- Fix bandwidth channel iteration by @M-Hassan-Raza in #8374
- Return partial byte count from pwrite_all on error by @M-Hassan-Raza in #8380
- fix race when removing an auto managed torrent by @arvidn in #8383
- Fix UPnP content-type checks by @M-Hassan-Raza in #8370
- don't print warning for some undocumented functions by @arvidn in #8385
- use v2 hashes for hybrid torrents, instead of smart_ban by @arvidn in #8386
- Handle short reads from part files by @M-Hassan-Raza in #8381
- improve performance of disk job pool by @arvidn in #8391
- fix bug in tracker announcements involving i2p trackers by @arvidn in #8398
- Fix peer class bandwidth channel capacity by @M-Hassan-Raza in #8388
- Fix mmap disk jobs stranded behind fences by @M-Hassan-Raza in #8389
- avoid busy looping in tests by @arvidn in #8413
- Match DHT RPC replies by full endpoint by @M-Hassan-Raza in #8410
- Fix deprecated pair piece priorities by @M-Hassan-Raza in #8430
- Fix reject piece request iteration by @M-Hassan-Raza in #8432
- fix issue with graceful pause during shutdown by @arvidn in #8435
- Fix DH xor mask secret padding by @M-Hassan-Raza in #8434
- Fix whole-piece prefetch overflow by @M-Hassan-Raza in #8436
- mark hashes as have=true to avoid double-requests by @arvidn in #8442
- Fix SOCKS5 auth request bounds by @M-Hassan-Raza in #8441
- stricter checks in hash-picker by @arvidn in #8446
- fix typo in get_drive_info() by @arvidn in #8448
- fix issue in uTP shutdown by @arvidn in #8450
- extend get_drive_info by @arvidn in #8452
- Stop tracker timeout web server by @hussainarslan in #8454
- Validate resume files touched by completed pieces by @hussainarslan in #8451
- stricter basic auth handling for web seed by @arvidn in #8319
- Fix DHT upload quota zero limit by @M-Hassan-Raza in #8456
- clear HTTP credentials on redirected web seeds by @arvidn in #8455
- fix merkle proof cleanup by @arvidn in #8461
- bump version to 2.0.13 by @arvidn in #8462
New Contributors
- @Andrej730 made their first contribution in #8221
- @lzhzh1 made their first contribution in #8215
- @Bonstra made their first contribution in #8333
- @hussainarslan made their first contribution in #8454
Full Changelog: v2.0.12...v2.0.13
v2.1.0-rc1
2.1.0 Release Candidate 1
* optimize torrent_handle::torrent_file()
* add option to not validate v1 hashes for hybrid torrents
* add post_file_status() to query them asynchronously
* add post_file_priorities() to query them asynchronously
* fix local service discovery not being correctly staggered
* add an experimental multi-threaded, pread()-based, disk I/O backend (pread_disk_io)
* make the save path for part files configurable
* retry failed SAM connection (for i2p)
* deprecated remap_files(), and prevent it from breaking v2 torrents
* fix peer_info holding an i2p destination
* implement i2p_pex, peer exchange support for i2p torrents
* deprecate torrent_alert::torrent_name()
* requires OpenSSL minimum version 1.1.0 with SNI support
* try harder to bind TCP and UDP sockets to the same port
* made disk_interface's status_t type a flags type
* optimize resume data format to use less space
* add a simpler overload to bencode() returning a vector<char>
* introduced a new API for creating torrents, enabling file_storage optimizations
* default build to not include functions deprecated in libtorrent 1.1 and earlier
* add comment, created_by and creation_date to add_torrent_params
* move session_flags to session_params
* the entry class is now a standard variant type
* use std::string_view instead of boost counterpart
* libtorrent now requires C++17 to build
* added support for WebTorrent
Full Changelog: v2.0.12...v2.1.0-rc1
v2.0.12
2.0.12 released
- fix issue where file priorities could be cleared by force recheck
- fix issue in XML parser
- when building against OpenSSL, require at least version 1.1.1
- add setting to set no-copy-on-write flag on new files
- add performance counters to file pool
- add high_priority flag to torrent_handle::force_reannounce()
- update default DSCP value and update docs
- fix python binding for set_notify_function()
- fix error handling in mmap disk I/O when hashing files
- improve copy_file_range() fallback
- don't overwrite existing files when renaming
- add option to send host header in HTTP proxy CONNECT command
- cache DNS failures for a shorter time
- file_renamed_alert is always posted, regardless of alert mask
- add feature to request resume data synchronously
- don't leak file descriptors to child processes (O_CLOEXEC)
- optimize the utp resend
- optimize tracker announcements
- fix handling of invalid filenames
- add support for I2CP inbound.lengthVariance and outbound.lengthVariance tunnel settings
- add natpmp_gateway setting to manually set the default gateway for the NAT-PMP protocol
What's Changed
- fix publish to pypi by @arvidn in #7836
- fix warning in posix_storage and TORRENT_RVO by @arvidn in #7846
- fix assert in bdecode.cpp by @arvidn in #7857
- fix handling of invalid filenames by @arvidn in #7858
- cirrus: Bump freebsd image by @xavier2k6 in #7861
- Bump numerous pre-commit-hook revisions by @xavier2k6 in #7863
- cibuildwheel: Migrate away from deprecated input by @xavier2k6 in #7862
- cirrus: Increment freebsd image by @xavier2k6 in #7870
- AppVeyor: Bump python to 3.8 by @xavier2k6 in #7887
- silence clang warning on BSD build image by @arvidn in #7899
- Suppress msvc C5054 warning by @Chocobo1 in #7888
- Fix arguments of dispatched functions cannot be actually moved by @glassez in #7873
- Optimizations by @arvidn in #7916
- support find_torrent() for v2 torrents by @arvidn in #7921
- Utp resend optimization by @arvidn in #7931
- GHA CI - Windows: Explicitly use
windows-latestby @xavier2k6 in #7932 - Don't leak file descriptors to child processes by @Chocobo1 in #7937
- Python bindings: Revise supported python versions by @xavier2k6 in #7939
- enable android.cloexec check in clang-tidy by @arvidn in #7941
- update ChangeLog by @arvidn in #7944
- Fix use after move by @glassez in #7957
- Improve loading sparse merkle tree by @glassez in #7956
- Add inbound and outbound tunnels length variance in i2p stream settings. by @ljfp in #7942
- Fix wrong variable in CMake by @Chocobo1 in #7951
- PEP 621 Compliance - Add
name&versionfields topyproject.tomlby @xavier2k6 in #7955 - update set_version.py to update pyproject.toml by @arvidn in #7966
- install openssl before building the wheel by @arvidn in #7970
- Bump some pre-commit-hook revs by @xavier2k6 in #7968
- Add ability to get resume data synchronously by @glassez in #7869
- add documentation and changelog entry for get_resume_data() by @arvidn in #7972
- file_renamed_alert by @arvidn in #7975
- cache DNS failures for a shorter time by @arvidn in #7976
- New clang warnings by @arvidn in #7977
- improve error handling in parse_info_section() by @arvidn in #7984
- update manylinux docker scripts by @arvidn in #7971
- add option to send host header in HTTP proxy CONNECT command by @arvidn in #7710
- fix warnings by @arvidn in #7991
- Fix use after move by @glassez in #7997
- fix stack_allocator to fail gracefully when running out of memory by @arvidn in #7998
- bump boost to 1.88 on CI by @arvidn in #7986
- cache stack_allocator's allocation of torrent name by @arvidn in #8000
- improve stack_allocator oom handling by @arvidn in #8002
- GHA CI: bumped
checkoutaction tov5by @xavier2k6 in #8009 - add test for torrent with two invalid directory names by @arvidn in #8010
- don't link against libboost_system explicitly by @arvidn in #8030
- avoid replacing files when renaming by @arvidn in #8028
- Fix backslash handling in filenames on non-Windows systems by @cocopaw in #8014
- fix build issues when disabling i2p support by @arvidn in #8029
- Bump
setup-pythonaction of linux workflow by @xavier2k6 in #8032 - cirrus: Update
freebsd imagetofreebsd-14-3. by @xavier2k6 in #8068 - make copy_file_range() fall back if it fails with ENOSYS by @arvidn in #8071
- search Program Files/OpenSSL/ for OpenSSL on windows runners by @arvidn in #8076
- fix mmap disk I/O error handling when hashing files by @arvidn in #8070
- bump python to 3.14 in MacOS CI by @arvidn in #8075
- update default DSCP value and update docs by @arvidn in #8072
- Update pre-commit-config workflow by @xavier2k6 in #8046
- fix MingW CI workflow by @arvidn in #8078
- fix issue causing CI to run out of disk space by @arvidn in #8081
- Disable SSL3 by @arvidn in #8079
- add high_priority flag to tracker announcements by @arvidn in #8054
- GHA CI: Bump multiple
actionrevs by @xavier2k6 in #8077 - Use Boost 1.90.0 in Windows CI by @xavier2k6 in #8085
- update boost-build links in build documentation by @arvidn in #8094
- enable libc++ hardening with debug-iterators=on by @arvidn in #8095
- fix warning in test_transfer by @arvidn in #8098
- fix simulate slow read by @arvidn in #8097
- modernize run_benchmark and parse_session_stats python scripts by @arvidn in #8101
- Also build & test with newer OS version (10) in Windows CI by @xavier2k6 in #8100
- fix broken request latency measurement by @arvidn in #8102
- fix
run_benchmark.pyby @arvidn in #8105 - add performance counters to file pool by @arvidn in #8106
- in client_test, print performance counters to a separate file by @arvidn in #8107
- add new setting disk_disable_copy_on_write by @arvidn in #8103
- improve parse_session_stats to split long runs into 1-hour slots by @arvidn in #8115
- fix no-copy-on-write flag setting by @arvidn in #8116
- when building against OpenSSL, require at least version 1.1.1 by @arvidn in #8114
- fix issue in XML parser by @arvidn in #8130
- another XML parser edge case by @arvidn in #8134
- Improve compatibility with C++23 by @Chocobo1 in #8136
- fix premature seed detection in is_seed() by @peterdrier in #8122
- Fixed Python CI paths and deprecations by @qstokkink in #8142
- added python 314 compatibility by @HavenCTO in #8138
- disable disk_disable_copy_on_write by default by @database64128 in #8146
- remove bad invariant check by @arvidn in #8148
- Add RC_2_0 Python type st...
libtorrent 2.0.11
What's Changed
- bump version for future release by @arvidn in #7621
- torrent_status::num_pieces counts pieces passed hash check by @arvidn in #7631
- Updated numerous action revisions by @xavier2k6 in #7590
- back-port fixes to brew on CI by @arvidn in #7648
- fix setup.py to not use distutils by @arvidn in #7649
- fix integer overflow in piece picker by @arvidn in #7647
- Send read_piece_alert after piece passes by @YakoYakoYokuYoku in #7642
- test for
set_piece_deadline()by @arvidn in #7652 - default target windows 10 by @arvidn in #7662
- Make anti-leech choker never increase score for dishonesty by @Artoria2e5 in #7658
- fix the compilation failure caused by the failure to find std::max by @zzlhyly in #7664
- bump libsimulator submodule by @arvidn in #7673
- assume copy_file_range() exists on linux (unless old glibc) by @arvidn in #7670
- bump cibuildwheel action to v2.17.0 by @arvidn in #7672
- rely on the openssl version already installed on the runner by @arvidn in #7685
- ask msvc to report the correct C++ version in __cplusplus macro by @arvidn in #7545
- attempt to make CirrusCI job more efficient by @arvidn in #7697
- remove aligned storage, as it's deprecated in C++23 by @arvidn in #7698
- attempt to fix msvc version macro builds by @arvidn in #7709
- GHA workflow update by @arvidn in #7699
- apply DSCP setting to peers before connecting by @arvidn in #7696
- check settings_pack::max_out_request_queue before alert outstanding_r… by @tkittich in #7714
- improve debug facilities of swarm simulations by @arvidn in #7719
- Improve simulator determinism by @arvidn in #7720
- fix issue when closing a uTP connection by @arvidn in #7717
- fix test_copy_file to recognize overlayfs as supporting sparse files. by @arvidn in #7715
- Fix some typos by @xavier2k6 in #7728
- don't discard netlink messages for previously seen addresses by @ssiloti in #7737
- fix pre-allocation when changing priority by @arvidn in #7738
- limit the piece size in create_torrent constructor by @arvidn in #7739
- Updated numerous pre-commit hook revs. by @xavier2k6 in #7723
- fix BEP-40 peer priority for IPv6 by @arvidn in #7743
- GHA CI: Migrate to OpenSSL 3.x by @xavier2k6 in #7746
- minor fix on documentation by @joriscarrier in #7753
- allow connections while checking resume data if no_verify_files flag is set by @e1y4s in #7754
- don't hint
POSIX_FADV_RANDOMby @arvidn in #7758 - fix tests to work on linux ZFS by @arvidn in #7759
- fix bug where file_progress could sometimes be reported as >100% by @arvidn in #7765
- cibuildwheel: Add macOS arm64 support by @xavier2k6 in #7727
- Move construct
std::shared_ptrobjects by @Chocobo1 in #7768 - Bump libsimulator submodule by @0xThiebaut in #7773
- fix performance bug in the file pool by @arvidn in #7779
piece_pickerupdates by @arvidn in #7781- Add announce_port support by @0xThiebaut in #7771
- fix race condition when cancelling requests after becoming a seed by @arvidn in #7787
- abort_download() is OK in any state by @arvidn in #7788
- Bump some pre-commit-hook revs by @xavier2k6 in #7804
- Fix mmap error when reading empty file during resume check on Linux by @Doekin in #7808
- homebrew uses standard name for pre-built boost_system now by @arvidn in #7816
- bump ubuntu version in workflows by @arvidn in #7817
- remove use of std::aligned_union by @arvidn in #7818
- bump version by @arvidn in #7815
- Fix typos by @xavier2k6 in #7820
- add some possible values to the documentation for dht_bootstrap_nodes by @arvidn in #7827
- fix applying IP filter to DHT traffic (HanabishiRecca) by @arvidn in #7829
- cibuildwheel: update workflow by @xavier2k6 in #7805
- add invariant check to
socks5_streamby @arvidn in #7785 - fix fcntl.h warning by @arvidn in #7830
- use stricter rules for what filenames are valid on Android by @arvidn in #7828
- validate add_torrent_params::save_path at run-time by @arvidn in #7826
New Contributors
- @YakoYakoYokuYoku made their first contribution in #7642
- @Artoria2e5 made their first contribution in #7658
- @zzlhyly made their first contribution in #7664
- @tkittich made their first contribution in #7714
- @e1y4s made their first contribution in #7754
- @0xThiebaut made their first contribution in #7773
- @Doekin made their first contribution in #7808
Full Changelog: v2.0.10...v2.0.11
libtorrent 1.2.20
What's Changed
- backport cibuildwheel fix of not running tests in win32 by @arvidn in #7442
- back-port posix timestamps by @stalkerok in #7446
- back-port updating test certs by @arvidn in #7467
- Allow to compile RC_1_2 branch in C++20 mode by @Chocobo1 in #7491
- FIX(peer_list): clear the m_candidate_cache when clear peer_list, and… by @Lwxiang in #7460
- avoid implicit this capture by @arvidn in #7502
- rely on RVO in C++20 by @arvidn in #7504
- (Backport) Treat CGNAT address range as local IPs by @Chocobo1 in #7531
- Allow to change save path without moving any files by @glassez in #7552
- bump python version on github actions to 3.12 by @arvidn in #7583
- Migrate away from deprecated functions in C++23 by @Chocobo1 in #7582
- Clean up MSVC compiler flags by @Chocobo1 in #7615
- fix issue when closing a uTP connection RC_1_2 backport by @arvidn in #7718
- fix piece size check when loading torrents by @arvidn in #7740
- use stricter rules for what filenames are valid on Android by @arvidn in #7832
- update test certs by @arvidn in #7833
- validate add_torrent_params::save_path at run-time by @arvidn in #7825
New Contributors
- @stalkerok made their first contribution in #7446
Full Changelog: v1.2.19...v1.2.20