Pre-release

@arvidn arvidn released this Nov 19, 2018 · 48 commits to master since this release

Assets 3

This is a release candidate of libtorrent 1.2.0, not a final release.
This version is ABI incompatible with the 1.1.x releases.
With libtorrent 1.2.0, C++11 is required to build and in some cases the API has been altered as well. Mostly to use standard C++ types instead of boost types, but also to use more modern vocabulary types like string_view and span.

The main changes affecting the API are documented here.

The main differences since RC1 are:

  • span type now use std::ptrdiff_t for size and indices, aligned with gsl::span
  • the old (slow) bdecode() function has been deprecated

The updates since the latest stable release are:

  • support &ipv4= tracker argument for private torrents
  • renamed debug_notification to connect_notification
  • when updating listen sockets, only post alerts for new ones
  • deprecate anonymous_mode_alert
  • deprecated force_proxy setting (when set, the proxy is always used)
  • add support for Port Control Protocol (PCP)
  • deliver notification of alerts being dropped via alerts_dropped_alert
  • deprecated alert::progress_notification alert category, split into
    finer grained categories
  • update plugin interface functions for improved type-safety
  • implemented support magnet URI extension, select specific file indices
    for download, BEP53
  • make tracker keys multi-homed. remove set_key() function on session.
  • add flags()/set_flags()/unset_flags() to torrent_handle, deprecate individual functions
  • added alert for block being sent to the send buffer
  • drop support for windows compilers without std::wstring
  • implemented support for DHT infohash indexing, BEP51
  • removed deprecated support for file_base in file_storage
  • added support for running separate DHT nodes on each network interface
  • added support for establishing UTP connections on any network interface
  • added support for sending tracker announces on every network interface
  • introduce "lt" namespace alias
  • need_save_resume_data() will no longer return true every 15 minutes
  • make the file_status interface explicitly public types
  • added resolver_cache_timeout setting for internal host name resolver
  • make parse_magnet_uri take a string_view instead of std::string
  • deprecate add_torrent_params::url field. use parse_magnet_uri instead
  • optimize download queue management
  • deprecated (undocumented) file:// urls
  • add limit for number of web seed connections
  • added support for retrieval of DHT live nodes
  • complete UNC path support
  • add packets pool allocator
  • remove disk buffer pool allocator
  • fix last_upload and last_download overflow after 9 hours in past
  • python binding add more add_torrent_params fields and an invalid key check
  • introduce introduce distinct types for peer_class_t, piece_index_t and
    file_index_t.
  • fix crash caused by empty bitfield
  • removed disk-access-log build configuration
  • removed mmap_cache feature
  • strengthened type safety in handling of piece and file indices
  • deprecate identify_client() and fingerprint type
  • make sequence number for mutable DHT items backed by std::int64_t
  • tweaked storage_interface to have stronger type safety
  • deprecate relative times in torrent_status, replaced by std::chrono::time_point
  • refactor in alert types to use more const fields and more clear API
  • changed session_stats_alert counters type to signed (std::int64_t)
  • remove torrent eviction/ghost torrent feature
  • include target in DHT lookups, when queried from the session
  • improve support for HTTP redirects for web seeds
  • use string_view in entry interface
  • deprecate "send_stats" property on trackers (since lt_tracker extension has
    been removed)
  • remove deprecate session_settings API (use settings_pack instead)
  • improve file layout optimization when creating torrents with padfiles
  • remove remote_dl_rate feature
  • source code migration from boost::shared_ptr to std::shared_ptr
  • storage_interface API changed to use span and references
  • changes in public API to work with std::shared_ptr<torrent_info>
  • extensions API changed to use span and std::shared_ptr
  • plugin API changed to handle DHT requests using string_view
  • removed support for lt_trackers and metadata_transfer extensions
    (pre-dating ut_metadata)
  • support windows' CryptoAPI for SHA-1
  • separated ssl and crypto options in build
  • remove lazy-bitfield feature
  • simplified suggest-read-cache feature to not depend on disk threads
  • removed option to disable contiguous receive buffers
  • deprecated public to_hex() and from_hex() functions
  • separated address and port fields in listen alerts
  • added support for parsing new x.pe parameter from BEP 9
  • peer_blocked_alert now derives from peer_alert
  • transitioned exception types to system_error
  • made alerts move-only
  • move files one-by-one when moving storage for a torrent
  • removed RSS support
  • removed feature to resolve country for peers
  • added support for BEP 32, "IPv6 extension for DHT"
  • overhauled listen socket and UDP socket handling, improving multi-home
    support and bind-to-device
  • resume data is now communicated via add_torrent_params objects
  • added new read_resume_data()/write_resume_data functions to write bencoded,
    backwards compatible resume files
  • removed deprecated fields from add_torrent_params
  • deprecate "resume_data" field in add_torrent_params
  • improved support for bind-to-device
  • deprecated ssl_listen, SSL sockets are specified in listen_interfaces now
  • improved support for listening on multiple sockets and interfaces
  • resume data no longer has timestamps of files
  • require C++11 to build libtorrent

