diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/CMakeLists.txt libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/CMakeLists.txt --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/CMakeLists.txt 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/CMakeLists.txt 2021-06-23 16:40:56.000000000 +0000 @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.17.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.17.0 FATAL_ERROR) # Configurable policies: <= CMP0102 # To build python bindings we need a python executable and boost python module. Unfortunately, # their names might not be interlinked and we can not implement a general solution. @@ -42,26 +42,26 @@ find_package(Boost REQUIRED COMPONENTS ${boost-python-module-name}) Python3_add_library(python-libtorrent MODULE WITH_SOABI - src/module.cpp - src/sha1_hash.cpp + src/alert.cpp src/converters.cpp src/create_torrent.cpp + src/datetime.cpp + src/entry.cpp + src/error_code.cpp src/fingerprint.cpp - src/utility.cpp + src/ip_filter.cpp + src/magnet_uri.cpp + src/module.cpp + src/peer_info.cpp src/session.cpp - src/entry.cpp - src/torrent_info.cpp + src/session_settings.cpp + src/sha1_hash.cpp src/string.cpp src/torrent_handle.cpp + src/torrent_info.cpp src/torrent_status.cpp - src/session_settings.cpp + src/utility.cpp src/version.cpp - src/alert.cpp - src/datetime.cpp - src/peer_info.cpp - src/ip_filter.cpp - src/magnet_uri.cpp - src/error_code.cpp ) set_target_properties(python-libtorrent @@ -114,10 +114,11 @@ configure_file(${SETUP_PY_IN} ${SETUP_PY} @ONLY) add_custom_command(OUTPUT ${OUTPUT} - COMMAND ${Python3_EXECUTABLE} ${SETUP_PY} build -b "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND ${Python3_EXECUTABLE} ${SETUP_PY} egg_info -b "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT} - DEPENDS ${DEPS}) + COMMAND ${Python3_EXECUTABLE} ${SETUP_PY} build -b "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND ${Python3_EXECUTABLE} ${SETUP_PY} egg_info -b "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT} + DEPENDS ${DEPS} + ) add_custom_target(python_bindings ALL DEPENDS ${OUTPUT}) diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/Makefile.in libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/Makefile.in --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/Makefile.in 2021-04-30 21:54:37.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/Makefile.in 2021-06-23 16:44:26.000000000 +0000 @@ -450,9 +450,9 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -@ENABLE_PYTHON_BINDING_FALSE@install-exec-local: @ENABLE_PYTHON_BINDING_FALSE@uninstall-local: @ENABLE_PYTHON_BINDING_FALSE@clean-local: +@ENABLE_PYTHON_BINDING_FALSE@install-exec-local: clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/setup.py libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/setup.py --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/setup.py 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/setup.py 2021-06-23 16:40:56.000000000 +0000 @@ -449,7 +449,7 @@ setuptools.setup( name="python-libtorrent", - version="1.2.13", + version="1.2.14", author="Arvid Norberg", author_email="arvid@libtorrent.org", description="Python bindings for libtorrent-rasterbar", diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/src/torrent_handle.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/src/torrent_handle.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/bindings/python/src/torrent_handle.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/bindings/python/src/torrent_handle.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -237,11 +237,7 @@ namespace { -#if defined BOOST_ASIO_HAS_STD_CHRONO using std::chrono::system_clock; -#else - using boost::chrono::system_clock; -#endif time_t to_ptime(time_point tpt) { diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/ChangeLog libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/ChangeLog --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/ChangeLog 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/ChangeLog 2021-06-23 16:40:56.000000000 +0000 @@ -1,3 +1,10 @@ + +1.2.14 released + + * 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 diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/CMakeLists.txt libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/CMakeLists.txt --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/CMakeLists.txt 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/CMakeLists.txt 2021-06-23 16:40:56.000000000 +0000 @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR) # Configurable policies: <= CMP0094 +cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) # Configurable policies: <= CMP0097 cmake_policy(SET CMP0091 NEW) cmake_policy(SET CMP0092 NEW) @@ -18,418 +18,420 @@ include(GeneratePkgConfig) set(libtorrent_include_files - add_torrent_params - address - alert - alert_manager - alert_types - announce_entry - assert - bandwidth_limit - bandwidth_manager - bandwidth_queue_entry - bandwidth_socket - bdecode - bencode - bitfield - block_cache - bloom_filter - broadcast_socket - bt_peer_connection - buffer - chained_buffer - choker - close_reason - config - copy_ptr - crc32c - create_torrent - deadline_timer - debug - disk_buffer_holder - disk_buffer_pool - disk_interface - disk_io_job - disk_io_thread - disk_io_thread_pool - disk_job_pool - disk_observer - download_priority - ed25519 - entry - enum_net - error - error_code - extensions - file - file_pool - file_storage - fingerprint - flags - fwd - gzip - hasher - hasher512 - heterogeneous_queue - hex - http_connection - http_parser - http_seed_connection - http_stream - http_tracker_connection - i2p_stream - identify_client - index_range - invariant_check - io - io_service - io_service_fwd - ip_filter - ip_voter - lazy_entry - link - linked_list - lsd - magnet_uri - natpmp - netlink - operations - optional - packet_buffer - packet_pool - parse_url - part_file - pe_crypto - peer - peer_class - peer_class_set - peer_class_type_filter - peer_connection - peer_connection_handle - peer_connection_interface - peer_id - peer_info - peer_list - peer_request - performance_counters - pex_flags - piece_block - piece_block_progress - piece_picker - platform_util - portmap - proxy_base - puff - random - read_resume_data - receive_buffer - request_blocks - resolve_links - resolver - resolver_interface - session - session_handle - session_settings - session_stats - session_status - session_types - settings_pack - sha1 - sha1_hash - sha512 - sliding_average - socket - socket_io - socks5_stream - span - ssl_stream - stack_allocator - stat - stat_cache - storage - storage_defs - string_util - string_view - tailqueue - time - timestamp_history - torrent - torrent_flags - torrent_handle - torrent_info - torrent_peer - torrent_peer_allocator - torrent_status - tracker_manager - udp_socket - udp_tracker_connection - union_endpoint - units - upnp - utf8 - utp_socket_manager - utp_stream - vector_utils - version - web_connection_base - web_peer_connection - write_resume_data - xml_parse) + add_torrent_params.hpp + address.hpp + alert.hpp + alert_manager.hpp + alert_types.hpp + announce_entry.hpp + assert.hpp + bandwidth_limit.hpp + bandwidth_manager.hpp + bandwidth_queue_entry.hpp + bandwidth_socket.hpp + bdecode.hpp + bencode.hpp + bitfield.hpp + block_cache.hpp + bloom_filter.hpp + broadcast_socket.hpp + bt_peer_connection.hpp + buffer.hpp + chained_buffer.hpp + choker.hpp + close_reason.hpp + config.hpp + copy_ptr.hpp + crc32c.hpp + create_torrent.hpp + deadline_timer.hpp + debug.hpp + disk_buffer_holder.hpp + disk_buffer_pool.hpp + disk_interface.hpp + disk_io_job.hpp + disk_io_thread.hpp + disk_io_thread_pool.hpp + disk_job_pool.hpp + disk_observer.hpp + download_priority.hpp + ed25519.hpp + entry.hpp + enum_net.hpp + error.hpp + error_code.hpp + extensions.hpp + file.hpp + file_pool.hpp + file_storage.hpp + fingerprint.hpp + flags.hpp + fwd.hpp + gzip.hpp + hasher.hpp + heterogeneous_queue.hpp + hex.hpp + http_connection.hpp + http_parser.hpp + http_seed_connection.hpp + http_stream.hpp + http_tracker_connection.hpp + i2p_stream.hpp + identify_client.hpp + index_range.hpp + invariant_check.hpp + io.hpp + io_service.hpp + io_service_fwd.hpp + ip_filter.hpp + ip_voter.hpp + lazy_entry.hpp + link.hpp + linked_list.hpp + lsd.hpp + magnet_uri.hpp + natpmp.hpp + netlink.hpp + operations.hpp + optional.hpp + packet_buffer.hpp + packet_pool.hpp + parse_url.hpp + part_file.hpp + peer.hpp + peer_class.hpp + peer_class_set.hpp + peer_class_type_filter.hpp + peer_connection.hpp + peer_connection_handle.hpp + peer_connection_interface.hpp + peer_id.hpp + peer_info.hpp + peer_list.hpp + peer_request.hpp + performance_counters.hpp + pex_flags.hpp + piece_block.hpp + piece_block_progress.hpp + piece_picker.hpp + platform_util.hpp + portmap.hpp + proxy_base.hpp + puff.hpp + random.hpp + read_resume_data.hpp + receive_buffer.hpp + request_blocks.hpp + resolve_links.hpp + resolver.hpp + resolver_interface.hpp + session.hpp + session_handle.hpp + session_settings.hpp + session_stats.hpp + session_status.hpp + session_types.hpp + settings_pack.hpp + sha1.hpp + sha1_hash.hpp + sha512.hpp + sliding_average.hpp + socket.hpp + socket_io.hpp + socks5_stream.hpp + span.hpp + ssl_stream.hpp + stack_allocator.hpp + stat.hpp + stat_cache.hpp + storage.hpp + storage_defs.hpp + string_util.hpp + string_view.hpp + tailqueue.hpp + time.hpp + timestamp_history.hpp + torrent.hpp + torrent_flags.hpp + torrent_handle.hpp + torrent_info.hpp + torrent_peer.hpp + torrent_peer_allocator.hpp + torrent_status.hpp + tracker_manager.hpp + udp_socket.hpp + udp_tracker_connection.hpp + union_endpoint.hpp + units.hpp + upnp.hpp + utf8.hpp + utp_socket_manager.hpp + utp_stream.hpp + vector_utils.hpp + version.hpp + web_connection_base.hpp + web_peer_connection.hpp + write_resume_data.hpp + xml_parse.hpp +) set(libtorrent_kademlia_include_files - announce_flags - dht_observer - dht_settings - dht_state - dht_storage - dht_tracker - direct_request - dos_blocker - ed25519 - find_data - get_item - get_peers - io - item - msg - node - node_entry - node_id - observer - put_data - refresh - routing_table - rpc_manager - sample_infohashes - traversal_algorithm - types) + announce_flags.hpp + dht_observer.hpp + dht_settings.hpp + dht_state.hpp + dht_storage.hpp + dht_tracker.hpp + direct_request.hpp + dos_blocker.hpp + ed25519.hpp + find_data.hpp + get_item.hpp + get_peers.hpp + io.hpp + item.hpp + msg.hpp + node.hpp + node_entry.hpp + node_id.hpp + observer.hpp + put_data.hpp + refresh.hpp + routing_table.hpp + rpc_manager.hpp + sample_infohashes.hpp + traversal_algorithm.hpp + types.hpp +) set(libtorrent_extensions_include_files - smart_ban - ut_metadata - ut_pex) + smart_ban.hpp + ut_metadata.hpp + ut_pex.hpp +) set(libtorrent_aux_include_files - aligned_storage - aligned_union - alloca - allocating_handler - array - bind_to_device - keepalive - block_cache_reference - byteswap - cppint_import_export - cpuid - deferred_handler - deprecated - deque - dev_random - disable_warnings_pop - disable_warnings_push - disk_job_fence - escape_string - export - ffs - file_progress - has_block - instantiate_connection - io - ip_notifier - listen_socket_handle - lsd - merkle - noexcept_movable - numeric_cast - openssl - path - pool - portmap - proxy_settings - range - route - scope_end - session_call - session_impl - session_interface - session_settings - session_udp_sockets - set_socket_buffer - socket_type - storage_piece_set - storage_utils - string_ptr - suggest_piece - throw - time - torrent_impl - unique_ptr - vector - win_crypto_provider - win_util) + aligned_storage.hpp + aligned_union.hpp + alloca.hpp + allocating_handler.hpp + array.hpp + bind_to_device.hpp + block_cache_reference.hpp + byteswap.hpp + cppint_import_export.hpp + cpuid.hpp + deferred_handler.hpp + deprecated.hpp + deque.hpp + dev_random.hpp + disable_warnings_pop.hpp + disable_warnings_push.hpp + disk_job_fence.hpp + escape_string.hpp + export.hpp + ffs.hpp + file_progress.hpp + has_block.hpp + instantiate_connection.hpp + io.hpp + ip_notifier.hpp + keepalive.hpp + listen_socket_handle.hpp + lsd.hpp + merkle.hpp + noexcept_movable.hpp + numeric_cast.hpp + openssl.hpp + path.hpp + pool.hpp + portmap.hpp + proxy_settings.hpp + range.hpp + route.h + scope_end.hpp + session_call.hpp + session_impl.hpp + session_interface.hpp + session_settings.hpp + session_udp_sockets.hpp + set_socket_buffer.hpp + socket_type.hpp + storage_piece_set.hpp + storage_utils.hpp + string_ptr.hpp + suggest_piece.hpp + throw.hpp + time.hpp + torrent_impl.hpp + unique_ptr.hpp + vector.hpp + win_crypto_provider.hpp + win_util.hpp +) set(sources - web_connection_base - alert - alert_manager - announce_entry - assert - bandwidth_limit - bandwidth_manager - bandwidth_queue_entry - bdecode - bitfield - block_cache - bloom_filter - chained_buffer - choker - close_reason - cpuid - crc32c - create_torrent - disk_buffer_holder - entry - error_code - file_storage - file_progress - generate_peer_id - lazy_bdecode - escape_string - string_util - file - path - fingerprint - gzip - hasher - sha1 - hex - http_connection - http_stream - http_parser - i2p_stream - identify_client - ip_filter - ip_notifier - ip_voter - listen_socket_handle - performance_counters - peer_class - peer_class_set - peer_connection - bt_peer_connection - web_peer_connection - http_seed_connection - peer_connection_handle - instantiate_connection - merkle - natpmp - openssl - part_file - packet_buffer - piece_picker - platform_util - proxy_base - peer_list - puff - random - receive_buffer - read_resume_data - write_resume_data - request_blocks - resolve_links - resolver - session - session_call - session_handle - session_impl - session_settings - proxy_settings - session_stats - settings_pack - sha1_hash - socket_io - socket_type - socks5_stream - stat - stat_cache - storage - storage_piece_set - storage_utils - time - timestamp_history - torrent - torrent_handle - torrent_info - torrent_peer - torrent_peer_allocator - torrent_status - tracker_manager - http_tracker_connection - utf8 - udp_tracker_connection - udp_socket - upnp - utp_socket_manager - utp_stream - file_pool - lsd - disk_io_job - disk_job_fence - disk_job_pool - disk_buffer_pool - disk_io_thread - disk_io_thread_pool - enum_net - broadcast_socket - magnet_uri - parse_url - xml_parse - version - ffs - add_torrent_params - peer_info - stack_allocator + add_torrent_params.cpp + alert.cpp + alert_manager.cpp + announce_entry.cpp + assert.cpp + bandwidth_limit.cpp + bandwidth_manager.cpp + bandwidth_queue_entry.cpp + bdecode.cpp + bitfield.cpp + block_cache.cpp + bloom_filter.cpp + broadcast_socket.cpp + bt_peer_connection.cpp + chained_buffer.cpp + choker.cpp + close_reason.cpp + cpuid.cpp + crc32c.cpp + create_torrent.cpp + disk_buffer_holder.cpp + disk_buffer_pool.cpp + disk_io_job.cpp + disk_io_thread.cpp + disk_io_thread_pool.cpp + disk_job_fence.cpp + disk_job_pool.cpp + entry.cpp + enum_net.cpp + error_code.cpp + escape_string.cpp + ffs.cpp + file.cpp + file_pool.cpp + file_progress.cpp + file_storage.cpp + fingerprint.cpp + generate_peer_id.cpp + gzip.cpp + hasher.cpp + hex.cpp + http_connection.cpp + http_parser.cpp + http_seed_connection.cpp + http_stream.cpp + http_tracker_connection.cpp + i2p_stream.cpp + identify_client.cpp + instantiate_connection.cpp + ip_filter.cpp + ip_notifier.cpp + ip_voter.cpp + lazy_bdecode.cpp + listen_socket_handle.cpp + lsd.cpp + magnet_uri.cpp + merkle.cpp + natpmp.cpp + openssl.cpp + packet_buffer.cpp + parse_url.cpp + part_file.cpp + path.cpp + peer_class.cpp + peer_class_set.cpp + peer_connection.cpp + peer_connection_handle.cpp + peer_info.cpp + peer_list.cpp + performance_counters.cpp + piece_picker.cpp + platform_util.cpp + proxy_base.cpp + proxy_settings.cpp + puff.cpp + random.cpp + read_resume_data.cpp + receive_buffer.cpp + request_blocks.cpp + resolve_links.cpp + resolver.cpp + session.cpp + session_call.cpp + session_handle.cpp + session_impl.cpp + session_settings.cpp + session_stats.cpp + settings_pack.cpp + sha1.cpp + sha1_hash.cpp + socket_io.cpp + socket_type.cpp + socks5_stream.cpp + stack_allocator.cpp + stat.cpp + stat_cache.cpp + storage.cpp + storage_piece_set.cpp + storage_utils.cpp + string_util.cpp + time.cpp + timestamp_history.cpp + torrent.cpp + torrent_handle.cpp + torrent_info.cpp + torrent_peer.cpp + torrent_peer_allocator.cpp + torrent_status.cpp + tracker_manager.cpp + udp_socket.cpp + udp_tracker_connection.cpp + upnp.cpp + utf8.cpp + utp_socket_manager.cpp + utp_stream.cpp + version.cpp + web_connection_base.cpp + web_peer_connection.cpp + write_resume_data.cpp + xml_parse.cpp # -- extensions -- - ut_pex - ut_metadata - smart_ban + smart_ban.cpp + ut_pex.cpp + ut_metadata.cpp ) # -- kademlia -- set(kademlia_sources - dht_state - dht_storage - dos_blocker - dht_tracker - msg - node - node_entry - refresh - rpc_manager - find_data - put_data - node_id - routing_table - traversal_algorithm - item - get_peers - get_item - ed25519 - sample_infohashes - dht_settings + dht_settings.cpp + dht_state.cpp + dht_storage.cpp + dht_tracker.cpp + dos_blocker.cpp + ed25519.cpp + find_data.cpp + get_item.cpp + get_peers.cpp + item.cpp + msg.cpp + node.cpp + node_entry.cpp + node_id.cpp + put_data.cpp + refresh.cpp + routing_table.cpp + rpc_manager.cpp + sample_infohashes.cpp + traversal_algorithm.cpp ) # -- ed25519 -- set(ed25519_sources - add_scalar - fe - ge - key_exchange - keypair - sc - sign - verify + add_scalar.cpp + fe.cpp + ge.cpp + key_exchange.cpp + keypair.cpp + sc.cpp + sign.cpp + verify.cpp ) list(TRANSFORM sources PREPEND "src/") @@ -449,22 +451,24 @@ if(CMAKE_CXX_COMPILER_ID MATCHES Clang) add_compile_options( -Weverything - -Wno-documentation -Wno-c++98-compat-pedantic - -Wno-padded - -Wno-global-constructors + -Wno-documentation -Wno-exit-time-destructors - -Wno-weak-vtables) + -Wno-global-constructors + -Wno-padded + -Wno-weak-vtables + ) elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) add_compile_options( -Wall + -Wc++11-compat -Wextra - -Wpedantic + -Wno-format-zero-length -Wparentheses + -Wpedantic -Wvla - -Wc++11-compat - -Wno-format-zero-length - -ftemplate-depth=512) + -ftemplate-depth=512 + ) elseif(MSVC) add_compile_options( # https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ @@ -473,17 +477,18 @@ # C4251: 'identifier' : class 'type' needs to have dll-interface to be # used by clients of class 'type2' /wd4251 + # C4268: 'identifier' : 'const' static/global data initialized + # with compiler generated default constructor fills the object with zeros + /wd4268 # C4275: non DLL-interface classkey 'identifier' used as base for # DLL-interface classkey 'identifier' /wd4275 # C4373: virtual function overrides, previous versions of the compiler # did not override when parameters only differed by const/volatile qualifiers /wd4373 - # C4268: 'identifier' : 'const' static/global data initialized - # with compiler generated default constructor fills the object with zeros - /wd4268 # C4503: 'identifier': decorated name length exceeded, name was truncated - /wd4503) + /wd4503 + ) endif() if(static_runtime) @@ -514,44 +519,44 @@ target_compile_features(torrent-rasterbar PUBLIC cxx_std_11 - cxx_rvalue_references - cxx_reference_qualified_functions - cxx_nonstatic_member_init - cxx_variadic_templates - cxx_generalized_initializers - cxx_static_assert - cxx_auto_type - cxx_trailing_return_types - cxx_lambdas - cxx_decltype - cxx_right_angle_brackets - cxx_default_function_template_args cxx_alias_templates - cxx_extern_templates - cxx_nullptr - cxx_strong_enums - cxx_enum_forward_declarations - cxx_attributes - cxx_constexpr cxx_alignas cxx_alignof - cxx_delegating_constructors - cxx_inheriting_constructors - cxx_explicit_conversions - cxx_raw_string_literals - cxx_user_literals + cxx_attributes + cxx_auto_type + cxx_constexpr + cxx_decltype + cxx_default_function_template_args cxx_defaulted_functions + cxx_defaulted_move_initializers + cxx_delegating_constructors cxx_deleted_functions + cxx_enum_forward_declarations + cxx_explicit_conversions cxx_extended_friend_declarations - cxx_sizeof_member + cxx_extern_templates + cxx_final + cxx_generalized_initializers + cxx_inheriting_constructors cxx_inline_namespaces - cxx_unrestricted_unions + cxx_lambdas cxx_local_type_template_args - cxx_range_for - cxx_final - cxx_override cxx_noexcept - cxx_defaulted_move_initializers + cxx_nonstatic_member_init + cxx_nullptr + cxx_override + cxx_range_for + cxx_raw_string_literals + cxx_reference_qualified_functions + cxx_right_angle_brackets + cxx_rvalue_references + cxx_sizeof_member + cxx_static_assert + cxx_strong_enums + cxx_trailing_return_types + cxx_unrestricted_unions + cxx_user_literals + cxx_variadic_templates ) if (BUILD_SHARED_LIBS) @@ -753,18 +758,19 @@ endif() if (encryption) - target_sources(torrent-rasterbar PRIVATE src/pe_crypto) + target_sources(torrent-rasterbar PRIVATE include/libtorrent/pe_crypto.hpp src/pe_crypto.cpp) else() target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_ENCRYPTION) endif() if (dht) target_sources(torrent-rasterbar PRIVATE + ${libtorrent_kademlia_include_files} + include/libtorrent/hasher512.hpp ${kademlia_sources} ${ed25519_sources} - ${libtorrent_kademlia_include_files} - src/hasher512 - src/sha512 + src/hasher512.cpp + src/sha512.cpp ) else() target_compile_definitions(torrent-rasterbar PUBLIC TORRENT_DISABLE_DHT) diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/configure libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/configure --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/configure 2021-04-30 21:54:36.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/configure 2021-06-23 16:44:25.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libtorrent-rasterbar 1.2.13. +# Generated by GNU Autoconf 2.69 for libtorrent-rasterbar 1.2.14. # # Report bugs to . # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libtorrent-rasterbar' PACKAGE_TARNAME='libtorrent-rasterbar' -PACKAGE_VERSION='1.2.13' -PACKAGE_STRING='libtorrent-rasterbar 1.2.13' +PACKAGE_VERSION='1.2.14' +PACKAGE_STRING='libtorrent-rasterbar 1.2.14' PACKAGE_BUGREPORT='arvid@libtorrent.org' PACKAGE_URL='http://www.libtorrent.org' @@ -1423,7 +1423,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libtorrent-rasterbar 1.2.13 to adapt to many kinds of systems. +\`configure' configures libtorrent-rasterbar 1.2.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1496,7 +1496,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libtorrent-rasterbar 1.2.13:";; + short | recursive ) echo "Configuration of libtorrent-rasterbar 1.2.14:";; esac cat <<\_ACEOF @@ -1666,7 +1666,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libtorrent-rasterbar configure 1.2.13 +libtorrent-rasterbar configure 1.2.14 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2065,7 +2065,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libtorrent-rasterbar $as_me 1.2.13, which was +It was created by libtorrent-rasterbar $as_me 1.2.14, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4686,7 +4686,7 @@ # Define the identity of the package. PACKAGE='libtorrent-rasterbar' - VERSION='1.2.13' + VERSION='1.2.14' cat >>confdefs.h <<_ACEOF @@ -25331,7 +25331,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libtorrent-rasterbar $as_me 1.2.13, which was +This file was extended by libtorrent-rasterbar $as_me 1.2.14, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -25389,7 +25389,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libtorrent-rasterbar config.status 1.2.13 +libtorrent-rasterbar config.status 1.2.14 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/configure.ac libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/configure.ac --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/configure.ac 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/configure.ac 2021-06-23 16:40:56.000000000 +0000 @@ -5,7 +5,7 @@ AC_PREREQ([2.63]) -AC_INIT([libtorrent-rasterbar],[1.2.13],[arvid@libtorrent.org], +AC_INIT([libtorrent-rasterbar],[1.2.14],[arvid@libtorrent.org], [libtorrent-rasterbar],[http://www.libtorrent.org]) AC_CONFIG_SRCDIR([src/torrent.cpp]) AC_CONFIG_AUX_DIR([build-aux]) diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/debian/changelog libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/debian/changelog --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/debian/changelog 2021-04-30 21:58:07.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/debian/changelog 2021-06-23 16:47:29.000000000 +0000 @@ -1,3 +1,11 @@ +libtorrent-rasterbar (1.2.14+git20210623.c996ed7ef7-1ppa1~20.10) groovy; urgency=medium + + * Build 1.2.14 + * Use C++14 mode + * Don't provide python2 bindings + + -- sledgehammer999 Wed, 23 Jun 2021 19:47:29 +0300 + libtorrent-rasterbar (1.2.13+git20210501.22af326f6c-1ppa1~20.10) groovy; urgency=medium * Build 1.2.13 diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/building.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/building.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/building.html 2021-04-30 21:54:10.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/building.html 2021-06-23 16:44:00.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
@@ -202,13 +202,6 @@

Note

-

Some Linux systems requires linking against librt in order to access -the POSIX clock functions. If you get an error complaining about a missing -symbol clock_gettime, you have to give need-librt=yes on the -b2 command line. This will make libtorrent link against librt.

-
-
-

Note

When building on Solaris, you may have to specify stdlib=sun-stlport on the b2 command line.

diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/building.rst libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/building.rst --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/building.rst 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/building.rst 2021-06-23 16:40:56.000000000 +0000 @@ -195,13 +195,6 @@ .. note:: - Some Linux systems requires linking against ``librt`` in order to access - the POSIX clock functions. If you get an error complaining about a missing - symbol ``clock_gettime``, you have to give ``need-librt=yes`` on the - b2 command line. This will make libtorrent link against ``librt``. - -.. note:: - When building on Solaris, you may have to specify ``stdlib=sun-stlport`` on the b2 command line. diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/client_test.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/client_test.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/client_test.html 2021-04-30 21:54:10.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/client_test.html 2021-06-23 16:44:00.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

Client test is a, more or less, complete bittorrent client. It lacks most diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/contributing.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/contributing.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/contributing.html 2021-04-30 21:54:11.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/contributing.html 2021-06-23 16:44:01.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_extensions.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_extensions.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_extensions.html 2021-04-30 21:54:12.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_extensions.html 2021-06-23 16:44:02.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

libtorrent implements a few extensions to the Mainline DHT protocol.

diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_rss.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_rss.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_rss.html 2021-04-30 21:54:09.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_rss.html 2021-06-23 16:43:59.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_sec.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_sec.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_sec.html 2021-04-30 21:54:13.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_sec.html 2021-06-23 16:44:02.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_store.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_store.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/dht_store.html 2021-04-30 21:54:09.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/dht_store.html 2021-06-23 16:43:59.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/examples.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/examples.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/examples.html 2021-04-30 21:54:12.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/examples.html 2021-06-23 16:44:01.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/features.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/features.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/features.html 2021-04-30 21:54:10.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/features.html 2021-06-23 16:44:00.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/fuzzing.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/fuzzing.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/fuzzing.html 2021-04-30 21:54:15.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/fuzzing.html 2021-06-23 16:44:05.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/hacking.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/hacking.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/hacking.html 2021-04-30 21:54:14.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/hacking.html 2021-06-23 16:44:04.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/header.rst libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/header.rst --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/header.rst 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/header.rst 2021-06-23 16:40:56.000000000 +0000 @@ -1,3 +1,3 @@ :Author: Arvid Norberg, arvid@libtorrent.org -:Version: 1.2.13 +:Version: 1.2.14 diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/manual-ref.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/manual-ref.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/manual-ref.html 2021-04-30 21:54:16.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/manual-ref.html 2021-06-23 16:44:06.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/python_binding.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/python_binding.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/python_binding.html 2021-04-30 21:54:13.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/python_binding.html 2021-06-23 16:44:03.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Alerts.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Alerts.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Alerts.html 2021-04-30 21:54:24.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Alerts.html 2021-06-23 16:44:14.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

home

@@ -1485,9 +1485,9 @@ listen_failed_alert (aux::stack_allocator& alloc, string_view iface , udp::endpoint const& ep, operation_t op, error_code const& ec , lt::socket_type_t t); - std::string message () const override; listen_failed_alert (aux::stack_allocator& alloc, string_view iface , operation_t op, error_code const& ec, lt::socket_type_t t); + std::string message () const override; char const* listen_interface () const; static constexpr alert_category_t static_category = alert_category::status | alert_category::error; @@ -1540,10 +1540,10 @@ listen_succeeded_alert (aux::stack_allocator& alloc , tcp::endpoint const& ep , lt::socket_type_t t); - std::string message () const override; listen_succeeded_alert (aux::stack_allocator& alloc , udp::endpoint const& ep , lt::socket_type_t t); + std::string message () const override; static constexpr alert_category_t static_category = alert_category::status; aux::noexcept_movable<lt::address> address; @@ -2104,9 +2104,9 @@
 struct state_update_alert final : alert
 {
-   std::string message () const override;
    state_update_alert (aux::stack_allocator& alloc
       , std::vector<torrent_status> st);
+   std::string message () const override;
 
    static constexpr alert_category_t static_category  = alert_category::status;
    std::vector<torrent_status> status;
@@ -2863,19 +2863,19 @@
 struct dht_live_nodes_alert final : alert
 {
    std::string message () const override;
-   std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
    int num_nodes () const;
+   std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
 
    static constexpr alert_category_t static_category  = alert_category::dht;
    sha1_hash node_id;
 };
 
- -[report issue]
-

num_nodes() nodes()

+ +[report issue]
+

nodes() num_nodes()

-std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
 int num_nodes () const;
+std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
 

the number of nodes in the routing table and the actual nodes.

[report issue]
@@ -2912,8 +2912,8 @@ struct dht_sample_infohashes_alert final : alert { std::string message () const override; - std::vector<sha1_hash> samples () const; int num_samples () const; + std::vector<sha1_hash> samples () const; int num_nodes () const; std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const; @@ -2927,8 +2927,8 @@ [report issue]

num_samples() samples()

-std::vector<sha1_hash> samples () const;
 int num_samples () const;
+std::vector<sha1_hash> samples () const;
 

returns the number of info-hashes returned by the node, as well as the actual info-hashes. num_samples() is more efficient than @@ -3039,8 +3039,8 @@

alert_cast()

Declared in "libtorrent/alert.hpp"

-template <class T> T const* alert_cast (alert const* a);
 template <class T> T* alert_cast (alert* a);
+template <class T> T const* alert_cast (alert const* a);
 

When you get an alert, you can use alert_cast<> to attempt to cast the pointer to a specific alert type, in order to query it for more diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Bdecoding.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Bdecoding.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Bdecoding.html 2021-04-30 21:54:26.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Bdecoding.html 2021-06-23 16:44:15.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

home

@@ -59,30 +59,30 @@ struct bdecode_node { bdecode_node () = default; - bdecode_node& operator= (bdecode_node&&) = default; bdecode_node& operator= (bdecode_node const&); - bdecode_node (bdecode_node&&) noexcept; + bdecode_node& operator= (bdecode_node&&) = default; bdecode_node (bdecode_node const&); + bdecode_node (bdecode_node&&) noexcept; type_t type () const noexcept; explicit operator bool () const noexcept; bdecode_node non_owning () const; span<char const> data_section () const noexcept; - string_view list_string_value_at (int i - , string_view default_val = string_view()) const; + bdecode_node list_at (int i) const; std::int64_t list_int_value_at (int i , std::int64_t default_val = 0) const; + string_view list_string_value_at (int i + , string_view default_val = string_view()) const; int list_size () const; - bdecode_node list_at (int i) const; string_view dict_find_string_value (string_view key , string_view default_value = string_view()) const; - bdecode_node dict_find (string_view key) const; + bdecode_node dict_find_list (string_view key) const; + int dict_size () const; + bdecode_node dict_find_int (string_view key) const; std::int64_t dict_find_int_value (string_view key , std::int64_t default_val = 0) const; - int dict_size () const; bdecode_node dict_find_dict (string_view key) const; - bdecode_node dict_find_int (string_view key) const; + bdecode_node dict_find (string_view key) const; bdecode_node dict_find_string (string_view key) const; - bdecode_node dict_find_list (string_view key) const; std::pair<string_view, bdecode_node> dict_at (int i) const; std::int64_t int_value () const; char const* string_ptr () const; @@ -110,15 +110,15 @@ bdecode_node () = default;

creates a default constructed node, it will have the type none_t.

- -[report issue]
-
-

operator=() bdecode_node()

+ +[report issue]
+
+

bdecode_node() operator=()

-bdecode_node& operator= (bdecode_node&&) = default;
 bdecode_node& operator= (bdecode_node const&);
-bdecode_node (bdecode_node&&) noexcept;
+bdecode_node& operator= (bdecode_node&&) = default;
 bdecode_node (bdecode_node const&);
+bdecode_node (bdecode_node&&) noexcept;
 

For owning nodes, the copy will create a copy of the tree, but the underlying buffer remains the same.

@@ -154,46 +154,46 @@ buffer where this node is defined. For a dictionary for instance, this starts with d and ends with e, and has all the content of the dictionary in between.

- + - -[report issue]
-
-

list_size() list_int_value_at() list_at() list_string_value_at()

+ +[report issue]
+
+

list_string_value_at() list_int_value_at() list_size() list_at()

-string_view list_string_value_at (int i
-      , string_view default_val = string_view()) const;
+bdecode_node list_at (int i) const;
 std::int64_t list_int_value_at (int i
       , std::int64_t default_val = 0) const;
+string_view list_string_value_at (int i
+      , string_view default_val = string_view()) const;
 int list_size () const;
-bdecode_node list_at (int i) const;
 

functions with the list_ prefix operate on lists. These functions are only valid if type() == list_t. list_at() returns the item in the list at index i. i may not be greater than or equal to the size of the list. size() returns the size of the list.

- - + + - - + + -[report issue]
-
-

dict_find_int_value() dict_find_string_value() dict_size() dict_at() dict_find_dict() dict_find_int() dict_find_string() dict_find() dict_find_list()

+[report issue]
+
+

dict_find_string_value() dict_find_string() dict_find_int_value() dict_at() dict_find_int() dict_size() dict_find_dict() dict_find() dict_find_list()

 string_view dict_find_string_value (string_view key
       , string_view default_value = string_view()) const;
-bdecode_node dict_find (string_view key) const;
+bdecode_node dict_find_list (string_view key) const;
+int dict_size () const;
+bdecode_node dict_find_int (string_view key) const;
 std::int64_t dict_find_int_value (string_view key
       , std::int64_t default_val = 0) const;
-int dict_size () const;
 bdecode_node dict_find_dict (string_view key) const;
-bdecode_node dict_find_int (string_view key) const;
+bdecode_node dict_find (string_view key) const;
 bdecode_node dict_find_string (string_view key) const;
-bdecode_node dict_find_list (string_view key) const;
 std::pair<string_view, bdecode_node> dict_at (int i) const;
 

Functions with the dict_ prefix operates on dictionaries. They are @@ -213,11 +213,11 @@

this function is only valid if type() == int_t. It returns the value of the integer.

+ - -[report issue]
-
-

string_value() string_ptr() string_length()

+[report issue]
+
+

string_length() string_value() string_ptr()

 char const* string_ptr () const;
 string_view string_value () const;
@@ -325,14 +325,14 @@
 

bdecode()

Declared in "libtorrent/bdecode.hpp"

-int bdecode (char const* start, char const* end, bdecode_node& ret
-   , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
-   , int token_limit = 2000000);
 bdecode_node bdecode (span<char const> buffer
    , int depth_limit = 100, int token_limit = 2000000);
 bdecode_node bdecode (span<char const> buffer
    , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
    , int token_limit = 2000000);
+int bdecode (char const* start, char const* end, bdecode_node& ret
+   , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
+   , int token_limit = 2000000);
 

This function decodes/parses bdecoded data (for example a .torrent file). The data structure is returned in the ret argument. the buffer to parse diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Bencoding.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Bencoding.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Bencoding.html 2021-04-30 21:54:23.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Bencoding.html 2021-06-23 16:44:12.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

home

@@ -71,26 +71,26 @@ class entry { data_type type () const; - entry (dictionary_type); // NOLINT; entry (list_type); // NOLINT; entry& operator= (preformatted_type) &; entry& operator= (list_type) &; + entry (dictionary_type); // NOLINT; entry& operator= (integer_type) &; - string_type& string (); - const integer_type& integer () const; - list_type& list (); + const preformatted_type& preformatted () const; dictionary_type& dict (); - integer_type& integer (); const dictionary_type& dict () const; - const list_type& list () const; - const string_type& string () const; + integer_type& integer (); + string_type& string (); preformatted_type& preformatted (); - const preformatted_type& preformatted () const; + list_type& list (); + const integer_type& integer () const; + const string_type& string () const; + const list_type& list () const; void swap (entry& e); const entry& operator[] (string_view key) const; entry& operator[] (string_view key); - entry const* find_key (string_view key) const; entry* find_key (string_view key); + entry const* find_key (string_view key) const; std::string to_string (bool single_line = false) const; enum data_type @@ -112,38 +112,38 @@ data_type type () const;

returns the concrete type of the entry

- -[report issue]
-
-

operator=() entry()

+ +[report issue]
+
+

entry() operator=()

-entry (dictionary_type); // NOLINT;
 entry (list_type); // NOLINT;
 entry& operator= (preformatted_type) &;
 entry& operator= (list_type) &;
+entry (dictionary_type); // NOLINT;
 entry& operator= (integer_type) &;
 

constructors directly from a specific type. The content of the argument is copied into the newly constructed entry

+ + - - -[report issue]
-
-

string() list() preformatted() integer() dict()

+[report issue]
+
+

dict() preformatted() string() list() integer()

-string_type& string ();
-const integer_type& integer () const;
-list_type& list ();
+const preformatted_type& preformatted () const;
 dictionary_type& dict ();
-integer_type& integer ();
 const dictionary_type& dict () const;
-const list_type& list () const;
-const string_type& string () const;
+integer_type& integer ();
+string_type& string ();
 preformatted_type& preformatted ();
-const preformatted_type& preformatted () const;
+list_type& list ();
+const integer_type& integer () const;
+const string_type& string () const;
+const list_type& list () const;
 

The integer(), string(), list() and dict() functions are accessors that return the respective type. If the entry object @@ -211,8 +211,8 @@

find_key()

-entry const* find_key (string_view key) const;
 entry* find_key (string_view key);
+entry const* find_key (string_view key) const;
 

These functions requires the entry to be a dictionary, if it isn't they will throw system_error.

diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Core.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Core.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Core.html 2021-04-30 21:54:19.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Core.html 2021-06-23 16:44:08.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

home

@@ -62,7 +62,7 @@
  • version()
  • hash_value()
  • read_resume_data()
  • -
  • write_resume_data_buf() write_resume_data()
  • +
  • write_resume_data() write_resume_data_buf()
  • generate_fingerprint()
  • make_magnet_uri()
  • parse_magnet_uri()
  • @@ -203,19 +203,19 @@
     class torrent_info
     {
    -   torrent_info (bdecode_node const& torrent_file, error_code& ec);
        torrent_info (char const* buffer, int size, error_code& ec);
        explicit torrent_info (sha1_hash const& info_hash);
    -   explicit torrent_info (std::string const& filename);
    -   torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
    -   torrent_info (char const* buffer, int size);
    -   torrent_info (std::string const& filename, load_torrent_limits const& cfg);
    +   torrent_info (bdecode_node const& torrent_file, error_code& ec);
    +   torrent_info (span<char const> buffer, error_code& ec, from_span_t);
        torrent_info (std::string const& filename, error_code& ec);
    +   torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
        explicit torrent_info (bdecode_node const& torrent_file);
    -   torrent_info (torrent_info const& t);
    -   explicit torrent_info (span<char const> buffer, from_span_t);
    +   torrent_info (std::string const& filename, load_torrent_limits const& cfg);
        torrent_info (bdecode_node const& torrent_file, load_torrent_limits const& cfg);
    -   torrent_info (span<char const> buffer, error_code& ec, from_span_t);
    +   explicit torrent_info (span<char const> buffer, from_span_t);
    +   torrent_info (torrent_info const& t);
    +   explicit torrent_info (std::string const& filename);
    +   torrent_info (char const* buffer, int size);
        ~torrent_info ();
        file_storage const& files () const;
        file_storage const& orig_files () const;
    @@ -225,8 +225,9 @@
        void add_tracker (std::string const& url, int tier = 0);
        void add_tracker (std::string const& url, int tier
           , announce_entry::tracker_source source);
    -   std::vector<sha1_hash> similar_torrents () const;
        std::vector<std::string> collections () const;
    +   std::vector<sha1_hash> similar_torrents () const;
    +   void set_web_seeds (std::vector<web_seed_entry> seeds);
        void add_url_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    @@ -234,13 +235,12 @@
        void add_http_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    -   void set_web_seeds (std::vector<web_seed_entry> seeds);
    +   int num_pieces () const;
        int piece_length () const;
        std::int64_t total_size () const;
    -   int num_pieces () const;
        index_range<piece_index_t> piece_range () const;
    -   piece_index_t last_piece () const;
        piece_index_t end_piece () const;
    +   piece_index_t last_piece () const;
        const sha1_hash& info_hash () const;
        int num_files () const;
        std::vector<file_slice> map_block (piece_index_t const piece
    @@ -254,8 +254,8 @@
        char const* hash_for_piece_ptr (piece_index_t const index) const;
        sha1_hash hash_for_piece (piece_index_t index) const;
        bool is_loaded () const;
    -   std::vector<sha1_hash> const& merkle_tree () const;
        void set_merkle_tree (std::vector<sha1_hash>& h);
    +   std::vector<sha1_hash> const& merkle_tree () const;
        const std::string& name () const;
        std::time_t creation_date () const;
        const std::string& creator () const;
    @@ -266,27 +266,27 @@
        bool parse_info_section (bdecode_node const& e, error_code& ec);
        bdecode_node info (char const* key) const;
        void swap (torrent_info& ti);
    -   int metadata_size () const;
        boost::shared_array<char> metadata () const;
    +   int metadata_size () const;
        bool is_merkle_torrent () const;
     };
     
    [report issue]

    torrent_info()

    -torrent_info (bdecode_node const& torrent_file, error_code& ec);
     torrent_info (char const* buffer, int size, error_code& ec);
     explicit torrent_info (sha1_hash const& info_hash);
    -explicit torrent_info (std::string const& filename);
    -torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
    -torrent_info (char const* buffer, int size);
    -torrent_info (std::string const& filename, load_torrent_limits const& cfg);
    +torrent_info (bdecode_node const& torrent_file, error_code& ec);
    +torrent_info (span<char const> buffer, error_code& ec, from_span_t);
     torrent_info (std::string const& filename, error_code& ec);
    +torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
     explicit torrent_info (bdecode_node const& torrent_file);
    -torrent_info (torrent_info const& t);
    -explicit torrent_info (span<char const> buffer, from_span_t);
    +torrent_info (std::string const& filename, load_torrent_limits const& cfg);
     torrent_info (bdecode_node const& torrent_file, load_torrent_limits const& cfg);
    -torrent_info (span<char const> buffer, error_code& ec, from_span_t);
    +explicit torrent_info (span<char const> buffer, from_span_t);
    +torrent_info (torrent_info const& t);
    +explicit torrent_info (std::string const& filename);
    +torrent_info (char const* buffer, int size);
     

    The constructor that takes an info-hash will initialize the info-hash to the given value, but leave all other fields empty. This is used @@ -323,10 +323,10 @@ ~torrent_info ();

    frees all storage associated with this torrent_info object

    - -[report issue]
    -
    -

    orig_files() files()

    + +[report issue]
    +
    +

    files() orig_files()

     file_storage const& files () const;
     file_storage const& orig_files () const;
    @@ -396,21 +396,22 @@
     

    collections() similar_torrents()

    -std::vector<sha1_hash> similar_torrents () const;
     std::vector<std::string> collections () const;
    +std::vector<sha1_hash> similar_torrents () const;
     

    These two functions are related to BEP 38 (mutable torrents). The vectors returned from these correspond to the "similar" and "collections" keys in the .torrent file. Both info-hashes and collections from within the info-dict and from outside of it are included.

    + - -[report issue]
    -
    -

    add_url_seed() web_seeds() set_web_seeds() add_http_seed()

    +[report issue]
    +
    +

    add_http_seed() add_url_seed() set_web_seeds() web_seeds()

    +void set_web_seeds (std::vector<web_seed_entry> seeds);
     void add_url_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    @@ -418,7 +419,6 @@
     void add_http_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    -void set_web_seeds (std::vector<web_seed_entry> seeds);
     

    web_seeds() returns all url seeds and http seeds in the torrent. Each entry is a web_seed_entry and may refer to either a url seed @@ -435,15 +435,15 @@ used to insert custom HTTP headers in the requests to a specific web seed.

    See http seeding for more information.

    - -[report issue]
    -
    -

    total_size() piece_length() num_pieces()

    + +[report issue]
    +
    +

    piece_length() num_pieces() total_size()

    +int num_pieces () const;
     int piece_length () const;
     std::int64_t total_size () const;
    -int num_pieces () const;
     

    total_size(), piece_length() and num_pieces() returns the total number of bytes the torrent-file represents (all the files in @@ -453,15 +453,15 @@ argument and gives you the exact size of that piece. It will always be the same as piece_length() except in the case of the last piece, which may be smaller.

    + - -[report issue]
    -
    -

    end_piece() piece_range() last_piece()

    +[report issue]
    +
    +

    last_piece() end_piece() piece_range()

     index_range<piece_index_t> piece_range () const;
    -piece_index_t last_piece () const;
     piece_index_t end_piece () const;
    +piece_index_t last_piece () const;
     

    last_piece() returns the index to the last piece in the torrent and end_piece() returns the index to the one-past-end piece in the @@ -570,8 +570,8 @@

    merkle_tree() set_merkle_tree()

    -std::vector<sha1_hash> const& merkle_tree () const;
     void set_merkle_tree (std::vector<sha1_hash>& h);
    +std::vector<sha1_hash> const& merkle_tree () const;
     

    merkle_tree() returns a reference to the merkle tree for this torrent, if any. @@ -669,8 +669,8 @@

    metadata_size() metadata()

    -int metadata_size () const;
     boost::shared_array<char> metadata () const;
    +int metadata_size () const;
     

    metadata() returns a the raw info section of the torrent file. The size of the metadata is returned by metadata_size(). @@ -711,9 +711,9 @@ unsigned num_peers:14; };

    - -[report issue]
    -

    peer() set_peer()

    + +[report issue]
    +

    set_peer() peer()

     void set_peer (tcp::endpoint const& ep);
     tcp::endpoint peer () const;
    @@ -866,83 +866,83 @@
        void get_peer_info (std::vector<peer_info>& v) const;
        torrent_status status (status_flags_t flags = status_flags_t::all()) const;
        void get_download_queue (std::vector<partial_piece_info>& queue) const;
    -   void clear_piece_deadlines () const;
        void set_piece_deadline (piece_index_t index, int deadline, deadline_flags_t flags = {}) const;
    +   void clear_piece_deadlines () const;
        void reset_piece_deadline (piece_index_t index) const;
        void file_progress (std::vector<std::int64_t>& progress, int flags = 0) const;
        std::vector<open_file_state> file_status () const;
        void clear_error () const;
    +   std::vector<announce_entry> trackers () const;
        void add_tracker (announce_entry const&) const;
        void replace_trackers (std::vector<announce_entry> const&) const;
    -   std::vector<announce_entry> trackers () const;
    -   void remove_url_seed (std::string const& url) const;
        void add_url_seed (std::string const& url) const;
    +   void remove_url_seed (std::string const& url) const;
        std::set<std::string> url_seeds () const;
    +   void add_http_seed (std::string const& url) const;
        std::set<std::string> http_seeds () const;
        void remove_http_seed (std::string const& url) const;
    -   void add_http_seed (std::string const& url) const;
        void add_extension (
           std::function<std::shared_ptr<torrent_plugin>(torrent_handle const&, void*)> const& ext
           , void* userdata = nullptr);
        bool set_metadata (span<char const> metadata) const;
        bool is_valid () const;
    -   void pause (pause_flags_t flags = {}) const;
        void resume () const;
    +   void pause (pause_flags_t flags = {}) const;
    +   torrent_flags_t flags () const;
        void set_flags (torrent_flags_t flags) const;
        void set_flags (torrent_flags_t flags, torrent_flags_t mask) const;
        void unset_flags (torrent_flags_t flags) const;
    -   torrent_flags_t flags () const;
        void flush_cache () const;
        void force_recheck () const;
        void save_resume_data (resume_data_flags_t flags = {}) const;
        bool need_save_resume_data () const;
        void queue_position_top () const;
        void queue_position_down () const;
    +   void queue_position_bottom () const;
        queue_position_t queue_position () const;
        void queue_position_up () const;
    -   void queue_position_bottom () const;
        void queue_position_set (queue_position_t p) const;
    +   void set_ssl_certificate_buffer (std::string const& certificate
    +      , std::string const& private_key
    +      , std::string const& dh_params);
        void set_ssl_certificate (std::string const& certificate
           , std::string const& private_key
           , std::string const& dh_params
           , std::string const& passphrase = "");
    -   void set_ssl_certificate_buffer (std::string const& certificate
    -      , std::string const& private_key
    -      , std::string const& dh_params);
        storage_interface* get_storage_impl () const;
        std::shared_ptr<const torrent_info> torrent_file () const;
        void piece_availability (std::vector<int>& avail) const;
    -   download_priority_t piece_priority (piece_index_t index) const;
    -   void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
        void piece_priority (piece_index_t index, download_priority_t priority) const;
        std::vector<download_priority_t> get_piece_priorities () const;
        void prioritize_pieces (std::vector<std::pair<piece_index_t, download_priority_t>> const& pieces) const;
    -   void file_priority (file_index_t index, download_priority_t priority) const;
    -   void prioritize_files (std::vector<download_priority_t> const& files) const;
    +   void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
    +   download_priority_t piece_priority (piece_index_t index) const;
        std::vector<download_priority_t> get_file_priorities () const;
        download_priority_t file_priority (file_index_t index) const;
    +   void prioritize_files (std::vector<download_priority_t> const& files) const;
    +   void file_priority (file_index_t index, download_priority_t priority) const;
        void force_dht_announce () const;
        void force_reannounce (int seconds = 0, int tracker_index = -1, reannounce_flags_t = {}) const;
        void scrape_tracker (int idx = -1) const;
    -   int upload_limit () const;
    -   int download_limit () const;
        void set_download_limit (int limit) const;
    +   int download_limit () const;
        void set_upload_limit (int limit) const;
    +   int upload_limit () const;
        void connect_peer (tcp::endpoint const& adr, peer_source_flags_t source = {}
           , pex_flags_t flags = pex_encryption | pex_utp | pex_holepunch) const;
        void clear_peers ();
        void set_max_uploads (int max_uploads) const;
        int max_uploads () const;
    -   void set_max_connections (int max_connections) const;
        int max_connections () const;
    +   void set_max_connections (int max_connections) const;
        void move_storage (std::string const& save_path
           , move_flags_t flags = move_flags_t::always_replace_files
           ) const;
        void rename_file (file_index_t index, std::string const& new_name) const;
        sha1_hash info_hash () const;
        bool operator< (const torrent_handle& h) const;
    -   bool operator!= (const torrent_handle& h) const;
        bool operator== (const torrent_handle& h) const;
    +   bool operator!= (const torrent_handle& h) const;
        std::uint32_t id () const;
        std::shared_ptr<torrent> native_handle () const;
        bool in_session () const;
    @@ -1056,14 +1056,14 @@
     it will fill with information about pieces that are partially
     downloaded or not downloaded at all but partially requested. See
     partial_piece_info for the fields in the returned vector.

    - -[report issue]
    -
    -

    reset_piece_deadline() clear_piece_deadlines() set_piece_deadline()

    + +[report issue]
    +
    +

    clear_piece_deadlines() set_piece_deadline() reset_piece_deadline()

    -void clear_piece_deadlines () const;
     void set_piece_deadline (piece_index_t index, int deadline, deadline_flags_t flags = {}) const;
    +void clear_piece_deadlines () const;
     void reset_piece_deadline (piece_index_t index) const;
     

    This function sets or resets the deadline associated with a specific @@ -1123,15 +1123,15 @@

    If the torrent is in an error state (i.e. torrent_status::error is non-empty), this will clear the error and start the torrent again.

    - -[report issue]
    -
    -

    trackers() replace_trackers() add_tracker()

    + +[report issue]
    +
    +

    replace_trackers() add_tracker() trackers()

    +std::vector<announce_entry> trackers () const;
     void add_tracker (announce_entry const&) const;
     void replace_trackers (std::vector<announce_entry> const&) const;
    -std::vector<announce_entry> trackers () const;
     

    trackers() will return the list of trackers for this torrent. The announce entry contains both a string url which specify the @@ -1150,13 +1150,13 @@ a torrent is started with resume data, the trackers from the resume data will replace the original ones.

    - -[report issue]
    -
    -

    add_url_seed() url_seeds() remove_url_seed()

    + +[report issue]
    +
    +

    add_url_seed() remove_url_seed() url_seeds()

    -void remove_url_seed (std::string const& url) const;
     void add_url_seed (std::string const& url) const;
    +void remove_url_seed (std::string const& url) const;
     std::set<std::string> url_seeds () const;
     

    add_url_seed() adds another url to the torrent's list of url @@ -1168,15 +1168,15 @@ torrent. Note that URLs that fails may be removed automatically from the list.

    See http seeding for more information.

    - + -[report issue]
    -
    -

    http_seeds() remove_http_seed() add_http_seed()

    +[report issue]
    +
    +

    add_http_seed() remove_http_seed() http_seeds()

    +void add_http_seed (std::string const& url) const;
     std::set<std::string> http_seeds () const;
     void remove_http_seed (std::string const& url) const;
    -void add_http_seed (std::string const& url) const;
     

    These functions are identical as the *_url_seed() variants, but they operate on BEP 17 web seeds instead of BEP 19.

    @@ -1231,8 +1231,8 @@

    resume() pause()

    -void pause (pause_flags_t flags = {}) const;
     void resume () const;
    +void pause (pause_flags_t flags = {}) const;
     

    pause(), and resume() will disconnect all peers and reconnect all peers respectively. When a torrent is paused, it will however @@ -1249,16 +1249,16 @@ not auto-managed first. Torrents are auto-managed by default when added to the session. For more information, see queuing.

    - -[report issue]
    -
    -

    set_flags() flags() unset_flags()

    + +[report issue]
    +
    +

    flags() unset_flags() set_flags()

    +torrent_flags_t flags () const;
     void set_flags (torrent_flags_t flags) const;
     void set_flags (torrent_flags_t flags, torrent_flags_t mask) const;
     void unset_flags (torrent_flags_t flags) const;
    -torrent_flags_t flags () const;
     

    sets and gets the torrent state flags. See torrent_flags_t. The set_flags overload that take a mask will affect all @@ -1437,19 +1437,19 @@ alert is received and handled in order for this function to be meaningful.

    - + -[report issue]
    -
    -

    queue_position_down() queue_position_top() queue_position() queue_position_bottom() queue_position_up()

    +[report issue]
    +
    +

    queue_position_top() queue_position_down() queue_position() queue_position_bottom() queue_position_up()

     void queue_position_top () const;
     void queue_position_down () const;
    +void queue_position_bottom () const;
     queue_position_t queue_position () const;
     void queue_position_up () const;
    -void queue_position_bottom () const;
     

    Every torrent that is added is assigned a queue position exactly one greater than the greatest queue position of all existing torrents. @@ -1476,18 +1476,18 @@

    updates the position in the queue for this torrent. The relative order of all other torrents remain intact but their numerical queue position shifts to make space for this torrent's new position

    - -[report issue]
    -
    -

    set_ssl_certificate_buffer() set_ssl_certificate()

    + +[report issue]
    +
    +

    set_ssl_certificate() set_ssl_certificate_buffer()

    +void set_ssl_certificate_buffer (std::string const& certificate
    +      , std::string const& private_key
    +      , std::string const& dh_params);
     void set_ssl_certificate (std::string const& certificate
           , std::string const& private_key
           , std::string const& dh_params
           , std::string const& passphrase = "");
    -void set_ssl_certificate_buffer (std::string const& certificate
    -      , std::string const& private_key
    -      , std::string const& dh_params);
     

    For SSL torrents, use this to specify a path to a .pem file to use as this client's certificate. The certificate must be signed by the @@ -1544,17 +1544,17 @@

    The piece availability is the number of peers that we are connected that has advertised having a particular piece. This is the information that libtorrent uses in order to prefer picking rare pieces.

    - + -[report issue]
    -
    -

    piece_priority() prioritize_pieces() get_piece_priorities()

    +[report issue]
    +
    +

    get_piece_priorities() prioritize_pieces() piece_priority()

    -download_priority_t piece_priority (piece_index_t index) const;
    -void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
     void piece_priority (piece_index_t index, download_priority_t priority) const;
     std::vector<download_priority_t> get_piece_priorities () const;
     void prioritize_pieces (std::vector<std::pair<piece_index_t, download_priority_t>> const& pieces) const;
    +void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
    +download_priority_t piece_priority (piece_index_t index) const;
     

    These functions are used to set and get the priority of individual pieces. By default all pieces have priority 4. That means that the @@ -1584,16 +1584,16 @@

    It's possible to cancel the effect of file priorities by setting the priorities for the affected pieces. Care has to be taken when mixing usage of file- and piece priorities.

    - + -[report issue]
    -
    -

    file_priority() get_file_priorities() prioritize_files()

    +[report issue]
    +
    +

    prioritize_files() get_file_priorities() file_priority()

    -void file_priority (file_index_t index, download_priority_t priority) const;
    -void prioritize_files (std::vector<download_priority_t> const& files) const;
     std::vector<download_priority_t> get_file_priorities () const;
     download_priority_t file_priority (file_index_t index) const;
    +void prioritize_files (std::vector<download_priority_t> const& files) const;
    +void file_priority (file_index_t index, download_priority_t priority) const;
     

    index must be in the range [0, number_of_files).

    file_priority() queries or sets the priority of file index.

    @@ -1620,10 +1620,10 @@

    when combining file- and piece priorities, the resume file will record both. When loading the resume data, the file priorities will be applied first, then the piece priorities.

    - -[report issue]
    -
    -

    force_dht_announce() force_reannounce()

    + +[report issue]
    +
    +

    force_reannounce() force_dht_announce()

     void force_dht_announce () const;
     void force_reannounce (int seconds = 0, int tracker_index = -1, reannounce_flags_t = {}) const;
    @@ -1656,17 +1656,17 @@
     num_incomplete fields in the torrent_status struct once it
     completes. When it completes, it will generate a scrape_reply_alert.
     If it fails, it will generate a scrape_failed_alert.

    - + -[report issue]
    -
    -

    upload_limit() set_download_limit() download_limit() set_upload_limit()

    +[report issue]
    +
    +

    set_upload_limit() set_download_limit() download_limit() upload_limit()

    -int upload_limit () const;
    -int download_limit () const;
     void set_download_limit (int limit) const;
    +int download_limit () const;
     void set_upload_limit (int limit) const;
    +int upload_limit () const;
     

    set_upload_limit will limit the upload bandwidth used by this particular torrent to the limit you set. It is given as the number of @@ -1706,10 +1706,10 @@

    This will disconnect all peers and clear the peer list for this torrent. New peers will have to be acquired before resuming, from trackers, DHT or local service discovery, for example.

    - -[report issue]
    -
    -

    set_max_uploads() max_uploads()

    + +[report issue]
    +
    +

    max_uploads() set_max_uploads()

     void set_max_uploads (int max_uploads) const;
     int max_uploads () const;
    @@ -1725,8 +1725,8 @@
     

    max_connections() set_max_connections()

    -void set_max_connections (int max_connections) const;
     int max_connections () const;
    +void set_max_connections (int max_connections) const;
     

    set_max_connections() sets the maximum number of connection this torrent will open. If all connections are used up, incoming @@ -1803,14 +1803,14 @@ is to a torrent that hasn't loaded yet (for instance by being added) by a URL, the returned value is undefined.

    - -[report issue]
    + +[report issue]
    -

    operator<() operator!=() operator==()

    +

    operator<() operator==() operator!=()

     bool operator< (const torrent_handle& h) const;
    -bool operator!= (const torrent_handle& h) const;
     bool operator== (const torrent_handle& h) const;
    +bool operator!= (const torrent_handle& h) const;
     

    comparison operators. The order of the torrents is unspecified but stable.

    @@ -1995,19 +1995,19 @@ }; }; - -[report issue]
    -

    remove() add()

    + +[report issue]
    +

    add() remove()

     void remove (socket_type_t const st, peer_class_t const peer_class);
     void add (socket_type_t const st, peer_class_t const peer_class);
     

    add() and remove() adds and removes a peer class to be added to new peers based on socket type.

    - -[report issue]
    -
    -

    disallow() allow()

    + +[report issue]
    +
    +

    allow() disallow()

     void disallow (socket_type_t const st, peer_class_t const peer_class);
     void allow (socket_type_t const st, peer_class_t const peer_class);
    @@ -2190,9 +2190,9 @@
     struct announce_entry
     {
        ~announce_entry ();
    -   announce_entry ();
    -   explicit announce_entry (string_view u);
        announce_entry& operator= (announce_entry const&);
    +   explicit announce_entry (string_view u);
    +   announce_entry ();
        announce_entry (announce_entry const&);
        void reset ();
        void trim ();
    @@ -2215,14 +2215,14 @@
     };
     
    - -[report issue]
    -

    announce_entry() ~announce_entry() operator=()

    + +[report issue]
    +

    announce_entry() operator=() ~announce_entry()

     ~announce_entry ();
    -announce_entry ();
    -explicit announce_entry (string_view u);
     announce_entry& operator= (announce_entry const&);
    +explicit announce_entry (string_view u);
    +announce_entry ();
     announce_entry (announce_entry const&);
     

    constructs a tracker announce entry with u as the URL.

    @@ -3539,29 +3539,29 @@ { explicit peer_connection_handle (std::weak_ptr<peer_connection> impl); connection_type type () const; - void add_extension (std::shared_ptr<peer_plugin>); peer_plugin const* find_plugin (string_view type) const; + void add_extension (std::shared_ptr<peer_plugin>); bool is_seed () const; bool upload_only () const; bool has_piece (piece_index_t i) const; peer_id const& pid () const; - bool is_choked () const; bool is_interesting () const; - bool is_peer_interested () const; + bool is_choked () const; bool has_peer_choked () const; + bool is_peer_interested () const; void maybe_unchoke_this_peer (); void choke_this_peer (); void get_peer_info (peer_info& p) const; torrent_handle associated_torrent () const; - tcp::endpoint const& remote () const; tcp::endpoint local_endpoint () const; - bool is_connecting () const; + tcp::endpoint const& remote () const; bool is_disconnecting () const; + bool is_outgoing () const; + bool is_connecting () const; void disconnect (error_code const& ec, operation_t op , disconnect_severity_t = peer_connection_interface::normal); - bool is_outgoing () const; - bool on_local_network () const; bool ignore_unchoke_slots () const; + bool on_local_network () const; bool failed () const; bool should_log (peer_log_alert::direction_t direction) const; void peer_log (peer_log_alert::direction_t direction @@ -3572,9 +3572,9 @@ void send_buffer (char const* begin, int size); time_point time_of_last_unchoke () const; std::time_t last_seen_complete () const; - bool operator!= (peer_connection_handle const& o) const; - bool operator== (peer_connection_handle const& o) const; bool operator< (peer_connection_handle const& o) const; + bool operator== (peer_connection_handle const& o) const; + bool operator!= (peer_connection_handle const& o) const; std::shared_ptr<peer_connection> native_handle () const; }; @@ -3627,11 +3627,11 @@
     struct add_torrent_params
     {
    -   add_torrent_params (add_torrent_params&&) noexcept;
    -   add_torrent_params& operator= (add_torrent_params&&) = default;
    +   explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
        add_torrent_params (add_torrent_params const&);
        add_torrent_params& operator= (add_torrent_params const&);
    -   explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
    +   add_torrent_params& operator= (add_torrent_params&&) = default;
    +   add_torrent_params (add_torrent_params&&) noexcept;
     
        int version  = LIBTORRENT_VERSION_NUM;
        std::shared_ptr<torrent_info> ti;
    @@ -3676,15 +3676,15 @@
        std::time_t last_upload  = 0;
     };
     
    - -[report issue]
    -

    operator=() add_torrent_params()

    + +[report issue]
    +

    add_torrent_params() operator=()

    -add_torrent_params (add_torrent_params&&) noexcept;
    -add_torrent_params& operator= (add_torrent_params&&) = default;
    +explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
     add_torrent_params (add_torrent_params const&);
     add_torrent_params& operator= (add_torrent_params const&);
    -explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
    +add_torrent_params& operator= (add_torrent_params&&) = default;
    +add_torrent_params (add_torrent_params&&) noexcept;
     

    The constructor can be used to initialize the storage constructor, which determines the storage mechanism for the downloaded or seeding @@ -3945,10 +3945,10 @@

     add_torrent_params read_resume_data (bdecode_node const& rd
        , error_code& ec);
    -add_torrent_params read_resume_data (bdecode_node const& rd);
    -add_torrent_params read_resume_data (span<char const> buffer);
     add_torrent_params read_resume_data (span<char const> buffer
        , error_code& ec);
    +add_torrent_params read_resume_data (span<char const> buffer);
    +add_torrent_params read_resume_data (bdecode_node const& rd);
     

    these functions are used to parse resume data and populate the appropriate fields in an add_torrent_params object. This object can then be used to add @@ -3957,10 +3957,10 @@

    If the client wants to override any field that was loaded from the resume data, e.g. save_path, those fields must be changed after loading resume data but before adding the torrent.

    - -[report issue]
    -
    -

    write_resume_data_buf() write_resume_data()

    + +[report issue]
    +
    +

    write_resume_data() write_resume_data_buf()

    Declared in "libtorrent/write_resume_data.hpp"

     entry write_resume_data (add_torrent_params const& atp);
    @@ -4042,8 +4042,8 @@
     

    Declared in "libtorrent/magnet_uri.hpp"

     add_torrent_params parse_magnet_uri (string_view uri);
    -add_torrent_params parse_magnet_uri (string_view uri, error_code& ec);
     void parse_magnet_uri (string_view uri, add_torrent_params& p, error_code& ec);
    +add_torrent_params parse_magnet_uri (string_view uri, error_code& ec);
     

    This function parses out information from the magnet link and populates the add_torrent_params object. The overload that does not take an diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Create_Torrents.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Create_Torrents.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Create_Torrents.html 2021-04-30 21:54:21.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Create_Torrents.html 2021-06-23 16:44:10.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -93,26 +93,26 @@
     struct create_torrent
     {
    -   explicit create_torrent (torrent_info const& ti);
        explicit create_torrent (file_storage& fs, int piece_size = 0
           , int pad_file_limit = -1, create_flags_t flags = optimize_alignment
           , int alignment = -1);
    +   explicit create_torrent (torrent_info const& ti);
        entry generate () const;
        file_storage const& files () const;
        void set_comment (char const* str);
        void set_creator (char const* str);
        void set_hash (piece_index_t index, sha1_hash const& h);
        void set_file_hash (file_index_t index, sha1_hash const& h);
    -   void add_http_seed (string_view url);
        void add_url_seed (string_view url);
    +   void add_http_seed (string_view url);
        void add_node (std::pair<std::string, int> node);
        void add_tracker (string_view url, int tier = 0);
        void set_root_cert (string_view pem);
    -   void set_priv (bool p);
        bool priv () const;
    +   void set_priv (bool p);
        int num_pieces () const;
    -   int piece_size (piece_index_t i) const;
        int piece_length () const;
    +   int piece_size (piece_index_t i) const;
        std::vector<sha1_hash> const& merkle_tree () const;
        void add_similar_torrent (sha1_hash ih);
        void add_collection (string_view c);
    @@ -127,10 +127,10 @@
     [report issue]

    create_torrent()

    -explicit create_torrent (torrent_info const& ti);
     explicit create_torrent (file_storage& fs, int piece_size = 0
           , int pad_file_limit = -1, create_flags_t flags = optimize_alignment
           , int alignment = -1);
    +explicit create_torrent (torrent_info const& ti);
     

    The piece_size is the size of each piece in bytes. It must be a multiple of 16 kiB. If a piece size of 0 is specified, a @@ -221,13 +221,13 @@

    This sets the sha1 hash for this file. This hash will end up under the key sha1 associated with this file (for multi-file torrents) or in the root info dictionary for single-file torrents.

    - -[report issue]
    -
    -

    add_url_seed() add_http_seed()

    + +[report issue]
    +
    +

    add_http_seed() add_url_seed()

    -void add_http_seed (string_view url);
     void add_url_seed (string_view url);
    +void add_http_seed (string_view url);
     

    This adds a url seed to the torrent. You can have any number of url seeds. For a single file torrent, this should be an HTTP url, pointing to a file with identical @@ -274,8 +274,8 @@

    priv() set_priv()

    -void set_priv (bool p);
     bool priv () const;
    +void set_priv (bool p);
     

    Sets and queries the private flag of the torrent. Torrents with the private flag set ask the client to not use any other @@ -288,13 +288,13 @@ int num_pieces () const;

    returns the number of pieces in the associated file_storage object.

    - -[report issue]
    -
    -

    piece_size() piece_length()

    + +[report issue]
    +
    +

    piece_length() piece_size()

    -int piece_size (piece_index_t i) const;
     int piece_length () const;
    +int piece_size (piece_index_t i) const;
     

    piece_length() returns the piece size of all pieces but the last one. piece_size() returns the size of the specified piece. @@ -396,11 +396,11 @@

    Declared in "libtorrent/create_torrent.hpp"

     inline void set_piece_hashes (create_torrent& t, std::string const& p, error_code& ec);
    -inline void set_piece_hashes (create_torrent& t, std::string const& p
    -   , std::function<void(piece_index_t)> const& f);
    +inline void set_piece_hashes (create_torrent& t, std::string const& p);
     void set_piece_hashes (create_torrent& t, std::string const& p
        , std::function<void(piece_index_t)> const& f, error_code& ec);
    -inline void set_piece_hashes (create_torrent& t, std::string const& p);
    +inline void set_piece_hashes (create_torrent& t, std::string const& p
    +   , std::function<void(piece_index_t)> const& f);
     

    This function will assume that the files added to the torrent file exists at path p, read those files and hash the content and set the hashes in the create_torrent diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Custom_Storage.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Custom_Storage.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Custom_Storage.html 2021-04-30 21:54:22.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Custom_Storage.html 2021-06-23 16:44:12.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -129,8 +129,8 @@
     struct file_pool : boost::noncopyable
     {
    -   explicit file_pool (int size = 40);
        ~file_pool ();
    +   explicit file_pool (int size = 40);
        file_handle open_file (storage_index_t st, std::string const& p
           , file_index_t file_index, file_storage const& fs, open_mode_t m
           , error_code& ec);
    @@ -146,8 +146,8 @@
     [report issue]

    ~file_pool() file_pool()

    -explicit file_pool (int size = 40);
     ~file_pool ();
    +explicit file_pool (int size = 40);
     

    size specifies the number of allowed files handles to hold open at any given time.

    @@ -228,13 +228,13 @@ struct storage_interface: std::enable_shared_from_this<storage_interface>, aux::disk_job_fence, aux::storage_piece_set { explicit storage_interface (file_storage const& fs); - storage_interface (storage_interface const&) = delete; storage_interface& operator= (storage_interface const&) = delete; + storage_interface (storage_interface const&) = delete; virtual void initialize (storage_error& ec) = 0; - virtual int writev (span<iovec_t const> bufs - , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; virtual int readv (span<iovec_t const> bufs , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; + virtual int writev (span<iovec_t const> bufs + , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; virtual bool has_any_file (storage_error& ec) = 0; virtual void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio , storage_error& ec) = 0; @@ -253,8 +253,8 @@ void do_tick (); void set_owner (std::shared_ptr<void> const& tor); aux::session_settings const& settings () const; - void set_storage_index (storage_index_t st); storage_index_t storage_index () const; + void set_storage_index (storage_index_t st); void inc_refcount (); int dec_refcount (); @@ -282,15 +282,15 @@ constructor. This function is called before the torrent starts to download.

    If an error occurs, storage_error should be set to reflect it.

    - -[report issue]
    -
    -

    writev() readv()

    + +[report issue]
    +
    +

    readv() writev()

    -virtual int writev (span<iovec_t const> bufs
    -      , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
     virtual int readv (span<iovec_t const> bufs
           , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
    +virtual int writev (span<iovec_t const> bufs
    +      , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
     

    These functions should read and write the data in or to the given piece at the given offset. It should read or write @@ -447,20 +447,20 @@ class default_storage : public storage_interface { explicit default_storage (storage_params const& params, file_pool&); - bool tick () override; - void initialize (storage_error& ec) override; - void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio + void release_files (storage_error& ec) override; + void rename_file (file_index_t index, std::string const& new_filename , storage_error& ec) override; - bool verify_resume_data (add_torrent_params const& rd - , aux::vector<std::string, file_index_t> const& links - , storage_error& error) override; - bool has_any_file (storage_error& ec) override; status_t move_storage (std::string const& save_path , move_flags_t flags, storage_error& ec) override; - void rename_file (file_index_t index, std::string const& new_filename + void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio , storage_error& ec) override; + bool has_any_file (storage_error& ec) override; + void initialize (storage_error& ec) override; + bool tick () override; void delete_files (remove_flags_t options, storage_error& ec) override; - void release_files (storage_error& ec) override; + bool verify_resume_data (add_torrent_params const& rd + , aux::vector<std::string, file_index_t> const& links + , storage_error& error) override; int writev (span<iovec_t const> bufs , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) override; int readv (span<iovec_t const> bufs diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-DHT.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-DHT.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-DHT.html 2021-04-30 21:54:19.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-DHT.html 2021-06-23 16:44:09.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-ed25519.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-ed25519.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-ed25519.html 2021-04-30 21:54:27.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-ed25519.html 2021-06-23 16:44:16.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Error_Codes.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Error_Codes.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Error_Codes.html 2021-04-30 21:54:21.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Error_Codes.html 2021-06-23 16:44:11.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -72,8 +72,8 @@ struct storage_error { explicit operator bool () const; - void file (file_index_t f); file_index_t file () const; + void file (file_index_t f); error_code ec; operation_t operation; @@ -90,8 +90,8 @@

    file()

    -void file (file_index_t f);
     file_index_t file () const;
    +void file (file_index_t f);
     

    set and query the index (in the torrent) of the file this error occurred on. This may also have special values defined in diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Filter.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Filter.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Filter.html 2021-04-30 21:54:25.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Filter.html 2021-06-23 16:44:14.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference.html 2021-04-30 21:54:17.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference.html 2021-06-23 16:44:07.000000000 +0000 @@ -49,8 +49,8 @@ - + @@ -81,10 +81,10 @@

    DHT

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Plugins.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Plugins.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Plugins.html 2021-04-30 21:54:20.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Plugins.html 2021-06-23 16:44:10.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -309,8 +309,8 @@ struct torrent_plugin { virtual std::shared_ptr<peer_plugin> new_connection (peer_connection_handle const&); - virtual void on_piece_pass (piece_index_t); virtual void on_piece_failed (piece_index_t); + virtual void on_piece_pass (piece_index_t); virtual void tick (); virtual bool on_resume (); virtual bool on_pause (); @@ -345,8 +345,8 @@

    on_piece_failed() on_piece_pass()

    -virtual void on_piece_pass (piece_index_t);
     virtual void on_piece_failed (piece_index_t);
    +virtual void on_piece_pass (piece_index_t);
     

    These hooks are called when a piece passes the hash check or fails the hash check, respectively. The index is the piece index that was downloaded. @@ -360,10 +360,10 @@

    This hook is called approximately once per second. It is a way of making it easy for plugins to do timed events, for sending messages or whatever.

    - -[report issue]
    -
    -

    on_pause() on_resume()

    + +[report issue]
    +
    +

    on_resume() on_pause()

     virtual bool on_resume ();
     virtual bool on_pause ();
    @@ -439,21 +439,21 @@
        virtual void on_connected ();
        virtual bool on_handshake (span<char const>);
        virtual bool on_extension_handshake (bdecode_node const&);
    -   virtual bool on_allowed_fast (piece_index_t);
        virtual bool on_interested ();
    -   virtual bool on_not_interested ();
    -   virtual bool on_unchoke ();
    -   virtual bool on_dont_have (piece_index_t);
    +   virtual bool on_choke ();
        virtual bool on_request (peer_request const&);
    +   virtual bool on_have_all ();
        virtual bool on_have (piece_index_t);
        virtual bool on_bitfield (bitfield const& /*bitfield*/);
    -   virtual bool on_have_all ();
    -   virtual bool on_choke ();
    +   virtual bool on_allowed_fast (piece_index_t);
        virtual bool on_have_none ();
    +   virtual bool on_not_interested ();
    +   virtual bool on_dont_have (piece_index_t);
    +   virtual bool on_unchoke ();
        virtual bool on_piece (peer_request const& /*piece*/
           , span<char const> /*buf*/);
    -   virtual bool on_suggest (piece_index_t);
        virtual bool on_reject (peer_request const&);
    +   virtual bool on_suggest (piece_index_t);
        virtual bool on_cancel (peer_request const&);
        virtual void sent_unchoke ();
        virtual void sent_payload (int /* bytes */);
    @@ -462,8 +462,8 @@
           span<char const> /*body*/);
        virtual bool on_unknown_message (int /*length*/, int /*msg*/,
           span<char const> /*body*/);
    -   virtual void on_piece_pass (piece_index_t);
        virtual void on_piece_failed (piece_index_t);
    +   virtual void on_piece_pass (piece_index_t);
        virtual void tick ();
        virtual bool write_request (peer_request const&);
     };
    @@ -521,31 +521,31 @@
     supported by this peer. It will result in this peer_plugin
     being removed from the peer_connection and destructed.
     this is not called for web seeds

    - - - - - + + + + - -[report issue]
    -
    -

    on_not_interested() on_have() on_dont_have() on_have_all() on_have_none() on_interested() on_choke() on_allowed_fast() on_request() on_unchoke() on_bitfield()

    + + +[report issue]
    +
    +

    on_dont_have() on_choke() on_interested() on_bitfield() on_not_interested() on_have_none() on_allowed_fast() on_request() on_have_all() on_have() on_unchoke()

    -virtual bool on_allowed_fast (piece_index_t);
     virtual bool on_interested ();
    -virtual bool on_not_interested ();
    -virtual bool on_unchoke ();
    -virtual bool on_dont_have (piece_index_t);
    +virtual bool on_choke ();
     virtual bool on_request (peer_request const&);
    +virtual bool on_have_all ();
     virtual bool on_have (piece_index_t);
     virtual bool on_bitfield (bitfield const& /*bitfield*/);
    -virtual bool on_have_all ();
    -virtual bool on_choke ();
    +virtual bool on_allowed_fast (piece_index_t);
     virtual bool on_have_none ();
    +virtual bool on_not_interested ();
    +virtual bool on_dont_have (piece_index_t);
    +virtual bool on_unchoke ();
     

    returning true from any of the message handlers indicates that the plugin has handled the message. @@ -618,8 +618,8 @@

    on_piece_failed() on_piece_pass()

    -virtual void on_piece_pass (piece_index_t);
     virtual void on_piece_failed (piece_index_t);
    +virtual void on_piece_pass (piece_index_t);
     

    called when a piece that this peer participated in either fails or passes the hash_check

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Session.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Session.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Session.html 2021-04-30 21:54:20.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Session.html 2021-06-23 16:44:09.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -66,25 +66,25 @@
     class session_proxy
     {
    -   ~session_proxy ();
    -   session_proxy (session_proxy const&);
    -   session_proxy (session_proxy&&) noexcept;
        session_proxy& operator= (session_proxy&&) noexcept;
    +   session_proxy (session_proxy const&);
        session_proxy& operator= (session_proxy const&);
    +   ~session_proxy ();
        session_proxy ();
    +   session_proxy (session_proxy&&) noexcept;
     };
     
    + - -[report issue]
    -

    operator=() session_proxy() ~session_proxy()

    +[report issue]
    +

    ~session_proxy() operator=() session_proxy()

    -~session_proxy ();
    -session_proxy (session_proxy const&);
    -session_proxy (session_proxy&&) noexcept;
     session_proxy& operator= (session_proxy&&) noexcept;
    +session_proxy (session_proxy const&);
     session_proxy& operator= (session_proxy const&);
    +~session_proxy ();
     session_proxy ();
    +session_proxy (session_proxy&&) noexcept;
     

    default constructor, does not refer to any session implementation object.

    @@ -98,13 +98,13 @@
     struct session_params
     {
    +   explicit session_params (settings_pack&& sp);
        session_params ();
        explicit session_params (settings_pack const& sp);
    -   explicit session_params (settings_pack&& sp);
    -   session_params (settings_pack&& sp
    -      , std::vector<std::shared_ptr<plugin>> exts);
        session_params (settings_pack const& sp
           , std::vector<std::shared_ptr<plugin>> exts);
    +   session_params (settings_pack&& sp
    +      , std::vector<std::shared_ptr<plugin>> exts);
     
        settings_pack settings;
        std::vector<std::shared_ptr<plugin>> extensions;
    @@ -116,9 +116,9 @@
     [report issue]

    session_params()

    +explicit session_params (settings_pack&& sp);
     session_params ();
     explicit session_params (settings_pack const& sp);
    -explicit session_params (settings_pack&& sp);
     

    This constructor can be used to start with the default plugins (ut_metadata, ut_pex and smart_ban). The default values in the @@ -128,10 +128,10 @@

    session_params()

    -session_params (settings_pack&& sp
    -      , std::vector<std::shared_ptr<plugin>> exts);
     session_params (settings_pack const& sp
           , std::vector<std::shared_ptr<plugin>> exts);
    +session_params (settings_pack&& sp
    +      , std::vector<std::shared_ptr<plugin>> exts);
     

    This constructor helps to configure the set of initial plugins to be added to the session before it's started.

    @@ -153,21 +153,21 @@
     class session : public session_handle
     {
    -   explicit session (session_params&& params, session_flags_t const flags);
    -   explicit session (session_params const& params);
    -   explicit session (session_params const& params, session_flags_t const flags);
        explicit session (session_params&& params);
    +   explicit session (session_params const& params, session_flags_t const flags);
        session ();
    +   explicit session (session_params const& params);
    +   explicit session (session_params&& params, session_flags_t const flags);
        session (session_params const& params, io_service& ios);
        session (session_params&& params, io_service& ios);
    -   session (settings_pack&& pack
    -      , session_flags_t const flags = add_default_plugins);
        session (settings_pack const& pack
           , session_flags_t const flags = add_default_plugins);
    -   session (session&&) = default;
    +   session (settings_pack&& pack
    +      , session_flags_t const flags = add_default_plugins);
        session& operator= (session&&) = default;
    -   session& operator= (session const&) = delete;
    +   session (session&&) = default;
        session (session const&) = delete;
    +   session& operator= (session const&) = delete;
        session (settings_pack const& pack
           , io_service& ios
           , session_flags_t const flags = add_default_plugins);
    @@ -181,11 +181,11 @@
     [report issue]

    session()

    -explicit session (session_params&& params, session_flags_t const flags);
    -explicit session (session_params const& params);
    -explicit session (session_params const& params, session_flags_t const flags);
     explicit session (session_params&& params);
    +explicit session (session_params const& params, session_flags_t const flags);
     session ();
    +explicit session (session_params const& params);
    +explicit session (session_params&& params, session_flags_t const flags);
     

    Constructs the session objects which acts as the container of torrents. In order to avoid a race condition between starting the session and @@ -220,10 +220,10 @@

    session()

    -session (settings_pack&& pack
    -      , session_flags_t const flags = add_default_plugins);
     session (settings_pack const& pack
           , session_flags_t const flags = add_default_plugins);
    +session (settings_pack&& pack
    +      , session_flags_t const flags = add_default_plugins);
     

    Constructs the session objects which acts as the container of torrents. It provides configuration options across torrents (such as rate limits, @@ -240,8 +240,8 @@

    operator=() session()

    -session (session&&) = default;
     session& operator= (session&&) = default;
    +session (session&&) = default;
     

    movable

    @@ -249,8 +249,8 @@

    operator=() session()

    -session& operator= (session const&) = delete;
     session (session const&) = delete;
    +session& operator= (session const&) = delete;
     

    non-copyable

    [report issue]
    @@ -329,31 +329,31 @@ struct session_handle { bool is_valid () const; - void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all()); void save_state (entry& e, save_state_flags_t flags = save_state_flags_t::all()) const; - void refresh_torrent_status (std::vector<torrent_status>* ret - , status_flags_t flags = {}) const; + void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all()); std::vector<torrent_status> get_torrent_status ( std::function<bool(torrent_status const&)> const& pred , status_flags_t flags = {}) const; + void refresh_torrent_status (std::vector<torrent_status>* ret + , status_flags_t flags = {}) const; void post_torrent_updates (status_flags_t flags = status_flags_t::all()); void post_session_stats (); void post_dht_stats (); std::vector<torrent_handle> get_torrents () const; torrent_handle find_torrent (sha1_hash const& info_hash) const; - torrent_handle add_torrent (add_torrent_params const& params, error_code& ec); - torrent_handle add_torrent (add_torrent_params&& params); - void async_add_torrent (add_torrent_params&& params); void async_add_torrent (add_torrent_params const& params); + torrent_handle add_torrent (add_torrent_params&& params); torrent_handle add_torrent (add_torrent_params const& params); + torrent_handle add_torrent (add_torrent_params const& params, error_code& ec); + void async_add_torrent (add_torrent_params&& params); torrent_handle add_torrent (add_torrent_params&& params, error_code& ec); + bool is_paused () const; void pause (); void resume (); - bool is_paused () const; void get_cache_info (cache_status* ret, torrent_handle h = torrent_handle(), int flags = 0) const; - bool is_dht_running () const; dht::dht_settings get_dht_settings () const; void set_dht_settings (dht::dht_settings const& settings); + bool is_dht_running () const; void set_dht_storage (dht::dht_storage_constructor_type sc); void add_dht_node (std::pair<std::string, int> const& node); void dht_get_item (sha1_hash const& target); @@ -369,15 +369,15 @@ void dht_live_nodes (sha1_hash const& nid); void dht_sample_infohashes (udp::endpoint const& ep, sha1_hash const& target); void dht_direct_request (udp::endpoint const& ep, entry const& e, void* userdata = nullptr); + void add_extension (std::shared_ptr<plugin> ext); void add_extension (std::function<std::shared_ptr<torrent_plugin>( torrent_handle const&, void*)> ext); - void add_extension (std::shared_ptr<plugin> ext); ip_filter get_ip_filter () const; void set_ip_filter (ip_filter const& f); void set_port_filter (port_filter const& f); - unsigned short ssl_listen_port () const; - bool is_listening () const; unsigned short listen_port () const; + bool is_listening () const; + unsigned short ssl_listen_port () const; void set_peer_class_filter (ip_filter const& f); ip_filter get_peer_class_filter () const; peer_class_type_filter get_peer_class_type_filter () const; @@ -387,12 +387,12 @@ void set_peer_class (peer_class_t cid, peer_class_info const& pci); peer_class_info get_peer_class (peer_class_t cid) const; void remove_torrent (const torrent_handle& h, remove_flags_t options = {}); + settings_pack get_settings () const; void apply_settings (settings_pack const& s); void apply_settings (settings_pack&& s); - settings_pack get_settings () const; - void set_alert_notify (std::function<void()> const& fun); void pop_alerts (std::vector<alert*>* alerts); alert* wait_for_alert (time_duration max_wait); + void set_alert_notify (std::function<void()> const& fun); void delete_port_mapping (port_mapping_t handle); std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port); void reopen_network_sockets (reopen_network_flags_t options = reopen_map_ports); @@ -426,8 +426,8 @@

    load_state() save_state()

    -void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all());
     void save_state (entry& e, save_state_flags_t flags = save_state_flags_t::all()) const;
    +void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all());
     

    loads and saves all session settings, including dht_settings, encryption settings and proxy settings. save_state writes all keys @@ -442,16 +442,16 @@ peer_fingerprint and user_agent. Those are left as configured by the session_settings passed to the session constructor or subsequently set via apply_settings().

    - -[report issue]
    -
    -

    refresh_torrent_status() get_torrent_status()

    + +[report issue]
    +
    +

    get_torrent_status() refresh_torrent_status()

    -void refresh_torrent_status (std::vector<torrent_status>* ret
    -      , status_flags_t flags = {}) const;
     std::vector<torrent_status> get_torrent_status (
           std::function<bool(torrent_status const&)> const& pred
           , status_flags_t flags = {}) const;
    +void refresh_torrent_status (std::vector<torrent_status>* ret
    +      , status_flags_t flags = {}) const;
     

    Note

    @@ -519,10 +519,10 @@ void post_dht_stats ();

    This will cause a dht_stats_alert to be posted.

    - -[report issue]
    -
    -

    get_torrents() find_torrent()

    + +[report issue]
    +
    +

    find_torrent() get_torrents()

     std::vector<torrent_handle> get_torrents () const;
     torrent_handle find_torrent (sha1_hash const& info_hash) const;
    @@ -535,16 +535,16 @@
     not.

    get_torrents() returns a vector of torrent_handles to all the torrents currently in the session.

    - -[report issue]
    -
    -

    async_add_torrent() add_torrent()

    + +[report issue]
    +
    +

    add_torrent() async_add_torrent()

    -torrent_handle add_torrent (add_torrent_params const& params, error_code& ec);
    -torrent_handle add_torrent (add_torrent_params&& params);
    -void async_add_torrent (add_torrent_params&& params);
     void async_add_torrent (add_torrent_params const& params);
    +torrent_handle add_torrent (add_torrent_params&& params);
     torrent_handle add_torrent (add_torrent_params const& params);
    +torrent_handle add_torrent (add_torrent_params const& params, error_code& ec);
    +void async_add_torrent (add_torrent_params&& params);
     torrent_handle add_torrent (add_torrent_params&& params, error_code& ec);
     

    You add torrents through the add_torrent() function where you give an @@ -571,14 +571,14 @@ just download the metadata, but no payload, set the torrent_flags::upload_mode flag.

    - -[report issue]
    -
    -

    resume() is_paused() pause()

    + +[report issue]
    +
    +

    resume() pause() is_paused()

    +bool is_paused () const;
     void pause ();
     void resume ();
    -bool is_paused () const;
     

    Pausing the session has the same effect as pausing every torrent in it, except that torrents will not be resumed by the auto-manage @@ -596,14 +596,14 @@ If flags is session::disk_cache_no_pieces the cache_status::pieces field will not be set. This may significantly reduce the cost of this call.

    - -[report issue]
    -
    -

    set_dht_settings() is_dht_running() get_dht_settings()

    + +[report issue]
    +
    +

    set_dht_settings() get_dht_settings() is_dht_running()

    -bool is_dht_running () const;
     dht::dht_settings get_dht_settings () const;
     void set_dht_settings (dht::dht_settings const& settings);
    +bool is_dht_running () const;
     

    set_dht_settings sets some parameters available to the dht node. See dht_settings for more information.

    @@ -711,10 +711,10 @@ must first retrieve it, then modify it, then write it back. The way the DHT works, it is natural to always do a lookup before storing and calling the callback in between is convenient.

    - -[report issue]
    -
    -

    dht_get_peers() dht_announce()

    + +[report issue]
    +
    +

    dht_announce() dht_get_peers()

     void dht_announce (sha1_hash const& info_hash, int port = 0, dht::announce_flags_t flags = {});
     void dht_get_peers (sha1_hash const& info_hash);
    @@ -769,9 +769,9 @@
     

    add_extension()

    +void add_extension (std::shared_ptr<plugin> ext);
     void add_extension (std::function<std::shared_ptr<torrent_plugin>(
           torrent_handle const&, void*)> ext);
    -void add_extension (std::shared_ptr<plugin> ext);
     

    This function adds an extension to this session. The argument is a function object that is called with a torrent_handle and which should @@ -832,15 +832,15 @@ will reject making outgoing peer connections to certain remote ports. The main intention is to be able to avoid triggering certain anti-virus software by connecting to SMTP, FTP ports.

    + - -[report issue]
    -
    -

    ssl_listen_port() is_listening() listen_port()

    +[report issue]
    +
    +

    listen_port() ssl_listen_port() is_listening()

    -unsigned short ssl_listen_port () const;
    -bool is_listening () const;
     unsigned short listen_port () const;
    +bool is_listening () const;
    +unsigned short ssl_listen_port () const;
     

    is_listening() will tell you whether or not the session has successfully opened a listening port. If it hasn't, this function will @@ -848,10 +848,10 @@ settings_pack::listen_interfaces to try another interface and port to bind to.

    listen_port() returns the port we ended up listening on.

    - -[report issue]
    -
    -

    set_peer_class_filter() get_peer_class_filter()

    + +[report issue]
    +
    +

    get_peer_class_filter() set_peer_class_filter()

     void set_peer_class_filter (ip_filter const& f);
     ip_filter get_peer_class_filter () const;
    @@ -935,10 +935,10 @@
     peer classes will be properly destructed when the session object
     destructs.

    For more information on peer classes, see peer classes.

    - -[report issue]
    -
    -

    get_peer_class() set_peer_class()

    + +[report issue]
    +
    +

    set_peer_class() get_peer_class()

     void set_peer_class (peer_class_t cid, peer_class_info const& pci);
     peer_class_info get_peer_class (peer_class_t cid) const;
    @@ -994,22 +994,22 @@
     

    get_settings() apply_settings()

    +settings_pack get_settings () const;
     void apply_settings (settings_pack const& s);
     void apply_settings (settings_pack&& s);
    -settings_pack get_settings () const;
     

    Applies the settings specified by the settings_pack s. This is an asynchronous operation that will return immediately and actually apply the settings to the main thread of libtorrent some time later.

    - -[report issue]
    -
    -

    set_alert_notify() pop_alerts() wait_for_alert()

    + +[report issue]
    +
    +

    pop_alerts() set_alert_notify() wait_for_alert()

    -void set_alert_notify (std::function<void()> const& fun);
     void pop_alerts (std::vector<alert*>* alerts);
     alert* wait_for_alert (time_duration max_wait);
    +void set_alert_notify (std::function<void()> const& fun);
     

    Alerts is the main mechanism for libtorrent to report errors and events. pop_alerts fills in the vector passed to it with pointers @@ -1063,10 +1063,10 @@

    The type of an alert is returned by the polymorphic function alert::type() but can also be queries from a concrete type via T::alert_type, as a static constant.

    - -[report issue]
    -
    -

    delete_port_mapping() add_port_mapping()

    + +[report issue]
    +
    +

    add_port_mapping() delete_port_mapping()

     void delete_port_mapping (port_mapping_t handle);
     std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port);
    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Settings.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Settings.html
    --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Settings.html	2021-04-30 21:54:26.000000000 +0000
    +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Settings.html	2021-06-23 16:44:15.000000000 +0000
    @@ -31,7 +31,7 @@
     Author:
     Arvid Norberg, arvid@libtorrent.org
     Version:
    -1.2.13
    +1.2.14
     
     
     

    home

    @@ -42,8 +42,8 @@
    + - -[report issue]
    -

    set_int() set_str() set_bool()

    +[report issue]
    +

    set_bool() set_int() set_str()

     void set_bool (int name, bool val);
    -void set_str (int name, std::string val);
     void set_int (int name, flags::bitfield_flag<Type, Tag> const val);
    +void set_str (int name, std::string val);
     void set_int (int name, int val);
     

    set a configuration option in the settings_pack. name is one of @@ -4211,14 +4211,14 @@ void clear (int name);

    clear a specific setting from the pack

    - -[report issue]
    -
    -

    get_bool() get_int() get_str()

    + +[report issue]
    +
    +

    get_int() get_bool() get_str()

    -int get_int (int name) const;
     bool get_bool (int name) const;
    +int get_int (int name) const;
     std::string const& get_str (int name) const;
     

    queries the current configuration option from the settings_pack. @@ -4552,15 +4552,15 @@ - -[report issue]

    + +[report issue]
    -
    -

    min_memory_usage() high_performance_seed()

    +
    +

    high_performance_seed() min_memory_usage()

    Declared in "libtorrent/session.hpp"

    -settings_pack min_memory_usage ();
     settings_pack high_performance_seed ();
    +settings_pack min_memory_usage ();
     

    The default values of the session settings are set for a regular bittorrent client running on a desktop system. There are functions that @@ -4582,10 +4582,10 @@ serving many peers and that doesn't do any downloading. It has a 128 MB disk cache and has a limit of 400 files in its file pool. It support fast upload rates by allowing large send buffers.

    - -[report issue]
    -
    -

    setting_by_name() name_for_setting()

    + +[report issue]
    +
    +

    name_for_setting() setting_by_name()

    Declared in "libtorrent/settings_pack.hpp"

     int setting_by_name (string_view name);
    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Storage.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Storage.html
    --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Storage.html	2021-04-30 21:54:22.000000000 +0000
    +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Storage.html	2021-06-23 16:44:11.000000000 +0000
    @@ -31,7 +31,7 @@
     Author:
     Arvid Norberg, arvid@libtorrent.org
     Version:
    -1.2.13
    +1.2.14
     
     
     

    home

    @@ -95,13 +95,13 @@ { bool is_valid () const; void reserve (int num_files); - void add_file (std::string const& path, std::int64_t file_size - , file_flags_t file_flags = {} - , std::time_t mtime = 0, string_view symlink_path = string_view()); void add_file_borrow (string_view filename , std::string const& path, std::int64_t file_size , file_flags_t file_flags = {}, char const* filehash = nullptr , std::int64_t mtime = 0, string_view symlink_path = string_view()); + void add_file (std::string const& path, std::int64_t file_size + , file_flags_t file_flags = {} + , std::time_t mtime = 0, string_view symlink_path = string_view()); void rename_file (file_index_t index, std::string const& new_filename); std::vector<file_slice> map_block (piece_index_t piece, std::int64_t offset , int size) const; @@ -118,27 +118,27 @@ void set_piece_length (int l); int piece_length () const; int piece_size (piece_index_t index) const; - void set_name (std::string const& n); std::string const& name () const; + void set_name (std::string const& n); void swap (file_storage& ti) noexcept; void optimize (int pad_file_limit = -1, int alignment = -1 , bool tail_padding = false); - std::int64_t file_size (file_index_t index) const; + std::string file_path (file_index_t index, std::string const& save_path = "") const; bool pad_file_at (file_index_t index) const; - std::time_t mtime (file_index_t index) const; string_view file_name (file_index_t index) const; - std::int64_t file_offset (file_index_t index) const; + std::time_t mtime (file_index_t index) const; + std::int64_t file_size (file_index_t index) const; sha1_hash hash (file_index_t index) const; - std::string file_path (file_index_t index, std::string const& save_path = "") const; std::string const& symlink (file_index_t index) const; + std::int64_t file_offset (file_index_t index) const; std::uint32_t file_path_hash (file_index_t index, std::string const& save_path) const; void all_path_hashes (std::unordered_set<std::uint32_t>& table) const; std::vector<std::string> const& paths () const; file_flags_t file_flags (file_index_t index) const; bool file_absolute_path (file_index_t index) const; file_index_t file_index_at_offset (std::int64_t offset) const; - int file_name_len (file_index_t index) const; char const* file_name_ptr (file_index_t index) const; + int file_name_len (file_index_t index) const; void apply_pointer_offset (std::ptrdiff_t off); void sanitize_symlinks (); @@ -171,13 +171,13 @@

    add_file_borrow() add_file()

    -void add_file (std::string const& path, std::int64_t file_size
    -      , file_flags_t file_flags = {}
    -      , std::time_t mtime = 0, string_view symlink_path = string_view());
     void add_file_borrow (string_view filename
           , std::string const& path, std::int64_t file_size
           , file_flags_t file_flags = {}, char const* filehash = nullptr
           , std::int64_t mtime = 0, string_view symlink_path = string_view());
    +void add_file (std::string const& path, std::int64_t file_size
    +      , file_flags_t file_flags = {}
    +      , std::time_t mtime = 0, string_view symlink_path = string_view());
     

    Adds a file to the file storage. The add_file_borrow version expects that filename is the file name (without a path) of @@ -272,10 +272,10 @@ std::int64_t total_size () const;

    returns the total number of bytes all the files in this torrent spans

    - -[report issue]
    -
    -

    set_num_pieces() num_pieces()

    + +[report issue]
    +
    +

    num_pieces() set_num_pieces()

     int num_pieces () const;
     void set_num_pieces (int n);
    @@ -324,13 +324,13 @@
     

    returns the piece size of index. This will be the same as piece_length(), except for the last piece, which may be shorter.

    - -[report issue]
    -
    -

    set_name() name()

    + +[report issue]
    +
    +

    name() set_name()

    -void set_name (std::string const& n);
     std::string const& name () const;
    +void set_name (std::string const& n);
     

    set and get the name of this torrent. For multi-file torrents, this is also the name of the root directory all the files are stored in.

    @@ -357,25 +357,25 @@ tail_padding indicates whether aligned files also are padded at the end to make them end aligned. This is required for mutable torrents, since piece hashes are compared

    + + + + - - - - -[report issue]
    - +

    returns the index of the file at the given offset in the torrent

    - -[report issue]
    -
    -

    file_name_len() file_name_ptr()

    + +[report issue]
    +
    +

    file_name_ptr() file_name_len()

    -int file_name_len (file_index_t index) const;
     char const* file_name_ptr (file_index_t index) const;
    +int file_name_len (file_index_t index) const;
     

    low-level function. returns a pointer to the internal storage for the filename. This string may not be 0-terminated! diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Utility.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Utility.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/reference-Utility.html 2021-04-30 21:54:23.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/reference-Utility.html 2021-06-23 16:44:12.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    home

    @@ -57,17 +57,17 @@
     struct bitfield
     {
    -   bitfield (bitfield&& rhs) noexcept = default;
    -   explicit bitfield (int bits);
        bitfield (bitfield const& rhs);
        bitfield (char const* b, int bits);
    -   bitfield (int bits, bool val);
    +   explicit bitfield (int bits);
    +   bitfield (bitfield&& rhs) noexcept = default;
        bitfield () noexcept = default;
    +   bitfield (int bits, bool val);
        void assign (char const* b, int const bits);
        bool operator[] (int index) const noexcept;
        bool get_bit (int index) const noexcept;
    -   void clear_bit (int index) noexcept;
        void set_bit (int index) noexcept;
    +   void clear_bit (int index) noexcept;
        bool all_set () const noexcept;
        bool none_set () const noexcept;
        int size () const noexcept;
    @@ -84,12 +84,12 @@
     [report issue]

    bitfield()

    -bitfield (bitfield&& rhs) noexcept = default;
    -explicit bitfield (int bits);
     bitfield (bitfield const& rhs);
     bitfield (char const* b, int bits);
    -bitfield (int bits, bool val);
    +explicit bitfield (int bits);
    +bitfield (bitfield&& rhs) noexcept = default;
     bitfield () noexcept = default;
    +bitfield (int bits, bool val);
     

    constructs a new bitfield. The default constructor creates an empty bitfield. bits is the size of the bitfield (specified in bits). @@ -115,13 +115,13 @@ bool get_bit (int index) const noexcept;

    query bit at index. Returns true if bit is 1, otherwise false.

    - -[report issue]
    -
    -

    set_bit() clear_bit()

    + +[report issue]
    +
    +

    clear_bit() set_bit()

    -void clear_bit (int index) noexcept;
     void set_bit (int index) noexcept;
    +void clear_bit (int index) noexcept;
     

    set bit at index to 0 (clear_bit) or 1 (set_bit).

    [report issue]
    @@ -220,9 +220,9 @@ { hasher (); explicit hasher (span<char const> data); + hasher& operator= (hasher const&) &; hasher (hasher const&); hasher (char const* data, int len); - hasher& operator= (hasher const&) &; hasher& update (span<char const> data); hasher& update (char const* data, int len); sha1_hash final (); @@ -234,9 +234,9 @@

    operator=() hasher()

     explicit hasher (span<char const> data);
    +hasher& operator= (hasher const&) &;
     hasher (hasher const&);
     hasher (char const* data, int len);
    -hasher& operator= (hasher const&) &;
     

    this is the same as default constructing followed by a call to update(data, len).

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/settings.rst libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/settings.rst --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/settings.rst 2021-04-30 21:53:56.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/settings.rst 2021-06-23 16:43:47.000000000 +0000 @@ -245,7 +245,7 @@ +------------------+--------+----------+ | name | type | default | +==================+========+==========+ -| peer_fingerprint | string | -LT12D0- | +| peer_fingerprint | string | -LT12E0- | +------------------+--------+----------+ this is the fingerprint for the client. It will be used as the diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/single-page-ref.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/single-page-ref.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/single-page-ref.html 2021-04-30 21:54:08.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/single-page-ref.html 2021-06-23 16:43:58.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
    @@ -3159,7 +3159,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -3633,7 +3633,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -3764,19 +3764,19 @@
     class torrent_info
     {
    -   torrent_info (bdecode_node const& torrent_file, error_code& ec);
        torrent_info (char const* buffer, int size, error_code& ec);
        explicit torrent_info (sha1_hash const& info_hash);
    -   explicit torrent_info (std::string const& filename);
    -   torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
    -   torrent_info (char const* buffer, int size);
    -   torrent_info (std::string const& filename, load_torrent_limits const& cfg);
    +   torrent_info (bdecode_node const& torrent_file, error_code& ec);
    +   torrent_info (span<char const> buffer, error_code& ec, from_span_t);
        torrent_info (std::string const& filename, error_code& ec);
    +   torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
        explicit torrent_info (bdecode_node const& torrent_file);
    -   torrent_info (torrent_info const& t);
    -   explicit torrent_info (span<char const> buffer, from_span_t);
    +   torrent_info (std::string const& filename, load_torrent_limits const& cfg);
        torrent_info (bdecode_node const& torrent_file, load_torrent_limits const& cfg);
    -   torrent_info (span<char const> buffer, error_code& ec, from_span_t);
    +   explicit torrent_info (span<char const> buffer, from_span_t);
    +   torrent_info (torrent_info const& t);
    +   explicit torrent_info (std::string const& filename);
    +   torrent_info (char const* buffer, int size);
        ~torrent_info ();
        file_storage const& files () const;
        file_storage const& orig_files () const;
    @@ -3786,8 +3786,9 @@
        void add_tracker (std::string const& url, int tier = 0);
        void add_tracker (std::string const& url, int tier
           , announce_entry::tracker_source source);
    -   std::vector<sha1_hash> similar_torrents () const;
        std::vector<std::string> collections () const;
    +   std::vector<sha1_hash> similar_torrents () const;
    +   void set_web_seeds (std::vector<web_seed_entry> seeds);
        void add_url_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    @@ -3795,13 +3796,12 @@
        void add_http_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    -   void set_web_seeds (std::vector<web_seed_entry> seeds);
    +   int num_pieces () const;
        int piece_length () const;
        std::int64_t total_size () const;
    -   int num_pieces () const;
        index_range<piece_index_t> piece_range () const;
    -   piece_index_t last_piece () const;
        piece_index_t end_piece () const;
    +   piece_index_t last_piece () const;
        const sha1_hash& info_hash () const;
        int num_files () const;
        std::vector<file_slice> map_block (piece_index_t const piece
    @@ -3815,8 +3815,8 @@
        char const* hash_for_piece_ptr (piece_index_t const index) const;
        sha1_hash hash_for_piece (piece_index_t index) const;
        bool is_loaded () const;
    -   std::vector<sha1_hash> const& merkle_tree () const;
        void set_merkle_tree (std::vector<sha1_hash>& h);
    +   std::vector<sha1_hash> const& merkle_tree () const;
        const std::string& name () const;
        std::time_t creation_date () const;
        const std::string& creator () const;
    @@ -3827,27 +3827,27 @@
        bool parse_info_section (bdecode_node const& e, error_code& ec);
        bdecode_node info (char const* key) const;
        void swap (torrent_info& ti);
    -   int metadata_size () const;
        boost::shared_array<char> metadata () const;
    +   int metadata_size () const;
        bool is_merkle_torrent () const;
     };
     
    [report issue]

    torrent_info()

    -torrent_info (bdecode_node const& torrent_file, error_code& ec);
     torrent_info (char const* buffer, int size, error_code& ec);
     explicit torrent_info (sha1_hash const& info_hash);
    -explicit torrent_info (std::string const& filename);
    -torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
    -torrent_info (char const* buffer, int size);
    -torrent_info (std::string const& filename, load_torrent_limits const& cfg);
    +torrent_info (bdecode_node const& torrent_file, error_code& ec);
    +torrent_info (span<char const> buffer, error_code& ec, from_span_t);
     torrent_info (std::string const& filename, error_code& ec);
    +torrent_info (span<char const> buffer, load_torrent_limits const& cfg, from_span_t);
     explicit torrent_info (bdecode_node const& torrent_file);
    -torrent_info (torrent_info const& t);
    -explicit torrent_info (span<char const> buffer, from_span_t);
    +torrent_info (std::string const& filename, load_torrent_limits const& cfg);
     torrent_info (bdecode_node const& torrent_file, load_torrent_limits const& cfg);
    -torrent_info (span<char const> buffer, error_code& ec, from_span_t);
    +explicit torrent_info (span<char const> buffer, from_span_t);
    +torrent_info (torrent_info const& t);
    +explicit torrent_info (std::string const& filename);
    +torrent_info (char const* buffer, int size);
     

    The constructor that takes an info-hash will initialize the info-hash to the given value, but leave all other fields empty. This is used @@ -3884,10 +3884,10 @@ ~torrent_info ();

    frees all storage associated with this torrent_info object

    - -[report issue]
    -
    -

    orig_files() files()

    + +[report issue]
    +
    +

    files() orig_files()

     file_storage const& files () const;
     file_storage const& orig_files () const;
    @@ -3957,21 +3957,22 @@
     

    collections() similar_torrents()

    -std::vector<sha1_hash> similar_torrents () const;
     std::vector<std::string> collections () const;
    +std::vector<sha1_hash> similar_torrents () const;
     

    These two functions are related to BEP 38 (mutable torrents). The vectors returned from these correspond to the "similar" and "collections" keys in the .torrent file. Both info-hashes and collections from within the info-dict and from outside of it are included.

    + - -[report issue]
    -
    -

    add_url_seed() web_seeds() set_web_seeds() add_http_seed()

    +[report issue]
    +
    +

    add_http_seed() add_url_seed() set_web_seeds() web_seeds()

    +void set_web_seeds (std::vector<web_seed_entry> seeds);
     void add_url_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    @@ -3979,7 +3980,6 @@
     void add_http_seed (std::string const& url
           , std::string const& extern_auth = std::string()
           , web_seed_entry::headers_t const& extra_headers = web_seed_entry::headers_t());
    -void set_web_seeds (std::vector<web_seed_entry> seeds);
     

    web_seeds() returns all url seeds and http seeds in the torrent. Each entry is a web_seed_entry and may refer to either a url seed @@ -3996,15 +3996,15 @@ used to insert custom HTTP headers in the requests to a specific web seed.

    See http seeding for more information.

    - -[report issue]
    -
    -

    total_size() piece_length() num_pieces()

    + +[report issue]
    +
    +

    piece_length() num_pieces() total_size()

    +int num_pieces () const;
     int piece_length () const;
     std::int64_t total_size () const;
    -int num_pieces () const;
     

    total_size(), piece_length() and num_pieces() returns the total number of bytes the torrent-file represents (all the files in @@ -4014,15 +4014,15 @@ argument and gives you the exact size of that piece. It will always be the same as piece_length() except in the case of the last piece, which may be smaller.

    + - -[report issue]
    -
    -

    end_piece() piece_range() last_piece()

    +[report issue]
    +
    +

    last_piece() end_piece() piece_range()

     index_range<piece_index_t> piece_range () const;
    -piece_index_t last_piece () const;
     piece_index_t end_piece () const;
    +piece_index_t last_piece () const;
     

    last_piece() returns the index to the last piece in the torrent and end_piece() returns the index to the one-past-end piece in the @@ -4131,8 +4131,8 @@

    merkle_tree() set_merkle_tree()

    -std::vector<sha1_hash> const& merkle_tree () const;
     void set_merkle_tree (std::vector<sha1_hash>& h);
    +std::vector<sha1_hash> const& merkle_tree () const;
     

    merkle_tree() returns a reference to the merkle tree for this torrent, if any. @@ -4230,8 +4230,8 @@

    metadata_size() metadata()

    -int metadata_size () const;
     boost::shared_array<char> metadata () const;
    +int metadata_size () const;
     

    metadata() returns a the raw info section of the torrent file. The size of the metadata is returned by metadata_size(). @@ -4272,9 +4272,9 @@ unsigned num_peers:14; };

    - -[report issue]
    -

    peer() set_peer()

    + +[report issue]
    +

    set_peer() peer()

     void set_peer (tcp::endpoint const& ep);
     tcp::endpoint peer () const;
    @@ -4427,83 +4427,83 @@
        void get_peer_info (std::vector<peer_info>& v) const;
        torrent_status status (status_flags_t flags = status_flags_t::all()) const;
        void get_download_queue (std::vector<partial_piece_info>& queue) const;
    -   void clear_piece_deadlines () const;
        void set_piece_deadline (piece_index_t index, int deadline, deadline_flags_t flags = {}) const;
    +   void clear_piece_deadlines () const;
        void reset_piece_deadline (piece_index_t index) const;
        void file_progress (std::vector<std::int64_t>& progress, int flags = 0) const;
        std::vector<open_file_state> file_status () const;
        void clear_error () const;
    +   std::vector<announce_entry> trackers () const;
        void add_tracker (announce_entry const&) const;
        void replace_trackers (std::vector<announce_entry> const&) const;
    -   std::vector<announce_entry> trackers () const;
    -   void remove_url_seed (std::string const& url) const;
        void add_url_seed (std::string const& url) const;
    +   void remove_url_seed (std::string const& url) const;
        std::set<std::string> url_seeds () const;
    +   void add_http_seed (std::string const& url) const;
        std::set<std::string> http_seeds () const;
        void remove_http_seed (std::string const& url) const;
    -   void add_http_seed (std::string const& url) const;
        void add_extension (
           std::function<std::shared_ptr<torrent_plugin>(torrent_handle const&, void*)> const& ext
           , void* userdata = nullptr);
        bool set_metadata (span<char const> metadata) const;
        bool is_valid () const;
    -   void pause (pause_flags_t flags = {}) const;
        void resume () const;
    +   void pause (pause_flags_t flags = {}) const;
    +   torrent_flags_t flags () const;
        void set_flags (torrent_flags_t flags) const;
        void set_flags (torrent_flags_t flags, torrent_flags_t mask) const;
        void unset_flags (torrent_flags_t flags) const;
    -   torrent_flags_t flags () const;
        void flush_cache () const;
        void force_recheck () const;
        void save_resume_data (resume_data_flags_t flags = {}) const;
        bool need_save_resume_data () const;
        void queue_position_top () const;
        void queue_position_down () const;
    +   void queue_position_bottom () const;
        queue_position_t queue_position () const;
        void queue_position_up () const;
    -   void queue_position_bottom () const;
        void queue_position_set (queue_position_t p) const;
    +   void set_ssl_certificate_buffer (std::string const& certificate
    +      , std::string const& private_key
    +      , std::string const& dh_params);
        void set_ssl_certificate (std::string const& certificate
           , std::string const& private_key
           , std::string const& dh_params
           , std::string const& passphrase = "");
    -   void set_ssl_certificate_buffer (std::string const& certificate
    -      , std::string const& private_key
    -      , std::string const& dh_params);
        storage_interface* get_storage_impl () const;
        std::shared_ptr<const torrent_info> torrent_file () const;
        void piece_availability (std::vector<int>& avail) const;
    -   download_priority_t piece_priority (piece_index_t index) const;
    -   void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
        void piece_priority (piece_index_t index, download_priority_t priority) const;
        std::vector<download_priority_t> get_piece_priorities () const;
        void prioritize_pieces (std::vector<std::pair<piece_index_t, download_priority_t>> const& pieces) const;
    -   void file_priority (file_index_t index, download_priority_t priority) const;
    -   void prioritize_files (std::vector<download_priority_t> const& files) const;
    +   void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
    +   download_priority_t piece_priority (piece_index_t index) const;
        std::vector<download_priority_t> get_file_priorities () const;
        download_priority_t file_priority (file_index_t index) const;
    +   void prioritize_files (std::vector<download_priority_t> const& files) const;
    +   void file_priority (file_index_t index, download_priority_t priority) const;
        void force_dht_announce () const;
        void force_reannounce (int seconds = 0, int tracker_index = -1, reannounce_flags_t = {}) const;
        void scrape_tracker (int idx = -1) const;
    -   int upload_limit () const;
    -   int download_limit () const;
        void set_download_limit (int limit) const;
    +   int download_limit () const;
        void set_upload_limit (int limit) const;
    +   int upload_limit () const;
        void connect_peer (tcp::endpoint const& adr, peer_source_flags_t source = {}
           , pex_flags_t flags = pex_encryption | pex_utp | pex_holepunch) const;
        void clear_peers ();
        void set_max_uploads (int max_uploads) const;
        int max_uploads () const;
    -   void set_max_connections (int max_connections) const;
        int max_connections () const;
    +   void set_max_connections (int max_connections) const;
        void move_storage (std::string const& save_path
           , move_flags_t flags = move_flags_t::always_replace_files
           ) const;
        void rename_file (file_index_t index, std::string const& new_name) const;
        sha1_hash info_hash () const;
        bool operator< (const torrent_handle& h) const;
    -   bool operator!= (const torrent_handle& h) const;
        bool operator== (const torrent_handle& h) const;
    +   bool operator!= (const torrent_handle& h) const;
        std::uint32_t id () const;
        std::shared_ptr<torrent> native_handle () const;
        bool in_session () const;
    @@ -4617,14 +4617,14 @@
     it will fill with information about pieces that are partially
     downloaded or not downloaded at all but partially requested. See
     partial_piece_info for the fields in the returned vector.

    - -[report issue]
    -
    -

    reset_piece_deadline() clear_piece_deadlines() set_piece_deadline()

    + +[report issue]
    +
    +

    clear_piece_deadlines() set_piece_deadline() reset_piece_deadline()

    -void clear_piece_deadlines () const;
     void set_piece_deadline (piece_index_t index, int deadline, deadline_flags_t flags = {}) const;
    +void clear_piece_deadlines () const;
     void reset_piece_deadline (piece_index_t index) const;
     

    This function sets or resets the deadline associated with a specific @@ -4684,15 +4684,15 @@

    If the torrent is in an error state (i.e. torrent_status::error is non-empty), this will clear the error and start the torrent again.

    - -[report issue]
    -
    -

    trackers() replace_trackers() add_tracker()

    + +[report issue]
    +
    +

    replace_trackers() add_tracker() trackers()

    +std::vector<announce_entry> trackers () const;
     void add_tracker (announce_entry const&) const;
     void replace_trackers (std::vector<announce_entry> const&) const;
    -std::vector<announce_entry> trackers () const;
     

    trackers() will return the list of trackers for this torrent. The announce entry contains both a string url which specify the @@ -4711,13 +4711,13 @@ a torrent is started with resume data, the trackers from the resume data will replace the original ones.

    - -[report issue]
    -
    -

    add_url_seed() url_seeds() remove_url_seed()

    + +[report issue]
    +
    +

    add_url_seed() remove_url_seed() url_seeds()

    -void remove_url_seed (std::string const& url) const;
     void add_url_seed (std::string const& url) const;
    +void remove_url_seed (std::string const& url) const;
     std::set<std::string> url_seeds () const;
     

    add_url_seed() adds another url to the torrent's list of url @@ -4729,15 +4729,15 @@ torrent. Note that URLs that fails may be removed automatically from the list.

    See http seeding for more information.

    - + -[report issue]
    -
    -

    http_seeds() remove_http_seed() add_http_seed()

    +[report issue]
    +
    +

    add_http_seed() remove_http_seed() http_seeds()

    +void add_http_seed (std::string const& url) const;
     std::set<std::string> http_seeds () const;
     void remove_http_seed (std::string const& url) const;
    -void add_http_seed (std::string const& url) const;
     

    These functions are identical as the *_url_seed() variants, but they operate on BEP 17 web seeds instead of BEP 19.

    @@ -4792,8 +4792,8 @@

    resume() pause()

    -void pause (pause_flags_t flags = {}) const;
     void resume () const;
    +void pause (pause_flags_t flags = {}) const;
     

    pause(), and resume() will disconnect all peers and reconnect all peers respectively. When a torrent is paused, it will however @@ -4810,16 +4810,16 @@ not auto-managed first. Torrents are auto-managed by default when added to the session. For more information, see queuing.

    - -[report issue]
    -
    -

    set_flags() flags() unset_flags()

    + +[report issue]
    +
    +

    flags() unset_flags() set_flags()

    +torrent_flags_t flags () const;
     void set_flags (torrent_flags_t flags) const;
     void set_flags (torrent_flags_t flags, torrent_flags_t mask) const;
     void unset_flags (torrent_flags_t flags) const;
    -torrent_flags_t flags () const;
     

    sets and gets the torrent state flags. See torrent_flags_t. The set_flags overload that take a mask will affect all @@ -4998,19 +4998,19 @@ alert is received and handled in order for this function to be meaningful.

    - + -[report issue]
    -
    -

    queue_position_down() queue_position_top() queue_position() queue_position_bottom() queue_position_up()

    +[report issue]
    +
    +

    queue_position_top() queue_position_down() queue_position() queue_position_bottom() queue_position_up()

     void queue_position_top () const;
     void queue_position_down () const;
    +void queue_position_bottom () const;
     queue_position_t queue_position () const;
     void queue_position_up () const;
    -void queue_position_bottom () const;
     

    Every torrent that is added is assigned a queue position exactly one greater than the greatest queue position of all existing torrents. @@ -5037,18 +5037,18 @@

    updates the position in the queue for this torrent. The relative order of all other torrents remain intact but their numerical queue position shifts to make space for this torrent's new position

    - -[report issue]
    -
    -

    set_ssl_certificate_buffer() set_ssl_certificate()

    + +[report issue]
    +
    +

    set_ssl_certificate() set_ssl_certificate_buffer()

    +void set_ssl_certificate_buffer (std::string const& certificate
    +      , std::string const& private_key
    +      , std::string const& dh_params);
     void set_ssl_certificate (std::string const& certificate
           , std::string const& private_key
           , std::string const& dh_params
           , std::string const& passphrase = "");
    -void set_ssl_certificate_buffer (std::string const& certificate
    -      , std::string const& private_key
    -      , std::string const& dh_params);
     

    For SSL torrents, use this to specify a path to a .pem file to use as this client's certificate. The certificate must be signed by the @@ -5105,17 +5105,17 @@

    The piece availability is the number of peers that we are connected that has advertised having a particular piece. This is the information that libtorrent uses in order to prefer picking rare pieces.

    - + -[report issue]
    -
    -

    piece_priority() prioritize_pieces() get_piece_priorities()

    +[report issue]
    +
    +

    get_piece_priorities() prioritize_pieces() piece_priority()

    -download_priority_t piece_priority (piece_index_t index) const;
    -void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
     void piece_priority (piece_index_t index, download_priority_t priority) const;
     std::vector<download_priority_t> get_piece_priorities () const;
     void prioritize_pieces (std::vector<std::pair<piece_index_t, download_priority_t>> const& pieces) const;
    +void prioritize_pieces (std::vector<download_priority_t> const& pieces) const;
    +download_priority_t piece_priority (piece_index_t index) const;
     

    These functions are used to set and get the priority of individual pieces. By default all pieces have priority 4. That means that the @@ -5145,16 +5145,16 @@

    It's possible to cancel the effect of file priorities by setting the priorities for the affected pieces. Care has to be taken when mixing usage of file- and piece priorities.

    - + -[report issue]
    -
    -

    file_priority() get_file_priorities() prioritize_files()

    +[report issue]
    +
    +

    prioritize_files() get_file_priorities() file_priority()

    -void file_priority (file_index_t index, download_priority_t priority) const;
    -void prioritize_files (std::vector<download_priority_t> const& files) const;
     std::vector<download_priority_t> get_file_priorities () const;
     download_priority_t file_priority (file_index_t index) const;
    +void prioritize_files (std::vector<download_priority_t> const& files) const;
    +void file_priority (file_index_t index, download_priority_t priority) const;
     

    index must be in the range [0, number_of_files).

    file_priority() queries or sets the priority of file index.

    @@ -5181,10 +5181,10 @@

    when combining file- and piece priorities, the resume file will record both. When loading the resume data, the file priorities will be applied first, then the piece priorities.

    - -[report issue]
    -
    -

    force_dht_announce() force_reannounce()

    + +[report issue]
    +
    +

    force_reannounce() force_dht_announce()

     void force_dht_announce () const;
     void force_reannounce (int seconds = 0, int tracker_index = -1, reannounce_flags_t = {}) const;
    @@ -5217,17 +5217,17 @@
     num_incomplete fields in the torrent_status struct once it
     completes. When it completes, it will generate a scrape_reply_alert.
     If it fails, it will generate a scrape_failed_alert.

    - + -[report issue]
    -
    -

    upload_limit() set_download_limit() download_limit() set_upload_limit()

    +[report issue]
    +
    +

    set_upload_limit() set_download_limit() download_limit() upload_limit()

    -int upload_limit () const;
    -int download_limit () const;
     void set_download_limit (int limit) const;
    +int download_limit () const;
     void set_upload_limit (int limit) const;
    +int upload_limit () const;
     

    set_upload_limit will limit the upload bandwidth used by this particular torrent to the limit you set. It is given as the number of @@ -5267,10 +5267,10 @@

    This will disconnect all peers and clear the peer list for this torrent. New peers will have to be acquired before resuming, from trackers, DHT or local service discovery, for example.

    - -[report issue]
    -
    -

    set_max_uploads() max_uploads()

    + +[report issue]
    +
    +

    max_uploads() set_max_uploads()

     void set_max_uploads (int max_uploads) const;
     int max_uploads () const;
    @@ -5286,8 +5286,8 @@
     

    max_connections() set_max_connections()

    -void set_max_connections (int max_connections) const;
     int max_connections () const;
    +void set_max_connections (int max_connections) const;
     

    set_max_connections() sets the maximum number of connection this torrent will open. If all connections are used up, incoming @@ -5364,14 +5364,14 @@ is to a torrent that hasn't loaded yet (for instance by being added) by a URL, the returned value is undefined.

    - -[report issue]
    + +[report issue]
    -

    operator<() operator!=() operator==()

    +

    operator<() operator==() operator!=()

     bool operator< (const torrent_handle& h) const;
    -bool operator!= (const torrent_handle& h) const;
     bool operator== (const torrent_handle& h) const;
    +bool operator!= (const torrent_handle& h) const;
     

    comparison operators. The order of the torrents is unspecified but stable.

    @@ -5556,19 +5556,19 @@ }; }; - -[report issue]
    -

    remove() add()

    + +[report issue]
    +

    add() remove()

     void remove (socket_type_t const st, peer_class_t const peer_class);
     void add (socket_type_t const st, peer_class_t const peer_class);
     

    add() and remove() adds and removes a peer class to be added to new peers based on socket type.

    - -[report issue]
    -
    -

    disallow() allow()

    + +[report issue]
    +
    +

    allow() disallow()

     void disallow (socket_type_t const st, peer_class_t const peer_class);
     void allow (socket_type_t const st, peer_class_t const peer_class);
    @@ -5751,9 +5751,9 @@
     struct announce_entry
     {
        ~announce_entry ();
    -   announce_entry ();
    -   explicit announce_entry (string_view u);
        announce_entry& operator= (announce_entry const&);
    +   explicit announce_entry (string_view u);
    +   announce_entry ();
        announce_entry (announce_entry const&);
        void reset ();
        void trim ();
    @@ -5776,14 +5776,14 @@
     };
     
    - -[report issue]
    -

    announce_entry() ~announce_entry() operator=()

    + +[report issue]
    +

    announce_entry() operator=() ~announce_entry()

     ~announce_entry ();
    -announce_entry ();
    -explicit announce_entry (string_view u);
     announce_entry& operator= (announce_entry const&);
    +explicit announce_entry (string_view u);
    +announce_entry ();
     announce_entry (announce_entry const&);
     

    constructs a tracker announce entry with u as the URL.

    @@ -7100,29 +7100,29 @@ { explicit peer_connection_handle (std::weak_ptr<peer_connection> impl); connection_type type () const; - void add_extension (std::shared_ptr<peer_plugin>); peer_plugin const* find_plugin (string_view type) const; + void add_extension (std::shared_ptr<peer_plugin>); bool is_seed () const; bool upload_only () const; bool has_piece (piece_index_t i) const; peer_id const& pid () const; - bool is_choked () const; bool is_interesting () const; - bool is_peer_interested () const; + bool is_choked () const; bool has_peer_choked () const; + bool is_peer_interested () const; void maybe_unchoke_this_peer (); void choke_this_peer (); void get_peer_info (peer_info& p) const; torrent_handle associated_torrent () const; - tcp::endpoint const& remote () const; tcp::endpoint local_endpoint () const; - bool is_connecting () const; + tcp::endpoint const& remote () const; bool is_disconnecting () const; + bool is_outgoing () const; + bool is_connecting () const; void disconnect (error_code const& ec, operation_t op , disconnect_severity_t = peer_connection_interface::normal); - bool is_outgoing () const; - bool on_local_network () const; bool ignore_unchoke_slots () const; + bool on_local_network () const; bool failed () const; bool should_log (peer_log_alert::direction_t direction) const; void peer_log (peer_log_alert::direction_t direction @@ -7133,9 +7133,9 @@ void send_buffer (char const* begin, int size); time_point time_of_last_unchoke () const; std::time_t last_seen_complete () const; - bool operator!= (peer_connection_handle const& o) const; - bool operator== (peer_connection_handle const& o) const; bool operator< (peer_connection_handle const& o) const; + bool operator== (peer_connection_handle const& o) const; + bool operator!= (peer_connection_handle const& o) const; std::shared_ptr<peer_connection> native_handle () const; }; @@ -7188,11 +7188,11 @@
     struct add_torrent_params
     {
    -   add_torrent_params (add_torrent_params&&) noexcept;
    -   add_torrent_params& operator= (add_torrent_params&&) = default;
    +   explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
        add_torrent_params (add_torrent_params const&);
        add_torrent_params& operator= (add_torrent_params const&);
    -   explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
    +   add_torrent_params& operator= (add_torrent_params&&) = default;
    +   add_torrent_params (add_torrent_params&&) noexcept;
     
        int version  = LIBTORRENT_VERSION_NUM;
        std::shared_ptr<torrent_info> ti;
    @@ -7237,15 +7237,15 @@
        std::time_t last_upload  = 0;
     };
     
    - -[report issue]
    -

    operator=() add_torrent_params()

    + +[report issue]
    +

    add_torrent_params() operator=()

    -add_torrent_params (add_torrent_params&&) noexcept;
    -add_torrent_params& operator= (add_torrent_params&&) = default;
    +explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
     add_torrent_params (add_torrent_params const&);
     add_torrent_params& operator= (add_torrent_params const&);
    -explicit add_torrent_params (storage_constructor_type sc = default_storage_constructor);
    +add_torrent_params& operator= (add_torrent_params&&) = default;
    +add_torrent_params (add_torrent_params&&) noexcept;
     

    The constructor can be used to initialize the storage constructor, which determines the storage mechanism for the downloaded or seeding @@ -7506,10 +7506,10 @@

     add_torrent_params read_resume_data (bdecode_node const& rd
        , error_code& ec);
    -add_torrent_params read_resume_data (bdecode_node const& rd);
    -add_torrent_params read_resume_data (span<char const> buffer);
     add_torrent_params read_resume_data (span<char const> buffer
        , error_code& ec);
    +add_torrent_params read_resume_data (span<char const> buffer);
    +add_torrent_params read_resume_data (bdecode_node const& rd);
     

    these functions are used to parse resume data and populate the appropriate fields in an add_torrent_params object. This object can then be used to add @@ -7518,10 +7518,10 @@

    If the client wants to override any field that was loaded from the resume data, e.g. save_path, those fields must be changed after loading resume data but before adding the torrent.

    - -[report issue]
    -
    -

    write_resume_data_buf() write_resume_data()

    + +[report issue]
    +
    +

    write_resume_data() write_resume_data_buf()

    Declared in "libtorrent/write_resume_data.hpp"

     entry write_resume_data (add_torrent_params const& atp);
    @@ -7603,8 +7603,8 @@
     

    Declared in "libtorrent/magnet_uri.hpp"

     add_torrent_params parse_magnet_uri (string_view uri);
    -add_torrent_params parse_magnet_uri (string_view uri, error_code& ec);
     void parse_magnet_uri (string_view uri, add_torrent_params& p, error_code& ec);
    +add_torrent_params parse_magnet_uri (string_view uri, error_code& ec);
     

    This function parses out information from the magnet link and populates the add_torrent_params object. The overload that does not take an @@ -8071,7 +8071,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -8556,7 +8556,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -8577,25 +8577,25 @@

     class session_proxy
     {
    -   ~session_proxy ();
    -   session_proxy (session_proxy const&);
    -   session_proxy (session_proxy&&) noexcept;
        session_proxy& operator= (session_proxy&&) noexcept;
    +   session_proxy (session_proxy const&);
        session_proxy& operator= (session_proxy const&);
    +   ~session_proxy ();
        session_proxy ();
    +   session_proxy (session_proxy&&) noexcept;
     };
     
    + - -[report issue]
    -

    operator=() session_proxy() ~session_proxy()

    +[report issue]
    +

    ~session_proxy() operator=() session_proxy()

    -~session_proxy ();
    -session_proxy (session_proxy const&);
    -session_proxy (session_proxy&&) noexcept;
     session_proxy& operator= (session_proxy&&) noexcept;
    +session_proxy (session_proxy const&);
     session_proxy& operator= (session_proxy const&);
    +~session_proxy ();
     session_proxy ();
    +session_proxy (session_proxy&&) noexcept;
     

    default constructor, does not refer to any session implementation object.

    @@ -8609,13 +8609,13 @@
     struct session_params
     {
    +   explicit session_params (settings_pack&& sp);
        session_params ();
        explicit session_params (settings_pack const& sp);
    -   explicit session_params (settings_pack&& sp);
    -   session_params (settings_pack&& sp
    -      , std::vector<std::shared_ptr<plugin>> exts);
        session_params (settings_pack const& sp
           , std::vector<std::shared_ptr<plugin>> exts);
    +   session_params (settings_pack&& sp
    +      , std::vector<std::shared_ptr<plugin>> exts);
     
        settings_pack settings;
        std::vector<std::shared_ptr<plugin>> extensions;
    @@ -8627,9 +8627,9 @@
     [report issue]

    session_params()

    +explicit session_params (settings_pack&& sp);
     session_params ();
     explicit session_params (settings_pack const& sp);
    -explicit session_params (settings_pack&& sp);
     

    This constructor can be used to start with the default plugins (ut_metadata, ut_pex and smart_ban). The default values in the @@ -8639,10 +8639,10 @@

    session_params()

    -session_params (settings_pack&& sp
    -      , std::vector<std::shared_ptr<plugin>> exts);
     session_params (settings_pack const& sp
           , std::vector<std::shared_ptr<plugin>> exts);
    +session_params (settings_pack&& sp
    +      , std::vector<std::shared_ptr<plugin>> exts);
     

    This constructor helps to configure the set of initial plugins to be added to the session before it's started.

    @@ -8664,21 +8664,21 @@
     class session : public session_handle
     {
    -   explicit session (session_params&& params, session_flags_t const flags);
    -   explicit session (session_params const& params);
    -   explicit session (session_params const& params, session_flags_t const flags);
        explicit session (session_params&& params);
    +   explicit session (session_params const& params, session_flags_t const flags);
        session ();
    +   explicit session (session_params const& params);
    +   explicit session (session_params&& params, session_flags_t const flags);
        session (session_params const& params, io_service& ios);
        session (session_params&& params, io_service& ios);
    -   session (settings_pack&& pack
    -      , session_flags_t const flags = add_default_plugins);
        session (settings_pack const& pack
           , session_flags_t const flags = add_default_plugins);
    -   session (session&&) = default;
    +   session (settings_pack&& pack
    +      , session_flags_t const flags = add_default_plugins);
        session& operator= (session&&) = default;
    -   session& operator= (session const&) = delete;
    +   session (session&&) = default;
        session (session const&) = delete;
    +   session& operator= (session const&) = delete;
        session (settings_pack const& pack
           , io_service& ios
           , session_flags_t const flags = add_default_plugins);
    @@ -8692,11 +8692,11 @@
     [report issue]

    session()

    -explicit session (session_params&& params, session_flags_t const flags);
    -explicit session (session_params const& params);
    -explicit session (session_params const& params, session_flags_t const flags);
     explicit session (session_params&& params);
    +explicit session (session_params const& params, session_flags_t const flags);
     session ();
    +explicit session (session_params const& params);
    +explicit session (session_params&& params, session_flags_t const flags);
     

    Constructs the session objects which acts as the container of torrents. In order to avoid a race condition between starting the session and @@ -8731,10 +8731,10 @@

    session()

    -session (settings_pack&& pack
    -      , session_flags_t const flags = add_default_plugins);
     session (settings_pack const& pack
           , session_flags_t const flags = add_default_plugins);
    +session (settings_pack&& pack
    +      , session_flags_t const flags = add_default_plugins);
     

    Constructs the session objects which acts as the container of torrents. It provides configuration options across torrents (such as rate limits, @@ -8751,8 +8751,8 @@

    operator=() session()

    -session (session&&) = default;
     session& operator= (session&&) = default;
    +session (session&&) = default;
     

    movable

    @@ -8760,8 +8760,8 @@

    operator=() session()

    -session& operator= (session const&) = delete;
     session (session const&) = delete;
    +session& operator= (session const&) = delete;
     

    non-copyable

    [report issue]
    @@ -8840,31 +8840,31 @@ struct session_handle { bool is_valid () const; - void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all()); void save_state (entry& e, save_state_flags_t flags = save_state_flags_t::all()) const; - void refresh_torrent_status (std::vector<torrent_status>* ret - , status_flags_t flags = {}) const; + void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all()); std::vector<torrent_status> get_torrent_status ( std::function<bool(torrent_status const&)> const& pred , status_flags_t flags = {}) const; + void refresh_torrent_status (std::vector<torrent_status>* ret + , status_flags_t flags = {}) const; void post_torrent_updates (status_flags_t flags = status_flags_t::all()); void post_session_stats (); void post_dht_stats (); std::vector<torrent_handle> get_torrents () const; torrent_handle find_torrent (sha1_hash const& info_hash) const; - torrent_handle add_torrent (add_torrent_params const& params, error_code& ec); - torrent_handle add_torrent (add_torrent_params&& params); - void async_add_torrent (add_torrent_params&& params); void async_add_torrent (add_torrent_params const& params); + torrent_handle add_torrent (add_torrent_params&& params); torrent_handle add_torrent (add_torrent_params const& params); + torrent_handle add_torrent (add_torrent_params const& params, error_code& ec); + void async_add_torrent (add_torrent_params&& params); torrent_handle add_torrent (add_torrent_params&& params, error_code& ec); + bool is_paused () const; void pause (); void resume (); - bool is_paused () const; void get_cache_info (cache_status* ret, torrent_handle h = torrent_handle(), int flags = 0) const; - bool is_dht_running () const; dht::dht_settings get_dht_settings () const; void set_dht_settings (dht::dht_settings const& settings); + bool is_dht_running () const; void set_dht_storage (dht::dht_storage_constructor_type sc); void add_dht_node (std::pair<std::string, int> const& node); void dht_get_item (sha1_hash const& target); @@ -8880,15 +8880,15 @@ void dht_live_nodes (sha1_hash const& nid); void dht_sample_infohashes (udp::endpoint const& ep, sha1_hash const& target); void dht_direct_request (udp::endpoint const& ep, entry const& e, void* userdata = nullptr); + void add_extension (std::shared_ptr<plugin> ext); void add_extension (std::function<std::shared_ptr<torrent_plugin>( torrent_handle const&, void*)> ext); - void add_extension (std::shared_ptr<plugin> ext); ip_filter get_ip_filter () const; void set_ip_filter (ip_filter const& f); void set_port_filter (port_filter const& f); - unsigned short ssl_listen_port () const; - bool is_listening () const; unsigned short listen_port () const; + bool is_listening () const; + unsigned short ssl_listen_port () const; void set_peer_class_filter (ip_filter const& f); ip_filter get_peer_class_filter () const; peer_class_type_filter get_peer_class_type_filter () const; @@ -8898,12 +8898,12 @@ void set_peer_class (peer_class_t cid, peer_class_info const& pci); peer_class_info get_peer_class (peer_class_t cid) const; void remove_torrent (const torrent_handle& h, remove_flags_t options = {}); + settings_pack get_settings () const; void apply_settings (settings_pack const& s); void apply_settings (settings_pack&& s); - settings_pack get_settings () const; - void set_alert_notify (std::function<void()> const& fun); void pop_alerts (std::vector<alert*>* alerts); alert* wait_for_alert (time_duration max_wait); + void set_alert_notify (std::function<void()> const& fun); void delete_port_mapping (port_mapping_t handle); std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port); void reopen_network_sockets (reopen_network_flags_t options = reopen_map_ports); @@ -8937,8 +8937,8 @@

    load_state() save_state()

    -void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all());
     void save_state (entry& e, save_state_flags_t flags = save_state_flags_t::all()) const;
    +void load_state (bdecode_node const& e, save_state_flags_t flags = save_state_flags_t::all());
     

    loads and saves all session settings, including dht_settings, encryption settings and proxy settings. save_state writes all keys @@ -8953,16 +8953,16 @@ peer_fingerprint and user_agent. Those are left as configured by the session_settings passed to the session constructor or subsequently set via apply_settings().

    - -[report issue]
    -
    -

    refresh_torrent_status() get_torrent_status()

    + +[report issue]
    +
    +

    get_torrent_status() refresh_torrent_status()

    -void refresh_torrent_status (std::vector<torrent_status>* ret
    -      , status_flags_t flags = {}) const;
     std::vector<torrent_status> get_torrent_status (
           std::function<bool(torrent_status const&)> const& pred
           , status_flags_t flags = {}) const;
    +void refresh_torrent_status (std::vector<torrent_status>* ret
    +      , status_flags_t flags = {}) const;
     

    Note

    @@ -9030,10 +9030,10 @@ void post_dht_stats ();

    This will cause a dht_stats_alert to be posted.

    - -[report issue]
    -
    -

    get_torrents() find_torrent()

    + +[report issue]
    +
    +

    find_torrent() get_torrents()

     std::vector<torrent_handle> get_torrents () const;
     torrent_handle find_torrent (sha1_hash const& info_hash) const;
    @@ -9046,16 +9046,16 @@
     not.

    get_torrents() returns a vector of torrent_handles to all the torrents currently in the session.

    - -[report issue]
    -
    -

    async_add_torrent() add_torrent()

    + +[report issue]
    +
    +

    add_torrent() async_add_torrent()

    -torrent_handle add_torrent (add_torrent_params const& params, error_code& ec);
    -torrent_handle add_torrent (add_torrent_params&& params);
    -void async_add_torrent (add_torrent_params&& params);
     void async_add_torrent (add_torrent_params const& params);
    +torrent_handle add_torrent (add_torrent_params&& params);
     torrent_handle add_torrent (add_torrent_params const& params);
    +torrent_handle add_torrent (add_torrent_params const& params, error_code& ec);
    +void async_add_torrent (add_torrent_params&& params);
     torrent_handle add_torrent (add_torrent_params&& params, error_code& ec);
     

    You add torrents through the add_torrent() function where you give an @@ -9082,14 +9082,14 @@ just download the metadata, but no payload, set the torrent_flags::upload_mode flag.

    - -[report issue]
    -
    -

    resume() is_paused() pause()

    + +[report issue]
    +
    +

    resume() pause() is_paused()

    +bool is_paused () const;
     void pause ();
     void resume ();
    -bool is_paused () const;
     

    Pausing the session has the same effect as pausing every torrent in it, except that torrents will not be resumed by the auto-manage @@ -9107,14 +9107,14 @@ If flags is session::disk_cache_no_pieces the cache_status::pieces field will not be set. This may significantly reduce the cost of this call.

    - -[report issue]
    -
    -

    set_dht_settings() is_dht_running() get_dht_settings()

    + +[report issue]
    +
    +

    set_dht_settings() get_dht_settings() is_dht_running()

    -bool is_dht_running () const;
     dht::dht_settings get_dht_settings () const;
     void set_dht_settings (dht::dht_settings const& settings);
    +bool is_dht_running () const;
     

    set_dht_settings sets some parameters available to the dht node. See dht_settings for more information.

    @@ -9222,10 +9222,10 @@ must first retrieve it, then modify it, then write it back. The way the DHT works, it is natural to always do a lookup before storing and calling the callback in between is convenient.

    - -[report issue]
    -
    -

    dht_get_peers() dht_announce()

    + +[report issue]
    +
    +

    dht_announce() dht_get_peers()

     void dht_announce (sha1_hash const& info_hash, int port = 0, dht::announce_flags_t flags = {});
     void dht_get_peers (sha1_hash const& info_hash);
    @@ -9280,9 +9280,9 @@
     

    add_extension()

    +void add_extension (std::shared_ptr<plugin> ext);
     void add_extension (std::function<std::shared_ptr<torrent_plugin>(
           torrent_handle const&, void*)> ext);
    -void add_extension (std::shared_ptr<plugin> ext);
     

    This function adds an extension to this session. The argument is a function object that is called with a torrent_handle and which should @@ -9343,15 +9343,15 @@ will reject making outgoing peer connections to certain remote ports. The main intention is to be able to avoid triggering certain anti-virus software by connecting to SMTP, FTP ports.

    + - -[report issue]
    -
    -

    ssl_listen_port() is_listening() listen_port()

    +[report issue]
    +
    +

    listen_port() ssl_listen_port() is_listening()

    -unsigned short ssl_listen_port () const;
    -bool is_listening () const;
     unsigned short listen_port () const;
    +bool is_listening () const;
    +unsigned short ssl_listen_port () const;
     

    is_listening() will tell you whether or not the session has successfully opened a listening port. If it hasn't, this function will @@ -9359,10 +9359,10 @@ settings_pack::listen_interfaces to try another interface and port to bind to.

    listen_port() returns the port we ended up listening on.

    - -[report issue]
    -
    -

    set_peer_class_filter() get_peer_class_filter()

    + +[report issue]
    +
    +

    get_peer_class_filter() set_peer_class_filter()

     void set_peer_class_filter (ip_filter const& f);
     ip_filter get_peer_class_filter () const;
    @@ -9446,10 +9446,10 @@
     peer classes will be properly destructed when the session object
     destructs.

    For more information on peer classes, see peer classes.

    - -[report issue]
    -
    -

    get_peer_class() set_peer_class()

    + +[report issue]
    +
    +

    set_peer_class() get_peer_class()

     void set_peer_class (peer_class_t cid, peer_class_info const& pci);
     peer_class_info get_peer_class (peer_class_t cid) const;
    @@ -9505,22 +9505,22 @@
     

    get_settings() apply_settings()

    +settings_pack get_settings () const;
     void apply_settings (settings_pack const& s);
     void apply_settings (settings_pack&& s);
    -settings_pack get_settings () const;
     

    Applies the settings specified by the settings_pack s. This is an asynchronous operation that will return immediately and actually apply the settings to the main thread of libtorrent some time later.

    - -[report issue]
    -
    -

    set_alert_notify() pop_alerts() wait_for_alert()

    + +[report issue]
    +
    +

    pop_alerts() set_alert_notify() wait_for_alert()

    -void set_alert_notify (std::function<void()> const& fun);
     void pop_alerts (std::vector<alert*>* alerts);
     alert* wait_for_alert (time_duration max_wait);
    +void set_alert_notify (std::function<void()> const& fun);
     

    Alerts is the main mechanism for libtorrent to report errors and events. pop_alerts fills in the vector passed to it with pointers @@ -9574,10 +9574,10 @@

    The type of an alert is returned by the polymorphic function alert::type() but can also be queries from a concrete type via T::alert_type, as a static constant.

    - -[report issue]
    -
    -

    delete_port_mapping() add_port_mapping()

    + +[report issue]
    +
    +

    add_port_mapping() delete_port_mapping()

     void delete_port_mapping (port_mapping_t handle);
     std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port);
    @@ -9746,7 +9746,7 @@
     
     Author:Arvid Norberg, arvid@libtorrent.org
     
    -Version:1.2.13
    +Version:1.2.14
     
     
     
    @@ -10007,8 +10007,8 @@
     struct torrent_plugin
     {
        virtual std::shared_ptr<peer_plugin> new_connection (peer_connection_handle const&);
    -   virtual void on_piece_pass (piece_index_t);
        virtual void on_piece_failed (piece_index_t);
    +   virtual void on_piece_pass (piece_index_t);
        virtual void tick ();
        virtual bool on_resume ();
        virtual bool on_pause ();
    @@ -10043,8 +10043,8 @@
     

    on_piece_failed() on_piece_pass()

    -virtual void on_piece_pass (piece_index_t);
     virtual void on_piece_failed (piece_index_t);
    +virtual void on_piece_pass (piece_index_t);
     

    These hooks are called when a piece passes the hash check or fails the hash check, respectively. The index is the piece index that was downloaded. @@ -10058,10 +10058,10 @@

    This hook is called approximately once per second. It is a way of making it easy for plugins to do timed events, for sending messages or whatever.

    - -[report issue]
    -
    -

    on_pause() on_resume()

    + +[report issue]
    +
    +

    on_resume() on_pause()

     virtual bool on_resume ();
     virtual bool on_pause ();
    @@ -10137,21 +10137,21 @@
        virtual void on_connected ();
        virtual bool on_handshake (span<char const>);
        virtual bool on_extension_handshake (bdecode_node const&);
    -   virtual bool on_allowed_fast (piece_index_t);
        virtual bool on_interested ();
    -   virtual bool on_not_interested ();
    -   virtual bool on_unchoke ();
    -   virtual bool on_dont_have (piece_index_t);
    +   virtual bool on_choke ();
        virtual bool on_request (peer_request const&);
    +   virtual bool on_have_all ();
        virtual bool on_have (piece_index_t);
        virtual bool on_bitfield (bitfield const& /*bitfield*/);
    -   virtual bool on_have_all ();
    -   virtual bool on_choke ();
    +   virtual bool on_allowed_fast (piece_index_t);
        virtual bool on_have_none ();
    +   virtual bool on_not_interested ();
    +   virtual bool on_dont_have (piece_index_t);
    +   virtual bool on_unchoke ();
        virtual bool on_piece (peer_request const& /*piece*/
           , span<char const> /*buf*/);
    -   virtual bool on_suggest (piece_index_t);
        virtual bool on_reject (peer_request const&);
    +   virtual bool on_suggest (piece_index_t);
        virtual bool on_cancel (peer_request const&);
        virtual void sent_unchoke ();
        virtual void sent_payload (int /* bytes */);
    @@ -10160,8 +10160,8 @@
           span<char const> /*body*/);
        virtual bool on_unknown_message (int /*length*/, int /*msg*/,
           span<char const> /*body*/);
    -   virtual void on_piece_pass (piece_index_t);
        virtual void on_piece_failed (piece_index_t);
    +   virtual void on_piece_pass (piece_index_t);
        virtual void tick ();
        virtual bool write_request (peer_request const&);
     };
    @@ -10219,31 +10219,31 @@
     supported by this peer. It will result in this peer_plugin
     being removed from the peer_connection and destructed.
     this is not called for web seeds

    - - - - - + + + + - -[report issue]
    -
    -

    on_not_interested() on_have() on_dont_have() on_have_all() on_have_none() on_interested() on_choke() on_allowed_fast() on_request() on_unchoke() on_bitfield()

    -
    -virtual bool on_allowed_fast (piece_index_t);
    -virtual bool on_interested ();
    -virtual bool on_not_interested ();
    -virtual bool on_unchoke ();
    -virtual bool on_dont_have (piece_index_t);
    +
    +
    +[report issue]
    +
    +

    on_dont_have() on_choke() on_interested() on_bitfield() on_not_interested() on_have_none() on_allowed_fast() on_request() on_have_all() on_have() on_unchoke()

    +
    +virtual bool on_interested ();
    +virtual bool on_choke ();
     virtual bool on_request (peer_request const&);
    +virtual bool on_have_all ();
     virtual bool on_have (piece_index_t);
     virtual bool on_bitfield (bitfield const& /*bitfield*/);
    -virtual bool on_have_all ();
    -virtual bool on_choke ();
    +virtual bool on_allowed_fast (piece_index_t);
     virtual bool on_have_none ();
    +virtual bool on_not_interested ();
    +virtual bool on_dont_have (piece_index_t);
    +virtual bool on_unchoke ();
     

    returning true from any of the message handlers indicates that the plugin has handled the message. @@ -10316,8 +10316,8 @@

    on_piece_failed() on_piece_pass()

    -virtual void on_piece_pass (piece_index_t);
     virtual void on_piece_failed (piece_index_t);
    +virtual void on_piece_pass (piece_index_t);
     

    called when a piece that this peer participated in either fails or passes the hash_check

    @@ -10414,7 +10414,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -10468,26 +10468,26 @@
     struct create_torrent
     {
    -   explicit create_torrent (torrent_info const& ti);
        explicit create_torrent (file_storage& fs, int piece_size = 0
           , int pad_file_limit = -1, create_flags_t flags = optimize_alignment
           , int alignment = -1);
    +   explicit create_torrent (torrent_info const& ti);
        entry generate () const;
        file_storage const& files () const;
        void set_comment (char const* str);
        void set_creator (char const* str);
        void set_hash (piece_index_t index, sha1_hash const& h);
        void set_file_hash (file_index_t index, sha1_hash const& h);
    -   void add_http_seed (string_view url);
        void add_url_seed (string_view url);
    +   void add_http_seed (string_view url);
        void add_node (std::pair<std::string, int> node);
        void add_tracker (string_view url, int tier = 0);
        void set_root_cert (string_view pem);
    -   void set_priv (bool p);
        bool priv () const;
    +   void set_priv (bool p);
        int num_pieces () const;
    -   int piece_size (piece_index_t i) const;
        int piece_length () const;
    +   int piece_size (piece_index_t i) const;
        std::vector<sha1_hash> const& merkle_tree () const;
        void add_similar_torrent (sha1_hash ih);
        void add_collection (string_view c);
    @@ -10502,10 +10502,10 @@
     [report issue]

    create_torrent()

    -explicit create_torrent (torrent_info const& ti);
     explicit create_torrent (file_storage& fs, int piece_size = 0
           , int pad_file_limit = -1, create_flags_t flags = optimize_alignment
           , int alignment = -1);
    +explicit create_torrent (torrent_info const& ti);
     

    The piece_size is the size of each piece in bytes. It must be a multiple of 16 kiB. If a piece size of 0 is specified, a @@ -10596,13 +10596,13 @@

    This sets the sha1 hash for this file. This hash will end up under the key sha1 associated with this file (for multi-file torrents) or in the root info dictionary for single-file torrents.

    - -[report issue]
    -
    -

    add_url_seed() add_http_seed()

    + +[report issue]
    +
    +

    add_http_seed() add_url_seed()

    -void add_http_seed (string_view url);
     void add_url_seed (string_view url);
    +void add_http_seed (string_view url);
     

    This adds a url seed to the torrent. You can have any number of url seeds. For a single file torrent, this should be an HTTP url, pointing to a file with identical @@ -10649,8 +10649,8 @@

    priv() set_priv()

    -void set_priv (bool p);
     bool priv () const;
    +void set_priv (bool p);
     

    Sets and queries the private flag of the torrent. Torrents with the private flag set ask the client to not use any other @@ -10663,13 +10663,13 @@ int num_pieces () const;

    returns the number of pieces in the associated file_storage object.

    - -[report issue]
    -
    -

    piece_size() piece_length()

    + +[report issue]
    +
    +

    piece_length() piece_size()

    -int piece_size (piece_index_t i) const;
     int piece_length () const;
    +int piece_size (piece_index_t i) const;
     

    piece_length() returns the piece size of all pieces but the last one. piece_size() returns the size of the specified piece. @@ -10771,11 +10771,11 @@

    Declared in "libtorrent/create_torrent.hpp"

     inline void set_piece_hashes (create_torrent& t, std::string const& p, error_code& ec);
    -inline void set_piece_hashes (create_torrent& t, std::string const& p
    -   , std::function<void(piece_index_t)> const& f);
    +inline void set_piece_hashes (create_torrent& t, std::string const& p);
     void set_piece_hashes (create_torrent& t, std::string const& p
        , std::function<void(piece_index_t)> const& f, error_code& ec);
    -inline void set_piece_hashes (create_torrent& t, std::string const& p);
    +inline void set_piece_hashes (create_torrent& t, std::string const& p
    +   , std::function<void(piece_index_t)> const& f);
     

    This function will assume that the files added to the torrent file exists at path p, read those files and hash the content and set the hashes in the create_torrent @@ -10792,7 +10792,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -10811,8 +10811,8 @@ struct storage_error { explicit operator bool () const; - void file (file_index_t f); file_index_t file () const; + void file (file_index_t f); error_code ec; operation_t operation; @@ -10829,8 +10829,8 @@

    file()

    -void file (file_index_t f);
     file_index_t file () const;
    +void file (file_index_t f);
     

    set and query the index (in the torrent) of the file this error occurred on. This may also have special values defined in @@ -12104,7 +12104,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -12154,13 +12154,13 @@ { bool is_valid () const; void reserve (int num_files); - void add_file (std::string const& path, std::int64_t file_size - , file_flags_t file_flags = {} - , std::time_t mtime = 0, string_view symlink_path = string_view()); void add_file_borrow (string_view filename , std::string const& path, std::int64_t file_size , file_flags_t file_flags = {}, char const* filehash = nullptr , std::int64_t mtime = 0, string_view symlink_path = string_view()); + void add_file (std::string const& path, std::int64_t file_size + , file_flags_t file_flags = {} + , std::time_t mtime = 0, string_view symlink_path = string_view()); void rename_file (file_index_t index, std::string const& new_filename); std::vector<file_slice> map_block (piece_index_t piece, std::int64_t offset , int size) const; @@ -12177,27 +12177,27 @@ void set_piece_length (int l); int piece_length () const; int piece_size (piece_index_t index) const; - void set_name (std::string const& n); std::string const& name () const; + void set_name (std::string const& n); void swap (file_storage& ti) noexcept; void optimize (int pad_file_limit = -1, int alignment = -1 , bool tail_padding = false); - std::int64_t file_size (file_index_t index) const; + std::string file_path (file_index_t index, std::string const& save_path = "") const; bool pad_file_at (file_index_t index) const; - std::time_t mtime (file_index_t index) const; string_view file_name (file_index_t index) const; - std::int64_t file_offset (file_index_t index) const; + std::time_t mtime (file_index_t index) const; + std::int64_t file_size (file_index_t index) const; sha1_hash hash (file_index_t index) const; - std::string file_path (file_index_t index, std::string const& save_path = "") const; std::string const& symlink (file_index_t index) const; + std::int64_t file_offset (file_index_t index) const; std::uint32_t file_path_hash (file_index_t index, std::string const& save_path) const; void all_path_hashes (std::unordered_set<std::uint32_t>& table) const; std::vector<std::string> const& paths () const; file_flags_t file_flags (file_index_t index) const; bool file_absolute_path (file_index_t index) const; file_index_t file_index_at_offset (std::int64_t offset) const; - int file_name_len (file_index_t index) const; char const* file_name_ptr (file_index_t index) const; + int file_name_len (file_index_t index) const; void apply_pointer_offset (std::ptrdiff_t off); void sanitize_symlinks (); @@ -12230,13 +12230,13 @@

    add_file_borrow() add_file()

    -void add_file (std::string const& path, std::int64_t file_size
    -      , file_flags_t file_flags = {}
    -      , std::time_t mtime = 0, string_view symlink_path = string_view());
     void add_file_borrow (string_view filename
           , std::string const& path, std::int64_t file_size
           , file_flags_t file_flags = {}, char const* filehash = nullptr
           , std::int64_t mtime = 0, string_view symlink_path = string_view());
    +void add_file (std::string const& path, std::int64_t file_size
    +      , file_flags_t file_flags = {}
    +      , std::time_t mtime = 0, string_view symlink_path = string_view());
     

    Adds a file to the file storage. The add_file_borrow version expects that filename is the file name (without a path) of @@ -12331,10 +12331,10 @@ std::int64_t total_size () const;

    returns the total number of bytes all the files in this torrent spans

    - -[report issue]
    -
    -

    set_num_pieces() num_pieces()

    + +[report issue]
    +
    +

    num_pieces() set_num_pieces()

     int num_pieces () const;
     void set_num_pieces (int n);
    @@ -12383,13 +12383,13 @@
     

    returns the piece size of index. This will be the same as piece_length(), except for the last piece, which may be shorter.

    - -[report issue]
    -
    -

    set_name() name()

    + +[report issue]
    +
    +

    name() set_name()

    -void set_name (std::string const& n);
     std::string const& name () const;
    +void set_name (std::string const& n);
     

    set and get the name of this torrent. For multi-file torrents, this is also the name of the root directory all the files are stored in.

    @@ -12416,25 +12416,25 @@ tail_padding indicates whether aligned files also are padded at the end to make them end aligned. This is required for mutable torrents, since piece hashes are compared

    + + + + - - - - -[report issue]
    - +

    returns the index of the file at the given offset in the torrent

    - -[report issue]
    -
    -

    file_name_len() file_name_ptr()

    + +[report issue]
    +
    +

    file_name_ptr() file_name_len()

    -int file_name_len (file_index_t index) const;
     char const* file_name_ptr (file_index_t index) const;
    +int file_name_len (file_index_t index) const;
     

    low-level function. returns a pointer to the internal storage for the filename. This string may not be 0-terminated! @@ -12716,7 +12716,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -12806,8 +12806,8 @@

     struct file_pool : boost::noncopyable
     {
    -   explicit file_pool (int size = 40);
        ~file_pool ();
    +   explicit file_pool (int size = 40);
        file_handle open_file (storage_index_t st, std::string const& p
           , file_index_t file_index, file_storage const& fs, open_mode_t m
           , error_code& ec);
    @@ -12823,8 +12823,8 @@
     [report issue]

    ~file_pool() file_pool()

    -explicit file_pool (int size = 40);
     ~file_pool ();
    +explicit file_pool (int size = 40);
     

    size specifies the number of allowed files handles to hold open at any given time.

    @@ -12905,13 +12905,13 @@ struct storage_interface: std::enable_shared_from_this<storage_interface>, aux::disk_job_fence, aux::storage_piece_set { explicit storage_interface (file_storage const& fs); - storage_interface (storage_interface const&) = delete; storage_interface& operator= (storage_interface const&) = delete; + storage_interface (storage_interface const&) = delete; virtual void initialize (storage_error& ec) = 0; - virtual int writev (span<iovec_t const> bufs - , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; virtual int readv (span<iovec_t const> bufs , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; + virtual int writev (span<iovec_t const> bufs + , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0; virtual bool has_any_file (storage_error& ec) = 0; virtual void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio , storage_error& ec) = 0; @@ -12930,8 +12930,8 @@ void do_tick (); void set_owner (std::shared_ptr<void> const& tor); aux::session_settings const& settings () const; - void set_storage_index (storage_index_t st); storage_index_t storage_index () const; + void set_storage_index (storage_index_t st); void inc_refcount (); int dec_refcount (); @@ -12959,15 +12959,15 @@ constructor. This function is called before the torrent starts to download.

    If an error occurs, storage_error should be set to reflect it.

    - -[report issue]
    -
    -

    writev() readv()

    + +[report issue]
    +
    +

    readv() writev()

    -virtual int writev (span<iovec_t const> bufs
    -      , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
     virtual int readv (span<iovec_t const> bufs
           , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
    +virtual int writev (span<iovec_t const> bufs
    +      , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) = 0;
     

    These functions should read and write the data in or to the given piece at the given offset. It should read or write @@ -13124,20 +13124,20 @@ class default_storage : public storage_interface { explicit default_storage (storage_params const& params, file_pool&); - bool tick () override; - void initialize (storage_error& ec) override; - void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio + void release_files (storage_error& ec) override; + void rename_file (file_index_t index, std::string const& new_filename , storage_error& ec) override; - bool verify_resume_data (add_torrent_params const& rd - , aux::vector<std::string, file_index_t> const& links - , storage_error& error) override; - bool has_any_file (storage_error& ec) override; status_t move_storage (std::string const& save_path , move_flags_t flags, storage_error& ec) override; - void rename_file (file_index_t index, std::string const& new_filename + void set_file_priority (aux::vector<download_priority_t, file_index_t>& prio , storage_error& ec) override; + bool has_any_file (storage_error& ec) override; + void initialize (storage_error& ec) override; + bool tick () override; void delete_files (remove_flags_t options, storage_error& ec) override; - void release_files (storage_error& ec) override; + bool verify_resume_data (add_torrent_params const& rd + , aux::vector<std::string, file_index_t> const& links + , storage_error& error) override; int writev (span<iovec_t const> bufs , piece_index_t piece, int offset, open_mode_t flags, storage_error& ec) override; int readv (span<iovec_t const> bufs @@ -13175,7 +13175,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -13193,17 +13193,17 @@

     struct bitfield
     {
    -   bitfield (bitfield&& rhs) noexcept = default;
    -   explicit bitfield (int bits);
        bitfield (bitfield const& rhs);
        bitfield (char const* b, int bits);
    -   bitfield (int bits, bool val);
    +   explicit bitfield (int bits);
    +   bitfield (bitfield&& rhs) noexcept = default;
        bitfield () noexcept = default;
    +   bitfield (int bits, bool val);
        void assign (char const* b, int const bits);
        bool operator[] (int index) const noexcept;
        bool get_bit (int index) const noexcept;
    -   void clear_bit (int index) noexcept;
        void set_bit (int index) noexcept;
    +   void clear_bit (int index) noexcept;
        bool all_set () const noexcept;
        bool none_set () const noexcept;
        int size () const noexcept;
    @@ -13220,12 +13220,12 @@
     [report issue]

    bitfield()

    -bitfield (bitfield&& rhs) noexcept = default;
    -explicit bitfield (int bits);
     bitfield (bitfield const& rhs);
     bitfield (char const* b, int bits);
    -bitfield (int bits, bool val);
    +explicit bitfield (int bits);
    +bitfield (bitfield&& rhs) noexcept = default;
     bitfield () noexcept = default;
    +bitfield (int bits, bool val);
     

    constructs a new bitfield. The default constructor creates an empty bitfield. bits is the size of the bitfield (specified in bits). @@ -13251,13 +13251,13 @@ bool get_bit (int index) const noexcept;

    query bit at index. Returns true if bit is 1, otherwise false.

    - -[report issue]
    -
    -

    set_bit() clear_bit()

    + +[report issue]
    +
    +

    clear_bit() set_bit()

    -void clear_bit (int index) noexcept;
     void set_bit (int index) noexcept;
    +void clear_bit (int index) noexcept;
     

    set bit at index to 0 (clear_bit) or 1 (set_bit).

    [report issue]
    @@ -13356,9 +13356,9 @@ { hasher (); explicit hasher (span<char const> data); + hasher& operator= (hasher const&) &; hasher (hasher const&); hasher (char const* data, int len); - hasher& operator= (hasher const&) &; hasher& update (span<char const> data); hasher& update (char const* data, int len); sha1_hash final (); @@ -13370,9 +13370,9 @@

    operator=() hasher()

     explicit hasher (span<char const> data);
    +hasher& operator= (hasher const&) &;
     hasher (hasher const&);
     hasher (char const* data, int len);
    -hasher& operator= (hasher const&) &;
     

    this is the same as default constructing followed by a call to update(data, len).

    @@ -13423,7 +13423,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -13455,26 +13455,26 @@ class entry { data_type type () const; - entry (dictionary_type); // NOLINT; entry (list_type); // NOLINT; entry& operator= (preformatted_type) &; entry& operator= (list_type) &; + entry (dictionary_type); // NOLINT; entry& operator= (integer_type) &; - string_type& string (); - const integer_type& integer () const; - list_type& list (); + const preformatted_type& preformatted () const; dictionary_type& dict (); - integer_type& integer (); const dictionary_type& dict () const; - const list_type& list () const; - const string_type& string () const; + integer_type& integer (); + string_type& string (); preformatted_type& preformatted (); - const preformatted_type& preformatted () const; + list_type& list (); + const integer_type& integer () const; + const string_type& string () const; + const list_type& list () const; void swap (entry& e); const entry& operator[] (string_view key) const; entry& operator[] (string_view key); - entry const* find_key (string_view key) const; entry* find_key (string_view key); + entry const* find_key (string_view key) const; std::string to_string (bool single_line = false) const; enum data_type @@ -13496,38 +13496,38 @@ data_type type () const;

    returns the concrete type of the entry

    - -[report issue]
    -
    -

    operator=() entry()

    + +[report issue]
    +
    +

    entry() operator=()

    -entry (dictionary_type); // NOLINT;
     entry (list_type); // NOLINT;
     entry& operator= (preformatted_type) &;
     entry& operator= (list_type) &;
    +entry (dictionary_type); // NOLINT;
     entry& operator= (integer_type) &;
     

    constructors directly from a specific type. The content of the argument is copied into the newly constructed entry

    + + - - -[report issue]
    -
    -

    string() list() preformatted() integer() dict()

    +[report issue]
    +
    +

    dict() preformatted() string() list() integer()

    -string_type& string ();
    -const integer_type& integer () const;
    -list_type& list ();
    +const preformatted_type& preformatted () const;
     dictionary_type& dict ();
    -integer_type& integer ();
     const dictionary_type& dict () const;
    -const list_type& list () const;
    -const string_type& string () const;
    +integer_type& integer ();
    +string_type& string ();
     preformatted_type& preformatted ();
    -const preformatted_type& preformatted () const;
    +list_type& list ();
    +const integer_type& integer () const;
    +const string_type& string () const;
    +const list_type& list () const;
     

    The integer(), string(), list() and dict() functions are accessors that return the respective type. If the entry object @@ -13595,8 +13595,8 @@

    find_key()

    -entry const* find_key (string_view key) const;
     entry* find_key (string_view key);
    +entry const* find_key (string_view key) const;
     

    These functions requires the entry to be a dictionary, if it isn't they will throw system_error.

    @@ -13696,7 +13696,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -15045,9 +15045,9 @@ listen_failed_alert (aux::stack_allocator& alloc, string_view iface , udp::endpoint const& ep, operation_t op, error_code const& ec , lt::socket_type_t t); - std::string message () const override; listen_failed_alert (aux::stack_allocator& alloc, string_view iface , operation_t op, error_code const& ec, lt::socket_type_t t); + std::string message () const override; char const* listen_interface () const; static constexpr alert_category_t static_category = alert_category::status | alert_category::error; @@ -15100,10 +15100,10 @@ listen_succeeded_alert (aux::stack_allocator& alloc , tcp::endpoint const& ep , lt::socket_type_t t); - std::string message () const override; listen_succeeded_alert (aux::stack_allocator& alloc , udp::endpoint const& ep , lt::socket_type_t t); + std::string message () const override; static constexpr alert_category_t static_category = alert_category::status; aux::noexcept_movable<lt::address> address; @@ -15664,9 +15664,9 @@
     struct state_update_alert final : alert
     {
    -   std::string message () const override;
        state_update_alert (aux::stack_allocator& alloc
           , std::vector<torrent_status> st);
    +   std::string message () const override;
     
        static constexpr alert_category_t static_category  = alert_category::status;
        std::vector<torrent_status> status;
    @@ -16423,19 +16423,19 @@
     struct dht_live_nodes_alert final : alert
     {
        std::string message () const override;
    -   std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
        int num_nodes () const;
    +   std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
     
        static constexpr alert_category_t static_category  = alert_category::dht;
        sha1_hash node_id;
     };
     
    - -[report issue]
    -

    num_nodes() nodes()

    + +[report issue]
    +

    nodes() num_nodes()

    -std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
     int num_nodes () const;
    +std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
     

    the number of nodes in the routing table and the actual nodes.

    [report issue]
    @@ -16472,8 +16472,8 @@ struct dht_sample_infohashes_alert final : alert { std::string message () const override; - std::vector<sha1_hash> samples () const; int num_samples () const; + std::vector<sha1_hash> samples () const; int num_nodes () const; std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const; @@ -16487,8 +16487,8 @@ [report issue]

    num_samples() samples()

    -std::vector<sha1_hash> samples () const;
     int num_samples () const;
    +std::vector<sha1_hash> samples () const;
     

    returns the number of info-hashes returned by the node, as well as the actual info-hashes. num_samples() is more efficient than @@ -16599,8 +16599,8 @@

    alert_cast()

    Declared in "libtorrent/alert.hpp"

    -template <class T> T const* alert_cast (alert const* a);
     template <class T> T* alert_cast (alert* a);
    +template <class T> T const* alert_cast (alert const* a);
     

    When you get an alert, you can use alert_cast<> to attempt to cast the pointer to a specific alert type, in order to query it for more @@ -17010,7 +17010,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -17170,7 +17170,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 @@ -17480,7 +17480,7 @@ peer_fingerprint string --LT12D0- +-LT12E0- @@ -21228,14 +21228,14 @@ struct settings_pack { void set_bool (int name, bool val); - void set_str (int name, std::string val); void set_int (int name, flags::bitfield_flag<Type, Tag> const val); + void set_str (int name, std::string val); void set_int (int name, int val); bool has_val (int name) const; void clear (); void clear (int name); - int get_int (int name) const; bool get_bool (int name) const; + int get_int (int name) const; std::string const& get_str (int name) const; enum type_bases @@ -21306,14 +21306,14 @@ }; };

    + - -[report issue]
    -

    set_int() set_str() set_bool()

    +[report issue]
    +

    set_bool() set_int() set_str()

     void set_bool (int name, bool val);
    -void set_str (int name, std::string val);
     void set_int (int name, flags::bitfield_flag<Type, Tag> const val);
    +void set_str (int name, std::string val);
     void set_int (int name, int val);
     

    set a configuration option in the settings_pack. name is one of @@ -21342,14 +21342,14 @@ void clear (int name);

    clear a specific setting from the pack

    - -[report issue]
    -
    -

    get_bool() get_int() get_str()

    + +[report issue]
    +
    +

    get_int() get_bool() get_str()

    -int get_int (int name) const;
     bool get_bool (int name) const;
    +int get_int (int name) const;
     std::string const& get_str (int name) const;
     

    queries the current configuration option from the settings_pack. @@ -21683,15 +21683,15 @@ - -[report issue]

    + +[report issue]
    -
    -

    min_memory_usage() high_performance_seed()

    +
    +

    high_performance_seed() min_memory_usage()

    Declared in "libtorrent/session.hpp"

    -settings_pack min_memory_usage ();
     settings_pack high_performance_seed ();
    +settings_pack min_memory_usage ();
     

    The default values of the session settings are set for a regular bittorrent client running on a desktop system. There are functions that @@ -21713,10 +21713,10 @@ serving many peers and that doesn't do any downloading. It has a 128 MB disk cache and has a limit of 400 files in its file pool. It support fast upload rates by allowing large send buffers.

    - -[report issue]
    -
    -

    setting_by_name() name_for_setting()

    + +[report issue]
    +
    +

    name_for_setting() setting_by_name()

    Declared in "libtorrent/settings_pack.hpp"

     int setting_by_name (string_view name);
    @@ -21738,7 +21738,7 @@
     
     Author:Arvid Norberg, arvid@libtorrent.org
     
    -Version:1.2.13
    +Version:1.2.14
     
     
     
    @@ -21758,30 +21758,30 @@
     struct bdecode_node
     {
        bdecode_node () = default;
    -   bdecode_node& operator= (bdecode_node&&) = default;
        bdecode_node& operator= (bdecode_node const&);
    -   bdecode_node (bdecode_node&&) noexcept;
    +   bdecode_node& operator= (bdecode_node&&) = default;
        bdecode_node (bdecode_node const&);
    +   bdecode_node (bdecode_node&&) noexcept;
        type_t type () const noexcept;
        explicit operator bool () const noexcept;
        bdecode_node non_owning () const;
        span<char const> data_section () const noexcept;
    -   string_view list_string_value_at (int i
    -      , string_view default_val = string_view()) const;
    +   bdecode_node list_at (int i) const;
        std::int64_t list_int_value_at (int i
           , std::int64_t default_val = 0) const;
    +   string_view list_string_value_at (int i
    +      , string_view default_val = string_view()) const;
        int list_size () const;
    -   bdecode_node list_at (int i) const;
        string_view dict_find_string_value (string_view key
           , string_view default_value = string_view()) const;
    -   bdecode_node dict_find (string_view key) const;
    +   bdecode_node dict_find_list (string_view key) const;
    +   int dict_size () const;
    +   bdecode_node dict_find_int (string_view key) const;
        std::int64_t dict_find_int_value (string_view key
           , std::int64_t default_val = 0) const;
    -   int dict_size () const;
        bdecode_node dict_find_dict (string_view key) const;
    -   bdecode_node dict_find_int (string_view key) const;
    +   bdecode_node dict_find (string_view key) const;
        bdecode_node dict_find_string (string_view key) const;
    -   bdecode_node dict_find_list (string_view key) const;
        std::pair<string_view, bdecode_node> dict_at (int i) const;
        std::int64_t int_value () const;
        char const* string_ptr () const;
    @@ -21809,15 +21809,15 @@
     bdecode_node () = default;
     

    creates a default constructed node, it will have the type none_t.

    - -[report issue]
    -
    -

    operator=() bdecode_node()

    + +[report issue]
    +
    +

    bdecode_node() operator=()

    -bdecode_node& operator= (bdecode_node&&) = default;
     bdecode_node& operator= (bdecode_node const&);
    -bdecode_node (bdecode_node&&) noexcept;
    +bdecode_node& operator= (bdecode_node&&) = default;
     bdecode_node (bdecode_node const&);
    +bdecode_node (bdecode_node&&) noexcept;
     

    For owning nodes, the copy will create a copy of the tree, but the underlying buffer remains the same.

    @@ -21853,46 +21853,46 @@ buffer where this node is defined. For a dictionary for instance, this starts with d and ends with e, and has all the content of the dictionary in between.

    - + - -[report issue]
    -
    -

    list_size() list_int_value_at() list_at() list_string_value_at()

    + +[report issue]
    +
    +

    list_string_value_at() list_int_value_at() list_size() list_at()

    -string_view list_string_value_at (int i
    -      , string_view default_val = string_view()) const;
    +bdecode_node list_at (int i) const;
     std::int64_t list_int_value_at (int i
           , std::int64_t default_val = 0) const;
    +string_view list_string_value_at (int i
    +      , string_view default_val = string_view()) const;
     int list_size () const;
    -bdecode_node list_at (int i) const;
     

    functions with the list_ prefix operate on lists. These functions are only valid if type() == list_t. list_at() returns the item in the list at index i. i may not be greater than or equal to the size of the list. size() returns the size of the list.

    - - + + - - + + -[report issue]
    -
    -

    dict_find_int_value() dict_find_string_value() dict_size() dict_at() dict_find_dict() dict_find_int() dict_find_string() dict_find() dict_find_list()

    +[report issue]
    +
    +

    dict_find_string_value() dict_find_string() dict_find_int_value() dict_at() dict_find_int() dict_size() dict_find_dict() dict_find() dict_find_list()

     string_view dict_find_string_value (string_view key
           , string_view default_value = string_view()) const;
    -bdecode_node dict_find (string_view key) const;
    +bdecode_node dict_find_list (string_view key) const;
    +int dict_size () const;
    +bdecode_node dict_find_int (string_view key) const;
     std::int64_t dict_find_int_value (string_view key
           , std::int64_t default_val = 0) const;
    -int dict_size () const;
     bdecode_node dict_find_dict (string_view key) const;
    -bdecode_node dict_find_int (string_view key) const;
    +bdecode_node dict_find (string_view key) const;
     bdecode_node dict_find_string (string_view key) const;
    -bdecode_node dict_find_list (string_view key) const;
     std::pair<string_view, bdecode_node> dict_at (int i) const;
     

    Functions with the dict_ prefix operates on dictionaries. They are @@ -21912,11 +21912,11 @@

    this function is only valid if type() == int_t. It returns the value of the integer.

    + - -[report issue]
    -
    -

    string_value() string_ptr() string_length()

    +[report issue]
    +
    +

    string_length() string_value() string_ptr()

     char const* string_ptr () const;
     string_view string_value () const;
    @@ -22024,14 +22024,14 @@
     

    bdecode()

    Declared in "libtorrent/bdecode.hpp"

    -int bdecode (char const* start, char const* end, bdecode_node& ret
    -   , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
    -   , int token_limit = 2000000);
     bdecode_node bdecode (span<char const> buffer
        , int depth_limit = 100, int token_limit = 2000000);
     bdecode_node bdecode (span<char const> buffer
        , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
        , int token_limit = 2000000);
    +int bdecode (char const* start, char const* end, bdecode_node& ret
    +   , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
    +   , int token_limit = 2000000);
     

    This function decodes/parses bdecoded data (for example a .torrent file). The data structure is returned in the ret argument. the buffer to parse @@ -22060,7 +22060,7 @@ Author:Arvid Norberg, arvid@libtorrent.org -Version:1.2.13 +Version:1.2.14 diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/streaming.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/streaming.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/streaming.html 2021-04-30 21:54:14.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/streaming.html 2021-06-23 16:44:04.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    This documents describes the algorithm libtorrent uses to satisfy time critical diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/todo.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/todo.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/todo.html 2021-04-30 21:54:30.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/todo.html 2021-06-23 16:44:19.000000000 +0000 @@ -25,7 +25,7 @@ 43 important 55 relevant 4 feasible -184 notes +185 notes - +
    relevance 4../test/test_dht.cpp:1282pass in the actual salt as a parameter
    relevance 3../src/session_impl.cpp:3960it would probably make sense to have a separate list of peers that are eligible for optimistic unchoke, similar to the torrents perhaps this could even iterate over the pool allocators of torrent_peer objects. It could probably be done in a single pass and collect the n best candidates. maybe just a queue of peers would make even more sense, just pick the next peer in the queue for unchoking. It would be O(1).
    relevance 3../src/session_impl.cpp:3964it would probably make sense to have a separate list of peers that are eligible for optimistic unchoke, similar to the torrents perhaps this could even iterate over the pool allocators of torrent_peer objects. It could probably be done in a single pass and collect the n best candidates. maybe just a queue of peers would make even more sense, just pick the next peer in the queue for unchoking. It would be O(1).
    relevance 3../src/session_impl.cpp:3983peers should know whether their torrent is paused or not, instead of having to ask it over and over again
    relevance 3../src/session_impl.cpp:3987peers should know whether their torrent is paused or not, instead of having to ask it over and over again
    relevance 3../src/session_impl.cpp:4229there should be a pre-calculated list of all peers eligible for unchoking
    relevance 3../src/session_impl.cpp:4233there should be a pre-calculated list of all peers eligible for unchoking
    relevance 3../src/session_impl.cpp:4807perhaps params could be moved into the torrent object, instead of it being copied by the torrent constructor
    relevance 3../src/session_impl.cpp:4811perhaps params could be moved into the torrent object, instead of it being copied by the torrent constructor
    relevance 3../src/session_impl.cpp:6076use public_key here instead of std::array
    relevance 3../src/session_impl.cpp:6080use public_key here instead of std::array
    relevance 3../src/peer_connection.cpp:3077instead of having to ask the torrent whether it's in graceful pause mode or not, the peers should keep that state (and the torrent should update them when it enters graceful pause). When a peer enters graceful pause mode, it should cancel all outstanding requests and clear its request queue.
    relevance 3../src/peer_connection.cpp:3076instead of having to ask the torrent whether it's in graceful pause mode or not, the peers should keep that state (and the torrent should update them when it enters graceful pause). When a peer enters graceful pause mode, it should cancel all outstanding requests and clear its request queue.
    relevance 3../src/peer_connection.cpp:3973once peers are properly put in graceful pause mode, they can cancel all outstanding requests and this test can be removed.
    relevance 3../src/peer_connection.cpp:3972once peers are properly put in graceful pause mode, they can cancel all outstanding requests and this test can be removed.
    relevance 3../src/peer_connection.cpp:4657new_piece should be an optional. piece index -1 should not be allowed
    relevance 3../src/peer_connection.cpp:4656new_piece should be an optional. piece index -1 should not be allowed
    relevance 3../include/libtorrent/tracker_manager.hpp:389make sure the udp_socket supports passing on string-hostnames too, and that this function is used
    relevance 2../src/session_impl.cpp:3686make a list for torrents that want to be announced on the DHT so we don't have to loop over all torrents, just to find the ones that want to announce
    relevance 2../src/session_impl.cpp:3690make a list for torrents that want to be announced on the DHT so we don't have to loop over all torrents, just to find the ones that want to announce
    relevance 2../src/session_impl.cpp:5476this function should be removed and users need to deal with the more generic case of having multiple listen ports
    relevance 2../src/session_impl.cpp:5480this function should be removed and users need to deal with the more generic case of having multiple listen ports
    relevance 2../src/session_impl.cpp:5516this function should be removed and users need to deal with the more generic case of having multiple ssl ports
    relevance 2../src/session_impl.cpp:5520this function should be removed and users need to deal with the more generic case of having multiple ssl ports
    relevance 2../src/session_impl.cpp:6351this should be factored into the udp socket, so we only have the code once
    relevance 2../src/session_impl.cpp:6355this should be factored into the udp socket, so we only have the code once
    relevance 2../src/peer_connection.cpp:2518this should probably be based on time instead of number of request messages. For a very high throughput connection, 300 may be a legitimate number of requests to have in flight when getting choked
    relevance 2../src/peer_connection.cpp:2517this should probably be based on time instead of number of request messages. For a very high throughput connection, 300 may be a legitimate number of requests to have in flight when getting choked
    relevance 2../src/peer_connection.cpp:3254since we throw away the queue entry once we issue the disk job, this may happen. Instead, we should keep the queue entry around, mark it as having been requested from disk and once the disk job comes back, discard it if it has been cancelled. Maybe even be able to cancel disk jobs?
    relevance 2../src/peer_connection.cpp:3253since we throw away the queue entry once we issue the disk job, this may happen. Instead, we should keep the queue entry around, mark it as having been requested from disk and once the disk job comes back, discard it if it has been cancelled. Maybe even be able to cancel disk jobs?
    relevance 2../src/peer_connection.cpp:4902use a deadline_timer for timeouts. Don't rely on second_tick()! Hook this up to connect timeout as well. This would improve performance because of less work in second_tick(), and might let use remove ticking entirely eventually
    relevance 2../src/peer_connection.cpp:4901use a deadline_timer for timeouts. Don't rely on second_tick()! Hook this up to connect timeout as well. This would improve performance because of less work in second_tick(), and might let use remove ticking entirely eventually
    relevance 2../src/peer_list.cpp:471it would be nice if there was a way to iterate over these torrent_peer objects in the order they are allocated in the pool instead. It would probably be more efficient
    relevance 2../src/peer_list.cpp:532it would be nice if there was a way to iterate over these torrent_peer objects in the order they are allocated in the pool instead. It would probably be more efficient
    relevance 1../src/session_impl.cpp:5693report the proper address of the router as the source IP of this vote of our external address, instead of the empty address
    relevance 1../src/session_impl.cpp:5697report the proper address of the router as the source IP of this vote of our external address, instead of the empty address
    relevance 0../test/test_peer_list.cpp:968test erasing peers
    relevance 0../test/test_peer_list.cpp:969test update_peer_port with allow_multiple_connections_per_ip and without
    relevance 0../test/test_peer_list.cpp:970test add i2p peers
    relevance 0../test/test_peer_list.cpp:971test allow_i2p_mixed
    relevance 0../test/test_peer_list.cpp:972test insert_peer failing with all error conditions
    relevance 0../test/test_peer_list.cpp:973test IPv6
    relevance 0../test/test_peer_list.cpp:974test connect_to_peer() failing
    relevance 0../test/test_peer_list.cpp:975test connection_closed
    relevance 0../test/test_peer_list.cpp:976connect candidates recalculation when incrementing failcount
    relevance 0../test/test_fast_extension.cpp:1128test sending invalid requests (out of bound piece index, offsets and sizes)
    relevance 0../test/test_peer_list.cpp:967test erasing peers
    relevance 0../test/test_peer_list.cpp:968test update_peer_port with allow_multiple_connections_per_ip and without
    relevance 0../test/test_peer_list.cpp:969test add i2p peers
    relevance 0../test/test_peer_list.cpp:970test allow_i2p_mixed
    relevance 0../test/test_peer_list.cpp:971test insert_peer failing with all error conditions
    relevance 0../test/test_peer_list.cpp:972test IPv6
    relevance 0../test/test_peer_list.cpp:973test connect_to_peer() failing
    relevance 0../test/test_peer_list.cpp:974test connection_closed
    relevance 0../test/test_peer_list.cpp:975connect candidates recalculation when incrementing failcount
    relevance 0../test/test_fast_extension.cpp:1128test sending invalid requests (out of bound piece index, offsets and sizes)
    relevance 0../test/test_tracker.cpp:55test scrape requests
    relevance 0../test/test_tracker.cpp:56test parse peers6
    relevance 0../test/test_tracker.cpp:57test parse tracker-id
    relevance 0../test/test_tracker.cpp:58test parse failure-reason
    relevance 0../test/test_tracker.cpp:59test all failure paths, including invalid bencoding not a dictionary no files entry in scrape response no info-hash entry in scrape response malformed peers in peer list of dictionaries uneven number of bytes in peers and peers6 string responses
    relevance 0../src/torrent_peer.cpp:174how do we deal with our external address changing?
    relevance 0../src/torrent_peer.cpp:175how do we deal with our external address changing?
    relevance 0../src/session_impl.cpp:4119use a lower limit than m_settings.connections_limit to allocate the to 10% or so of connection slots for incoming connections cap this at max - 1, since we may add one below
    relevance 0../src/session_impl.cpp:4123use a lower limit than m_settings.connections_limit to allocate the to 10% or so of connection slots for incoming connections cap this at max - 1, since we may add one below
    relevance 0../src/session_impl.cpp:4264post a message to have this happen immediately instead of waiting for the next tick
    relevance 0../src/session_impl.cpp:4268post a message to have this happen immediately instead of waiting for the next tick
    relevance 0../src/session_impl.cpp:4651it might be a nice feature here to limit the number of torrents to send in a single update. By just posting the first n torrents, they would nicely be round-robined because the torrent lists are always pushed back. Perhaps the status_update_alert could even have a fixed array of n entries rather than a vector, to further improve memory locality.
    relevance 0../src/session_impl.cpp:4655it might be a nice feature here to limit the number of torrents to send in a single update. By just posting the first n torrents, they would nicely be round-robined because the torrent lists are always pushed back. Perhaps the status_update_alert could even have a fixed array of n entries rather than a vector, to further improve memory locality.
    relevance 0../src/session_impl.cpp:5067factor out this logic into a separate function for unit testing
    relevance 0../src/session_impl.cpp:5071factor out this logic into a separate function for unit testing
    relevance 0../src/session_impl.cpp:5883refactor, move the storage to dht_tracker
    relevance 0../src/session_impl.cpp:5887refactor, move the storage to dht_tracker
    relevance 0../src/session_impl.cpp:6213asserts that no outstanding async operations are still in flight
    relevance 0../src/session_impl.cpp:6217asserts that no outstanding async operations are still in flight
    relevance 0../src/torrent.cpp:10179instead of resorting the whole list, insert the peers directly into the right place
    relevance 0../src/torrent.cpp:10185instead of resorting the whole list, insert the peers directly into the right place
    relevance 0../src/peer_connection.cpp:1109this should be the global download rate
    relevance 0../src/http_seed_connection.cpp:409technically, this isn't supposed to happen, but it seems to sometimes. Some of the accounting is probably wrong in certain cases
    relevance 0../src/peer_connection.cpp:1109this should be the global download rate
    relevance 0../src/peer_connection.cpp:3482sort the allowed fast set in priority order
    relevance 0../src/peer_connection.cpp:3481sort the allowed fast set in priority order
    relevance 0../src/pe_crypto.cpp:62it would be nice to get the literal working
    relevance 0../src/pe_crypto.cpp:62it would be nice to get the literal working
    relevance 0../src/pe_crypto.cpp:73it would be nice to be able to export to a fixed width field, so we wouldn't have to shift it later
    relevance 0../src/pe_crypto.cpp:73it would be nice to be able to export to a fixed width field, so we wouldn't have to shift it later
    relevance 0../src/web_connection_base.cpp:68introduce a web-seed default class which has a low download priority
    relevance 0../src/web_connection_base.cpp:68introduce a web-seed default class which has a low download priority
    relevance 0../src/cpuid.cpp:128enable when aarch64 is really tested
    relevance 0../src/cpuid.cpp:128enable when aarch64 is really tested
    relevance 0../src/broadcast_socket.cpp:111this function is pointless
    relevance 0../src/broadcast_socket.cpp:111this function is pointless
    relevance 0../src/packet_buffer.cpp:155use compare_less_wrap for this comparison as well
    relevance 0../src/packet_buffer.cpp:155use compare_less_wrap for this comparison as well
    relevance 0../src/block_cache.cpp:1007it's somewhat expensive to iterate over this linked list. Presumably because of the random access of memory. It would be nice if pieces with no evictable blocks weren't in this list
    relevance 0../src/block_cache.cpp:1007it's somewhat expensive to iterate over this linked list. Presumably because of the random access of memory. It would be nice if pieces with no evictable blocks weren't in this list
    relevance 0../src/block_cache.cpp:1078this should probably only be done every n:th time
    relevance 0../src/block_cache.cpp:1078this should probably only be done every n:th time
    relevance 0../src/block_cache.cpp:1712create a holder for refcounts that automatically decrement
    relevance 0../src/block_cache.cpp:1712create a holder for refcounts that automatically decrement
    relevance 0../src/file_storage.cpp:1020padfiles should be removed
    relevance 0../src/file_storage.cpp:1020padfiles should be removed
    relevance 0../src/file_storage.cpp:1173in C++17 this could be string_view
    relevance 0../src/file_storage.cpp:1173in C++17 this could be string_view
    relevance 0../src/choker.cpp:272use an incremental partial_sort() here
    relevance 0../src/choker.cpp:272use an incremental partial_sort() here
    relevance 0../src/choker.cpp:335make configurable
    relevance 0../src/choker.cpp:335make configurable
    relevance 0../src/part_file.cpp:238what do we do if someone is currently reading from the disk from this piece? does it matter? Since we won't actively erase the data from disk, but it may be overwritten soon, it's probably not that big of a deal
    relevance 0../src/part_file.cpp:238what do we do if someone is currently reading from the disk from this piece? does it matter? Since we won't actively erase the data from disk, but it may be overwritten soon, it's probably not that big of a deal
    relevance 0../src/part_file.cpp:348instead of rebuilding the whole file header and flushing it, update the slot entries as we go
    relevance 0../src/part_file.cpp:348instead of rebuilding the whole file header and flushing it, update the slot entries as we go
    relevance 0../src/enum_net.cpp:254if we get here, the caller still assumes the error code is reported via errno
    relevance 0../src/enum_net.cpp:254if we get here, the caller still assumes the error code is reported via errno
    relevance 0../src/enum_net.cpp:264if we get here, the caller still assumes the error code is reported via errno
    relevance 0../src/enum_net.cpp:264if we get here, the caller still assumes the error code is reported via errno
    relevance 0../src/kademlia/node_id.cpp:64it's a little bit weird to return 159 - leading zeroes. It should probably be 160 - leading zeroes, but all other code in here is tuned to this expectation now, and it doesn't really matter (other than complexity)
    relevance 0../src/kademlia/node_id.cpp:64it's a little bit weird to return 159 - leading zeroes. It should probably be 160 - leading zeroes, but all other code in here is tuned to this expectation now, and it doesn't really matter (other than complexity)
    relevance 0../src/kademlia/put_data.cpp:88what if o is not an instance of put_data_observer? This need to be redesigned for better type safety.
    relevance 0../src/kademlia/put_data.cpp:88what if o is not an instance of put_data_observer? This need to be redesigned for better type safety.
    relevance 0../src/kademlia/item.cpp:146implement ctor for entry from bdecode_node?
    relevance 0../src/kademlia/item.cpp:146implement ctor for entry from bdecode_node?
    relevance 0../src/kademlia/routing_table.cpp:281This is temporary. For now, only report the largest routing table (of potentially multiple ones, for multi-homed systems) in next major version, break the ABI and support reporting all of them in the dht_stats_alert
    relevance 0../src/kademlia/routing_table.cpp:281This is temporary. For now, only report the largest routing table (of potentially multiple ones, for multi-homed systems) in next major version, break the ABI and support reporting all of them in the dht_stats_alert
    relevance 0../src/kademlia/routing_table.cpp:306arvidn note when it's across IPv4 and IPv6, adding (dht_global_nodes) would make sense. in the future though, where we may have one DHT node per external interface (which may be multiple of the same address family), then it becomes a bit trickier
    relevance 0../src/kademlia/routing_table.cpp:306arvidn note when it's across IPv4 and IPv6, adding (dht_global_nodes) would make sense. in the future though, where we may have one DHT node per external interface (which may be multiple of the same address family), then it becomes a bit trickier
    relevance 0../src/kademlia/routing_table.cpp:510this need to take bucket "prefix" into account. It should be unified with add_node_impl()
    relevance 0../src/kademlia/routing_table.cpp:510this need to take bucket "prefix" into account. It should be unified with add_node_impl()
    relevance 0../src/kademlia/node.cpp:1172keep the returned value to pass as a limit to write_nodes_entries when implemented
    relevance 0../src/kademlia/node.cpp:1172keep the returned value to pass as a limit to write_nodes_entries when implemented
    relevance 0../src/kademlia/node.cpp:1200limit number of entries in the result
    relevance 0../src/kademlia/node.cpp:1200limit number of entries in the result
    relevance 0../src/kademlia/dht_tracker.cpp:307pick the closest node rather than the first
    relevance 0../src/kademlia/dht_tracker.cpp:307pick the closest node rather than the first
    relevance 0../include/libtorrent/torrent.hpp:246make this a raw pointer. perhaps keep the shared_ptr around further down the object to maintain an owner
    relevance 0../include/libtorrent/torrent.hpp:246make this a raw pointer. perhaps keep the shared_ptr around further down the object to maintain an owner
    relevance 0../include/libtorrent/torrent.hpp:424make graceful pause also finish all sending blocks before disconnecting
    relevance 0../include/libtorrent/torrent.hpp:424make graceful pause also finish all sending blocks before disconnecting
    relevance 0../include/libtorrent/torrent.hpp:1304this wastes 5 bits per file
    relevance 0../include/libtorrent/torrent.hpp:1304this wastes 5 bits per file
    relevance 0../include/libtorrent/torrent_info.hpp:608there may be some opportunities to optimize the size if torrent_info. specifically to turn some std::string and std::vector into pointers
    relevance 0../include/libtorrent/torrent_info.hpp:608there may be some opportunities to optimize the size if torrent_info. specifically to turn some std::string and std::vector into pointers
    relevance 0../include/libtorrent/torrent_info.hpp:673change the type to std::shared_ptr in C++17
    relevance 0../include/libtorrent/torrent_info.hpp:673change the type to std::shared_ptr in C++17
    relevance 0../include/libtorrent/piece_picker.hpp:766should this be allocated lazily?
    relevance 0../include/libtorrent/piece_picker.hpp:766should this be allocated lazily?
    relevance 0../include/libtorrent/piece_picker.hpp:773this could be a much more efficient data structure
    relevance 0../include/libtorrent/piece_picker.hpp:773this could be a much more efficient data structure
    relevance 0../include/libtorrent/piece_picker.hpp:846it would be more intuitive to account "wanted" pieces instead of filtered
    relevance 0../include/libtorrent/piece_picker.hpp:846it would be more intuitive to account "wanted" pieces instead of filtered
    relevance 0../include/libtorrent/upnp.hpp:146support using the windows API for UPnP operations as well
    relevance 0../include/libtorrent/upnp.hpp:146support using the windows API for UPnP operations as well
    relevance 0../include/libtorrent/performance_counters.hpp:47move this out of counters
    relevance 0../include/libtorrent/performance_counters.hpp:47move this out of counters
    relevance 0../include/libtorrent/performance_counters.hpp:151should keepalives be in here too? how about dont-have, share-mode, upload-only
    relevance 0../include/libtorrent/performance_counters.hpp:151should keepalives be in here too? how about dont-have, share-mode, upload-only
    relevance 0../include/libtorrent/performance_counters.hpp:495some space could be saved here by making gauges 32 bits
    relevance 0../include/libtorrent/performance_counters.hpp:496restore these to regular integers. Instead have one copy of the counters per thread and collect them at convenient synchronization points
    relevance 0../include/libtorrent/performance_counters.hpp:495some space could be saved here by making gauges 32 bits
    relevance 0../include/libtorrent/performance_counters.hpp:496restore these to regular integers. Instead have one copy of the counters per thread and collect them at convenient synchronization points
    relevance 0../include/libtorrent/announce_entry.hpp:86include the number of peers received from this tracker, at last announce
    relevance 0../include/libtorrent/announce_entry.hpp:86include the number of peers received from this tracker, at last announce
    relevance 0../include/libtorrent/peer_connection.hpp:186make this a raw pointer (to save size in the first cache line) and make the constructor take a raw pointer. torrent objects should always outlive their peers
    relevance 0../include/libtorrent/peer_connection.hpp:186make this a raw pointer (to save size in the first cache line) and make the constructor take a raw pointer. torrent objects should always outlive their peers
    relevance 0../include/libtorrent/peer_connection.hpp:985factor this out into its own class with a virtual interface torrent and session should implement this interface
    relevance 0../include/libtorrent/peer_connection.hpp:985factor this out into its own class with a virtual interface torrent and session should implement this interface
    relevance 0../include/libtorrent/sha1_hash.hpp:58find a better place for these functions
    relevance 0../include/libtorrent/sha1_hash.hpp:58find a better place for these functions
    relevance 0../include/libtorrent/string_view.hpp:40replace this by the standard string_view in C++17
    relevance 0../include/libtorrent/string_view.hpp:40replace this by the standard string_view in C++17
    relevance 0../include/libtorrent/proxy_base.hpp:188it would be nice to remember the bind port and bind once we know where the proxy is m_sock.bind(endpoint, ec);
    relevance 0../include/libtorrent/proxy_base.hpp:188it would be nice to remember the bind port and bind once we know where the proxy is m_sock.bind(endpoint, ec);
    relevance 0../include/libtorrent/block_cache.hpp:225make this 32 bits and to count seconds since the block cache was created
    relevance 0../include/libtorrent/block_cache.hpp:225make this 32 bits and to count seconds since the block cache was created
    relevance 0../include/libtorrent/peer_connection_interface.hpp:50make this interface smaller!
    relevance 0../include/libtorrent/peer_connection_interface.hpp:50make this interface smaller!
    relevance 0../include/libtorrent/config.hpp:47don't include that here. Make each header that use the export macros include it instead. and move it to aux_
    relevance 0../include/libtorrent/config.hpp:47don't include that here. Make each header that use the export macros include it instead. and move it to aux_
    relevance 0../include/libtorrent/identify_client.hpp:47hide this declaration when deprecated functions are disabled, and remove its internal use
    relevance 0../include/libtorrent/identify_client.hpp:47hide this declaration when deprecated functions are disabled, and remove its internal use
    relevance 0../include/libtorrent/utp_stream.hpp:426implement blocking write. Low priority since it's not used (yet)
    relevance 0../include/libtorrent/utp_stream.hpp:426implement blocking write. Low priority since it's not used (yet)
    relevance 0../include/libtorrent/broadcast_socket.hpp:60refactor these out too
    relevance 0../include/libtorrent/broadcast_socket.hpp:60refactor these out too
    relevance 0../include/libtorrent/kademlia/msg.hpp:85move this to its own .hpp/.cpp pair?
    relevance 0../include/libtorrent/kademlia/msg.hpp:85move this to its own .hpp/.cpp pair?
    relevance 0../include/libtorrent/kademlia/item.hpp:58since this is a public function, it should probably be moved out of this header and into one with other public functions.
    relevance 0../include/libtorrent/kademlia/item.hpp:58since this is a public function, it should probably be moved out of this header and into one with other public functions.
    relevance 0../include/libtorrent/aux_/session_impl.hpp:241make these direct members and generate shared_ptrs to them which alias the listen_socket_t shared_ptr
    relevance 0../include/libtorrent/aux_/session_impl.hpp:241make these direct members and generate shared_ptrs to them which alias the listen_socket_t shared_ptr
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1048replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1048replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1053replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1053replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1060replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_impl.hpp:1060replace this by a proper asio timer
    relevance 0../include/libtorrent/aux_/session_interface.hpp:221it would be nice to not have this be part of session_interface
    relevance 0../include/libtorrent/aux_/session_interface.hpp:221it would be nice to not have this be part of session_interface
    relevance 0../include/libtorrent/aux_/pool.hpp:48ensure the alignment is good here
    relevance 0../include/libtorrent/aux_/pool.hpp:48ensure the alignment is good here
    relevance 0../include/libtorrent/aux_/deprecated.hpp:41figure out which version of clang this is supported in
    relevance 0../include/libtorrent/aux_/deprecated.hpp:41figure out which version of clang this is supported in
    Author: Arvid Norberg, arvid@libtorrent.org
    Version:1.2.13
    1.2.14

    The following troubleshooting chart may help in finding out why torrents fail diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/tuning-ref.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/tuning-ref.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/tuning-ref.html 2021-04-30 21:54:16.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/tuning-ref.html 2021-06-23 16:44:06.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14

    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/tutorial.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/tutorial.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/tutorial.html 2021-04-30 21:54:15.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/tutorial.html 2021-06-23 16:44:04.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/utp.html libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/utp.html --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/docs/utp.html 2021-04-30 21:54:14.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/docs/utp.html 2021-06-23 16:44:03.000000000 +0000 @@ -31,7 +31,7 @@ Author: Arvid Norberg, arvid@libtorrent.org Version: -1.2.13 +1.2.14
    diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/aux_/session_impl.hpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/aux_/session_impl.hpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/aux_/session_impl.hpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/aux_/session_impl.hpp 2021-06-23 16:40:56.000000000 +0000 @@ -1354,7 +1354,7 @@ // message in-flight at any given time. bool m_pending_auto_manage = false; - // this is also set to true when triggering an auto-manage + // this is set to true when triggering an auto-manage // of the torrents. However, if the normal auto-manage // timer comes along and executes the auto-management, // this is set to false, which means the triggered event diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/peer_list.hpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/peer_list.hpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/peer_list.hpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/peer_list.hpp 2021-06-23 16:40:56.000000000 +0000 @@ -62,7 +62,6 @@ // the peer_list type not depend on the torrent type directly. struct torrent_state { - bool is_paused = false; bool is_finished = false; bool allow_multiple_connections_per_ip = false; @@ -204,10 +203,6 @@ bool insert_peer(torrent_peer* p, iterator iter , pex_flags_t flags, torrent_state* state); - bool compare_peer_erase(torrent_peer const& lhs, torrent_peer const& rhs) const; - bool compare_peer(torrent_peer const* lhs, torrent_peer const* rhs - , external_ip const& external, int source_port) const; - void find_connect_candidates(std::vector& peers , int session_time, torrent_state* state); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/torrent.hpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/torrent.hpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/torrent.hpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/torrent.hpp 2021-06-23 16:40:56.000000000 +0000 @@ -535,7 +535,7 @@ time_point32 started() const { return m_started; } void step_session_time(int seconds); - void do_pause(pause_flags_t flags = torrent_handle::clear_disk_cache); + void do_pause(pause_flags_t flags = torrent_handle::clear_disk_cache, bool was_paused = false); void do_resume(); seconds32 finished_time() const; @@ -1433,17 +1433,12 @@ // bias towards keeping seeding torrents that // recently was started, to avoid oscillation // this is specified at a second granularity - // in session-time. see session_impl for details. - // the reference point is stepped forward every 4 - // hours to keep the timestamps fit in 16 bits time_point32 m_started = aux::time_now32(); - // if we're a seed, this is the session time - // timestamp of when we became one + // if we're a seed, this is the timestamp of when we became one time_point32 m_became_seed = aux::time_now32(); - // if we're finished, this is the session time - // timestamp of when we finished + // if we're finished, this is the timestamp of when we finished time_point32 m_became_finished = aux::time_now32(); // when checking, this is the first piece we have not @@ -1507,8 +1502,8 @@ // 8 bits after each one // ============================== - // the session time timestamp of when we entered upload mode - // if we're currently in upload-mode + // if we're currently in upload-mode this is the time timestamp of when + // we entered it time_point32 m_upload_mode_time = aux::time_now32(); // true when this torrent should announce to diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/torrent_peer.hpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/torrent_peer.hpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/torrent_peer.hpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/torrent_peer.hpp 2021-06-23 16:40:56.000000000 +0000 @@ -126,17 +126,23 @@ // incoming peers (that don't advertise their listen port) // will not be considered connectable. Peers that // we have a listen port for will be assumed to be. - bool connectable:1; + std::uint32_t connectable:1; // true if this torrent_peer currently is unchoked // because of an optimistic unchoke. // when the optimistic unchoke is moved to // another torrent_peer, this torrent_peer will be choked // if this is true - bool optimistically_unchoked:1; + std::uint32_t optimistically_unchoked:1; - // this is true if the torrent_peer is a seed - bool seed:1; + // this is true if the torrent_peer is a seed, and we know for sure + // because we have connected to it and it told us it was a seed + std::uint32_t seed:1; + + // we've been told that this peer is upload-only, but we don't know for + // sure because we haven't connected to it yet. If we are finished, we + // will de-prioritize peers that may be seeds + std::uint32_t maybe_upload_only:1; // the number of times we have allowed a fast // reconnect for this torrent_peer. diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/version.hpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/version.hpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/include/libtorrent/version.hpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/include/libtorrent/version.hpp 2021-06-23 16:40:56.000000000 +0000 @@ -37,14 +37,14 @@ #define LIBTORRENT_VERSION_MAJOR 1 #define LIBTORRENT_VERSION_MINOR 2 -#define LIBTORRENT_VERSION_TINY 13 +#define LIBTORRENT_VERSION_TINY 14 // the format of this version is: MMmmtt // M = Major version, m = minor version, t = tiny version #define LIBTORRENT_VERSION_NUM ((LIBTORRENT_VERSION_MAJOR * 10000) + (LIBTORRENT_VERSION_MINOR * 100) + LIBTORRENT_VERSION_TINY) -#define LIBTORRENT_VERSION "1.2.13.0" -#define LIBTORRENT_REVISION "1454a4c2a" +#define LIBTORRENT_VERSION "1.2.14.0" +#define LIBTORRENT_REVISION "2b4776a90" namespace libtorrent { diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/Jamfile libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/Jamfile --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/Jamfile 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/Jamfile 2021-06-23 16:40:56.000000000 +0000 @@ -818,26 +818,11 @@ # install rules -rule generate-pkg-config ( properties * ) +# return libdir and includedir +rule install-paths ( properties * ) { - import property-set ; - import project ; import version ; - local l = [ project.target [ project.module-name "." ] ] ; - - # this is the libtorrent library target - local t = [ $(l).find torrent : . ] ; - - # these are the properties we're using to build it with - local props = [ $(t).generate [ property-set.create $(properties) ] ] ; - local libname = [ $(props[2]).name ] ; - props = $(props[1]) ; - - local FULL_VERSION = 1.2.13 ; - local libdir ; - local includes ; - # package.paths was introduced in boost-1.70 (2018.02) # however, boost build's versioning scheme changed in boost-1.71 to version # 4.0 @@ -855,15 +840,36 @@ else if [ modules.peek : UNIX ] { prefix = /usr/local ; } } - libdir += $(prefix)/lib ; - includes = $(prefix)/include ; + return $(prefix)/lib $(prefix)/include ; } else { local p = [ package.paths libtorrent : $(properties) ] ; - libdir += [ $(p).libdir ] ; - includes = [ $(p).includedir ] ; + return [ $(p).libdir ] [ $(p).includedir ] ; } +} + +rule generate-pkg-config ( properties * ) +{ + import property-set ; + import project ; + + local l = [ project.target [ project.module-name "." ] ] ; + + # this is the libtorrent library target + local t = [ $(l).find torrent : . ] ; + + # these are the properties we're using to build it with + local props = [ $(t).generate [ property-set.create $(properties) ] ] ; + local libname = [ $(props[2]).name ] ; + props = $(props[1]) ; + + local FULL_VERSION = 1.2.14 ; + + p = [ install-paths $(properties) ] ; + + local libdir = $(p[0]) ; + local includes = $(p[1]) ; local defines ; local shared_deps ; @@ -937,6 +943,27 @@ local dummy = @("libtorrent-rasterbar.pc":E=$(config)) ; } + +rule install-pkg-config ( target-name : data * : requirements * ) +{ + import stage ; + local p = [ install-paths $(requirements) ] ; + local libdir = $(p[0]) ; + + stage.install $(target-name) + : $(data) + : $(requirements) $(libdir)/pkgconfig + ; + + import project ; + local c = [ project.current ] ; + local project-module = [ $(c).project-module ] ; + module $(project-module) + { + explicit $(1) ; + } +} + headers = [ path.glob-tree include/libtorrent : *.hpp ] ; package.install install-torrent-lib @@ -951,13 +978,9 @@ : examples/cmake/FindLibtorrentRasterbar.cmake ; -package.install-data install-pkg-config - : pkgconfig - : libtorrent-rasterbar.pc - : @generate-pkg-config - ; +install-pkg-config pkg-config-target : libtorrent-rasterbar.pc : @generate-pkg-config ; -alias install : install-torrent-lib install-cmake-module install-pkg-config ; +alias install : install-torrent-lib install-cmake-module pkg-config-target ; explicit install ; diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/http_parser.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/http_parser.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/http_parser.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/http_parser.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -566,7 +566,7 @@ span http_parser::get_body() const { - TORRENT_ASSERT(m_state == read_body); + if (m_state != read_body) return {}; std::int64_t const received = m_recv_pos - m_body_start_pos; std::int64_t const body_length = m_chunked_encoding && !m_chunked_ranges.empty() @@ -612,8 +612,12 @@ { auto const chunk_start = i.first; auto const chunk_end = i.second; - TORRENT_ASSERT(i.second - i.first < std::numeric_limits::max()); - TORRENT_ASSERT(chunk_end - offset <= buffer.size()); + if (chunk_end - offset > buffer.size() + || (i.second - i.first) >= std::numeric_limits::max()) + { + // invalid chunk header. Return the body we've parsed out so far + return buffer.first(write_ptr - buffer.data()); + } span chunk = buffer.subspan( aux::numeric_cast(chunk_start - offset) , aux::numeric_cast(chunk_end - chunk_start)); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/http_seed_connection.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/http_seed_connection.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/http_seed_connection.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/http_seed_connection.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -406,6 +406,10 @@ int payload = int(bytes_transferred); if (payload > m_response_left) payload = int(m_response_left); if (payload > front_request.length) payload = front_request.length; + // TODO: technically, this isn't supposed to happen, but it seems to + // sometimes. Some of the accounting is probably wrong in certain + // cases + if (payload > outstanding_bytes()) payload = outstanding_bytes(); received_bytes(payload, 0); incoming_piece_fragment(payload); m_response_left -= payload; diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/peer_connection.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/peer_connection.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/peer_connection.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/peer_connection.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -2220,15 +2220,14 @@ TORRENT_ASSERT(t->valid_metadata()); - int num_pieces = bits.count(); + int const num_pieces = bits.count(); + t->set_seed(m_peer_info, num_pieces == m_have_piece.size()); if (num_pieces == m_have_piece.size()) { #ifndef TORRENT_DISABLE_LOGGING peer_log(peer_log_alert::info, "SEED", "this is a seed. p: %p" , static_cast(m_peer_info)); #endif - - t->set_seed(m_peer_info, true); m_upload_only = true; m_have_piece.set_all(); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/peer_list.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/peer_list.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/peer_list.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/peer_list.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -79,7 +79,65 @@ address const& m_addr; std::uint16_t m_port; }; -} + + // this returns true if lhs is a better erase candidate than rhs + bool compare_peer_erase(torrent_peer const& lhs, torrent_peer const& rhs) + { + TORRENT_ASSERT(lhs.connection == nullptr); + TORRENT_ASSERT(rhs.connection == nullptr); + + // primarily, prefer getting rid of peers we've already tried and failed + if (lhs.failcount != rhs.failcount) + return lhs.failcount > rhs.failcount; + + bool const lhs_resume_data_source = lhs.peer_source() == peer_info::resume_data; + bool const rhs_resume_data_source = rhs.peer_source() == peer_info::resume_data; + + // prefer to drop peers whose only source is resume data + if (lhs_resume_data_source != rhs_resume_data_source) + return int(lhs_resume_data_source) > int(rhs_resume_data_source); + + if (lhs.connectable != rhs.connectable) + return int(lhs.connectable) < int(rhs.connectable); + + return lhs.trust_points < rhs.trust_points; + } + + // this returns true if lhs is a better connect candidate than rhs + bool compare_peer(torrent_peer const* lhs, torrent_peer const* rhs + , external_ip const& external, int const external_port, bool const finished) + { + // prefer peers with lower failcount + if (lhs->failcount != rhs->failcount) + return lhs->failcount < rhs->failcount; + + // Local peers should always be tried first + bool const lhs_local = is_local(lhs->address()); + bool const rhs_local = is_local(rhs->address()); + if (lhs_local != rhs_local) return int(lhs_local) > int(rhs_local); + + if (lhs->last_connected != rhs->last_connected) + return lhs->last_connected < rhs->last_connected; + + if (finished && lhs->maybe_upload_only != rhs->maybe_upload_only) + { + // if we're finished, de-prioritze peers we think may be seeds + // since being upload-only doesn't necessarily mean it's a good peer + // to be connected to as a downloader, we don't prioritize the + // inverse when we're not finished + return rhs->maybe_upload_only; + } + + int const lhs_rank = source_rank(lhs->peer_source()); + int const rhs_rank = source_rank(rhs->peer_source()); + if (lhs_rank != rhs_rank) return lhs_rank > rhs_rank; + + std::uint32_t const lhs_peer_rank = lhs->rank(external, external_port); + std::uint32_t const rhs_peer_rank = rhs->rank(external, external_port); + return lhs_peer_rank > rhs_peer_rank; + } + +} // anonymous namespace namespace libtorrent { @@ -403,6 +461,9 @@ const bool was_conn_cand = is_connect_candidate(*p); p->connection = c; + // now that we're connected, no need to assume ther peer is a seed + // anymore. We'll soon know. + p->maybe_upload_only = false; if (was_conn_cand) update_connect_candidates(-1); } @@ -519,14 +580,14 @@ // pe, which is the peer m_round_robin points to. If it is, just // keep looking. if (peers.size() == candidate_count - && compare_peer(peers.back(), &pe, external, external_port)) continue; + && compare_peer(peers.back(), &pe, external, external_port, m_finished)) continue; if (peers.size() >= candidate_count) peers.resize(candidate_count - 1); // insert this candidate sorted into peers auto const i = std::lower_bound(peers.begin(), peers.end() - , &pe, std::bind(&peer_list::compare_peer, this, _1, _2, std::cref(external), external_port)); + , &pe, std::bind(&compare_peer, _1, _2, std::cref(external), external_port, bool(m_finished))); peers.insert(i, &pe); } @@ -545,8 +606,6 @@ INVARIANT_CHECK; - TORRENT_ASSERT(!state->is_paused); - iterator iter; torrent_peer* i = nullptr; @@ -828,7 +887,7 @@ TORRENT_ASSERT(is_single_thread()); if (p == nullptr) return; TORRENT_ASSERT(p->in_use); - if (p->seed == s) return; + if (bool(p->seed) == s) return; bool const was_conn_cand = is_connect_candidate(*p); p->seed = s; if (was_conn_cand && !is_connect_candidate(*p)) @@ -891,11 +950,7 @@ if (flags & pex_encryption) p->pe_support = true; #endif if (flags & pex_seed) - { - p->seed = true; - TORRENT_ASSERT(m_num_seeds < int(m_peers.size())); - ++m_num_seeds; - } + p->maybe_upload_only = true; if (flags & pex_utp) p->supports_utp = true; if (flags & pex_holepunch) @@ -930,14 +985,7 @@ // we already know if it's a seed or not // so we don't have to trust this source if ((flags & pex_seed) && !p->connection) - { - if (!p->seed) - { - TORRENT_ASSERT(m_num_seeds < int(m_peers.size())); - ++m_num_seeds; - } - p->seed = true; - } + p->maybe_upload_only = true; if (flags & pex_utp) p->supports_utp = true; if (flags & pex_holepunch) @@ -1275,53 +1323,4 @@ } #endif - // this returns true if lhs is a better erase candidate than rhs - bool peer_list::compare_peer_erase(torrent_peer const& lhs, torrent_peer const& rhs) const - { - TORRENT_ASSERT(is_single_thread()); - TORRENT_ASSERT(lhs.connection == nullptr); - TORRENT_ASSERT(rhs.connection == nullptr); - - // primarily, prefer getting rid of peers we've already tried and failed - if (lhs.failcount != rhs.failcount) - return lhs.failcount > rhs.failcount; - - bool const lhs_resume_data_source = lhs.peer_source() == peer_info::resume_data; - bool const rhs_resume_data_source = rhs.peer_source() == peer_info::resume_data; - - // prefer to drop peers whose only source is resume data - if (lhs_resume_data_source != rhs_resume_data_source) - return int(lhs_resume_data_source) > int(rhs_resume_data_source); - - if (lhs.connectable != rhs.connectable) - return int(lhs.connectable) < int(rhs.connectable); - - return lhs.trust_points < rhs.trust_points; - } - - // this returns true if lhs is a better connect candidate than rhs - bool peer_list::compare_peer(torrent_peer const* lhs, torrent_peer const* rhs - , external_ip const& external, int external_port) const - { - TORRENT_ASSERT(is_single_thread()); - // prefer peers with lower failcount - if (lhs->failcount != rhs->failcount) - return lhs->failcount < rhs->failcount; - - // Local peers should always be tried first - bool const lhs_local = is_local(lhs->address()); - bool const rhs_local = is_local(rhs->address()); - if (lhs_local != rhs_local) return int(lhs_local) > int(rhs_local); - - if (lhs->last_connected != rhs->last_connected) - return lhs->last_connected < rhs->last_connected; - - int const lhs_rank = source_rank(lhs->peer_source()); - int const rhs_rank = source_rank(rhs->peer_source()); - if (lhs_rank != rhs_rank) return lhs_rank > rhs_rank; - - std::uint32_t const lhs_peer_rank = lhs->rank(external, external_port); - std::uint32_t const rhs_peer_rank = rhs->rank(external, external_port); - return lhs_peer_rank > rhs_peer_rank; - } } diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/random.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/random.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/random.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/random.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -160,7 +160,22 @@ #ifdef BOOST_NO_CXX11_THREAD_LOCAL std::lock_guard l(rng_mutex); #endif - return std::uniform_int_distribution(0, max)(aux::random_engine()); +#ifdef TORRENT_BUILD_SIMULATOR + std::uint32_t mask = max | (max >> 16); + mask |= mask >> 8; + mask |= mask >> 4; + mask |= mask >> 2; + mask |= mask >> 1; + auto& rng = aux::random_engine(); + std::uint32_t ret; + do + { + ret = rng() & mask; + } while (ret > max); +#else + auto const ret = std::uniform_int_distribution(0, max)(aux::random_engine()); +#endif + return ret; } } diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/session_impl.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/session_impl.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/session_impl.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/session_impl.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -3578,8 +3578,12 @@ void session_impl::add_dht_node(udp::endpoint const& n) { TORRENT_ASSERT(is_single_thread()); - if (m_dht) m_dht->add_node(n); - else m_dht_nodes.push_back(n); + if (m_dht) + m_dht->add_node(n); + else if (m_dht_nodes.size() >= 200) + m_dht_nodes[random(m_dht_nodes.size() - 1)] = n; + else + m_dht_nodes.push_back(n); } bool session_impl::has_dht() const diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/settings_pack.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/settings_pack.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/settings_pack.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/settings_pack.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -124,7 +124,7 @@ SET(proxy_username, "", &session_impl::update_proxy), SET(proxy_password, "", &session_impl::update_proxy), SET(i2p_hostname, "", &session_impl::update_i2p_bridge), - SET(peer_fingerprint, "-LT12D0-", nullptr), + SET(peer_fingerprint, "-LT12E0-", nullptr), SET(dht_bootstrap_nodes, "dht.libtorrent.org:25401", &session_impl::update_dht_bootstrap_nodes) }}); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/torrent.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/torrent.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/torrent.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/torrent.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -8734,7 +8734,7 @@ set_paused(true, flags | torrent_handle::clear_disk_cache); } - void torrent::do_pause(pause_flags_t const flags) + void torrent::do_pause(pause_flags_t const flags, bool const was_paused) { TORRENT_ASSERT(is_single_thread()); if (!is_paused()) return; @@ -8763,16 +8763,22 @@ update_state_list(); update_want_tick(); - const time_point now = aux::time_now(); + // do_paused() may be called twice, if the first time is to enter + // graceful pause, and the second time proper pause. We can only update + // these timers once, otherwise they'll be inflated + if (!was_paused) + { + const time_point now = aux::time_now(); - m_active_time += - duration_cast(now - m_started); + m_active_time += + duration_cast(now - m_started); - if (is_seed()) m_seeding_time += - duration_cast(now - m_became_seed); + if (is_seed()) m_seeding_time += + duration_cast(now - m_became_seed); - if (is_finished()) m_finished_time += - duration_cast(now - m_became_finished); + if (is_finished()) m_finished_time += + duration_cast(now - m_became_finished); + } m_announce_to_dht = false; m_announce_to_trackers = false; @@ -8932,7 +8938,7 @@ { m_graceful_pause_mode = false; update_gauge(); - do_pause(); + do_pause(flags, true); } return; } @@ -8947,7 +8953,7 @@ m_graceful_pause_mode = bool(flags & torrent_handle::graceful_pause); - if (b) do_pause(flags & torrent_handle::clear_disk_cache); + if (b) do_pause(flags); else do_resume(); } @@ -9244,7 +9250,7 @@ seconds32 torrent::active_time() const { - if(is_paused()) + if (is_paused()) return m_active_time; // m_active_time does not account for the current "session", just the @@ -10277,7 +10283,6 @@ torrent_state torrent::get_peer_list_state() { torrent_state ret; - ret.is_paused = is_paused(); ret.is_finished = is_finished(); ret.allow_multiple_connections_per_ip = settings().get_bool(settings_pack::allow_multiple_connections_per_ip); ret.max_peerlist_size = is_paused() @@ -10426,7 +10431,7 @@ void torrent::set_seed(torrent_peer* p, bool const s) { - if (p->seed == s) return; + if (bool(p->seed) == s) return; if (s) { TORRENT_ASSERT(m_num_seeds < 0xffff); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/torrent_peer.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/torrent_peer.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/src/torrent_peer.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/src/torrent_peer.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -146,6 +146,7 @@ , connectable(conn) , optimistically_unchoked(false) , seed(false) + , maybe_upload_only(false) , fast_reconnects(0) , trust_points(0) , source(static_cast(src)) diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/CMakeLists.txt libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/CMakeLists.txt --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/CMakeLists.txt 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/CMakeLists.txt 2021-06-23 16:40:56.000000000 +0000 @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) # Configurable policies: <= CMP0097 # Our tests contain printf formating checks therefore we disable GCC format string errors: if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") @@ -12,15 +12,26 @@ list(REMOVE_ITEM tests "${CMAKE_CURRENT_SOURCE_DIR}/test_natpmp.cpp") # doesn't build at time of writing list(REMOVE_ITEM tests "${CMAKE_CURRENT_SOURCE_DIR}/test_utils.cpp") # helper file, not a test -add_library(test_common STATIC main.cpp test.cpp setup_transfer.cpp dht_server.cpp udp_tracker.cpp - peer_server.cpp web_seed_suite.cpp swarm_suite.cpp test_utils.cpp make_torrent.cpp settings.cpp +add_library(test_common STATIC + dht_server.cpp + main.cpp + make_torrent.cpp + peer_server.cpp + settings.cpp + setup_transfer.cpp + swarm_suite.cpp + test.cpp + test_utils.cpp + udp_tracker.cpp + web_seed_suite.cpp ) target_link_libraries(test_common PUBLIC torrent-rasterbar) if (MSVC) - # C4127: conditional expression is constant - # C4309: 'conversion' : truncation of constant value - # C4310: cast truncates constant value - target_compile_options(test_common PUBLIC /wd4127 /wd4309 /wd4310 ) + target_compile_options(test_common PUBLIC + /wd4127 # C4127: conditional expression is constant + /wd4309 # C4309: 'conversion' : truncation of constant value + /wd4310 # C4310: cast truncates constant value + ) endif() foreach(TARGET_SRC ${tests}) @@ -39,7 +50,7 @@ file(GLOB XML_ASSETS "${CMAKE_CURRENT_SOURCE_DIR}/*.xml") file(COPY ${XML_ASSETS} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -file(COPY "utf8_test.txt" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") file(COPY "mutable_test_torrents" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -file(COPY "test_torrents" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") file(COPY "ssl" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +file(COPY "test_torrents" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +file(COPY "utf8_test.txt" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/main.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/main.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/main.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/main.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -410,8 +410,7 @@ #endif std::string const root_dir = current_working_directory(); std::string const unit_dir_prefix = combine_path(root_dir, "test_tmp_" + std::to_string(process_id) + "_"); - std::printf("test: %s\ncwd_prefix = \"%s\"\nrnd = %x\n" - , executable, unit_dir_prefix.c_str(), lt::random(0xffffffff)); + std::printf("test: %s\ncwd_prefix = \"%s\"\n", executable, unit_dir_prefix.c_str()); if (_g_num_unit_tests == 0) { @@ -446,7 +445,6 @@ return 1; } - std::printf("cwd: %s\n", unit_dir.c_str()); unit_test_t& t = _g_unit_tests[i]; if (redirect_stdout || redirect_stderr) @@ -503,6 +501,12 @@ _g_test_idx = i; current_test = &t; + std::printf("cwd: %s\n", unit_dir.c_str()); + std::printf("test-case: %s\n", t.name); + std::mt19937 rng(0x82daf973); + lt::aux::random_engine() = rng; + std::printf("rnd = %x\n", lt::random(0xffffffff)); + #ifndef BOOST_NO_EXCEPTIONS try { diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/setup_transfer.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/setup_transfer.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/setup_transfer.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/setup_transfer.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -674,20 +674,9 @@ return "python3"; } -} - -// returns a port on success and -1 on failure -int start_proxy(int proxy_type) +int find_available_port() { - using namespace lt; - - std::map :: iterator i = running_proxies.begin(); - for (; i != running_proxies.end(); ++i) - { - if (i->second.type == proxy_type) { return i->first; } - } - - int port = 10000 + static_cast(lt::random(50000)); + int port = 2000 + (::getpid() + _g_test_idx + std::rand()) % 60000; error_code ec; io_service ios; @@ -700,7 +689,22 @@ s.bind(tcp::endpoint(address::from_string("127.0.0.1") , std::uint16_t(port)), ec); } while (ec); + return port; +} +} + +// returns a port on success and -1 on failure +int start_proxy(int proxy_type) +{ + using namespace lt; + + std::map :: iterator i = running_proxies.begin(); + for (; i != running_proxies.end(); ++i) + { + if (i->second.type == proxy_type) { return i->first; } + } + int const port = find_available_port(); char const* type = ""; char const* auth = ""; @@ -1090,19 +1094,7 @@ int start_web_server(bool ssl, bool chunked_encoding, bool keepalive, int min_interval) { - int port = 2000 + static_cast(lt::random(6000)); - error_code ec; - io_service ios; - - // make sure the port we pick is free - do { - ++port; - tcp::socket s(ios); - s.open(tcp::v4(), ec); - if (ec) break; - s.bind(tcp::endpoint(address::from_string("127.0.0.1") - , std::uint16_t(port)), ec); - } while (ec); + int const port = find_available_port(); std::string python_exe = get_python(); diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/dhparams.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/dhparams.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/dhparams.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/dhparams.pem 2021-06-23 16:40:56.000000000 +0000 @@ -1,13 +1,13 @@ -----BEGIN DH PARAMETERS----- -MIICCAKCAgEArlE2duUZ0gTqEWzwGywNnwy9DKxoYg8sN/qqkWoRPGAbOfIRczQa -E4egyVamf6grYdZ2cA3yo1s4gmHzp3AJdou6iU4D0Uuka/hCtS9qIANPolFw0pUL -jX+N0ut5jqA8zmDDPx7eyjwKVz7yRsjak4l0pPuj1042vOKM8aFHcZf68731Xlhq -9dNIYK6N67gwSICDFFy4+mTAsH7OSpOw4NFi2+pXsH7aHBXLmk0BcV51NYYf3qFQ -TuoxFUX4qQyip+uJguFrCv1RvXHKpWbm8ThgP3Yv3PpA2FbjnQosHeLp1Soq/vgP -NgDyDb3l8+pW1gmPDZ9O/og6bJruECmK2hTQ+TIw4FI7TGcN1k8XFK1jnFIZxRPN -I3Nbcu0BJtApF7h8GG5dKIBVU3JXJtnqidZh8+kovwOE6FcV8ys8yAg3NuviHw2L -CBQJGOUW15bhN4GXTPjNhK2BcMNu40coRdKjDhknxJjsMSpNMxruKbMlJICFngg+ -NE3SCr8vNvYquOv5Ztr7YHyufBmRWEfmZ9dkASCHZgGsVWf3rOcIbqchjdw/qqA4 -7h9QLo4JSk9/QLNtLly/HJGdwN2+LHKdhcgBW2B3lrmKxP4uTEYXpEes6owWL0Bz -ojV60n782g4soueXjhgiv1qPGAkZnOTpbcVQVHSdpH9s/vKen/LVgcsCAQI= +MIICCAKCAgEA2bK8rXIrxYfHPhdWmWzD3+Q3nGJFP7hkKsuKeVFSU6ECvH/h48RN +l18QDp0eoDaVUrqp4Mal0batUgtRHjJxa6iq4F34LXEaynFDTPSgii38AVb/kiSl +gsLjKs+Qex7rvwNX3mV65fjkegtpkolHT7ynv90rV178SelvIxnLW3A+ixEcmpCU +ZVst6cJidg6KEQ7UfDEGlEgKYDmAuuxr69VKRbC1wwkfys1kY2vpJhBBjjNetcBM +tpT+EHXmePLTZejUOAtup3UCgHSRxrKhTSUC65gU7HblCspML5WdMafRhbnEYXiZ +1jKdSo4XREV6HQeT91eCHhaGcmzqfrKh/f6Ql4eaa10TMuy7PRxDIuce2RUEdUxo +m4bhnxw3L5ABq2mo4PqdeVTxnnAzsje+jgQ6WwPAG/AoCpVPiLhTyfdfPzFlj732 +oCCsMvcaR93YhUF0QELjM3FThIwpHViD+WKBWdGfZSwdE9PFUmxwSIx6Vnmd4AdV +xLXFWDnpQm8qAYN+7mxpB1W9OmmtQurqqLni/SS80g3kEyFAOfDp1ivcKOZ76xlt +9ayicTlPIfA25ffyls+UiL/sLbPopYQf3rWPaMLCXwuM8qfcsgvZfhyksERODx8c +KXB/15LF4gIfyZFP2VaBKcyh2rc3bbrfzKufLBqO9U/eH95B4Ngkf0sCAQI= -----END DH PARAMETERS----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/invalid_peer_certificate.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/invalid_peer_certificate.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/invalid_peer_certificate.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/invalid_peer_certificate.pem 2021-06-23 16:40:56.000000000 +0000 @@ -2,35 +2,35 @@ Data: Version: 3 (0x2) Serial Number: - 77:43:23:01:98:f8:32:24:72:c9:71:f2:86:1e:e3:3e:59:b8:d3:33 + 2a:3b:39:ec:ad:1b:1c:d7:e1:c2:4b:2c:ab:35:5c:3e:1b:5a:33:ca Signature Algorithm: sha256WithRSAEncryption Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=test Validity - Not Before: Nov 3 12:58:08 2019 GMT - Not After : Nov 2 12:58:08 2020 GMT + Not Before: Jun 11 09:20:44 2020 GMT + Not After : Jun 11 09:20:44 2021 GMT Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=* Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: - 00:c7:a5:3d:f6:73:69:02:2b:97:a6:9d:8a:31:73: - 82:23:08:fb:df:bd:b5:e2:e3:43:7a:c3:3f:65:a1: - 72:50:e1:34:8a:30:b4:69:a9:b1:f7:d1:67:eb:53: - 0f:6b:01:2c:09:98:0c:55:09:1d:7d:3a:9e:86:ac: - f8:99:55:0c:5b:38:18:73:da:c9:19:e7:47:e3:ad: - 57:3e:90:2c:a9:11:73:2b:b9:ee:5a:a4:f0:58:57: - 13:83:33:f8:9d:de:c3:3b:a4:2c:be:a8:95:33:ac: - d2:08:b4:c6:f4:0f:39:5c:cd:4a:b4:f9:91:0b:fd: - 3d:8c:c1:13:bc:b2:09:fc:cc:cb:43:15:51:7e:f5: - 99:02:07:cb:89:3b:c0:0c:ae:92:5d:7e:3b:9e:18: - d0:48:2b:ad:94:ca:88:85:b1:d8:49:ba:cd:3f:a8: - 69:c7:40:12:50:40:e1:a1:11:e0:62:c0:be:e8:93: - 6e:35:08:c6:d4:b9:2e:4e:70:f1:59:76:32:7f:89: - ca:f1:b5:1c:54:c5:bb:09:47:5d:6a:19:9c:8f:86: - 10:5f:ee:e3:7d:07:1d:43:56:90:8c:57:b2:94:02: - 13:9d:34:33:e5:f6:84:c4:4c:99:d6:3e:28:d7:6b: - 89:12:a4:8b:f9:c2:79:35:63:80:bc:b5:e1:cf:5e: - b2:0d + 00:c3:f5:9e:4c:d0:27:c9:93:02:1a:00:5c:cc:d2: + db:73:b9:cb:75:35:86:ee:60:17:b3:6d:2c:b1:4e: + c7:a3:e2:9d:5b:c2:65:9b:e0:f4:3d:65:13:68:ee: + 87:be:58:1a:ac:2c:4a:d9:59:61:1c:a9:37:2c:3f: + f1:3c:dc:4e:ab:6b:6d:0e:2e:6c:b6:d8:6e:79:99: + b4:28:d0:e7:1a:05:f7:5d:90:2b:6f:2a:a3:88:fe: + 0a:17:e7:e0:47:23:69:92:4d:37:96:c1:c0:db:91: + 7c:9c:42:66:05:4f:ef:fa:a5:87:1d:51:e4:7f:16: + b3:d5:6d:32:f0:46:b5:e8:84:bc:2f:29:c2:2b:8e: + e9:b9:04:be:22:93:7f:a3:ae:d2:f1:6d:96:14:c2: + a8:65:7c:72:8f:1e:bf:1c:17:3a:0b:4f:97:d4:7c: + ed:80:2c:85:23:f6:8f:99:ed:09:5c:df:51:7d:fd: + 9c:95:98:45:9e:9f:f2:4e:38:3e:32:c2:0e:63:d4: + ae:56:a8:40:af:0b:e0:72:2d:c0:00:7a:e2:5c:72: + 0d:45:9e:10:d6:a9:76:aa:80:b7:f0:a5:c5:1d:80: + 2c:94:38:70:c5:2c:6f:5e:68:43:9a:7c:58:73:45: + e8:61:43:c1:23:ab:44:f8:e3:14:a4:22:93:6b:f2: + c1:23 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -38,45 +38,45 @@ Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - FE:32:16:2B:5C:D7:3D:BA:11:FD:33:65:F2:2E:D3:F6:B0:DE:C9:4B + DA:09:C5:F5:19:AD:F1:93:60:D6:72:9D:7D:8B:25:E9:D0:21:EE:50 X509v3 Authority Key Identifier: - keyid:F0:EA:C4:93:7C:DA:4E:3A:D6:4F:FD:F0:0B:60:B8:B4:3C:FB:BA:2B + keyid:48:61:63:44:F6:1D:B2:0C:3D:C9:9F:0E:50:A0:53:46:53:C1:B0:76 Signature Algorithm: sha256WithRSAEncryption - a2:56:19:c7:12:94:71:af:54:fe:c6:5f:07:da:84:e4:b4:92: - 02:95:1e:26:b2:9a:ae:7f:3d:d8:11:cb:ff:db:e6:f3:88:5e: - 8b:ba:ce:44:ff:77:40:1a:a8:9f:0e:bb:37:63:c2:53:8b:a4: - 29:1e:a0:07:39:7f:5e:ea:91:2e:a8:3c:f0:dc:66:c6:e7:0d: - 90:80:ec:b9:06:a4:ef:2a:0e:d6:9b:e2:dc:cf:16:24:b1:05: - 66:08:70:6d:c3:fa:87:1d:1e:7b:eb:9a:3f:03:5f:73:c4:0e: - 62:7d:a9:5e:11:d4:1b:b3:1e:72:68:a5:55:a6:4c:48:5d:f6: - c1:4f:75:b0:4e:09:d4:a8:c4:19:bf:7d:72:a7:3c:d5:08:f7: - ab:93:9d:e7:b4:4f:52:3f:23:3e:a3:50:18:aa:e1:22:3b:92: - f9:b6:a2:2d:12:04:5a:49:3e:58:f7:15:c5:6f:93:ba:a1:c8: - 04:fe:67:37:49:13:cf:39:0a:91:12:b6:61:b8:ac:b4:f6:b4: - c0:4f:f8:05:f1:39:18:f3:cd:87:f6:76:dc:7b:3c:d7:eb:4a: - 2d:a7:e5:b5:62:f5:a4:3e:d6:55:c7:38:6f:e3:12:c4:af:ad: - c4:83:1c:45:64:a2:18:62:c3:62:c4:f4:1a:47:ed:8c:53:93: - d9:8a:81:b3 + 8d:81:a4:c6:fe:79:61:96:cf:48:28:63:f9:1a:bc:04:0e:92: + e8:c2:0c:ad:f9:12:9c:ac:e7:fa:b6:fe:96:64:4f:9d:40:3e: + 82:58:4a:f4:1e:a9:e5:ae:08:13:82:ed:09:c0:ed:52:aa:29: + 49:c9:b1:9e:c6:e6:2c:6d:c2:0d:11:4b:57:05:60:ef:2b:7a: + ea:d3:86:d4:55:12:11:e6:42:e4:ea:44:10:9a:2d:1d:e2:2b: + 1c:29:b4:45:5a:9a:a6:5d:a4:75:ec:b7:f0:eb:c3:31:2b:47: + 4b:55:6e:b9:65:4d:1f:f9:4c:37:7e:ea:4a:d4:8f:42:20:38: + 99:4c:9a:1a:39:7d:c1:68:67:9d:a9:e4:ba:d7:14:d2:00:91: + 57:f8:ec:85:e6:83:0f:f6:58:0f:25:96:ce:c9:52:15:a8:b1: + 92:5f:f3:43:eb:a2:3d:3c:15:29:80:80:12:f2:b2:fd:9b:e0: + 9a:86:3d:59:42:e2:8b:fd:e0:c7:3b:99:32:d3:08:54:b8:d0: + 39:02:6f:9e:ca:e9:52:85:8e:0a:72:09:37:11:59:76:69:aa: + 9d:99:0f:0f:a3:fe:55:80:b5:74:74:89:7d:fa:cf:35:f5:4c: + 50:6c:96:96:88:87:9a:5f:7b:b3:29:ea:0c:f0:5d:69:fd:40: + 66:61:61:57 -----BEGIN CERTIFICATE----- -MIIDrjCCApagAwIBAgIUd0MjAZj4MiRyyXHyhh7jPlm40zMwDQYJKoZIhvcNAQEL +MIIDrjCCApagAwIBAgIUKjs57K0bHNfhwkssqzVcPhtaM8owDQYJKoZIhvcNAQEL BQAwVDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0xOTEx -MDMxMjU4MDhaFw0yMDExMDIxMjU4MDhaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQI +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0yMDA2 +MTEwOTIwNDRaFw0yMTA2MTEwOTIwNDRaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQI DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx -CjAIBgNVBAMMASowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHpT32 -c2kCK5emnYoxc4IjCPvfvbXi40N6wz9loXJQ4TSKMLRpqbH30WfrUw9rASwJmAxV -CR19Op6GrPiZVQxbOBhz2skZ50fjrVc+kCypEXMrue5apPBYVxODM/id3sM7pCy+ -qJUzrNIItMb0DzlczUq0+ZEL/T2MwRO8sgn8zMtDFVF+9ZkCB8uJO8AMrpJdfjue -GNBIK62UyoiFsdhJus0/qGnHQBJQQOGhEeBiwL7ok241CMbUuS5OcPFZdjJ/icrx -tRxUxbsJR11qGZyPhhBf7uN9Bx1DVpCMV7KUAhOdNDPl9oTETJnWPijXa4kSpIv5 -wnk1Y4C8teHPXrINAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W -HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBT+MhYrXNc9 -uhH9M2XyLtP2sN7JSzAfBgNVHSMEGDAWgBTw6sSTfNpOOtZP/fALYLi0PPu6KzAN -BgkqhkiG9w0BAQsFAAOCAQEAolYZxxKUca9U/sZfB9qE5LSSApUeJrKarn892BHL -/9vm84hei7rORP93QBqonw67N2PCU4ukKR6gBzl/XuqRLqg88NxmxucNkIDsuQak -7yoO1pvi3M8WJLEFZghwbcP6hx0ee+uaPwNfc8QOYn2pXhHUG7MecmilVaZMSF32 -wU91sE4J1KjEGb99cqc81Qj3q5Od57RPUj8jPqNQGKrhIjuS+baiLRIEWkk+WPcV -xW+TuqHIBP5nN0kTzzkKkRK2YbistPa0wE/4BfE5GPPNh/Z23Hs81+tKLafltWL1 -pD7WVcc4b+MSxK+txIMcRWSiGGLDYsT0GkftjFOT2YqBsw== +CjAIBgNVBAMMASowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDD9Z5M +0CfJkwIaAFzM0ttzuct1NYbuYBezbSyxTsej4p1bwmWb4PQ9ZRNo7oe+WBqsLErZ +WWEcqTcsP/E83E6ra20OLmy22G55mbQo0OcaBfddkCtvKqOI/goX5+BHI2mSTTeW +wcDbkXycQmYFT+/6pYcdUeR/FrPVbTLwRrXohLwvKcIrjum5BL4ik3+jrtLxbZYU +wqhlfHKPHr8cFzoLT5fUfO2ALIUj9o+Z7Qlc31F9/ZyVmEWen/JOOD4ywg5j1K5W +qECvC+ByLcAAeuJccg1FnhDWqXaqgLfwpcUdgCyUOHDFLG9eaEOafFhzRehhQ8Ej +q0T44xSkIpNr8sEjAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W +HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBTaCcX1Ga3x +k2DWcp19iyXp0CHuUDAfBgNVHSMEGDAWgBRIYWNE9h2yDD3Jnw5QoFNGU8GwdjAN +BgkqhkiG9w0BAQsFAAOCAQEAjYGkxv55YZbPSChj+Rq8BA6S6MIMrfkSnKzn+rb+ +lmRPnUA+glhK9B6p5a4IE4LtCcDtUqopScmxnsbmLG3CDRFLVwVg7yt66tOG1FUS +EeZC5OpEEJotHeIrHCm0RVqapl2kdey38OvDMStHS1VuuWVNH/lMN37qStSPQiA4 +mUyaGjl9wWhnnankutcU0gCRV/jsheaDD/ZYDyWWzslSFaixkl/zQ+uiPTwVKYCA +EvKy/ZvgmoY9WULii/3gxzuZMtMIVLjQOQJvnsrpUoWOCnIJNxFZdmmqnZkPD6P+ +VYC1dHSJffrPNfVMUGyWloiHml97synqDPBdaf1AZmFhVw== -----END CERTIFICATE----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/invalid_peer_private_key.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/invalid_peer_private_key.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/invalid_peer_private_key.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/invalid_peer_private_key.pem 2021-06-23 16:40:56.000000000 +0000 @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI1s+ba8HLEMICAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECHfQOovsexxPBIIEyG6tu/yqWU8E -VxjibEwwlEOp1igSWfm3FMe45zwsmjpsgLyFdc6nWab+Y1c1MS/+6Jc74F8HyPuj -Yja19NKUZg4oQanwwi2xGqU54LdcWotOcyOfQPXRnHJ/qUOCFq4EKxr5pgriQrEb -iCFQonAoxMfAVlcI2a+qHq2UxK4Te/P4y+KKee2D7XUAe8dZu9tp2+j+2fz94Cgw -0xn1LdO59F8xi512LfLGBtLJBS/RA1DBCw9n1/P+dkGmA2AxTv/mbWtcHCfP0O9r -Xot5McmQWJ78iPV+TH5s+x+48/IKzxPOfj5DB2p+MxDegv2uzC2cLAzR/pxA8JuY -mN2ChvPXdV7ZMSgN+X9IG7Lq/8v2bcJkJlPBdEOUpPDQtkolqg3LhDm4Ex2DKD9i -47PTKMZzbzMH94rSJYtOMGbkhi8s2Ib+8mJwrkHFuuHKMizNoE3t41C8nxfT2Unq -qs2Br7+bK6iSJ4JQ8Z/Tic3eOborooJ5+FrwkN2nHrHvTQyVdMWc/YpQ7vG2y7aP -s9Im4B37BlB8k+rVByNk+A6fOTNAvTEytoAAwMXVioqNbxB+oyBakEQ6M7cu3WJ5 -FukA7stXwdbJ2D3BvJS7YfzQNccJWqQx6G9xmzH+XkqXlhb/xNiqXieqxAlQeIuh -1nxlhYZCgxPsD21HQeDXytWrblJd3uKZ0T2NZFsvtdnetscv9/Mgx99gga/lcPrN -tiJ1piayLqNUOsSQyq3YqAFj/++BbJH52LYEeugct6CGx6zPzjWXaT/bo2fVwqNV -U6HxsclqnN//Zyz5CxPpBosdavlZ3Rrb60edT9uoLosdiB35XR9BQenmbvYtADFN -sOAd2DI7Nh+LaijxeNz745hPF6qot01VjR2QbQWsr/FnLTSQ4fZC5Z4IOi6o2br9 -qQIozNwNXBR0p/s6MkSNvug9U++m83Zj8h5lDa4Jp+J6x2i8w8adiJOK2d2AufTi -eQRPWZ6BF/73AfS/FJ/7MM4JHY6CQHiokbO6Nel2KOXBbjFQfiy9rWxAv27fc+8h -ev4fhef1KTtLAkGGrR1RFOA3UWywyCQzmm5dgUgEA14Zr9UJRzWcy87wjoT4vvSQ -QY0ajQOkOve4NPxtsCVhF4FScG4ULMpDoG6N6sayBIY0YktwV16mFCZ7qW8U85p0 -wqCS2Nno/22dAQyMIAJO+tCaARMjUDt0CM7t6Jx0KRRqpNJ/88QTkEgl4KbBEEZ2 -q/P+sKLmaau/GAdRK+EDIVV1kH47vzQr/yomenWNn8c0iaIenjHRpgb5MWUvr96p -5es7KtnT9dKP5mqSxfQ0ZbHBDJ4rK4k36UlQ/H6RylxSHQLIJHQ0IkMmfD4Ioof6 -UhOomD5m7G5TYjROO5W1UvAb/iGM5AUyVgQIceiZEPVvNcEDwcyIyLztqsVX8rWO -HQ9dwQEXVrrpX91gtrV+3qxDQuposQWHPIM+dT3P5iE/Qzy4k7vmHPgKFdXIMn7T -Uc/H8SCxcUCYAXb6b4Df4fd0TOlLRxPa1HNlZJEHsroma0NPGlAUFtJxMJLYXiXG -Gn3nrY/3WRhlXSYiy9QkKF5A3XOpLS7vDd7pQ0d11kDKF6Wt0oqwyEkn4rwQiSZG -jO6Gsw/gto4wXCyTTgBCDw== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIMGZVYcqHMkcCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMLdhALGDat0BIIEyDcsKyo8Leyv +mHXIYaPV/JVIUonbDouOb1jMI04Ph+b0YTx+cd7+3WPN7Qvtmf7JsYsee71VHint +fuP5wCi3oGFjm8T4t6WXKWOraJUEE/nZdzK5t1BFsQA4UMI/eczwt4nesiNrHVsL +8fGRm6wsYl+LbORXYIDEiWy6YkWgEZcggp4Tf1NCsdN4rLc4fmJiPoVrfWPBtmFm +0sKJe/VUNbEnjg7d5zhGn773QLGLuR0h7klKFyW3TJiYOD9Bp9gTKQPfmM64l/zl +l2ZZUlzp5pThdBv/YBoFT60fvlE8BL1plv0fIhNfN3g5ozJ0b6ZXkeK8A10wPf4V +11Imo3HbkbUz6uf4/wWG5bZfXV90q2Z92vfLLGnvZB9tfK1e9gH0RYLCaF7uSXJ8 +0nhFqtB6otfkuVX3aIBq5r9dQ9WeMXcTmf1pgYLkiTJLtirp4evYCYGovumgag2a +oby1MuhoESNSBpvp8aFziwBu0DKpQzvnOACYpNUr9jrMF4/4WPwxSIuF4xMgI327 +xUpTiYrBe9ErwO1qq37y6ozmtxYQHgtCE5ST/ip0tC/ypgOyfLsj0TyU76JS7wp0 +FmxoVpdYuCT30ZzmsVWqz4NeiFbiCOOdF9lbuEPCZmn7TCqnZPVaVfsXtEdy14MI +dMn3iKaeFtfM8CdnlJVMH3MD0Rald9lJOqD+TI4NrgQNSv87ro8QkAo9u853Oh8P +7SBeEpcLXfh1oC07SahE3OfcIV9TTogQZCdqzSrlb9357yMOby90SuX8N7em+/oh +70BVp1bcVj0ya7lFMEhkVkEXMJTcm/bOaCBsEhrld9ECWxTjDv/jPde1OMqOHAxX +m5YO58lS/ZuFjavmnXfTUqAnsfewR8E3QBc83m3PglktERBJ050OWnJ+V7SDkmOb +PwW29l4PEom5HIHpZi6ZUKkqL2jt1m3WKaDMkjoFXPBUbsmmQMtn6pVJYaJ4LEBS +BmvUXhysYZDEvzsbDAh1v7UZta7+8neqx8+wPxoTtQZE+3iu2IKtuaLj2GvYMqW+ +w9RUV4bmgRFNtffIimbG987o4mj1yFzXKSQpNxxMQDHd+RW5JnDBkpPNJCiLLcpg +AfR+3cobvgthdgKIV32aMSBV1QBC1LwbZFkVb89SZ08nUI+DATrZI6AKImEGZd6B +jq+MSopib2M3HK9fQBiR222Bdcn/H2hFoxv09PgWjiUiq8yc2lJHY2I8zkE1t24O +ROJaynUpSuAfniPifWFghSJloYm0k9mt58StHWytcc20A/xgbErNqwID48ZP6YQq +OeTyMmIDFJBovHPD/gJgIZ344HRI/gmsA75apo6hTc3srKfZf6RpC+oWV8FFsTG2 +I3WEocz7bZ7ZBYY+1QqJJfE4nagsvIDVfLta3IlPjiGmUwHJVYX74O9eQGHX354G +B2Qjg5ocgwgwZDhc1nr/EyCYUiLVGTEp5Ho3thUs7qnFNO/4GrwtgcKAsvbdKlI6 +8z9W09fKcahjtToxKZgAfZN8iAA2Gm9BEY1FjFOUkvTxiNnz0RrWEeNu1yD/2RP4 +HuaqGN3uuQE31GhdsJv4ksDZjBfePLeP2xdTOyQkMFcTkszylRG44YdD397Kk1VJ +r7VMX8xDXGuJ2S1pE/4dOw== -----END ENCRYPTED PRIVATE KEY----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/peer_certificate.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/peer_certificate.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/peer_certificate.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/peer_certificate.pem 2021-06-23 16:40:56.000000000 +0000 @@ -2,35 +2,35 @@ Data: Version: 3 (0x2) Serial Number: - 2a:3b:39:ec:ad:1b:1c:d7:e1:c2:4b:2c:ab:35:5c:3e:1b:5a:33:ca + 53:ec:a5:6d:e0:33:0b:3f:1b:64:64:9f:8c:a2:65:7e:c1:9b:c5:ca Signature Algorithm: sha256WithRSAEncryption Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=test Validity - Not Before: Jun 11 09:20:44 2020 GMT - Not After : Jun 11 09:20:44 2021 GMT + Not Before: Jun 12 13:35:50 2021 GMT + Not After : Jun 12 13:35:50 2022 GMT Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=* Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: - 00:c3:f5:9e:4c:d0:27:c9:93:02:1a:00:5c:cc:d2: - db:73:b9:cb:75:35:86:ee:60:17:b3:6d:2c:b1:4e: - c7:a3:e2:9d:5b:c2:65:9b:e0:f4:3d:65:13:68:ee: - 87:be:58:1a:ac:2c:4a:d9:59:61:1c:a9:37:2c:3f: - f1:3c:dc:4e:ab:6b:6d:0e:2e:6c:b6:d8:6e:79:99: - b4:28:d0:e7:1a:05:f7:5d:90:2b:6f:2a:a3:88:fe: - 0a:17:e7:e0:47:23:69:92:4d:37:96:c1:c0:db:91: - 7c:9c:42:66:05:4f:ef:fa:a5:87:1d:51:e4:7f:16: - b3:d5:6d:32:f0:46:b5:e8:84:bc:2f:29:c2:2b:8e: - e9:b9:04:be:22:93:7f:a3:ae:d2:f1:6d:96:14:c2: - a8:65:7c:72:8f:1e:bf:1c:17:3a:0b:4f:97:d4:7c: - ed:80:2c:85:23:f6:8f:99:ed:09:5c:df:51:7d:fd: - 9c:95:98:45:9e:9f:f2:4e:38:3e:32:c2:0e:63:d4: - ae:56:a8:40:af:0b:e0:72:2d:c0:00:7a:e2:5c:72: - 0d:45:9e:10:d6:a9:76:aa:80:b7:f0:a5:c5:1d:80: - 2c:94:38:70:c5:2c:6f:5e:68:43:9a:7c:58:73:45: - e8:61:43:c1:23:ab:44:f8:e3:14:a4:22:93:6b:f2: - c1:23 + 00:d2:50:62:10:8e:4b:e9:fa:74:e7:53:97:ea:25: + b1:26:53:5a:ed:f6:a6:72:5e:9a:0f:8a:09:e2:b2: + dd:f9:bc:10:b1:de:9a:bd:e6:64:d9:0f:c1:b3:ed: + 42:d8:f7:9f:52:f6:49:38:1d:5d:f9:cc:8c:7e:c8: + ef:8e:f7:e8:e1:7c:9c:13:e1:32:72:a7:b9:df:68: + 1f:9d:88:82:09:4c:e0:7c:bb:9c:74:bf:9d:51:57: + f3:94:f8:80:d4:80:5f:ee:1c:98:a5:43:08:25:42: + b2:9b:1b:2a:2a:13:86:80:68:f8:ea:5d:d1:d7:50: + 9f:35:49:f9:9c:0b:a8:17:23:b1:b9:26:6c:32:00: + 82:3c:51:f2:bb:c6:1a:3d:5e:14:ce:1d:b4:b9:98: + cb:54:3a:21:f5:d1:40:75:c5:05:86:3b:ed:7e:87: + 79:ba:74:56:46:65:48:41:d0:9e:23:7b:dd:c7:b4: + c0:df:36:c8:01:03:b6:96:03:27:bd:6c:8e:64:33: + 5a:f8:dd:49:7f:c2:d1:d2:a8:c7:3f:5e:63:78:28: + 3b:d4:c4:87:fe:13:16:96:f4:89:81:c0:fc:98:8a: + 54:8a:14:21:7f:7b:21:fc:f5:c8:37:0e:94:6b:a2: + a5:53:7e:13:27:cf:6b:a5:0b:f8:f4:53:fa:5e:6d: + d3:25 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -38,45 +38,45 @@ Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - DA:09:C5:F5:19:AD:F1:93:60:D6:72:9D:7D:8B:25:E9:D0:21:EE:50 + 2C:FE:68:9B:AD:6D:20:F5:37:62:AA:3C:FE:D8:70:94:47:75:87:1D X509v3 Authority Key Identifier: - keyid:48:61:63:44:F6:1D:B2:0C:3D:C9:9F:0E:50:A0:53:46:53:C1:B0:76 + keyid:AA:B5:9C:D4:9C:C9:0C:A7:C8:55:0C:9E:98:EE:55:03:52:00:D9:08 Signature Algorithm: sha256WithRSAEncryption - 8d:81:a4:c6:fe:79:61:96:cf:48:28:63:f9:1a:bc:04:0e:92: - e8:c2:0c:ad:f9:12:9c:ac:e7:fa:b6:fe:96:64:4f:9d:40:3e: - 82:58:4a:f4:1e:a9:e5:ae:08:13:82:ed:09:c0:ed:52:aa:29: - 49:c9:b1:9e:c6:e6:2c:6d:c2:0d:11:4b:57:05:60:ef:2b:7a: - ea:d3:86:d4:55:12:11:e6:42:e4:ea:44:10:9a:2d:1d:e2:2b: - 1c:29:b4:45:5a:9a:a6:5d:a4:75:ec:b7:f0:eb:c3:31:2b:47: - 4b:55:6e:b9:65:4d:1f:f9:4c:37:7e:ea:4a:d4:8f:42:20:38: - 99:4c:9a:1a:39:7d:c1:68:67:9d:a9:e4:ba:d7:14:d2:00:91: - 57:f8:ec:85:e6:83:0f:f6:58:0f:25:96:ce:c9:52:15:a8:b1: - 92:5f:f3:43:eb:a2:3d:3c:15:29:80:80:12:f2:b2:fd:9b:e0: - 9a:86:3d:59:42:e2:8b:fd:e0:c7:3b:99:32:d3:08:54:b8:d0: - 39:02:6f:9e:ca:e9:52:85:8e:0a:72:09:37:11:59:76:69:aa: - 9d:99:0f:0f:a3:fe:55:80:b5:74:74:89:7d:fa:cf:35:f5:4c: - 50:6c:96:96:88:87:9a:5f:7b:b3:29:ea:0c:f0:5d:69:fd:40: - 66:61:61:57 + 97:36:30:a3:b2:44:1f:d2:cc:27:64:22:85:31:9d:03:93:10: + 7b:bc:dc:05:76:49:aa:71:a1:70:11:2c:0d:63:6a:5f:0b:9e: + 3a:eb:f0:dc:d8:32:54:c5:13:3b:a0:76:b5:9b:f6:62:f7:1a: + 7b:b7:a4:2b:b4:0e:b3:f2:86:fa:22:94:ab:0f:34:2d:10:98: + 8a:62:c2:25:33:12:45:96:ae:e9:95:74:49:5b:86:5d:42:a5: + b7:b3:ca:e2:1d:9a:a5:81:09:ff:39:ee:fa:98:81:a7:ad:85: + 69:1a:ef:d1:73:15:04:b1:82:6e:8f:5b:5b:f7:03:16:0b:47: + df:a5:c6:78:26:c6:2a:09:09:3a:9b:8b:ee:2e:3e:14:f7:97: + 4d:af:1b:d0:8f:07:7c:e2:6b:5a:b5:d0:3b:cc:e6:8e:97:81: + 7b:eb:82:63:f5:cc:42:59:4b:47:ff:2b:ec:f8:0a:55:a5:b6: + 15:ba:1d:34:f5:59:11:dd:2a:13:72:b2:98:40:66:45:00:bf: + b3:65:17:6b:c2:15:ca:53:0a:01:26:c3:8f:09:cf:56:78:33: + 41:cc:2a:62:cd:38:9d:16:a3:ec:cf:f5:59:bf:5f:ab:2b:2a: + e6:12:f5:27:f5:30:9d:80:fb:20:4d:a6:f6:a5:6f:48:e9:59: + dc:8c:3c:72 -----BEGIN CERTIFICATE----- -MIIDrjCCApagAwIBAgIUKjs57K0bHNfhwkssqzVcPhtaM8owDQYJKoZIhvcNAQEL +MIIDrjCCApagAwIBAgIUU+ylbeAzCz8bZGSfjKJlfsGbxcowDQYJKoZIhvcNAQEL BQAwVDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0yMDA2 -MTEwOTIwNDRaFw0yMTA2MTEwOTIwNDRaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQI +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0yMTA2 +MTIxMzM1NTBaFw0yMjA2MTIxMzM1NTBaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQI DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx -CjAIBgNVBAMMASowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDD9Z5M -0CfJkwIaAFzM0ttzuct1NYbuYBezbSyxTsej4p1bwmWb4PQ9ZRNo7oe+WBqsLErZ -WWEcqTcsP/E83E6ra20OLmy22G55mbQo0OcaBfddkCtvKqOI/goX5+BHI2mSTTeW -wcDbkXycQmYFT+/6pYcdUeR/FrPVbTLwRrXohLwvKcIrjum5BL4ik3+jrtLxbZYU -wqhlfHKPHr8cFzoLT5fUfO2ALIUj9o+Z7Qlc31F9/ZyVmEWen/JOOD4ywg5j1K5W -qECvC+ByLcAAeuJccg1FnhDWqXaqgLfwpcUdgCyUOHDFLG9eaEOafFhzRehhQ8Ej -q0T44xSkIpNr8sEjAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W -HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBTaCcX1Ga3x -k2DWcp19iyXp0CHuUDAfBgNVHSMEGDAWgBRIYWNE9h2yDD3Jnw5QoFNGU8GwdjAN -BgkqhkiG9w0BAQsFAAOCAQEAjYGkxv55YZbPSChj+Rq8BA6S6MIMrfkSnKzn+rb+ -lmRPnUA+glhK9B6p5a4IE4LtCcDtUqopScmxnsbmLG3CDRFLVwVg7yt66tOG1FUS -EeZC5OpEEJotHeIrHCm0RVqapl2kdey38OvDMStHS1VuuWVNH/lMN37qStSPQiA4 -mUyaGjl9wWhnnankutcU0gCRV/jsheaDD/ZYDyWWzslSFaixkl/zQ+uiPTwVKYCA -EvKy/ZvgmoY9WULii/3gxzuZMtMIVLjQOQJvnsrpUoWOCnIJNxFZdmmqnZkPD6P+ -VYC1dHSJffrPNfVMUGyWloiHml97synqDPBdaf1AZmFhVw== +CjAIBgNVBAMMASowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSUGIQ +jkvp+nTnU5fqJbEmU1rt9qZyXpoPignist35vBCx3pq95mTZD8Gz7ULY959S9kk4 +HV35zIx+yO+O9+jhfJwT4TJyp7nfaB+diIIJTOB8u5x0v51RV/OU+IDUgF/uHJil +QwglQrKbGyoqE4aAaPjqXdHXUJ81SfmcC6gXI7G5JmwyAII8UfK7xho9XhTOHbS5 +mMtUOiH10UB1xQWGO+1+h3m6dFZGZUhB0J4je93HtMDfNsgBA7aWAye9bI5kM1r4 +3Ul/wtHSqMc/XmN4KDvUxIf+ExaW9ImBwPyYilSKFCF/eyH89cg3DpRroqVTfhMn +z2ulC/j0U/pebdMlAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8W +HU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBQs/mibrW0g +9Tdiqjz+2HCUR3WHHTAfBgNVHSMEGDAWgBSqtZzUnMkMp8hVDJ6Y7lUDUgDZCDAN +BgkqhkiG9w0BAQsFAAOCAQEAlzYwo7JEH9LMJ2QihTGdA5MQe7zcBXZJqnGhcBEs +DWNqXwueOuvw3NgyVMUTO6B2tZv2Yvcae7ekK7QOs/KG+iKUqw80LRCYimLCJTMS +RZau6ZV0SVuGXUKlt7PK4h2apYEJ/znu+piBp62FaRrv0XMVBLGCbo9bW/cDFgtH +36XGeCbGKgkJOpuL7i4+FPeXTa8b0I8HfOJrWrXQO8zmjpeBe+uCY/XMQllLR/8r +7PgKVaW2FbodNPVZEd0qE3KymEBmRQC/s2UXa8IVylMKASbDjwnPVngzQcwqYs04 +nRaj7M/1Wb9fqysq5hL1J/UwnYD7IE2m9qVvSOlZ3Iw8cg== -----END CERTIFICATE----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/peer_private_key.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/peer_private_key.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/peer_private_key.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/peer_private_key.pem 2021-06-23 16:40:56.000000000 +0000 @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIMGZVYcqHMkcCAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMLdhALGDat0BIIEyDcsKyo8Leyv -mHXIYaPV/JVIUonbDouOb1jMI04Ph+b0YTx+cd7+3WPN7Qvtmf7JsYsee71VHint -fuP5wCi3oGFjm8T4t6WXKWOraJUEE/nZdzK5t1BFsQA4UMI/eczwt4nesiNrHVsL -8fGRm6wsYl+LbORXYIDEiWy6YkWgEZcggp4Tf1NCsdN4rLc4fmJiPoVrfWPBtmFm -0sKJe/VUNbEnjg7d5zhGn773QLGLuR0h7klKFyW3TJiYOD9Bp9gTKQPfmM64l/zl -l2ZZUlzp5pThdBv/YBoFT60fvlE8BL1plv0fIhNfN3g5ozJ0b6ZXkeK8A10wPf4V -11Imo3HbkbUz6uf4/wWG5bZfXV90q2Z92vfLLGnvZB9tfK1e9gH0RYLCaF7uSXJ8 -0nhFqtB6otfkuVX3aIBq5r9dQ9WeMXcTmf1pgYLkiTJLtirp4evYCYGovumgag2a -oby1MuhoESNSBpvp8aFziwBu0DKpQzvnOACYpNUr9jrMF4/4WPwxSIuF4xMgI327 -xUpTiYrBe9ErwO1qq37y6ozmtxYQHgtCE5ST/ip0tC/ypgOyfLsj0TyU76JS7wp0 -FmxoVpdYuCT30ZzmsVWqz4NeiFbiCOOdF9lbuEPCZmn7TCqnZPVaVfsXtEdy14MI -dMn3iKaeFtfM8CdnlJVMH3MD0Rald9lJOqD+TI4NrgQNSv87ro8QkAo9u853Oh8P -7SBeEpcLXfh1oC07SahE3OfcIV9TTogQZCdqzSrlb9357yMOby90SuX8N7em+/oh -70BVp1bcVj0ya7lFMEhkVkEXMJTcm/bOaCBsEhrld9ECWxTjDv/jPde1OMqOHAxX -m5YO58lS/ZuFjavmnXfTUqAnsfewR8E3QBc83m3PglktERBJ050OWnJ+V7SDkmOb -PwW29l4PEom5HIHpZi6ZUKkqL2jt1m3WKaDMkjoFXPBUbsmmQMtn6pVJYaJ4LEBS -BmvUXhysYZDEvzsbDAh1v7UZta7+8neqx8+wPxoTtQZE+3iu2IKtuaLj2GvYMqW+ -w9RUV4bmgRFNtffIimbG987o4mj1yFzXKSQpNxxMQDHd+RW5JnDBkpPNJCiLLcpg -AfR+3cobvgthdgKIV32aMSBV1QBC1LwbZFkVb89SZ08nUI+DATrZI6AKImEGZd6B -jq+MSopib2M3HK9fQBiR222Bdcn/H2hFoxv09PgWjiUiq8yc2lJHY2I8zkE1t24O -ROJaynUpSuAfniPifWFghSJloYm0k9mt58StHWytcc20A/xgbErNqwID48ZP6YQq -OeTyMmIDFJBovHPD/gJgIZ344HRI/gmsA75apo6hTc3srKfZf6RpC+oWV8FFsTG2 -I3WEocz7bZ7ZBYY+1QqJJfE4nagsvIDVfLta3IlPjiGmUwHJVYX74O9eQGHX354G -B2Qjg5ocgwgwZDhc1nr/EyCYUiLVGTEp5Ho3thUs7qnFNO/4GrwtgcKAsvbdKlI6 -8z9W09fKcahjtToxKZgAfZN8iAA2Gm9BEY1FjFOUkvTxiNnz0RrWEeNu1yD/2RP4 -HuaqGN3uuQE31GhdsJv4ksDZjBfePLeP2xdTOyQkMFcTkszylRG44YdD397Kk1VJ -r7VMX8xDXGuJ2S1pE/4dOw== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIbgK6pdYRqXECAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECAbZQRhGG/qyBIIEyCq9SEHTmnEk +OsaBZaeoHfjG8dzZY2axOELULAmDQdVzedp9rJqfuj42SkVs8MVfVY6Y6wprd1Ik +48uOSwFyLECsWhRpSheIjX5ae6WbQv0IefguqLm/CnaAJs1YBUOC7ZnzJ8KVP3eB +5DaZK9nkpqarPXLUoXB8GXxQK/v8K1Q3gmnVbbXjyfo+nOCk5SXrpZnSwJTuEGxn +HEbT0TVOZBFrm8uc4MHd/EcbVvfckKWCtdL61PSx3SCvRcyoMoKXRnKHuhrgWMFo +6mer6E0GhVUSK7U2CHj8mL+UCHwc4pBYG7stxS0HmwBcUra/hP7/Ab9AjFyMOJ9+ +wxW3ocyJjp7mMrk3GAvPojM0rv9QSxOGk/CN9aavp1+xLh6S5vMgE66iY4H4BbDk +cc2uqK3MLHaw5e9PhoHli0/Q0tIoi47z7chrlfesfhMMpj+QbfXxjcvMqOE/AXq7 +JHrNNMJI3iYLDK2MD2gCuI0bMeV+KmacVoHN34SNNm4Ojl3cKkjdFVaVZEtyedgk +BWZmR4czO4RVK6ISiygLCAl9PmCrMOXORYtwxudJ3i2YDR/DWVo7syJ1HakwS4Li +UZv7u+jTlbV2sHNYdjs3xD/ozKe1JzNY5PEeakqdLmUvN8sVQrW+lcgWTN4ChT+9 +UHoOHSMRFlcQ8kAkxuJbCo4oJgpf5p2kWD1I13CGV8xYMnnHiLWyAKF00M3BUMF2 +hsoFYoWIedzpptSdjvCEpe5NWg+t3wks5K9pEiYywvYQhRUB66UdUNTcAYNLkt+S +fCLULmYN3Cbz645lhMqiBn3vEM378EDSTvjnk5LXWl9VUguV5cUvkM0GKDPHJY/i +I9DUnCtv2d9c5unm1muGKByIxF5lY7DZdeCqkKSG68KRoX2KcYgt+UszohdY2hCD +740xFMAORlZLW+PyKamCELjxtkpu+nGT/F3V2L0RguzQicDqNfpXr5ZOjnAp1z1x +z++yMt4SF/YEBEZ58o7KnCqcPeAWCJVxf/leGDqp/iFnqgzoL/bPSR2xcvQv21ll +luZEHoQd+89QaAQRSH4PdGweF+Ev3n+vt3qtgyrzeX3uiTT3zOv5ryRpVR3ghj5I +tsFvqw5U0GxGyxA6UichG24N9kOEyPvEubZ9ICxTXyueIoLNv/JO/9b9Sm8VpDa6 +V+hEF2KTCFCp49LMCk+C/Vh1ZE7MNDubuwV/a/uHkXqSc/eqwcAglNyJGNDRVGvj +dkJO0KvNs2qghwX/f0nJp9AaRYlK7euxpKEtp0EHinV+m24XsNwCn9RQULvAJ9ic +Et63uGdT5LiC1dXkarHB2/uX2MFE2TjSvM/nBeFLVu7ZfTgGCrk0XxeH/Z6dGmer +m+Hwu6dWnHyU2nuuQ1I7tGMKNrLv0ei/gqIkvBvT+U3QNTP1oJNikGp5bclsRXGJ +BgHLmfxuS0gXrPn4l5uG/jtc63Wy61mnSelBh2kYriKU3AZHt8JVfWgC8YjLqYjR +XqZYQDENraJtdETug6t+j4rGfYYnkxAXfnZZseRgSVKYxhVS9DDPOwlpHHQNDgIz +e91JplxL91m6kokgYIr4onOxrfqlxLujjnwjQ4S013Rz8qRauojjC1+fj8rP2aT9 +2KrzWO4fDTiL5SLAckaXww== -----END ENCRYPTED PRIVATE KEY----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/root_ca_cert.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/root_ca_cert.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/root_ca_cert.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/root_ca_cert.pem 2021-06-23 16:40:56.000000000 +0000 @@ -2,78 +2,78 @@ Data: Version: 3 (0x2) Serial Number: - 2a:3b:39:ec:ad:1b:1c:d7:e1:c2:4b:2c:ab:35:5c:3e:1b:5a:33:c9 + 53:ec:a5:6d:e0:33:0b:3f:1b:64:64:9f:8c:a2:65:7e:c1:9b:c5:c9 Signature Algorithm: sha256WithRSAEncryption Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=test Validity - Not Before: Jun 11 09:20:10 2020 GMT - Not After : Jun 11 09:20:10 2023 GMT + Not Before: Jun 12 13:35:34 2021 GMT + Not After : Jun 11 13:35:34 2024 GMT Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd, CN=test Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: - 00:9b:75:16:48:ff:5e:c2:d1:f6:cc:db:a4:24:d7: - e6:98:97:e5:3c:b8:4d:8c:f3:c6:41:79:fc:3f:e9: - b8:63:a9:a1:f6:f4:e6:10:ee:15:44:d7:65:bc:3e: - 22:9e:84:cc:00:86:e0:08:6f:fd:98:1f:6b:9d:e1: - e4:ee:4a:ee:08:7a:fb:bb:65:01:d6:33:97:3c:8f: - a1:a2:3b:10:88:b9:66:b0:ec:ab:bd:aa:9e:84:7d: - e3:a0:a7:c7:dc:03:70:52:a6:1c:04:cd:9e:e4:27: - f8:2a:39:99:f6:1c:73:87:ca:31:32:c7:c6:65:ad: - 1d:94:77:f8:6a:89:1b:af:5f:d8:e5:cd:7b:9f:80: - 17:4a:72:b1:f9:2b:89:1b:df:52:85:7e:57:6a:37: - e7:b7:5b:4b:c8:c6:d4:d4:ca:85:ab:0c:0f:53:01: - 89:2e:bc:24:d5:a3:e9:28:3b:7f:b0:4c:dd:53:35: - a6:8c:4c:e1:00:47:e1:1e:2c:ad:e1:c7:85:18:46: - 1e:83:64:c7:45:71:64:31:9e:cd:34:e3:41:6e:a8: - b7:9d:52:6a:ba:51:30:21:d3:c4:f2:a3:9a:d1:09: - 2b:81:32:ef:c2:a0:b6:68:c9:43:93:b3:44:59:0e: - 42:6c:04:79:97:b8:b6:33:3c:34:56:f8:e5:8e:38: - 98:15 + 00:e7:96:ee:23:b3:24:f0:ea:3d:74:50:df:03:d7: + 20:6b:30:2f:2a:75:10:6a:c5:ae:23:3e:fa:46:25: + 7e:24:2c:c0:31:8d:22:69:ca:56:c4:62:bf:1d:d4: + 7a:27:43:99:e3:6f:73:e5:49:51:f1:5f:b9:a1:11: + ef:e7:68:76:53:cb:f3:3d:05:02:1d:79:14:cf:09: + 6a:79:74:c0:4a:a8:1d:b9:33:34:ca:37:d4:d9:11: + bd:80:3a:c5:ed:ba:6f:68:ca:71:d5:b7:28:dd:5a: + 7e:26:17:7f:3f:a0:db:94:03:e6:90:b9:6e:f5:67: + ef:5b:e6:43:a1:e5:a2:df:12:0e:66:d8:4f:eb:a1: + 75:86:47:c8:bf:17:ba:86:ac:9d:d6:54:dc:2d:fe: + 7f:09:64:11:7d:62:1f:cc:b7:cd:06:90:0a:eb:6a: + bd:e4:fc:1f:a4:6f:62:11:47:df:9a:9f:14:8b:20: + 32:cf:a2:df:91:b7:f3:7e:37:aa:6c:13:de:a5:8c: + 00:2e:06:83:85:f8:44:78:f3:9b:58:21:4e:3f:3c: + be:f0:53:db:3d:36:4f:c8:69:f0:4f:0a:4e:0a:5e: + 6f:d9:ec:bb:46:d9:0a:04:d8:8f:eb:4f:4a:97:0f: + c6:de:e7:aa:9b:c5:a5:87:18:3c:54:04:11:e6:ee: + 54:e3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: - 48:61:63:44:F6:1D:B2:0C:3D:C9:9F:0E:50:A0:53:46:53:C1:B0:76 + AA:B5:9C:D4:9C:C9:0C:A7:C8:55:0C:9E:98:EE:55:03:52:00:D9:08 X509v3 Authority Key Identifier: - keyid:48:61:63:44:F6:1D:B2:0C:3D:C9:9F:0E:50:A0:53:46:53:C1:B0:76 + keyid:AA:B5:9C:D4:9C:C9:0C:A7:C8:55:0C:9E:98:EE:55:03:52:00:D9:08 X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption - 13:76:0c:18:d2:b7:d8:95:a1:4a:da:8f:8d:fb:92:8d:0a:d8: - d3:6e:98:97:85:0b:29:fc:94:0f:75:71:b3:98:cf:19:a7:11: - c3:19:7b:07:bd:52:1f:58:f2:36:39:f8:f1:6f:a9:ac:f2:88: - 37:98:5d:ad:f8:bc:46:72:f1:aa:93:0c:92:e4:80:54:5e:ac: - 20:3c:f7:56:3a:a3:75:c5:5c:1e:0a:da:5c:55:4c:32:84:10: - ab:a2:b9:db:66:f0:48:74:c6:f5:69:da:f8:b3:52:e3:76:db: - 38:fc:14:65:db:20:af:b6:08:bd:c5:db:60:d4:dd:f2:bd:3a: - 31:24:7c:fc:3b:3a:ed:43:16:69:59:48:0a:d8:ad:d4:0f:dd: - 8d:97:8e:50:0c:7b:60:4e:91:7a:52:87:c9:19:72:3d:6f:62: - 18:45:a2:7c:26:bb:25:0f:81:9c:d7:55:08:18:d0:7e:6b:0e: - 9c:86:4b:51:ce:0e:56:40:ac:d9:6e:4f:84:ca:7b:03:07:cf: - bd:8a:86:0a:a3:85:b0:f0:2d:ac:c4:4e:d7:92:09:15:a3:0d: - 62:77:25:8d:c1:f2:56:de:06:95:e3:7b:2c:57:b7:3c:ef:98: - dc:78:16:c1:95:75:b1:98:1f:4e:d8:30:c3:4c:4c:bb:ed:ed: - b0:3e:ae:f3 + dd:df:ac:b9:74:18:72:4c:ce:0a:64:ca:83:4a:32:4d:53:dc: + 5e:b6:2e:9f:9e:ff:74:53:2c:fc:4f:55:57:50:6c:06:e2:5e: + ad:1c:b8:a9:b9:3f:3c:6b:ac:08:bb:65:24:94:3a:5b:07:6e: + 94:49:6b:ad:fa:be:14:c6:4c:01:34:96:14:34:da:2c:0e:78: + 4b:b5:e9:5c:47:1b:e0:3f:14:3f:a6:7b:f7:0c:50:75:79:62: + 0d:dd:6c:04:df:a6:7a:2d:e0:54:06:fd:44:43:97:2f:c3:0e: + c9:6b:ea:dc:de:d8:0c:da:51:47:79:d0:95:cf:45:86:8a:89: + 4a:18:ac:3f:05:c3:e8:68:c1:70:26:31:b4:ed:fa:80:64:8b: + 8c:fd:fc:a4:88:ad:e6:13:6f:d7:db:b2:4f:dc:2e:69:a0:45: + 92:6b:62:c9:2d:a2:52:4f:32:e2:83:7d:d5:e0:42:35:fc:2b: + 8e:e7:bc:86:51:ce:2b:41:be:57:9d:10:1b:ae:7f:6e:02:20: + e0:a1:b9:c3:2d:2b:f7:2d:86:37:5c:1f:0c:3b:9f:b4:18:7c: + cb:ab:67:0c:9e:a0:74:2f:5f:52:e6:54:2d:ac:c1:9c:64:41: + 40:77:63:a8:41:b4:16:54:b9:3e:ad:34:65:e8:77:f7:80:73: + 1e:b8:c7:0c -----BEGIN CERTIFICATE----- -MIIDiTCCAnGgAwIBAgIUKjs57K0bHNfhwkssqzVcPhtaM8kwDQYJKoZIhvcNAQEL +MIIDiTCCAnGgAwIBAgIUU+ylbeAzCz8bZGSfjKJlfsGbxckwDQYJKoZIhvcNAQEL BQAwVDELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0yMDA2 -MTEwOTIwMTBaFw0yMzA2MTEwOTIwMTBaMFQxCzAJBgNVBAYTAkFVMRMwEQYDVQQI +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDENMAsGA1UEAwwEdGVzdDAeFw0yMTA2 +MTIxMzM1MzRaFw0yNDA2MTExMzM1MzRaMFQxCzAJBgNVBAYTAkFVMRMwEQYDVQQI DApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQx -DTALBgNVBAMMBHRlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCb -dRZI/17C0fbM26Qk1+aYl+U8uE2M88ZBefw/6bhjqaH29OYQ7hVE12W8PiKehMwA -huAIb/2YH2ud4eTuSu4Ievu7ZQHWM5c8j6GiOxCIuWaw7Ku9qp6EfeOgp8fcA3BS -phwEzZ7kJ/gqOZn2HHOHyjEyx8ZlrR2Ud/hqiRuvX9jlzXufgBdKcrH5K4kb31KF -fldqN+e3W0vIxtTUyoWrDA9TAYkuvCTVo+koO3+wTN1TNaaMTOEAR+EeLK3hx4UY -Rh6DZMdFcWQxns0040FuqLedUmq6UTAh08Tyo5rRCSuBMu/CoLZoyUOTs0RZDkJs -BHmXuLYzPDRW+OWOOJgVAgMBAAGjUzBRMB0GA1UdDgQWBBRIYWNE9h2yDD3Jnw5Q -oFNGU8GwdjAfBgNVHSMEGDAWgBRIYWNE9h2yDD3Jnw5QoFNGU8GwdjAPBgNVHRMB -Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQATdgwY0rfYlaFK2o+N+5KNCtjT -bpiXhQsp/JQPdXGzmM8ZpxHDGXsHvVIfWPI2Ofjxb6ms8og3mF2t+LxGcvGqkwyS -5IBUXqwgPPdWOqN1xVweCtpcVUwyhBCrornbZvBIdMb1adr4s1Ljdts4/BRl2yCv -tgi9xdtg1N3yvToxJHz8OzrtQxZpWUgK2K3UD92Nl45QDHtgTpF6UofJGXI9b2IY -RaJ8JrslD4Gc11UIGNB+aw6chktRzg5WQKzZbk+EynsDB8+9ioYKo4Ww8C2sxE7X -kgkVow1idyWNwfJW3gaV43ssV7c875jceBbBlXWxmB9O2DDDTEy77e2wPq7z +DTALBgNVBAMMBHRlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDn +lu4jsyTw6j10UN8D1yBrMC8qdRBqxa4jPvpGJX4kLMAxjSJpylbEYr8d1HonQ5nj +b3PlSVHxX7mhEe/naHZTy/M9BQIdeRTPCWp5dMBKqB25MzTKN9TZEb2AOsXtum9o +ynHVtyjdWn4mF38/oNuUA+aQuW71Z+9b5kOh5aLfEg5m2E/roXWGR8i/F7qGrJ3W +VNwt/n8JZBF9Yh/Mt80GkArrar3k/B+kb2IRR9+anxSLIDLPot+Rt/N+N6psE96l +jAAuBoOF+ER485tYIU4/PL7wU9s9Nk/IafBPCk4KXm/Z7LtG2QoE2I/rT0qXD8be +56qbxaWHGDxUBBHm7lTjAgMBAAGjUzBRMB0GA1UdDgQWBBSqtZzUnMkMp8hVDJ6Y +7lUDUgDZCDAfBgNVHSMEGDAWgBSqtZzUnMkMp8hVDJ6Y7lUDUgDZCDAPBgNVHRMB +Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDd36y5dBhyTM4KZMqDSjJNU9xe +ti6fnv90Uyz8T1VXUGwG4l6tHLipuT88a6wIu2UklDpbB26USWut+r4UxkwBNJYU +NNosDnhLtelcRxvgPxQ/pnv3DFB1eWIN3WwE36Z6LeBUBv1EQ5cvww7Ja+rc3tgM +2lFHedCVz0WGiolKGKw/BcPoaMFwJjG07fqAZIuM/fykiK3mE2/X27JP3C5poEWS +a2LJLaJSTzLig33V4EI1/CuO57yGUc4rQb5XnRAbrn9uAiDgobnDLSv3LYY3XB8M +O5+0GHzLq2cMnqB0L19S5lQtrMGcZEFAd2OoQbQWVLk+rTRl6Hf3gHMeuMcM -----END CERTIFICATE----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/root_ca_private.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/root_ca_private.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/root_ca_private.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/root_ca_private.pem 2021-06-23 16:40:56.000000000 +0000 @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI/zTjgOm/w6ECAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECCPS3zAIj3X/BIIEyOCNPW47rYWh -EcGYI4xdaj5RE5pQAODUsxBVbKYNIUqsaTztQONXEjePs6BM1R+eE0xM9ZiFgP40 -ScJMbohtcacVohRipbFSSb3menK4naMN5eEkGxOJaFMEOT1uYa9eDygCO+QprqNM -S+MY/a6n7SYz0j90mkljYhBZLR/Xi7WpGITsBUPbcVmuqJYMQOnERj5PmxHw8wWg -anvMNaUZpOLGEunX523ZgcMf+HqZI4gWSiTxL5wG4JWgRRj7foiFAlFAIzyTbguk -+JnuJ6ShfJEhZuOGhQ/Qrsw8/ITzsiLUoixIhSyKbW3WlbHWkH4DFXD8NuZnaKQV -l6F5OPgjaE425GOYt20uxsH/tCCZ2iMtB4pROrLhr2KhUqbSBcWEa4tJN9Q8pizc -9kU+ZT2IstN6i9UzsDnLedyfE1PKU5FL7PPTVwg0C3M/4iiY3aGkqd2cSnKxnK8a -MmrhHPCOAHjwCewp7pBa3m0zPBuVDcQeF3jrRSa4lVndDGiMJ+diMobPNrfciKZ0 -AyeM9j+KfPZsZ8GfTdSjC8MgePmrugaJ870yUb7DDCDpAxjWRE2T3kneLqZY1iGJ -Rk09AIIKth7zAQc5VrLsvslWtn4RcJgSpLmlTxf89sMB6KA/6TAbw5j6Jqp1NHUE -CFC/w9fOeDvmBOvDqSEYXM79kS3JLtGD80zj6MqWT3iIbLpXjbStsGJbpZWuAe73 -99QnJNvDTW+7FB4bRWBhbjeGzNoVPQowS8oB+9epsk+4P0wNCi0SxgvedHheO8Ql -rg9LtZMa+8CmgFpkkZdCYc/cpJVLWCi+i/l4cWU+aujmBFqnGjxa2lorKUwng6gw -Tp3yuPYAJQmWXCL/3fO4++258/V1UIWO2oFqBo7HiJzCJZ9WHtWEmSYi5Bz09Unm -0XckQmD88/f3MHhIjHthrxozkg20pIARsiBkJBQ/cXXwRNPaKtC8gJMHkC8T/Xsb -MjWE/5EsMvoRapRfRAJuQ2XeYL1sM44AydCLpAaO2tay7+s7JMKQjy/zOcgoTL+3 -pON7FhvJVvZf1RlQUkq9m4gNNyWDOkZdCzTuYeULgqvaXw8QbZaAJQ280FuexVIH -saQDv2fDEVwB/q8wCrka3xdRpK7wf5W/xYo9l8U1xMSBdIbS4icJF0gq6u7Da9Ww -DrQceipTFVNeioO3kvX8oFJnZ3bdBr/ifyfWL0IgpFanXDM7iYye+NKflDh6VV3t -SQ+Kb4g3ttFTDCtVRNXFwCatILetq8amIC9/YTyjCSiGAIFcsdGjksOx4E7E4Vy1 -tyUPLoWV5cNxJA1kaB1SNibIaFA2ecyRMGp54a2Hqpq+gNZHtT8lU+WbDQ7byuR+ -yCDh+G+f3oYCMJjqtq9wH3ZNrEge7YsEacNa8qEXPiWhU5rfsxWO67vIWg2Tq2KH -V/gk78EajbFL6yI4+D4CbGhUFbQykUW2PeqzeXUSeT9ffFF9mWNPC0eV9BnXYICb -8adMbw+H9Sd7lewg1bglvjg6q7KK/NFTTuZoLNAepLYN99ezwt0G5VhF7lxxeWfZ -j2G8nJP/Tq8ILAfmi4usMvN9iUg+z4dfr6Q807A3HvjAVzUTWmkYpqjmUYAW8BrR -kwKW1gqSc+BGDprPYsRt9g== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIzUoyoTlcopQCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECAU3RngL+9FQBIIEyHpgg5xaCQ6G +vlcVmcQ7XsMEit8FynYRjF4tGHdIwbTYI78MU5xkoCwMjjMKbKpC98VArtoSMZSk +4Wf24UomR7svpeBtkjc/E5lULgzXPUhokH9FmIvh7hkS8aGt2fE8p1JqKOK+6P7g +I74RKhP+Vx6MTuVzUbeyji9omdI6Av95ux9ECYBC/unEphXlEX4jEFiTzMRvNgH1 +iV4BZjwevuNsOJkhLJmFFVBv97/tFkd48I6MqROVrQQlDyQCWcDTd2hgavZURj4G +L+usJEwE/5mdwCmzm7cEhyaMYfFJ/nTn9hGrxRxrVvC1faBXdVa9x0rKWWH7zPwD +y8B+BurA31ofTJZrH9dM+D4vS9UGhHjNFPMQCQtokVFODSdy079Ef/E3fsIBi3Hr +6FZO0pEHB67wqrhjmovgOQZt7LUDJoDGo9cOWTBetdNrBNjMn+2ND/mIkL13J19K +cNOn5yS+lBFZJdpGxJHmL7Fq9MM29mGhYy4irDLkHTdumNwM5FpPQ7CFXStvh/QN +JU5LvEZNkGBaxkVGs505a79lzCNiv3nXSyGKGa7jKIxpPe4yyV66+uCWku10PGdV +CJFa1x9JS1+PlKwXCKqttrqQVFa9Vx/KaQagDg4pGwEBUwtTg9Y2NWXCBH5k/hou +Ahb07hVLVSoMJSNspESv07C3mZHOkgO4Axs+uEUKZqzhRghDIaNaRw5r/dWaqxY+ ++o391Hwx7z+llzMszkt1+F/ze/DLOPXKUCjOxt/V05+9H9HJk2XCZ09u2nQnq8Sd +GLX4er6CL5naxHh+B5QRd08iNrYWGRzkZESyiB4GN9mFHS54k+L9fQMoAlJMZu+B +XZwGgdkYQ1YbaCLLuuftPNytRk4zuYYxux7HKzrdXmH7ehFxRM2D95A3fzULtYlv +nXc5foPKFUbOUJ+ZuqClfYcyWJ+R5+FJIALGslK9Zszizb2dmZ0XLIDC8EW9PD8X +UMKwRigFZ9+ulHj0EXdljV2iFZh97GWnpJsHJKJBykfcdGaW+6f68jpclvWEhYok +p3K1/JLXNYkC9vnqiVirUhsdZbpjp/mUyfThwT9LI+jJR0iQpemlRIyj4CnELqlv +1RS4vN53MCO0mZFd04mndau4t39MWzyeNAskclqlpsphL79uYAXIffOo1zSqjtEQ +c+TmhlmJxQLNXoZ7hGC8TspG6J4xRewFV9KdifKRRnG+8nhxDqdOUek8WezWOdNH +bqefEfwel6KklBOJ6YYkKPVV5UJQ3ENLLsd7Bbf6gAcoYjyhFeQiBgswSUoFfoLU +slHOWSg01G7kOwqVl+srVjbnVNNE48v/N1G+mUjToKwWUgqOnu29JXim2tICD1MD +xrx4qrXTUdx4mxBtnqHIi2cxXoQeTlDQiDHZWqe+brAbsfT9tAgS855V/FlcDiev +i0iJCVN4o1/aC956UVHpHuE/UJUKs8PxeL3c9+uJ48T9lrxXC3oQt70chgrRtscL +YORSUMM/EmwaJ7okluefWpqmsFbIHGV3eUZJijk6RpWzP7tL227jkO7puUr/HoZD +GpqipQX8HhrVwPpQYpCSjDHRhdxqU2HqkDsU2/tNhHGK6SsVWRHyl8tgiDDefkgu ++CzZ04hwpfQjoPomYhp+sw== -----END ENCRYPTED PRIVATE KEY----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/server.pem libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/server.pem --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/ssl/server.pem 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/ssl/server.pem 2021-06-23 16:40:56.000000000 +0000 @@ -1,84 +1,84 @@ -----BEGIN PRIVATE KEY----- -MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDI7aFbjoi8eCqD -9mGu/Bjka1De70rhNwxIZjtdm6/3mAe5Fj0DKh/8jiZAuI0alkXR+8i/FSINAUWi -edl6eNc5KqM/sOLV1y1XCOqOllcCy/2BQxhG0HvmbvvFl2wRvlk4Xt2jcZ+ClQb1 -99tL67ztxipITKoi+1yHOKSSltwVQw6daKKK0dP/CQniEhm5wuolJzfaf3GkGTrh -TC9FG3HNL1B+T5I4ZzR3PulwT9HmuZS5m9OxiKEp9wcAzUSd5pR7IcGRpxOwRVMv -oiOJ6lTPjUo+MDqDMMQ4kseH2FxRl8nNENNa/ZTa5Xbs97OaFbQxOnUlnCJGxXB8 -VO9nEAJHCVa1cWCkCQG6f3bnK/AK7B53BDp13zPlFuEZITMsCaDjGb5SZfYQAkuP -OJS7oes7ammj7w2GvSV1hO8wV6+u51R//EhE9lGq2H1jDEfG7AqgzmuPvIQObl46 -dpM68H4y1mDRVJjtCnG+kKO+A8DtDPDo7b3CjYnIluky1RZjaZXmIpgWx6HuB01g -4HOeSxmfXRNqL5MvT8dHLtfmxnoCUKG8qR7OAPsaQnRcYSGOXwdvnDLVQyywukNr -koy8NHY0cnjWtl22lwQeOXeN97aDzvgUegYL+Ti0xdwDayCrRzWUstb2RQfJeEwx -YrxZ5CsoHus4tbTf16d47dQy/XY7lwIDAQABAoICAEHgX0n0ZnJcd5wCeK51avfh -E4e0Lvm+IaHPGuGq/LuRtd6CIwjZk9krBfGsUF8KK+QXyA6WMC7RXvJRPvN/kRjm -GNX1+bkgrnXdr4GGWwrItNnflKMLEcRQWO3EoqMCpJ/twn8m7qRSlhCo7dZreOsA -ULaZpCKKBSE0egixu4ChFraXKsuW1gnE/d+IDbUw6bG6tP5HUIv71akuYEUpJVuf -iqWPEyK4+6OpFcJD+U7LQ67DH1oSsLxgiIRDyJ54je/89kj53WOqpwZ0A3DhSmMu -MMxI5bZDk+H0hcTNNB9wQ7KfNJydjWNjXmV9JP585TJKt0PYeAh6DVJGSqOgxQ3O -hQ5keEaP4DlCcdiK5PMW3IVaeLXRKixqubaaNoKMy1CkN2nnpmoVTi0smlih2Su6 -fcwuwJp4iCJR5bwhLHgIIVMMhq2YstvWr/g3iSGZwW5wTIrLOdqU0WsroHTLCuAb -fcF93DjZpHpSrQTdZAemDdmt+ZHje2lClZhvpWvJDMFVAmKlr5YzrCAQOdtj6tvj -1D46/spezll+oyrM56lR2p2xl6JE0X+eioZ+yOFbr8yEsuCSibelKNayNqG/H3Md -NMa6DK2FMwhrb3spzsgqQxsyWd9J00e7SbyJ79MWPa1cXPRVOXZp943nblFB7Zqe -XXhQEHR4lUyo2DP5/grRAoIBAQDpA5/5F+xMr1PHzOE0YhV5UkbHJjR/KPfNRXwZ -/bCC0RAyOAcvM1N9JG1WPC+R9XpjMVqI+Xp8nqS0tdr388jPgpNEmS4yjCynJauX -tmAIrhd3b/q4rYtJjnzC5W337wi9bY4pAftzh5rHk7FTAmgxC0Gb7KCCAULbTGmk -DTTePajpAQxfM2tsde24a2fSFVviXN7HTbav4fqhU/Ab/bSbF0vdn+1i9x9OV3iw -mGl6qb1WdpixfZ6BkVFkVBBjRI9AzAS9Rf8WHe3qG5UtxjUba1X01GAG9cDlhX1Q -62DF1IaTb9DR0QrskJeep2bSn5cLiKtlT2MhHktYH8RErFDpAoIBAQDcv7r2plnT -hXa76pAFDCReZKzrqzRg107IUEm8rCaNEYBkcbFXbPIQ1/HrmNVO891dONm+kUZw -dkrfsBsLEI77OMQISWBIW+QiySoinjta5WRx3IJAv1dsM4W9jF1OJ5e6NdbKoquz -2amy7xm1LXOSDAtUTdQT+hRbichUsluoX4Og791uWalk8ypVLQUvusRuJFtaxbkV -yjPd5H+50Eiv5/jpdLRQn7GDmwMy64ebL+57EgP1uUqWw6pdh1dJ+kDheFnYKz/Q -q4EF4rznmwzEjE9R3e5iJxpBzWTIRR/sXwvh39QiNjZluhnbAIhEUzfQpw/4ct9Q -eETZ+YZkmlh/AoIBAQDjTdjxSkgF6oalApSx3/iot/05amiNny5UfTL5u8NDaaQO -CR/hCIWqLy3FkMKq9LdmKg/yTMQS60Mq0bgAZzz+SJdWtMMfJiStDQ9d2NfHv+Q+ -a+s92nVk1O2ZxevHj9OLzmJ+WGOtqJvxkn7JxjBTn3JqI6PUDlzkxp7LHOL05Vtv -qMkj2WoyjLvQSl4lzxYqNIRSEdpjquMuG07AT3auUER+tvMAtqdAag3e318N/KUp -wllj03IbXOH0KBkwbQH9qMf6x1x2e83JsQyOcar+y283fTELuRJqFBVSKbrmYVLC -YrJm6zBn4wk1CIJCdtIGu1TPaGkANqgzGBIDF8F5AoIBAC93WrBmnLIK5LkLeuRa -9AcIBta1/ZFFOr9/5BsZuUBkHwN6HvP5jSNqC67pMhTEAzlkXA3KFydfiEIJEAeV -C+mhDyXpATcN60Q/lTvUYlbtNGf3Tlq1ygqOGZfkcru3b7yujv0LdXg6uW6sUw7O -MyeYR2ddRNj20SHNwrHTmDngL+GPMkHkLbRzRQsDnzXgJxS35JzkHyQ8UmLIG17N -FpQcgT1RxuP/MqBl2I4+bu5DpDf6a7eOnCdG838g9vgFQ6Y3xrngstwfxKKLWqtC -f8BTm0qzOesJFXBIxf76Ph8JYPi0tFyW46OEHMMmniZy7nGDOr/lk3cuJT/pk6hW -N+kCggEBAOEJP/PI91CvO7LTuibNYOtVos+dH4X7sB01+JBs3u8ZFMpyxtm5h2dQ -4aUavo0V1wcsOhuYwLjidPS589XP59BWJTs5e9Fky9tpvfrKO/rzL2k+SjHKLgYv -JH3OIydYTRwL6Any6QoPGmYEi8lyqlZa5bl5ePTR7se0I8oF07YX0mcN/hDz5CJB -c3ceXPKcCajk8xp/cwZyf3sa0P5vlaRmlLBQTxdhdLFcxyUGsgbtWdpnoSBH0zc2 -cv+fnsFArDGQ72Bzy9pnN1MJ2/zFg1uZeedUTnYo+5VsFL4maewVZw8fD045H6lS -fzUqIPuq7jM27TpNqCyu+1YAdJfYENw= +MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDad7HG/Gp4c+j8 +VBnlMIQYHs0lNFYxdSe9cQ6d+Eww7yakehn0rpW6DPjsQOcvpvzkWG+hN1OVN28m +D41h75MfiSBRgwNIfpOKKYhsMyZAwkrytyHRPi3n3vcm2MYSrhnWktyF8SmlMqsb +GPUvXA7N7saAMKS9cjOk3KDHY105kbHw2h3bfIsF44p1z4aubzeAGjcEesQ1h7rQ +9ps5eOJfGVInjb24vE0tDomvhs1hvOl2FvNJD7AciLHEuKGhiDhIQ4MKwGAIs0YK +pzhbvUzlsecaBDNiFdoC2txmSxWJ9VoTHWXkYMfTPq8R75VBLZ3W6GYVRtYpegHw +VBfbMaG+BLmCEbq5u/QIW4cziNBf0w36ewZV/0OJMlY63w7Lk/Y6+/NLh4EgYXZN +eriuHThYW5GaYqPuKctEJRJpkD6FqleJNRLJQqu3hYrexV41izlrUgqREPRAOz3b +lA/9VJmzfAjDAKM5gWEVsvxBiOfnL73eGcNUHCw0mlmRaQfikHGuh7XkN6x0Iwg1 +BmcNFYdSM284GIo7T59nJwxL62NEF04ZHf8T5XfnUnwV0W08U+1sPiu4ZDFNMMyz +t1eVbqvGwc+AiUTXe1oV15kmn+9hMkOp0Re3Wz883tdIV54zNVMbYDeIGjzevHtp +IyKq3416s5BqPiXl+DoUa9YCrDQtWwIDAQABAoICAQCdsqb+VzhXyHuWoPKsUPAZ +JSq6P2Q0gTf1dIWznAcLj6XaNlVEHT3xNen9SABZknWcMwYpXnGUFZbC55kL587Q +hcBxdlvJWa0Qn1hdmjJzroxBVdYwX2ztojHPtcyMsWXvUMWkXefM2p1Oix55WD9L +gZ+B6xsPsT78M1JPezdRFg1XKWtCA02rK4vH7MxwX9G1Q7cRIbk+VsKQkmKMAumM +8g8uhA8+KZaf/o1+yZS5h48SchCdXZinkDiaIxhxLI5MA4e1HBZ2UUou6HQzLJs0 +ds22JvAcTl+3jdpocKyUkCm8AI2LZBz6LJZdIQ8hJFd6SPlfRGnVOL/rhhhOXi48 +UK9EYfrNyxwi58LpG28cIn1kVMatidLF8+qz3vIo3kcXktoNU5l/hdVKnpeUZEkc +BNXzvCX5QRkojpt7dDKGuvobd5qKFmGUJZzqbHzUssK/+iyoqnTc+nbjsDxOoMPD +v2qmvxK9aG08Z9y0sFYsoUB+dmWhzIDww5/i+BQ/h/54w2CqGB0MCWhpS9El6o6k +hGFNTYivzTfe+8enxFY8EDyzbmTSAmVdq6KxpqCQOTtYwOTgFATWSPNlLzrXoLrG +0pP863hl8PlEseQhO3zgNU9SITVKXNnSXCKvQaloZb9Izv8HpbHlZfTf8cJFmlbQ +chyvkmmnkTLoEWphLzSz4QKCAQEA/ISMtMC1Hwdu1Iz3E+pA3ChLyIWe1VEsD4Oe +vpNUoLHX85p2seFNMSeLly4lVWT+BQnDdsUBjDnPc/Kt2MImNFyPSfwJMrU9pz7Q +lqSn0JFPftLuh2t7CDNAQOWk/M99xaXck1dljq3MwyhIJ0sqDjV49rFWWERg0HSI +6kBxMmvRzHtuEX4nU1mBSqV1owUm9c29fodAaC0sRcDjRblh0U5FVeH+wEwG8VDj +cyiWMEFkdI3TXNqvm6cH6rdWcQf50GXy1wav0dV3Gin4wc5NmWkl0muH5S2Xz9CS +oDMGkjr44MLV7A4/Y+fPgAOBPFh3ctMf9W/BFAtA0oauYij8kQKCAQEA3XrwaQ3T +QAaqqRZAg2wOlKj7pxsweawPL4OyGApNGd9qSihl2OeUjJtF4sWKfGR8k52H72Uu +MlUaichMyfdQ91vExh+GHepUcnJClyBzmXGxRLVdnF/FTktVGCBbNIg22nDUDRVM +p7tcFmO13L1vXbD7ic/QPkmE2qD4U3LFlaRSa67X4DypR6Qq5eHNU02O63QLxpjD +GgM+yJqhLkJ8I+95wvMgF2cREmcneSVOfbMLM23Yr4mv8eEy+sp+fb5BE5NuG2mu +uCvQezRRausp70Fpg4ADktBIs5aochmCem8s06t9LpntAbXWyIToMCFOKgV5sXyr +SSiBKK8izFoxKwKCAQEA1FmDGd2UcmuFwChq/sxXjsw0LoRvdWO1cbZ1oD21RQ1J +VQnoFt4oU9W1hYTA0HcFRqdXQGGbU5ip5A+IMmfSSOYteUIBWisfla01K/l7ReFs +wHIRNMAlzleLCQgVHqQ+WB+Kxj0QolN1hggx5RlIXHqLJqkquz+FSsc0/AkFKCmT +XCnP/dXgrC7wkx1hN531jW9ekzCZ8QFL4by7Yr7qi2EO3ZIW8Q7+J6CmJQlUg2/6 +UimSPNuKIZLtDWzvvE3Avod9F2YAJK0mY1I4ZoJer0vFCpZyyT72E0SKiT1foUkG +UbyGuOOiWxltXXGVFHIwwNbaYUOBUqHD+UZZDyL4gQKCAQBqAdXf8oYSNx6oH8Zx +IN85uEf7C8B//CKok1hCuWt93rl5FSzqTK2FPyyMBhDqyQ33eYb+xmb+IE27dOuM +H5vZSUs9qQkAeJBC1v2YaCfsYcZ/JG/R0OUXPGdWTOZalnfqxeY4/ODbx4mkDcWW +CfWr2nIK3DTIG1hDbJhvGJgJr8TjVaRt55r+d00xCorEPHMTr0+TlrqLUNJUIe7T +vW69pHmbHdNWYDaDoGv8SCbxcykBTKpSGozkMO29q/4vIUj0nbQt2r+N1yrKTZhK +nJRNt/lQv4z2UEr76jhlpGAXSe8iwQoBrBsMnoRXJYYcw1QuOMCuewVg1so7Nthp +ByJRAoIBAQDwuZQ5/f9p8PyjsmaGr/cdcMar9pYdIuBULtuKJ6XH3cXg7L7bnwpU +hlJ9/E89YR0TJWyhZnkk00YZvAZhUSyH6UNObRGM4uIKRj/A9bZcwPFKacblUv1j +JoeNa+pP/T8r1AGfeylL73IVV80P8KZMCy0Je5QbKImmtQD/w/zz/lcfRRnF/hen +3UMLi+IekiCIDbx3OQ7M7EgURXSLoTJ4JFfFlyLyhhzZRmf73F317BrO5fNs/yHh +8T2Pxi7y7F+JMfMtn8QK8DNr8gZBKsrfc7xiMEAt4sj4+O40nfCChXbFc8I+e1Rn +Bkinmk7Wn7d94Jn3wO7Hg1FFrKumUaRa -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIUIoHlGg6C4To4/8285eyVzrYCxYUwDQYJKoZIhvcNAQEL +MIIFgzCCA2ugAwIBAgIUCsGc60dOoiJcatZSQnAxnwju+kUwDQYJKoZIhvcNAQEL BQAwUTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEKMAgGA1UEAwwBKjAeFw0yMDA2MTEw -OTM0MTNaFw0yMzA2MTMwOTM0MTNaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApT +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEKMAgGA1UEAwwBKjAeFw0yMTA2MTIx +MzM1MjFaFw0yNDA2MTMxMzM1MjFaMFExCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApT b21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxCjAI -BgNVBAMMASowggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDI7aFbjoi8 -eCqD9mGu/Bjka1De70rhNwxIZjtdm6/3mAe5Fj0DKh/8jiZAuI0alkXR+8i/FSIN -AUWiedl6eNc5KqM/sOLV1y1XCOqOllcCy/2BQxhG0HvmbvvFl2wRvlk4Xt2jcZ+C -lQb199tL67ztxipITKoi+1yHOKSSltwVQw6daKKK0dP/CQniEhm5wuolJzfaf3Gk -GTrhTC9FG3HNL1B+T5I4ZzR3PulwT9HmuZS5m9OxiKEp9wcAzUSd5pR7IcGRpxOw -RVMvoiOJ6lTPjUo+MDqDMMQ4kseH2FxRl8nNENNa/ZTa5Xbs97OaFbQxOnUlnCJG -xXB8VO9nEAJHCVa1cWCkCQG6f3bnK/AK7B53BDp13zPlFuEZITMsCaDjGb5SZfYQ -AkuPOJS7oes7ammj7w2GvSV1hO8wV6+u51R//EhE9lGq2H1jDEfG7AqgzmuPvIQO -bl46dpM68H4y1mDRVJjtCnG+kKO+A8DtDPDo7b3CjYnIluky1RZjaZXmIpgWx6Hu -B01g4HOeSxmfXRNqL5MvT8dHLtfmxnoCUKG8qR7OAPsaQnRcYSGOXwdvnDLVQyyw -ukNrkoy8NHY0cnjWtl22lwQeOXeN97aDzvgUegYL+Ti0xdwDayCrRzWUstb2RQfJ -eEwxYrxZ5CsoHus4tbTf16d47dQy/XY7lwIDAQABo1MwUTAdBgNVHQ4EFgQUSINR -CWIfUI4fczdRlaZCC0vnV84wHwYDVR0jBBgwFoAUSINRCWIfUI4fczdRlaZCC0vn -V84wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAWsostRR7hK/w -znZoy2fmKLc+lvo8jzroJzFCS0XJ4vkAvsiAQ1rkT0kK+cxHeTZ0j9BK41hV1gBl -C0ZQwqvzosUNnl98qVIkDL2rQyy8k+ciicpY2+gafPfKAYZSYMdBAQS4twBsXZ5B -2febTD7Np94m6jpBDlhhnsV817nrlueEkf2SPqov42LxAT6mNiiMBe2SQ/0UIdXJ -iofPdP81Ztqq/4/pYr9WFzISuMld8GzOon8z7a6pv1pq/lKmGzJyM2QtbnCvosNT -uAww7ytkCSca4+D08/zIdBg7xNBPPScv78jTCg8V+tgjWM0CT0xY15OnKKHwfqig -y4/quJ7hOu5a9e3HZmmb4OQZs4/ARE4pkFCD6D0YY5MtAkW0Ve5UC8HM013SpxW+ -vSsprH1MvBrV72/ZFRWGxlqW+JMAlHyNA1Fp5NJFIJ+qyRr3SmUeMLz0QJrJpsfv -dyxxBfXCrhIybafYVc6mdrTQP9LfHo2IRGe+n5/LgWAwghbmBZPx7h7Ur2E79AWZ -gPBR9u6h7GlxJ9aL4cHboL320er73iheRpgDOkhpiNStdEu2enkUiLvHYhYtCZAH -SCH6DVaBmUwTHy+tK1Z5Ui7Hmknbv8QfEIeZwmvAFShza2JFZxco80kD4w+iKhEL -4Mzvptgh7+xsIcEW5a0rBCIAU/FcKzQ= +BgNVBAMMASowggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDad7HG/Gp4 +c+j8VBnlMIQYHs0lNFYxdSe9cQ6d+Eww7yakehn0rpW6DPjsQOcvpvzkWG+hN1OV +N28mD41h75MfiSBRgwNIfpOKKYhsMyZAwkrytyHRPi3n3vcm2MYSrhnWktyF8Sml +MqsbGPUvXA7N7saAMKS9cjOk3KDHY105kbHw2h3bfIsF44p1z4aubzeAGjcEesQ1 +h7rQ9ps5eOJfGVInjb24vE0tDomvhs1hvOl2FvNJD7AciLHEuKGhiDhIQ4MKwGAI +s0YKpzhbvUzlsecaBDNiFdoC2txmSxWJ9VoTHWXkYMfTPq8R75VBLZ3W6GYVRtYp +egHwVBfbMaG+BLmCEbq5u/QIW4cziNBf0w36ewZV/0OJMlY63w7Lk/Y6+/NLh4Eg +YXZNeriuHThYW5GaYqPuKctEJRJpkD6FqleJNRLJQqu3hYrexV41izlrUgqREPRA +Oz3blA/9VJmzfAjDAKM5gWEVsvxBiOfnL73eGcNUHCw0mlmRaQfikHGuh7XkN6x0 +Iwg1BmcNFYdSM284GIo7T59nJwxL62NEF04ZHf8T5XfnUnwV0W08U+1sPiu4ZDFN +MMyzt1eVbqvGwc+AiUTXe1oV15kmn+9hMkOp0Re3Wz883tdIV54zNVMbYDeIGjze +vHtpIyKq3416s5BqPiXl+DoUa9YCrDQtWwIDAQABo1MwUTAdBgNVHQ4EFgQUxX9Q +BkRnBmdWaZ/0AhWSD80Wx78wHwYDVR0jBBgwFoAUxX9QBkRnBmdWaZ/0AhWSD80W +x78wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAouqM3ovXJrXI +RKK6AGX6jNUeD98VyF4+B3+XxfV/VLBOUsZCBEEUwQnoOPWAE78vVYAmy2dFnnCu +6x9mTSshCZT2LBK1RgTFkJkQbu4ME4EJvUuQ/plNdc4+9GpFBF/s+v1d4HupfcDH +UwuLnfFo0fW3NdH8a0WD3+HtlYsEV/6WLXZ6FuZJh8MGiZG/A9xfndu3qgt3Imaa +yNR9izbBjDANEs1sIXhpp2oFEm4JSE3WPuzVGsqA5Pb2yGsTw4dUtW8UW0CdIBcS +Itr6Do2gzsuEGFYB3UwsEvHbzUx23QLI6BHhUW1ozSUhkSWko5r3FzZ8kgpELUJ2 +iHisC2i3HTsUYgsaHMxiznc81vvrVsrWSrAFlKpt0KLLYUqARL2Wv1T5Q18WbFps +ol84F1Nyjh4Th2kAKDxoxqgWsPTYxkS72qFe16aa2C4dy4IZKIbSqW+NlkUXk/bI +SRM4UjIhkUoRsAB6+XfcI66t4DvazXti0Fwr7CcimwgZFpDmT9WhQcWezR4ASI6I +TMyx/2w4dPIjbstVTujCuzD/mQgTf3TPlCRHK2MzSSQtL5I3co4KOiiA4owEn5Ai +sXImV/RsvlQnZD+D03geBywkxiyZOLWYB4SzbsOu/wBoaPX2M+2jzbvkpy5Uryke +3oO6DfNAkt2YqYgX5lUd7A6SKQPZwCA= -----END CERTIFICATE----- diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/test_http_parser.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/test_http_parser.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/test_http_parser.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/test_http_parser.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -536,30 +536,87 @@ TEST_EQUAL(is_redirect(400), false); } -TORRENT_TEST(chunked_encoding) +std::string test_collapse_chunks(std::string chunked_input, bool const expect_error = false) { - char const chunked_input[] = - "HTTP/1.1 200 OK\r\n" + http_parser parser; + + std::string input = "HTTP/1.1 200 OK\r\n" "Transfer-Encoding: chunked\r\n" "Content-Type: text/plain\r\n" - "\r\n" - "4\r\ntest\r\n4\r\n1234\r\n10\r\n0123456789abcdef\r\n" - "0\r\n\r\n"; + "\r\n"; - http_parser parser; - std::tuple const received - = feed_bytes(parser, chunked_input); + input += chunked_input; - TEST_EQUAL(strlen(chunked_input), 24 + 94); - TEST_CHECK(received == std::make_tuple(24, 94, false)); - TEST_CHECK(parser.finished()); + bool error = false; + int payload = 0; + int protocol = 0; + std::tie(payload, protocol) = parser.incoming(input, error); + + TEST_CHECK(protocol > 0); + TEST_CHECK(payload > 0); + if (expect_error) + { + TEST_CHECK(std::size_t(protocol + payload) <= input.size()); + } + else + { + TEST_EQUAL(std::size_t(protocol + payload), input.size()); + TEST_CHECK(parser.finished()); + } - char mutable_buffer[100]; + std::vector mutable_buffer; span body = parser.get_body(); - std::copy(body.begin(), body.end(), mutable_buffer); - body = parser.collapse_chunk_headers({mutable_buffer, body.size()}); + std::copy(body.begin(), body.end(), std::back_inserter(mutable_buffer)); + body = parser.collapse_chunk_headers(mutable_buffer); + return std::string(body.data(), body.size()); +} + +TORRENT_TEST(chunked_encoding) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n10\r\n0123456789abcdef\r\n" + "0\r\n\r\n"); + TEST_EQUAL(collapsed, "test12340123456789abcdef"); +} + +TORRENT_TEST(chunked_encoding_beyond_end) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n20\r\n0123456789abcdef\r\n" + "0\r\n\r\n", true); + TEST_EQUAL(collapsed, "test1234"); +} + +TORRENT_TEST(chunked_encoding_end_of_buffer) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n17\r\n0123456789abcdef\r\n" + "0\r\n\r\n", true); + TEST_EQUAL(collapsed, "test12340123456789abcdef\r\n0\r\n\r\n"); +} + +TORRENT_TEST(chunked_encoding_past_end) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n18\r\n0123456789abcdef\r\n" + "0\r\n\r\n", true); + TEST_EQUAL(collapsed, "test1234"); +} + +TORRENT_TEST(chunked_encoding_negative) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n-10\r\n0123456789abcdef\r\n" + "0\r\n\r\n", true); + TEST_EQUAL(collapsed, ""); +} - TEST_CHECK(body == span("test12340123456789abcdef", 24)); +TORRENT_TEST(chunked_encoding_end) +{ + auto const collapsed = test_collapse_chunks( + "4\r\ntest\r\n4\r\n1234\r\n11\r\n0123456789abcdef\r\n" + "0\r\n\r\n", true); + TEST_EQUAL(collapsed, "test12340123456789abcdef\r"); } TORRENT_TEST(chunked_encoding_overflow) diff -Nru libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/test_peer_list.cpp libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/test_peer_list.cpp --- libtorrent-rasterbar-1.2.13+git20210501.22af326f6c/test/test_peer_list.cpp 2021-04-30 21:52:35.000000000 +0000 +++ libtorrent-rasterbar-1.2.14+git20210623.c996ed7ef7/test/test_peer_list.cpp 2021-06-23 16:40:56.000000000 +0000 @@ -170,7 +170,6 @@ { torrent_state st; st.is_finished = false; - st.is_paused = false; st.max_peerlist_size = 1000; st.allow_multiple_connections_per_ip = false; st.port = 9999;