libtorrent Changelog

What's new in libtorrent 2.0.10

Feb 19, 2024
  • Don't run win32 tests when building python wheel by @arvidn in #7437
  • Fix missing python converter for dht::announce_flags_t by @arvidn in #7443
  • Bump boost version to enable Python 3.11 package builds by @cas-- in #7445
  • Cmake: don't define _FILE_OFFSET_BITS on Windows by @lazka in #7449
  • Update SSL certificates for tests by @arvidn in #7466
  • Updated numerous repo addresses & revs of pre-commit-hooks by @arvidn in #7468
  • Fixes various typos by @luzpaz in #7482
  • Fix dht_announce_interval not being followed accurately in some cases by @thrnz in #7476
  • suppress new GCC warning from 3rd party code (openssl) by @arvidn in #7494
  • update FreeBSD dependency on boost_build to boost-build by @arvidn in #7495
  • README: Remove LGTM badges by @luzpaz in #7500
  • Forward port candidate cache by @arvidn in #7496
  • hidden dllexport by @arvidn in #7497
  • reset_save_path by @arvidn in #7498
  • fix unnecessary capture of this in lambda expressions by @arvidn in #7503
  • run thread-sanitizer on Ubuntu-22.04 on CI by @arvidn in #7499
  • make sure the library builds with C++17 and C++20, in addition to C++14 by @arvidn in #7501
  • improve TORRENT_RVO feature detection by @arvidn in #7506
  • add python bindings by @rcarpa in #7509
  • fix use of python ssl module by @arvidn in #7547
  • address issue in boost.asio building on iOS by @arvidn in #7546
  • improve checking and testing of max piece size by @arvidn in #7514
  • fix MingW64 CI build by @arvidn in #7549
  • fix assert in uTP resend_packet() by @arvidn in #7574
  • bump python version on github actions to 3.12 by @arvidn in #7579
  • Color theme revamp by @sledgehammer999 in #7561
  • allow execution of on_unknown_torrent method in the absence of active torrents by @joriscarrier in #7537
  • migrate awy from aligned_storage by @arvidn in #7584
  • minor fixes by @arvidn in #7581
  • allow I2P leaseset encryption type 4 by @Vort in #7585
  • Fix the wrong port is being announced to tracker by @glassez in #7596
  • Remove obsolete LGTM config file by @xavier2k6 in #7591
  • Update Cirrus CI config by @xavier2k6 in #7589
  • Restore file priorities in POSIX storage by @HanabishiRecca in #7594
  • fix and suppress some new clang warnings util addressed (in master) by @arvidn in #7609
  • Reject resume data if it contains mismatching info hashes by @glassez in #7597
  • add test coverage for read_resume_data() by @arvidn in #7610
  • fix test_copy_file for tmpfs by @arvidn in #7611
  • add missing test file to tarball by @arvidn in #7612
  • Updated numerous pre-commit hook revs. by @xavier2k6 in #7605
  • forward-port of #7615 by @arvidn in #7616
  • recreate the SSL test certificates with long expiration time by @arvidn in #7618
  • bump version to 2.0.10 by @arvidn in #7619

New in libtorrent 2.0.9 (May 22, 2023)

  • Fix issue with web seed connections when they close and re-open
  • Fallocate() not supported is not a fatal error
  • Fix proxying of IPv6 connections via IPv4 proxy
  • Treat CGNAT address range as local IPs
  • Add stricter checking of piece layers when loading torrents
  • Add stricter checking of v1 and v2 hashes being consistent
  • Cache failed DNS lookups as well as successful ones
  • Add an i2p torrent state to control interactions with clear swarms
  • Fix i2p SAM protocol parsing of quoted messages
  • Expose i2p peer destination in peer_info
  • Fix i2p tracker announces
  • Fix issue with read_piece() stopping torrent on pieces not yet downloaded
  • Improve handling of allow_i2p_mixed setting to work for magnet links
  • Fix web seed request for renamed single-file torrents
  • Fix issue where web seeds could disappear from resume data
  • Extend save_resume with additional conditional flags
  • Fix issue with retrying trackers in tiers > 0
  • Fix last_upload and last_download resume data fields to use posix time
  • Improve error messages for no_connect_privileged_ports, by untangle it from the port filter
  • Fix I2P issue introduced in 2.0.0
  • Add async tracker status query, post_trackers()
  • Add async torrent status query, post_status()
  • Support loading version 2 of resume data format
  • Fix issue with odd piece sizes
  • Add async piece availability query, post_piece_availability()
  • Add async download queue query, post_download_queue()
  • Add async file_progress query, post_file_progress()
  • Add async peer_info query, post_peer_info()