@arvidn arvidn released this Nov 18, 2018 · 4 commits to RC_1_1 since this release

Assets 3
  • fix move_storage with save_path with a trailing slash
  • fix tracker announce issue, advertising port 0 in secondary IPv6 announce
  • fix missing boost/noncopyable.hpp includes
  • fix python binding for torrent_info::creation_date()
Pre-release

@arvidn arvidn released this Oct 13, 2018 · 149 commits to master since this release

Assets 3

This is a release candidate of libtorrent 1.2.0, not a final release.
This version is ABI incompatible with the 1.1.x releases.
With libtorrent 1.2.0, C++11 is required to build and in some cases the API has been altered as well. Mostly to use standard C++ types instead of boost types, but also to use more modern vocabulary types like string_view and span.

The main changes affecting the API are documented here.

The major highlights in this update are:

  • improved support for multi-homed systems. It is now possible to specify multiple listen interfaces. The DHT also supports multiple instances, one per interface.
  • cleanup of anonymous-mode and force proxy interactions. proxy settings are now always honoured, whether they work or not.
  • resume data has been simplified by separating serializing/deserializing from adding torrents (read_resume_data()/write_resume_data()). This gives clients more control over exactly what resume data and stats gets saved and restored.
  • cleaned up API by removing internal functions from public API.
  • introduced strong types in public API, for referring to piece indices, file indices as well as flag types. These will still implicitly convert to and from naked integrals as long as deprecated functions are enabled (to ease transition).
  • The groundwork has been laid to improve link safety by introducing inline namespaces, indicating the ABI version of the library. libtorrent types can no longer be declared in client translation units, instead include <libtorrent/fwd.hpp>
  • in libtorrent 1.1.x the performance of alerts were significantly boosted by allocating them in a contiguous buffer. libtorrent 1.2 takes the next step and removes the ability to clone alert objects (which was deprecated in 1.1)
  • many functions that previously took std::string objects, now take lt::string_view (which is meant to be similar to std::string_view).
  • plugin extensions at the session level now has to subscribe to have hooks called on it. This is a measure to improve scalability of extensions.

Full changelog since the 1.1.10 stable release

* renamed debug_notification to connect_notification
* when updating listen sockets, only post alerts for new ones
* deprecate anonymous_mode_alert
* deprecated force_proxy setting (when set, the proxy is always used)
* add support for Port Control Protocol (PCP)
* deliver notification of alerts being dropped via alerts_dropped_alert
* deprecated alert::progress_notification alert category, split into
  finer grained categories
* update plugin interface functions for improved type-safety
* implemented support magnet URI extension, select specific file indices
  for download, BEP53
* make tracker keys multi-homed. remove set_key() function on session.
* add flags()/set_flags()/unset_flags() to torrent_handle, deprecate individual functions
* added alert for block being sent to the send buffer
* drop support for windows compilers without std::wstring
* implemented support for DHT infohash indexing, BEP51
* removed deprecated support for file_base in file_storage
* added support for running separate DHT nodes on each network interface
* added support for establishing UTP connections on any network interface
* added support for sending tracker announces on every network interface
* introduce "lt" namespace alias
* need_save_resume_data() will no longer return true every 15 minutes
* make the file_status interface explicitly public types
* added resolver_cache_timeout setting for internal host name resolver
* make parse_magnet_uri take a string_view instead of std::string
* deprecate add_torrent_params::url field. use parse_magnet_uri instead
* optimize download queue management
* deprecated (undocumented) file:// urls
* add limit for number of web seed connections
* added support for retrieval of DHT live nodes
* complete UNC path support
* add packets pool allocator
* remove disk buffer pool allocator
* fix last_upload and last_download overflow after 9 hours in past
* python binding add more add_torrent_params fields and an invalid key check
* introduce introduce distinct types for peer_class_t, piece_index_t and
  file_index_t.
