narrow the scope affected by TORRENT_DISABLE_EXTENSIONS to only disable the user extensions, but always support the extension message and the built-in extensions, like lt_donthave and seed_mode

This commit is contained in:
Arvid Norberg 2018-07-24 08:18:48 +02:00 committed by Arvid Norberg
parent 8f0cf7e1a9
commit b3856d3027
29 changed files with 143 additions and 120 deletions

View File

@ -444,7 +444,7 @@ namespace aux {
, std::vector<address> const& addresses, int port);
#endif
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
torrent const* find_encrypted_torrent(
sha1_hash const& info_hash, sha1_hash const& xor_mask) override;
@ -876,7 +876,7 @@ namespace aux {
// ordered by their queue position
aux::vector<torrent*, queue_position_t> m_download_queue;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// this maps obfuscated hashes to torrents. It's only
// used when encryption is enabled
torrent_map m_obfuscated_torrents;

View File

@ -294,7 +294,7 @@ namespace aux {
virtual boost::asio::ssl::context* ssl_ctx() = 0 ;
#endif
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
virtual torrent const* find_encrypted_torrent(
sha1_hash const& info_hash, sha1_hash const& xor_mask) = 0;
virtual void add_obfuscated_hash(sha1_hash const& obfuscated

View File

@ -108,7 +108,7 @@ namespace libtorrent {
~bt_peer_connection() override;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
bool supports_encryption() const
{ return m_encrypted; }
bool rc4_encrypted() const
@ -171,7 +171,7 @@ namespace libtorrent {
, std::size_t bytes_transferred) override;
void on_receive_impl(std::size_t bytes_transferred);
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// next_barrier, buffers-to-prepend
std::tuple<int, span<span<char const>>>
hit_send_barrier(span<span<char>> iovec) override;
@ -181,8 +181,8 @@ namespace libtorrent {
bool in_handshake() const override;
bool packet_finished() const { return m_recv_buffer.packet_finished(); }
#ifndef TORRENT_DISABLE_EXTENSIONS
bool supports_holepunch() const { return m_holepunch_id != 0; }
#ifndef TORRENT_DISABLE_EXTENSIONS
void set_ut_pex(std::weak_ptr<ut_pex_peer_store> ut_pex)
{ m_ut_pex = std::move(ut_pex); }
bool was_introduced_by(tcp::endpoint const& ep) const
@ -218,13 +218,11 @@ namespace libtorrent {
void on_have_none(int received);
void on_reject_request(int received);
void on_allowed_fast(int received);
#ifndef TORRENT_DISABLE_EXTENSIONS
void on_holepunch();
void on_extended(int received);
void on_extended_handshake();
#endif
// the following functions appends messages
// to the send buffer
@ -241,11 +239,10 @@ namespace libtorrent {
void write_keepalive() override;
void write_handshake();
void write_upload_only(bool enabled) override;
#ifndef TORRENT_DISABLE_EXTENSIONS
void write_extensions();
void write_share_mode();
void write_holepunch_msg(int type, tcp::endpoint const& ep, int error);
#endif
// DHT extension
void write_dht_port(int listen_port);
@ -298,7 +295,7 @@ namespace libtorrent {
// will be invalid.
piece_block_progress downloading_piece_progress() const override;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// if (is_local()), we are 'a' otherwise 'b'
//
@ -327,7 +324,7 @@ namespace libtorrent {
template <typename Holder>
void append_const_send_buffer(Holder holder, int size)
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
if (!m_enc_handler.is_send_plaintext())
{
// if we're encrypting this buffer, we need to make a copy
@ -346,8 +343,8 @@ namespace libtorrent {
enum class state_t : std::uint8_t
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
read_pe_dhkey = 0,
#if !defined TORRENT_DISABLE_ENCRYPION
read_pe_dhkey,
read_pe_syncvc,
read_pe_synchash,
read_pe_skey_vc,
@ -355,10 +352,8 @@ namespace libtorrent {
read_pe_pad,
read_pe_ia,
init_bt_handshake,
read_protocol_identifier,
#else
read_protocol_identifier = 0,
#endif
read_protocol_identifier,
read_info_hash,
read_peer_id,
@ -391,7 +386,7 @@ namespace libtorrent {
// only done once per connection
bool m_sent_allowed_fast:1;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// this is set to true after the encryption method has been
// successfully negotiated (either plaintext or rc4), to signal
// automatic encryption/decryption.
@ -441,7 +436,7 @@ namespace libtorrent {
std::vector<range> m_payloads;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// initialized during write_pe1_2_dhkey, and destroyed on
// creation of m_enc_handler. Cannot reinitialize once
// initialized.
@ -465,15 +460,12 @@ namespace libtorrent {
// the sync hash (hash("req1",secret)). Destroyed after the
// sync step.
std::unique_ptr<sha1_hash> m_sync_hash;
#endif // #if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
// used to disconnect peer if sync points are not found within
// the maximum number of bytes
int m_sync_bytes_read = 0;
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
// the message ID for upload only message
// 0 if not supported
std::uint8_t m_upload_only_id = 0;
@ -488,10 +480,11 @@ namespace libtorrent {
// 0 if not supported
std::uint8_t m_share_mode_id = 0;
#ifndef TORRENT_DISABLE_EXTENSIONS
std::weak_ptr<ut_pex_peer_store> m_ut_pex;
#endif
std::array<char, 8> m_reserved_bits;
#endif
};
}

View File

@ -160,9 +160,6 @@ POSSIBILITY OF SUCH DAMAGE.
//
// .. _`alert section`: reference-Alerts.html
#ifndef TORRENT_DISABLE_EXTENSIONS
#include <vector>
#include "libtorrent/config.hpp"
@ -175,6 +172,8 @@ POSSIBILITY OF SUCH DAMAGE.
namespace libtorrent {
#ifndef TORRENT_DISABLE_EXTENSIONS
// these are flags that can be returned by implemented_features()
// indicating which callbacks this plugin is interested in
using feature_flags_t = flags::bitfield_flag<std::uint8_t, struct feature_flags_tag>;
@ -469,6 +468,9 @@ namespace libtorrent {
// no other plugin will have this function called.
virtual bool write_request(peer_request const&) { return false; }
};
#endif // TORRENT_DISABLE_EXTENSIONS
#if !defined TORRENT_DISABLE_ENCRYPTION
struct TORRENT_EXPORT crypto_plugin
{
@ -504,8 +506,8 @@ namespace libtorrent {
// advance the next step of decryption. default is 0
virtual std::tuple<int, int, int> decrypt(span<span<char>> /*receive_vec*/) = 0;
};
#endif // TORRENT_DISABLE_ENCRYPTION
}
#endif
#endif // TORRENT_EXTENSIONS_HPP_INCLUDED

View File

@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
#ifndef TORRENT_PE_CRYPTO_HPP_INCLUDED
#define TORRENT_PE_CRYPTO_HPP_INCLUDED

View File

@ -88,7 +88,7 @@ struct TORRENT_EXTRA_EXPORT receive_buffer
// This is the "current" packet.
span<char const> get() const;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// returns the buffer from the current packet start position to the last
// received byte (possibly part of another packet)
span<char> mutable_buffer();
@ -159,7 +159,7 @@ private:
buffer m_recv_buffer;
};
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// Wraps a receive_buffer to provide the ability to inject
// possibly authenticated crypto beneath the bittorrent protocol.
// When authenticated crypto is in use the wrapped receive_buffer

View File

@ -157,7 +157,7 @@ namespace libtorrent {
peer_source_flags_t peer_source() const
{ return peer_source_flags_t(source); }
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// Hints encryption support of torrent_peer. Only effective
// for and when the outgoing encryption policy
// allows both encrypted and non encrypted

View File

@ -41,6 +41,8 @@ POSSIBILITY OF SUCH DAMAGE.
using namespace sim;
#ifndef TORRENT_DISABLE_DHT
struct sim_config : sim::default_config
{
chrono::high_resolution_clock::duration hostname_lookup(
@ -104,3 +106,6 @@ TORRENT_TEST(dht_bootstrap)
TEST_CHECK(a.dict_find_int_value("bs", -1) == 1);
}
#else
TORRENT_TEST(disabled) {}
#endif // TORRENT_DISABLE_DHT

View File

@ -218,7 +218,7 @@ TORRENT_TEST(dht_rate_limit)
TEST_EQUAL(cnt[counters::dht_messages_in_dropped]
+ cnt[counters::dht_ping_in], num_packets);
#endif // #if !defined TORRENT_DISABLE_EXTENSIONS && !defined TORRENT_DISABLE_DHT
#endif // #if !defined TORRENT_DISABLE_DHT
}
// TODO: put test here to take advantage of existing code, refactor

View File

@ -30,9 +30,11 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TORRENT_DISABLE_DHT
#include "test.hpp"
#ifndef TORRENT_DISABLE_DHT
#include "settings.hpp"
#include "setup_transfer.hpp" // for ep()
#include "libtorrent/config.hpp"
@ -210,5 +212,6 @@ TORRENT_TEST(dht_storage_infohashes_sample)
boost::system::error_code ec;
sim.run(ec);
}
#else
TORRENT_TEST(disabled) {}
#endif // TORRENT_DISABLE_DHT

View File

@ -44,6 +44,8 @@ POSSIBILITY OF SUCH DAMAGE.
using namespace lt;
#ifndef TORRENT_DISABLE_EXTENSIONS
enum flags_t
{
// disconnect immediately after receiving the metadata (to test that
@ -210,4 +212,6 @@ TORRENT_TEST(ut_metadata_upload_only_disconnect_readd)
{
run_metadata_test(upload_only | disconnect | readd);
}
#else
TORRENT_TEST(disabled) {}
#endif // TORRENT_DISABLE_EXTENSIONS

View File

@ -41,7 +41,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "settings.hpp"
#include "setup_swarm.hpp"
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
using namespace lt;

View File

@ -64,14 +64,14 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/string_util.hpp" // for search
#include "libtorrent/aux_/generate_peer_id.hpp"
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
#include "libtorrent/pe_crypto.hpp"
#include "libtorrent/hasher.hpp"
#endif
namespace libtorrent {
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
namespace {
constexpr std::size_t handshake_len = 68;
@ -150,7 +150,7 @@ namespace {
, m_sent_bitfield(false)
, m_sent_handshake(false)
, m_sent_allowed_fast(false)
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
, m_encrypted(false)
, m_rc4_encrypted(false)
, m_recv_buffer(peer_connection::m_recv_buffer)
@ -161,9 +161,7 @@ namespace {
peer_log(peer_log_alert::info, "CONSTRUCT", "bt_peer_connection");
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
m_reserved_bits.fill(0);
#endif
}
void bt_peer_connection::start()
@ -178,7 +176,7 @@ namespace {
bt_peer_connection::~bt_peer_connection() = default;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
void bt_peer_connection::switch_send_crypto(std::shared_ptr<crypto_plugin> crypto)
{
if (m_enc_handler.switch_send_crypto(std::move(crypto), send_buffer_size() - get_send_barrier()))
@ -211,7 +209,7 @@ namespace {
// packet, or at least back-to-back packets
cork c_(*this);
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
std::uint8_t out_policy = std::uint8_t(m_settings.get_int(settings_pack::out_enc_policy));
@ -304,13 +302,11 @@ namespace {
// will send their bitfield when the handshake
// is done
std::shared_ptr<torrent> t = associated_torrent().lock();
#ifndef TORRENT_DISABLE_EXTENSIONS
if (!t->share_mode())
{
bool const upload_only_enabled = t->is_upload_only() && !t->super_seeding();
send_upload_only(upload_only_enabled);
}
#endif
if (m_sent_bitfield) return;
@ -449,7 +445,7 @@ namespace {
if (is_utp(*get_socket())) p.flags |= peer_info::utp_socket;
if (is_ssl(*get_socket())) p.flags |= peer_info::ssl_socket;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
if (m_encrypted)
{
p.flags |= m_rc4_encrypted
@ -471,7 +467,7 @@ namespace {
return !m_sent_handshake;
}
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
void bt_peer_connection::write_pe1_2_dhkey()
{
@ -671,7 +667,7 @@ namespace {
m_rc4->decrypt(buf);
}
#endif // #if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#endif // #if !defined TORRENT_DISABLE_ENCRYPTION
void bt_peer_connection::write_handshake()
{
@ -702,10 +698,8 @@ namespace {
*(ptr + 7) |= 0x01;
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
// we support extensions
*(ptr + 5) |= 0x10;
#endif
if (m_settings.get_bool(settings_pack::support_merkle_torrents))
{
@ -1327,7 +1321,6 @@ namespace {
// -------- RENDEZVOUS ---------
// -----------------------------
#ifndef TORRENT_DISABLE_EXTENSIONS
void bt_peer_connection::on_holepunch()
{
INVARIANT_CHECK;
@ -1540,13 +1533,11 @@ namespace {
stats_counters().inc_stats_counter(counters::num_outgoing_extended);
}
#endif // TORRENT_DISABLE_EXTENSIONS
// -----------------------------
// --------- EXTENDED ----------
// -----------------------------
#ifndef TORRENT_DISABLE_EXTENSIONS
void bt_peer_connection::on_extended(int received)
{
INVARIANT_CHECK;
@ -1652,12 +1643,14 @@ namespace {
, "msg: %d size: %d", extended_id, m_recv_buffer.packet_size());
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
for (auto const& e : m_extensions)
{
if (e->on_extended(m_recv_buffer.packet_size() - 2, extended_id
, recv_buffer))
return;
}
#endif
disconnect(errors::invalid_message, operation_t::bittorrent, 2);
}
@ -1696,6 +1689,7 @@ namespace {
}
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
for (auto i = m_extensions.begin();
!m_extensions.empty() && i != m_extensions.end();)
{
@ -1707,6 +1701,7 @@ namespace {
++i;
}
if (is_disconnecting()) return;
#endif
// upload_only
if (bdecode_node const m = root.dict_find_dict("m"))
@ -1782,7 +1777,6 @@ namespace {
stats_counters().inc_stats_counter(counters::num_incoming_ext_handshake);
}
#endif // TORRENT_DISABLE_EXTENSIONS
bool bt_peer_connection::dispatch_message(int const received)
{
@ -1833,9 +1827,7 @@ namespace {
case msg_have_none: on_have_none(received); break;
case msg_reject_request: on_reject_request(received); break;
case msg_allowed_fast: on_allowed_fast(received); break;
#ifndef TORRENT_DISABLE_EXTENSIONS
case msg_extended: on_extended(received); break;
#endif
default:
{
#ifndef TORRENT_DISABLE_EXTENSIONS
@ -1880,7 +1872,6 @@ namespace {
void bt_peer_connection::write_upload_only(bool const enabled)
{
#ifndef TORRENT_DISABLE_EXTENSIONS
INVARIANT_CHECK;
#if TORRENT_USE_ASSERTS
@ -1902,12 +1893,8 @@ namespace {
send_buffer(msg);
stats_counters().inc_stats_counter(counters::num_outgoing_extended);
#else
TORRENT_UNUSED(enabled);
#endif
}
#ifndef TORRENT_DISABLE_EXTENSIONS
void bt_peer_connection::write_share_mode()
{
INVARIANT_CHECK;
@ -1923,7 +1910,6 @@ namespace {
stats_counters().inc_stats_counter(counters::num_outgoing_extended);
}
#endif
void bt_peer_connection::write_keepalive()
{
@ -2073,7 +2059,6 @@ namespace {
stats_counters().inc_stats_counter(counters::num_outgoing_bitfield);
}
#ifndef TORRENT_DISABLE_EXTENSIONS
void bt_peer_connection::write_extensions()
{
INVARIANT_CHECK;
@ -2147,12 +2132,14 @@ namespace {
&& t->share_mode())
handshake["share_mode"] = 1;
#ifndef TORRENT_DISABLE_EXTENSIONS
// loop backwards, to make the first extension be the last
// to fill in the handshake (i.e. give the first extensions priority)
for (auto const& e : m_extensions)
{
e->add_handshake(handshake);
}
#endif
#ifndef NDEBUG
// make sure there are not conflicting extensions
@ -2191,7 +2178,6 @@ namespace {
}
#endif
}
#endif
void bt_peer_connection::write_choke()
{
@ -2246,7 +2232,6 @@ namespace {
void bt_peer_connection::write_dont_have(piece_index_t const index)
{
#ifndef TORRENT_DISABLE_EXTENSIONS
INVARIANT_CHECK;
TORRENT_ASSERT(associated_torrent().lock()->valid_metadata());
TORRENT_ASSERT(index >= piece_index_t(0));
@ -2265,9 +2250,6 @@ namespace {
send_buffer(msg);
stats_counters().inc_stats_counter(counters::num_outgoing_extended);
#else
TORRENT_UNUSED(index);
#endif
}
void bt_peer_connection::write_piece(peer_request const& r, disk_buffer_holder buffer)
@ -2370,7 +2352,7 @@ namespace {
// packet, or at least back-to-back packets
cork c_(*this);
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
if (!m_enc_handler.is_recv_plaintext())
{
int const consumed = m_enc_handler.decrypt(m_recv_buffer, bytes_transferred);
@ -2428,7 +2410,7 @@ namespace {
span<char const> recv_buffer = m_recv_buffer.get();
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
// m_state is set to read_pe_dhkey in initial state
// (read_protocol_identifier) for incoming, or in constructor
// for outgoing
@ -2949,7 +2931,7 @@ namespace {
}
}
#endif // #if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#endif // #if !defined TORRENT_DISABLE_ENCRYPTION
if (m_state == state_t::read_protocol_identifier)
{
@ -2966,7 +2948,7 @@ namespace {
if (packet_size != 19 ||
std::memcmp(recv_buffer.begin(), protocol_string, 20) != 0)
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
#ifndef TORRENT_DISABLE_LOGGING
peer_log(peer_log_alert::info, "ENCRYPTION"
, "unrecognized protocol header");
@ -3016,7 +2998,7 @@ namespace {
}
else
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
TORRENT_ASSERT(m_state != state_t::read_pe_dhkey);
if (!is_outgoing()
@ -3070,11 +3052,10 @@ namespace {
}
#endif
#ifndef TORRENT_DISABLE_EXTENSIONS
std::memcpy(m_reserved_bits.data(), recv_buffer.begin(), 8);
if (recv_buffer[5] & 0x10)
m_supports_extensions = true;
#endif
if (recv_buffer[7] & 0x01)
m_supports_dht_port = true;
@ -3213,9 +3194,9 @@ namespace {
}
}
if (is_disconnecting()) return;
#endif
if (m_supports_extensions) write_extensions();
#endif
#ifndef TORRENT_DISABLE_LOGGING
peer_log(peer_log_alert::incoming_message, "HANDSHAKE", "connection ready");
@ -3224,7 +3205,7 @@ namespace {
if (peer_info_struct())
t->clear_failcount(peer_info_struct());
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
// Toggle pe_support back to false if this is a
// standard successful connection
if (is_outgoing() && !m_encrypted &&
@ -3351,7 +3332,7 @@ namespace {
TORRENT_ASSERT(!m_recv_buffer.packet_finished());
}
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
std::tuple<int, span<span<char const>>>
bt_peer_connection::hit_send_barrier(
span<span<char>> iovec)
@ -3432,7 +3413,7 @@ namespace {
{
std::shared_ptr<torrent> t = associated_torrent().lock();
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPTION
TORRENT_ASSERT( (bool(m_state != state_t::read_pe_dhkey) || m_dh_key_exchange.get())
|| !is_outgoing());

View File

@ -131,7 +131,7 @@ namespace libtorrent {
, (tracker_req().event != tracker_request::none) ? event_string[tracker_req().event - 1] : ""
, tracker_req().num_want);
url += str;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
if (settings.get_int(settings_pack::in_enc_policy) != settings_pack::pe_disabled
&& settings.get_bool(settings_pack::announce_crypto_support))
url += "&supportcrypto=1";

View File

@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
#include <cstdint>
#include <algorithm>
@ -411,4 +411,4 @@ std::size_t rc4_encrypt(unsigned char *out, std::size_t outlen, rc4 *state)
} // namespace libtorrent
#endif // #if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#endif // TORRENT_DISABLE_ENCRYPION

View File

@ -4275,7 +4275,7 @@ namespace libtorrent {
if (m_outgoing) m_counters.inc_stats_counter(counters::error_outgoing_peers);
else m_counters.inc_stats_counter(counters::error_incoming_peers);
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
if (type() == connection_type::bittorrent && op != operation_t::connect)
{
auto* bt = static_cast<bt_peer_connection*>(this);

View File

@ -315,7 +315,7 @@ bool bt_peer_connection_handle::support_extensions() const
bool bt_peer_connection_handle::supports_encryption() const
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
std::shared_ptr<bt_peer_connection> pc = native_handle();
TORRENT_ASSERT(pc);
return pc->supports_encryption();
@ -326,7 +326,7 @@ bool bt_peer_connection_handle::supports_encryption() const
void bt_peer_connection_handle::switch_send_crypto(std::shared_ptr<crypto_plugin> crypto)
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
std::shared_ptr<bt_peer_connection> pc = native_handle();
TORRENT_ASSERT(pc);
pc->switch_send_crypto(std::move(crypto));
@ -337,7 +337,7 @@ void bt_peer_connection_handle::switch_send_crypto(std::shared_ptr<crypto_plugin
void bt_peer_connection_handle::switch_recv_crypto(std::shared_ptr<crypto_plugin> crypto)
{
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
std::shared_ptr<bt_peer_connection> pc = native_handle();
TORRENT_ASSERT(pc);
pc->switch_recv_crypto(std::move(crypto));

View File

@ -922,7 +922,7 @@ namespace libtorrent {
if (m_round_robin >= iter - m_peers.begin()) ++m_round_robin;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
if (flags & pex_encryption) p->pe_support = true;
#endif
if (flags & pex_seed)

View File

@ -150,7 +150,7 @@ span<char const> receive_buffer::get() const
return aux::typed_span<char const>(m_recv_buffer).subspan(m_recv_start, m_recv_pos);
}
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
span<char> receive_buffer::mutable_buffer()
{
INVARIANT_CHECK;
@ -230,7 +230,7 @@ void receive_buffer::reset(int const packet_size)
m_packet_size = packet_size;
}
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
bool crypto_receive_buffer::packet_finished() const
{
if (m_recv_pos == INT_MAX)

View File

@ -4460,7 +4460,7 @@ namespace aux {
trigger_auto_manage();
}
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
torrent const* session_impl::find_encrypted_torrent(sha1_hash const& info_hash
, sha1_hash const& xor_mask)
{
@ -4803,7 +4803,7 @@ namespace aux {
m_torrents.insert(std::make_pair(params.info_hash, torrent_ptr));
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
static char const req2[4] = {'r', 'e', 'q', '2'};
hasher h(req2);
h.update(params.info_hash);
@ -5191,7 +5191,7 @@ namespace aux {
m_torrents.erase(i);
tptr->removed();
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
static char const req2[4] = {'r', 'e', 'q', '2'};
hasher h(req2);
h.update(tptr->info_hash());
@ -6092,13 +6092,13 @@ namespace aux {
#endif
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
void session_impl::add_obfuscated_hash(sha1_hash const& obfuscated
, std::weak_ptr<torrent> const& t)
{
m_obfuscated_torrents.insert(std::make_pair(obfuscated, t.lock()));
}
#endif // !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#endif // TORRENT_DISABLE_ENCRYPION
bool session_impl::is_listening() const
{

View File

@ -490,7 +490,7 @@ bool is_downloading_state(int const st)
aux::random_shuffle(ws.begin(), ws.end());
for (auto& w : ws) m_web_seeds.push_back(std::move(w));
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
static char const req2[4] = {'r', 'e', 'q', '2'};
hasher h(req2);
h.update(m_torrent_file->info_hash());

View File

@ -151,7 +151,7 @@ namespace libtorrent {
, fast_reconnects(0)
, trust_points(0)
, source(static_cast<std::uint8_t>(src))
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
// assume no support in order to
// prefer opening non-encrypted
// connections. If it fails, we'll

View File

@ -46,7 +46,7 @@ POSSIBILITY OF SUCH DAMAGE.
#ifndef TORRENT_DISABLE_EXTENSIONS
namespace libtorrent {namespace {
namespace libtorrent { namespace {
const char extension_name[] = "ut_pex";
@ -167,7 +167,7 @@ namespace libtorrent {namespace {
// used as a rendezvous point in case direct
// connections to the peer fail
pex_flags_t flags = p->is_seed() ? pex_seed : pex_flags_t{};
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
flags |= p->supports_encryption() ? pex_encryption : pex_flags_t{};
#endif
flags |= is_utp(*p->get_socket()) ? pex_utp : pex_flags_t{};
@ -552,7 +552,7 @@ namespace libtorrent {namespace {
// used as a rendezvous point in case direct
// connections to the peer fail
int flags = p->is_seed() ? 2 : 0;
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
flags |= p->supports_encryption() ? 1 : 0;
#endif
flags |= is_utp(*p->get_socket()) ? 4 : 0;

View File

@ -30,8 +30,6 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TORRENT_DISABLE_DHT
#include "libtorrent/config.hpp"
#include "libtorrent/session.hpp"
#include "libtorrent/kademlia/dht_settings.hpp"
@ -54,6 +52,8 @@ POSSIBILITY OF SUCH DAMAGE.
#include "test.hpp"
#include "setup_transfer.hpp"
#ifndef TORRENT_DISABLE_DHT
using namespace lt;
using namespace lt::dht;
@ -505,5 +505,6 @@ TORRENT_TEST(infohashes_sample_dist)
std::printf("infohashes set size: %d\n", int(infohash_set.size()));
TEST_CHECK(infohash_set.size() > 500);
}
#else
TORRENT_TEST(dummy) {}
#endif

View File

@ -283,11 +283,7 @@ void do_handshake(tcp::socket& s, sha1_hash const& ih, char* buffer)
// check for extension protocol support
bool const lt_extension_protocol = (extensions[5] & 0x10) != 0;
#ifndef TORRENT_DISABLE_EXTENSIONS
TEST_CHECK(lt_extension_protocol == true);
#else
TEST_CHECK(lt_extension_protocol == false);
#endif
// check for DHT support
bool const dht_support = (extensions[7] & 0x1) != 0;
@ -363,6 +359,7 @@ entry read_extension_handshake(tcp::socket& s, char* recv_buffer, int size)
}
}
#ifndef TORRENT_DISABLE_EXTENSIONS
void send_ut_metadata_msg(tcp::socket& s, int ut_metadata_msg, int type, int piece)
{
std::vector<char> buf;
@ -414,6 +411,7 @@ entry read_ut_metadata_msg(tcp::socket& s, char* recv_buffer, int size)
return bdecode(recv_buffer + 2, recv_buffer + len);
}
}
#endif // TORRENT_DISABLE_EXTENSIONS
std::shared_ptr<torrent_info> setup_peer(tcp::socket& s, sha1_hash& ih
, std::shared_ptr<lt::session>& ses, bool incoming = true
@ -794,7 +792,6 @@ TORRENT_TEST(multiple_have_all)
print_session_log(*ses);
}
#ifndef TORRENT_DISABLE_EXTENSIONS
// makes sure that pieces that are lost are not requested
TORRENT_TEST(dont_have)
{
@ -896,6 +893,43 @@ TORRENT_TEST(dont_have)
print_session_log(*ses);
}
TORRENT_TEST(extension_handshake)
{
using namespace lt::detail;
sha1_hash ih;
std::shared_ptr<lt::session> ses;
io_service ios;
tcp::socket s(ios);
std::shared_ptr<torrent_info> ti = setup_peer(s, ih, ses);
char recv_buffer[1000];
do_handshake(s, ih, recv_buffer);
print_session_log(*ses);
send_have_all(s);
print_session_log(*ses);
entry extensions;
send_extension_handshake(s, extensions);
extensions = read_extension_handshake(s, recv_buffer, sizeof(recv_buffer));
std::cout << extensions << '\n';
// these extensions are built-in
TEST_CHECK(extensions["m"]["lt_donthave"].integer() != 0);
TEST_CHECK(extensions["m"]["share_mode"].integer() != 0);
TEST_CHECK(extensions["m"]["upload_only"].integer() != 0);
TEST_CHECK(extensions["m"]["ut_holepunch"].integer() != 0);
// these require extensions to be enabled
#ifndef TORRENT_DISABLE_EXTENSIONS
TEST_CHECK(extensions["m"]["ut_metadata"].integer() != 0);
TEST_CHECK(extensions["m"]["ut_pex"].integer() != 0);
#endif
}
#ifndef TORRENT_DISABLE_EXTENSIONS
// TEST metadata extension messages and edge cases
// this tests sending a request for a metadata piece that's too high. This is
@ -904,8 +938,6 @@ TORRENT_TEST(invalid_metadata_request)
{
using namespace lt::detail;
std::cout << "\n === test invalid metadata ===\n" << std::endl;
sha1_hash ih;
std::shared_ptr<lt::session> ses;
io_service ios;
@ -954,6 +986,8 @@ TORRENT_TEST(invalid_metadata_request)
print_session_log(*ses);
}
#endif // TORRENT_DISABLE_EXTENSIONS
TORRENT_TEST(invalid_request)
{
@ -1030,7 +1064,5 @@ TORRENT_TEST(incoming_have_all)
have_all_test(false);
}
#endif // TORRENT_DISABLE_EXTENSIONS
// TODO: test sending invalid requests (out of bound piece index, offsets and
// sizes)

View File

@ -43,7 +43,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "setup_transfer.hpp"
#include "test.hpp"
#if !defined(TORRENT_DISABLE_ENCRYPTION) && !defined(TORRENT_DISABLE_EXTENSIONS)
#if !defined TORRENT_DISABLE_ENCRYPION
namespace {

View File

@ -73,7 +73,7 @@ constexpr flags_t expect_peer_connection = 6_bit;
constexpr flags_t dont_proxy_peers = 10_bit;
constexpr flags_t dont_proxy_trackers = 11_bit;
session_proxy test_proxy(settings_pack::proxy_type_t proxy_type, flags_t const flags)
session_proxy test_proxy(settings_pack::proxy_type_t proxy_type, flags_t flags)
{
#ifdef TORRENT_DISABLE_DHT
// if DHT is disabled, we won't get any requests to it

View File

@ -424,7 +424,9 @@ TORRENT_TEST(save_state_peer_id)
TEST_EQUAL(ses.get_settings().get_str(settings_pack::peer_fingerprint), "foobar");
}
#ifndef TORRENT_DISABLE_LOGGING
#if !defined TORRENT_DISABLE_LOGGING
#if !defined TORRENT_DISABLE_DHT
auto const count_dht_inits = [](session& ses)
{
@ -496,6 +498,8 @@ TORRENT_TEST(init_dht_empty_bootstrap)
TEST_EQUAL(count, 1);
}
#endif // TORRENT_DISABLE_DHT
TORRENT_TEST(reopen_network_sockets)
{
auto count_alerts = [](session& ses, int const listen, int const portmap)

View File

@ -604,16 +604,12 @@ void test_malicious_peer()
}
} // anonymous namespace
#endif // TORRENT_USE_OPENSSL
TORRENT_TEST(malicious_peer)
{
#ifdef TORRENT_USE_OPENSSL
test_malicious_peer();
#endif
}
#ifdef TORRENT_USE_OPENSSL
TORRENT_TEST(utp_config0) { test_ssl(0, true); }
TORRENT_TEST(utp_config1) { test_ssl(1, true); }
TORRENT_TEST(utp_config2) { test_ssl(2, true); }
@ -633,5 +629,7 @@ TORRENT_TEST(tcp_config5) { test_ssl(5, false); }
TORRENT_TEST(tcp_config6) { test_ssl(6, false); }
TORRENT_TEST(tcp_config7) { test_ssl(7, false); }
TORRENT_TEST(tcp_config8) { test_ssl(8, false); }
#endif
#else
TORRENT_TEST(disabled) {}
#endif // TORRENT_USE_OPENSSL