New in libtorrent 2.0.8 (Oct 23, 2022)

  • Fix uTP streams timing out instead of closing cleanly
  • Add write_torrent_file_buf() overload for generating .torrent files
  • Add create_torrent::generate_buf() function to generate into a buffer
  • Fix copy_file when the file ends with a sparse region
  • UTP performance, fix packet loss when sending is stalled
  • Fix trackers being stuck after session pause/resume
  • Fix bug in hash_picker with empty files
  • UTP performance, prevent premature timeouts/resends
  • Add option to not memory map files below a certain size
  • Settings_pack now returns default values when queried for missing settings
  • Fix copy_file fall-back when SEEK_HOL/SEEK_DATA is not supported
  • Improve error reporting from file copy and move
  • Tweak pad file placement to match reference implementation (tail-padding)
  • UTP performance, more lenient nagle's algorithm to always allow one outstanding undersized packet
  • UTP performance, piggy-back held back undersized packet with ACKs
  • UTP performance, don't send redundant deferred ACKs
  • Support incoming SOCKS5 packets with hostnames as source address, for UDP trackers
  • Ignore duplicate network interface change notifications on linux
  • Fix total_want/want accounting when forcing a recheck
  • Fix merging metadata with magnet links added on top of existing torrents
  • Add torrent_flag to default all file priorities to dont_download
  • Fix &so= feature in magnet links
  • Improve compatibility of SOCKS5 UDP ASSOCIATE
  • Fix madvise range for flushing cache in mmap_storage
  • Open files with no_cache set in O_SYNC mode

New in libtorrent 2.0.7 (Jul 18, 2022)

  • Fix issue in use of copy_file_range() on linux
  • Avoid open-file race in the file_view_pool
  • FIx issue where stop-when-ready would not close files
  • Fix issue with duplicate hybrid torrent via separate v1 and v2 magnet links
  • Added new function to load torrent files, load_torrent_*()
  • Support sync_file_range() on linux
  • Fix issue in write_torrent_file() when file size is exactly piece size
  • Fix file_num_blocks() and file_num_pieces() for empty files
  • Add new overload to make_magnet_uri()
  • Add missing protocol version to tracker_reply_alert and tracker_error_alert
  • Fix privilege issue with SetFileValidData()
  • Add asynchronous overload of torrent_handle::add_piece()
  • Default to a single hashing thread, for full checks
  • Fix bug when checking files and the first piece is invalid
  • As well as changes merged in from the 1.2.x branch:
  • Fixed tracker connections spinning when hostname lookups stall
  • Fixed error in pkg-config file generation in Jamfile
  • Improve backwards compatibility with loading magnet link resume files
  • Fix bind-to-device for tracker announces and UPnP
  • Rename peer_tos setting to peer_dscp
  • Fix bdecode support for large strings (>= 100 MB)

New in libtorrent 2.0.5 (Dec 5, 2021)

  • On windows, explicitly flush memory mapped files periodically
  • Fix build with WolfSSL
  • Fix issue where incoming uTP connections were not accepted over SOCKS5
  • Fix several issues in handling of checking files of v2 torrents, esp. from magnet links
  • Make the token limit when parsing metadata from magnet files configurable
  • Fix issue with stalled pieces on disk full errors
  • Fix missing python binding for file_progress_flags
  • Fix torrent_file_with_hashes() to fail when we don't have the piece layers
  • Restore path character encoding conversion for non UTF-8 locales on linux
  • Fix use-after-free bug in make_magnet_uri
  • Add write_torrent_file() to produce a .torrent file from add_torrent_params
  • Allow loading v2 .torrent files without piece layer
  • Fix issue with adding v2 torrents with invalid file root hash

New in libtorrent 2.0.4 (Jun 7, 2021)

  • fix piece picker bug causing double-picks with prefer-contiguous enabled
  • expose session_params in python bindings
  • fix (deprecated) use of add_torrent_params::info_hash
  • fix issue creating and loading v2 torrents with empty files. Improves
  • conformance to BEP52 reference implementation
  • fixes merged in from the 1.2.x branch:
  • improve handling of seed flag in PEX messages
  • fix issue of accruing unlimited DHT node candidates when DHT is disabled
  • fix bug in parsing chunked encoding
  • fix incorrect reporting of active_duration when entering graceful-pause
  • fix python binding for functions taking string_view
  • fix python binding for torrent_info constructor overloads
  • issue python deprecation warnings for some deprecated functions in the python bindings
  • fix python binding for torrent_info::add_url_seed, add_tracker and add_http_seed

