From e334f3c37f412b80a23d9d158eff5caa8b3ef04c Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Sun, 14 Jul 2024 18:55:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20misc=20=C2=B5TP=20trace=20log=20fixes=20?= =?UTF-8?q?(#6929)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: FTBFS when `TR_UTP_TRACE` is defined * refactor: log socket address when processing udp packets * refactor: log details of unexpected UDP packet * fix: don't unset utp context userdata during shutdown It is still needed inside `utp_destroy()` when `UTP_DEBUG_LOGGING` is defined. * code review: lazy evaluate incoming udp packet display name * code review: move `from_str` out of loop --- libtransmission/tr-udp.cc | 13 +++++++++++-- libtransmission/tr-utp.cc | 3 +-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libtransmission/tr-udp.cc b/libtransmission/tr-udp.cc index 1c5f8b503..0b72d33e2 100644 --- a/libtransmission/tr-udp.cc +++ b/libtransmission/tr-udp.cc @@ -95,6 +95,11 @@ void event_callback(evutil_socket_t s, [[maybe_unused]] short type, void* vsessi auto* const session = static_cast(vsession); auto got_utp_packet = false; + auto const from_str = [from_sa] + { + return tr_socket_address::from_sockaddr(from_sa).value_or(tr_socket_address{}).display_name(); + }; + for (;;) { auto const n_read = recvfrom(s, reinterpret_cast(std::data(buf)), std::size(buf) - 1, 0, from_sa, &fromlen); @@ -128,7 +133,7 @@ void event_callback(evutil_socket_t s, [[maybe_unused]] short type, void* vsessi { if (!session->announcer_udp_->handle_message(std::data(buf), n_read, from_sa, fromlen)) { - tr_logAddTrace("Couldn't parse UDP tracker packet."); + tr_logAddTrace(fmt::format("{} Couldn't parse UDP tracker packet.", from_str())); } } else if (session->allowsUTP() && session->utp_context != nullptr) @@ -139,7 +144,11 @@ void event_callback(evutil_socket_t s, [[maybe_unused]] short type, void* vsessi } else { - tr_logAddTrace("Unexpected UDP packet"); + tr_logAddTrace(fmt::format( + "{} Unexpected UDP packet... len {} [{}]", + from_str(), + n_read, + tr_base64_encode({ reinterpret_cast(std::data(buf)), static_cast(n_read) }))); } } } diff --git a/libtransmission/tr-utp.cc b/libtransmission/tr-utp.cc index fae16e9dc..069ca5f5d 100644 --- a/libtransmission/tr-utp.cc +++ b/libtransmission/tr-utp.cc @@ -122,7 +122,7 @@ uint64 utp_callback(utp_callback_arguments* args) { #ifdef TR_UTP_TRACE case UTP_LOG: - fmt::print(stderr, "[µTP] {}\n", args->buf); + tr_logAddTrace(fmt::format("[µTP] {}", reinterpret_cast(args->buf))); break; #endif @@ -227,7 +227,6 @@ void tr_utp_close(tr_session* session) if (session->utp_context != nullptr) { - utp_context_set_userdata(session->utp_context, nullptr); utp_destroy(session->utp_context); session->utp_context = nullptr; }