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:
parent
8c0f55857e
commit
b803e851fc
@ -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",
|
||||
]
|
||||
}
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user