New in libtorrent 2.0.3 (Mar 29, 2021)

  • Add new torrent_file_with_hashes() which includes piece layers for
  • Creating .torrent files
  • Add file_prio_alert, posted when file priorities are updated
  • Fix issue where set_piece_hashes() would not propagate file errors
  • Add missing python binding for event_t
  • Add work-around for systems without fseeko() (such as Android)
  • Add convenience header libtorrent/libtorrent.hpp
  • Increase default max_allowed_in_request_queue
  • Fix loading non-ascii filenames on windows with torrent_info constructor (2.0 regression)
  • Add std::hash<> specialization for info_hash_t
  • Fix integer overflow in hash_picker and properly restrict max file sizes in torrents
  • Strengthen SSRF mitigation for web seeds

New in libtorrent 2.0.2 (Jan 8, 2021)

  • add v1() and v2() functions to torrent_info
  • fix piece_layers() to work for single-piece files
  • fix python binding regression in session constructor flags
  • fix unaligned piece requests in mmap_storage
  • improve client_data_t ergonomics
  • fix issue with concurrent access to part files

New in libtorrent 2.0.1 (Nov 15, 2020)

  • Fix attribute in single-file v2 torrent creation
  • Fix padding for empty files in v2 torrent creation
  • Add function to ask a file_storage whether it's v2 or not
  • Fix mtime field when creating single-file v2 torrents
  • Fix performance regression in checking files
  • Disable use of SetFileValidData() by default (windows). A new setting
  • Allows enabling it

New in libtorrent 2.0.0 (Oct 26, 2020)

  • dropped depenency on iconv
  • deprecate set_file_hash() in torrent creator, as it's superceded by v2 torrents
  • deprecate mutable access to info_section in torrent_info
  • removed deprecated lazy_entry/lazy_bdecode
  • stats_alert deprecated
  • remove bittyrant choking algorithm
  • update userdata in add_torrent_params to be type-safe and add to torrent_handle
  • add ip_filter to session_params
  • added support for wolfSSL for SHA-1 hash and HTTPS (no Torrents over SSL)
  • requires OpenSSL minimum version 1.0.0 with SNI support
  • deprecated save_state() and load_state() on session in favour of new
  • write_session_params() and read_session_params()
  • added support for BitTorrent v2 (see docs/upgrade_to_2.0.html)
  • create_torrent() pad_file_limit parameter removed
  • create_torrent() merkle- and optimize-alignment flags removed
  • merkle_tree removed from add_torrent_params
  • announce_entry expose information per v1 and v2 info-hash announces
  • deprecated sha1_hash info_hash members on torrent_removed_alert,
  • torrent_deleted_alert, torrent_delete_failed_alert and add_torrent_params
  • undeprecate error_file_metadata for torrent errors related to its metadata
  • remove support for adding a torrent under a UUID (used for previous RSS support)
  • remove deprecated feature to add torrents by file:// URL
  • remove deprecated feature to download .torrent file from URL
  • requires boost >= 1.66 to build
  • update networking API to networking TS compatible boost.asio
  • overhauled disk I/O subsystem to use memory mapped files (where available)
  • libtorrent now requires C++14 to build
  • added support for GnuTLS for HTTPS and torrents over SSL

New in libtorrent 0.16.16 (May 13, 2014)

  • add missing add_files overload to the python bindings
  • improve error handling in http gunzip
  • fix debug logging for banning web seeds
  • improve support for de-selected files in full allocation mode
  • fix dht_bootstrap_alert being posted
  • SetFileValidData fix on windows (prevents zero-fill)
  • fix minor lock_files issue on unix

New in libtorrent 0.16.15 (May 13, 2014)

  • fix mingw time_t 64 bit issue
  • fix use of SetFileValidData on windows
  • fix crash when using full allocation storage mode
  • improve error_code and error_category support in python bindings
  • fix python binding for external_ip_alert

New in libtorrent 0.16.14 (May 13, 2014)

  • make lt_tex more robust against bugs and malicious behavior
  • HTTP chunked encoding fix
  • expose file_granularity flag to python bindings
  • fix DHT memory error
  • change semantics of storage allocation to allocate on first write rather than on startup (behaves better with changing file priorities)
  • fix resend logic in response to uTP SACK messages
  • only act on uTP RST packets with correct ack_nr
  • make uTP errors log in normal log mode (not require verbose)
  • deduplicate web seed entries from torrent files
  • improve error reporting from lazy_decode()