From b803e851fce346a6d9c9e2c05eb81c17827eacf4 Mon Sep 17 00:00:00 2001 From: Per K Date: Thu, 23 Nov 2023 19:11:45 +0100 Subject: [PATCH] Use AsyncPacketSocket::RegisterReceivedPacketCallback in StunProber Bug: webrtc:15368, webrtc:11943 Change-Id: Ia642fac641893649ac4d2160d2ef9d5738b11866 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/328441 Commit-Queue: Jonas Oreland Reviewed-by: Jonas Oreland Auto-Submit: Per Kjellander Cr-Commit-Position: refs/heads/main@{#41230} --- p2p/BUILD.gn | 2 ++ p2p/stunprober/stun_prober.cc | 35 +++++++++++++++-------------------- p2p/stunprober/stun_prober.h | 2 -- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn index 444e2ad064..3b01b47351 100644 --- a/p2p/BUILD.gn +++ b/p2p/BUILD.gn @@ -397,6 +397,7 @@ rtc_library("libstunprober") { deps = [ ":rtc_p2p", + "../api:array_view", "../api:async_dns_resolver", "../api:packet_socket_factory", "../api:sequence_checker", @@ -414,6 +415,7 @@ rtc_library("libstunprober") { "../rtc_base:ssl", "../rtc_base:threading", "../rtc_base:timeutils", + "../rtc_base/network:received_packet", "../rtc_base/system:rtc_export", ] } diff --git a/p2p/stunprober/stun_prober.cc b/p2p/stunprober/stun_prober.cc index 4a62065a76..c60e7ede89 100644 --- a/p2p/stunprober/stun_prober.cc +++ b/p2p/stunprober/stun_prober.cc @@ -10,21 +10,21 @@ #include "p2p/stunprober/stun_prober.h" +#include #include #include #include #include #include +#include "api/array_view.h" #include "api/packet_socket_factory.h" #include "api/task_queue/pending_task_safety_flag.h" #include "api/transport/stun.h" #include "api/units/time_delta.h" #include "rtc_base/async_packet_socket.h" -#include "rtc_base/async_resolver_interface.h" #include "rtc_base/checks.h" -#include "rtc_base/helpers.h" -#include "rtc_base/logging.h" +#include "rtc_base/network/received_packet.h" #include "rtc_base/thread.h" #include "rtc_base/time_utils.h" @@ -60,7 +60,7 @@ class StunProber::Requester : public sigslot::has_slots<> { rtc::IPAddress server_addr; int64_t rtt() { return received_time_ms - sent_time_ms; } - void ProcessResponse(const char* buf, size_t buf_len); + void ProcessResponse(rtc::ArrayView payload); }; // StunProber provides `server_ips` for Requester to probe. For shared @@ -80,10 +80,7 @@ class StunProber::Requester : public sigslot::has_slots<> { void SendStunRequest(); void OnStunResponseReceived(rtc::AsyncPacketSocket* socket, - const char* buf, - size_t size, - const rtc::SocketAddress& addr, - const int64_t& packet_time_us); + const rtc::ReceivedPacket& packet); const std::vector& requests() { return requests_; } @@ -121,8 +118,10 @@ StunProber::Requester::Requester( response_packet_(new rtc::ByteBufferWriter(nullptr, kMaxUdpBufferSize)), server_ips_(server_ips), thread_checker_(prober->thread_checker_) { - socket_->SignalReadPacket.connect( - this, &StunProber::Requester::OnStunResponseReceived); + socket_->RegisterReceivedPacketCallback( + [&](rtc::AsyncPacketSocket* socket, const rtc::ReceivedPacket& packet) { + OnStunResponseReceived(socket, packet); + }); } StunProber::Requester::~Requester() { @@ -170,11 +169,10 @@ void StunProber::Requester::SendStunRequest() { RTC_DCHECK(static_cast(num_request_sent_) <= server_ips_.size()); } -void StunProber::Requester::Request::ProcessResponse(const char* buf, - size_t buf_len) { +void StunProber::Requester::Request::ProcessResponse( + rtc::ArrayView payload) { int64_t now = rtc::TimeMillis(); - rtc::ByteBufferReader message( - rtc::MakeArrayView(reinterpret_cast(buf), buf_len)); + rtc::ByteBufferReader message(payload); cricket::StunMessage stun_response; if (!stun_response.Read(&message)) { // Invalid or incomplete STUN packet. @@ -202,13 +200,10 @@ void StunProber::Requester::Request::ProcessResponse(const char* buf, void StunProber::Requester::OnStunResponseReceived( rtc::AsyncPacketSocket* socket, - const char* buf, - size_t size, - const rtc::SocketAddress& addr, - const int64_t& /* packet_time_us */) { + const rtc::ReceivedPacket& packet) { RTC_DCHECK(thread_checker_.IsCurrent()); RTC_DCHECK(socket_); - Request* request = GetRequestByAddress(addr.ipaddr()); + Request* request = GetRequestByAddress(packet.source_address().ipaddr()); if (!request) { // Something is wrong, finish the test. prober_->ReportOnFinished(GENERIC_FAILURE); @@ -216,7 +211,7 @@ void StunProber::Requester::OnStunResponseReceived( } num_response_received_++; - request->ProcessResponse(buf, size); + request->ProcessResponse(packet.payload()); } StunProber::Requester::Request* StunProber::Requester::GetRequestByAddress( diff --git a/p2p/stunprober/stun_prober.h b/p2p/stunprober/stun_prober.h index 3f0f4a2476..07f3a17233 100644 --- a/p2p/stunprober/stun_prober.h +++ b/p2p/stunprober/stun_prober.h @@ -19,8 +19,6 @@ #include "api/async_dns_resolver.h" #include "api/sequence_checker.h" #include "api/task_queue/pending_task_safety_flag.h" -#include "rtc_base/byte_buffer.h" -#include "rtc_base/ip_address.h" #include "rtc_base/network.h" #include "rtc_base/socket_address.h" #include "rtc_base/system/rtc_export.h"