* fix crash caused by empty bitfield
* removed disk-access-log build configuration
* removed mmap_cache feature
* strengthened type safety in handling of piece and file indices
* deprecate identify_client() and fingerprint type
* make sequence number for mutable DHT items backed by std::int64_t
* tweaked storage_interface to have stronger type safety
* deprecate relative times in torrent_status, replaced by std::chrono::time_point
* refactor in alert types to use more const fields and more clear API
* changed session_stats_alert counters type to signed (std::int64_t)
* remove torrent eviction/ghost torrent feature
* include target in DHT lookups, when queried from the session
* improve support for HTTP redirects for web seeds
* use string_view in entry interface
* deprecate "send_stats" property on trackers (since lt_tracker extension has
  been removed)
* remove deprecate session_settings API (use settings_pack instead)
* improve file layout optimization when creating torrents with padfiles
* remove remote_dl_rate feature
* source code migration from boost::shared_ptr to std::shared_ptr
* storage_interface API changed to use span and references
* changes in public API to work with std::shared_ptr<torrent_info>
* extensions API changed to use span and std::shared_ptr
* plugin API changed to handle DHT requests using string_view
* removed support for lt_trackers and metadata_transfer extensions
  (pre-dating ut_metadata)
* support windows' CryptoAPI for SHA-1
* separated ssl and crypto options in build
* remove lazy-bitfield feature
* simplified suggest-read-cache feature to not depend on disk threads
* removed option to disable contiguous receive buffers
* deprecated public to_hex() and from_hex() functions
* separated address and port fields in listen alerts
* added support for parsing new x.pe parameter from BEP 9
* peer_blocked_alert now derives from peer_alert
* transitioned exception types to system_error
* made alerts move-only
* move files one-by-one when moving storage for a torrent
* removed RSS support
* removed feature to resolve country for peers
* added support for BEP 32, "IPv6 extension for DHT"
* overhauled listen socket and UDP socket handling, improving multi-home
  support and bind-to-device
* resume data is now communicated via add_torrent_params objects
* added new read_resume_data()/write_resume_data functions to write bencoded,
  backwards compatible resume files
* removed deprecated fields from add_torrent_params
* deprecate "resume_data" field in add_torrent_params
* improved support for bind-to-device
* deprecated ssl_listen, SSL sockets are specified in listen_interfaces now
* improved support for listening on multiple sockets and interfaces
* resume data no longer has timestamps of files
* require C++11 to build libtorrent

@arvidn arvidn released this Oct 6, 2018 · 33 commits to RC_1_1 since this release

Assets 3
  • fix issue in udp_socket with unusual socket failure
  • split progress_notification alert category into file-, piece- and block progress
  • utp close-reason fix
  • exposed default add_torrent_params flags to python bindings
  • fix redundant flushes of partfile metadata
  • add option to ignore min-interval from trackers on force-reannounce
  • raise default setting for active_limit
  • fall back to copy+remove if rename_file fails
  • improve handling of filesystems not supporting fallocate()
  • force-proxy no longer disables DHT
  • improve connect-boost feature, to make new torrents quickly connect peers

@arvidn arvidn released this Jul 31, 2018 · 55 commits to RC_1_1 since this release

Assets 3
  • save both file and piece priorities in resume file
  • added missing stats_metric python binding
  • uTP connections are no longer exempt from rate limits by default
  • fix exporting files from partfile while seeding
  • fix potential deadlock on Windows, caused by performing restricted
    tasks from within DllMain
  • fix issue when subsequent file priority updates cause torrent to stop

@arvidn arvidn released this Jun 25, 2018 · 72 commits to RC_1_1 since this release

Assets 3
  • coalesce reads and writes by default on windows
  • fixed disk I/O performance of checking hashes and creating torrents
  • fix race condition in part_file
  • fix part_file open mode compatibility test
  • fixed race condition in random number generator
  • fix race condition in stat_cache (disk storage)
  • improve error handling of failing to change file priority
    The API for custom storage implementations was altered
  • set the hidden attribute when creating the part file
  • fix tracker announces reporting more data downloaded than the size of the torrent
  • fix recent regression with force_proxy setting

