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 <jonaso@webrtc.org>
Reviewed-by: Jonas Oreland <jonaso@webrtc.org>
Auto-Submit: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41230}
This commit is contained in:
Per K 2023-11-23 19:11:45 +01:00 committed by WebRTC LUCI CQ
parent 8c0f55857e
commit b803e851fc
3 changed files with 17 additions and 22 deletions

View File

@ -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",
]
}

View File

@ -10,21 +10,21 @@
#include "p2p/stunprober/stun_prober.h"
#include <cstdint>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <utility>
#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<const uint8_t> 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<Request*>& 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<size_t>(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<const uint8_t> payload) {
int64_t now = rtc::TimeMillis();
rtc::ByteBufferReader message(
rtc::MakeArrayView(reinterpret_cast<const uint8_t*>(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(

View File

@ -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"