From 13987e799649608fa4ea9a18e963ff7009ed4431 Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Mon, 28 Oct 2024 08:38:56 +0800 Subject: [PATCH] refactor: warn peer incompliant behaviour in ltep (#7203) * refactor: add log warning for ut metadata in private torrent * refactor: add log warning for ut pex in private torrent * refactor: add log warning for ltep handshake without advertised support * refactor: unify ltep handshake log format * refactor: removed redundant ltep logs * refactor: add back log for ut pex --- libtransmission/peer-msgs.cc | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libtransmission/peer-msgs.cc b/libtransmission/peer-msgs.cc index 54603e206..5aa6e71ce 100644 --- a/libtransmission/peer-msgs.cc +++ b/libtransmission/peer-msgs.cc @@ -906,7 +906,6 @@ void tr_peerMsgsImpl::parse_ltep(MessageReader& payload) if (ltep_msgid == LtepMessages::Handshake) { - logtrace(this, "got ltep handshake"); parse_ltep_handshake(payload); if (io_->supports_ltep()) @@ -917,13 +916,11 @@ void tr_peerMsgsImpl::parse_ltep(MessageReader& payload) } else if (ltep_msgid == UT_PEX_ID) { - logtrace(this, "got ut pex"); peer_supports_pex_ = true; parse_ut_pex(payload); } else if (ltep_msgid == UT_METADATA_ID) { - logtrace(this, "got ut metadata"); peer_supports_metadata_xfer_ = true; parse_ut_metadata(payload); } @@ -937,11 +934,17 @@ void tr_peerMsgsImpl::parse_ut_pex(MessageReader& payload) { if (!tor_.allows_pex()) { + if (tor_.is_private()) + { + logwarn(this, "got ut pex in private torrent, rejecting"); + } return; } if (auto var = tr_variant_serde::benc().inplace().parse(payload.to_string_view()); var) { + logtrace(this, "got ut pex"); + uint8_t const* added = nullptr; auto added_len = size_t{}; if (tr_variantDictFindRaw(&*var, TR_KEY_added, &added, &added_len)) @@ -1187,11 +1190,16 @@ void tr_peerMsgsImpl::parse_ltep_handshake(MessageReader& payload) auto var = tr_variant_serde::benc().inplace().parse(handshake_sv); if (!var || !var->holds_alternative()) { - logtrace(this, "GET extended-handshake, couldn't get dictionary"); + logtrace(this, "got ltep handshake, couldn't get dictionary"); return; } - logtrace(this, fmt::format("here is the base64-encoded handshake: [{:s}]", tr_base64_encode(handshake_sv))); + logtrace(this, fmt::format("got ltep handshake, base64-encoded body: [{:s}]", tr_base64_encode(handshake_sv))); + + if (!io_->supports_ltep()) + { + logwarn(this, "got ltep handshake, but peer did not advertise support in reserved bytes"); + } // does the peer prefer encrypted connections? if (auto e = int64_t{}; tr_variantDictFindInt(&*var, TR_KEY_e, &e)) @@ -1316,6 +1324,10 @@ void tr_peerMsgsImpl::parse_ut_metadata(MessageReader& payload_in) } logtrace(this, fmt::format("got ut_metadata msg: type {:d}, piece {:d}, total_size {:d}", msg_type, piece, total_size)); + if (tor_.is_private()) + { + logwarn(this, "got ut metadata in private torrent, rejecting"); + } if (msg_type == MetadataMsgType::Reject) {