@arvidn arvidn released this Apr 9, 2018 · 121 commits to RC_1_1 since this release

Assets 3
  • don't perform DNS lookups for the DHT bootstrap unless DHT is enabled
  • fix issue where setting file/piece priority would stop checking
  • expose post_dht_stats() to python binding
  • fix backwards compatibility to downloads without partfiles
  • improve part-file related error messages
  • fix reporting &redundant= in tracker announces
  • fix tie-break in duplicate peer connection disconnect logic
  • fix issue with SSL tracker connections left in CLOSE_WAIT state
  • defer truncating existing files until the first time we write to them
  • fix issue when receiving a torrent with 0-sized padfiles as magnet link
  • fix issue resuming 1.0.x downloads with a file priority 0
  • fix torrent_status::next_announce
  • fix pad-file scalability issue
  • made coalesce_reads/coalesce_writes settings take effect on linux and windows
  • use unique peer_ids per connection
  • fix iOS build on recent SDK
  • fix tracker connection bind issue for IPv6 trackers
  • fix error handling of some merkle torrents
  • fix error handling of unsupported hard-links

@arvidn arvidn released this Dec 31, 2017 · 182 commits to RC_1_1 since this release

Assets 3

Release 1.1.6

  • deprecate save_encryption_settings (they are part of the normal settings)
  • add getters for peer_class_filter and peer_class_type_filter
  • make torrent_handler::set_priority() to use peer_classes
  • fix support for boost-1.66 (requires C++11)
  • fix i2p support
  • fix loading resume data when in seed mode
  • fix part-file creation race condition
  • fix issue with initializing settings on session construction
  • fix issue with receiving interested before metadata
  • fix IPv6 tracker announce issue
  • restore path sanitization behavior of ":"
  • fix listen socket issue when disabling "force_proxy" mode
  • fix full allocation failure on APFS

@arvidn arvidn released this Oct 14, 2017 · 238 commits to RC_1_1 since this release

Assets 3

Release 1.1.5

  • fix infinite loop when parsing certain invalid magnet links
  • fix parsing of torrents with certain invalid filenames
  • fix leak of torrent_peer objecs (entries in peer_list)
  • fix leak of peer_class objects (when setting per-torrent rate limits)
  • expose peer_class API to python binding
  • fix integer overflow in whole_pieces_threshold logic
  • fix uTP path MTU discovery issue on windows (DF bit was not set correctly)
  • fix python binding for torrent_handle, to be hashable
  • fix IPv6 tracker support by performing the second announce in more cases
  • fix utf-8 encoding check in torrent parser
  • fix infinite loop when parsing maliciously crafted torrents
  • fix invalid read in parse_int in bdecoder
  • fix issue with very long tracker- and web seed URLs
  • don't attempt to create empty files on startup, if they already exist
  • fix force-recheck issue (new files would not be picked up)
  • fix inconsistency in file_priorities and override_resume_data behavior
  • fix paused torrents not generating a state update when their ul/dl rate
    transitions to zero

@arvidn arvidn released this Jul 3, 2017 · 302 commits to RC_1_1 since this release

Assets 3

1.1.4 release

  • corrected missing const qualifiers on bdecode_node
  • fix changing queue position of paused torrents (1.1.3 regression)
  • fix re-check issue after move_storage
  • handle invalid arguments to set_piece_deadline()
  • move_storage did not work for torrents without metadata
  • improve shutdown time by only announcing to trackers whose IP we know
  • fix python3 portability issue in python binding
  • delay 5 seconds before reconnecting socks5 proxy for UDP ASSOCIATE
  • fix NAT-PMP crash when removing a mapping at the wrong time
  • improve path sanitization (filter unicode text direction characters)
  • deprecate partial_piece_info::piece_state
  • bind upnp requests to correct local address
  • save resume data when removing web seeds
  • fix proxying of https connections
  • fix race condition in disk I/O storage class
  • fix http connection timeout on multi-homed hosts
  • removed depdendency on boost::uintptr_t for better compatibility
  • fix memory leak in the disk cache
  • fix double free in disk cache
  • forward declaring libtorrent types is discouraged. a new fwd.hpp header is provided