Prepare to deprecate AsyncResolver class

This removes internal usage of AsyncResolver, including from
PhysicalSocketServer.
PhysicalSocketServer was also run through IWYU.

Bug: webrtc:12598
Change-Id: I18aa6fb60e4a40face4afa0446a161379470680d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/322721
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40900}
This commit is contained in:
Harald Alvestrand 2023-10-10 11:30:18 +00:00 committed by WebRTC LUCI CQ
parent 592654f0c6
commit 60362c144c
8 changed files with 61 additions and 39 deletions

View File

@ -686,6 +686,7 @@ if (is_linux || is_chromeos || is_win) {
] ]
deps = [ deps = [
"../api:async_dns_resolver",
"../api:audio_options_api", "../api:audio_options_api",
"../api:create_peerconnection_factory", "../api:create_peerconnection_factory",
"../api:libjingle_peerconnection_api", "../api:libjingle_peerconnection_api",
@ -703,6 +704,7 @@ if (is_linux || is_chromeos || is_win) {
"../media:rtc_media_base", "../media:rtc_media_base",
"../p2p:rtc_p2p", "../p2p:rtc_p2p",
"../pc:video_track_source", "../pc:video_track_source",
"../rtc_base:async_dns_resolver",
"../rtc_base:checks", "../rtc_base:checks",
"../rtc_base:logging", "../rtc_base:logging",
"../rtc_base:macromagic", "../rtc_base:macromagic",

View File

@ -12,6 +12,7 @@
#include "api/units/time_delta.h" #include "api/units/time_delta.h"
#include "examples/peerconnection/client/defaults.h" #include "examples/peerconnection/client/defaults.h"
#include "rtc_base/async_dns_resolver.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "rtc_base/net_helpers.h" #include "rtc_base/net_helpers.h"
@ -32,7 +33,7 @@ rtc::Socket* CreateClientSocket(int family) {
} // namespace } // namespace
PeerConnectionClient::PeerConnectionClient() PeerConnectionClient::PeerConnectionClient()
: callback_(NULL), resolver_(NULL), state_(NOT_CONNECTED), my_id_(-1) {} : callback_(NULL), resolver_(nullptr), state_(NOT_CONNECTED), my_id_(-1) {}
PeerConnectionClient::~PeerConnectionClient() = default; PeerConnectionClient::~PeerConnectionClient() = default;
@ -95,26 +96,32 @@ void PeerConnectionClient::Connect(const std::string& server,
client_name_ = client_name; client_name_ = client_name;
if (server_address_.IsUnresolvedIP()) { if (server_address_.IsUnresolvedIP()) {
RTC_DCHECK_NE(state_, RESOLVING);
RTC_DCHECK(!resolver_);
state_ = RESOLVING; state_ = RESOLVING;
resolver_ = new rtc::AsyncResolver(); resolver_ = std::make_unique<webrtc::AsyncDnsResolver>();
resolver_->SignalDone.connect(this, &PeerConnectionClient::OnResolveResult); resolver_->Start(server_address_,
resolver_->Start(server_address_); [this] { OnResolveResult(resolver_->result()); });
} else { } else {
DoConnect(); DoConnect();
} }
} }
void PeerConnectionClient::OnResolveResult( void PeerConnectionClient::OnResolveResult(
rtc::AsyncResolverInterface* resolver) { const webrtc::AsyncDnsResolverResult& result) {
if (resolver_->GetError() != 0) { if (result.GetError() != 0) {
callback_->OnServerConnectionFailure(); callback_->OnServerConnectionFailure();
resolver_->Destroy(false); resolver_.reset();
resolver_ = NULL;
state_ = NOT_CONNECTED; state_ = NOT_CONNECTED;
} else { return;
server_address_ = resolver_->address();
DoConnect();
} }
if (!result.GetResolvedAddress(AF_INET, &server_address_)) {
callback_->OnServerConnectionFailure();
resolver_.reset();
state_ = NOT_CONNECTED;
return;
}
DoConnect();
} }
void PeerConnectionClient::DoConnect() { void PeerConnectionClient::DoConnect() {
@ -196,10 +203,7 @@ void PeerConnectionClient::Close() {
hanging_get_->Close(); hanging_get_->Close();
onconnect_data_.clear(); onconnect_data_.clear();
peers_.clear(); peers_.clear();
if (resolver_ != NULL) { resolver_.reset();
resolver_->Destroy(false);
resolver_ = NULL;
}
my_id_ = -1; my_id_ = -1;
state_ = NOT_CONNECTED; state_ = NOT_CONNECTED;
} }

View File

@ -15,6 +15,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "api/async_dns_resolver.h"
#include "api/task_queue/pending_task_safety_flag.h" #include "api/task_queue/pending_task_safety_flag.h"
#include "rtc_base/net_helpers.h" #include "rtc_base/net_helpers.h"
#include "rtc_base/physical_socket_server.h" #include "rtc_base/physical_socket_server.h"
@ -109,11 +110,11 @@ class PeerConnectionClient : public sigslot::has_slots<> {
void OnClose(rtc::Socket* socket, int err); void OnClose(rtc::Socket* socket, int err);
void OnResolveResult(rtc::AsyncResolverInterface* resolver); void OnResolveResult(const webrtc::AsyncDnsResolverResult& result);
PeerConnectionClientObserver* callback_; PeerConnectionClientObserver* callback_;
rtc::SocketAddress server_address_; rtc::SocketAddress server_address_;
rtc::AsyncResolver* resolver_; std::unique_ptr<webrtc::AsyncDnsResolverInterface> resolver_;
std::unique_ptr<rtc::Socket> control_socket_; std::unique_ptr<rtc::Socket> control_socket_;
std::unique_ptr<rtc::Socket> hanging_get_; std::unique_ptr<rtc::Socket> hanging_get_;
std::string onconnect_data_; std::string onconnect_data_;

View File

@ -22,9 +22,12 @@
namespace webrtc { namespace webrtc {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
rtc::AsyncResolverInterface* BasicAsyncResolverFactory::Create() { rtc::AsyncResolverInterface* BasicAsyncResolverFactory::Create() {
return new rtc::AsyncResolver(); return new rtc::AsyncResolver();
} }
#pragma clang diagnostic pop
std::unique_ptr<webrtc::AsyncDnsResolverInterface> std::unique_ptr<webrtc::AsyncDnsResolverInterface>
BasicAsyncDnsResolverFactory::Create() { BasicAsyncDnsResolverFactory::Create() {

View File

@ -184,11 +184,14 @@ AsyncResolverInterface* BasicPacketSocketFactory::CreateAsyncResolver() {
return new AsyncResolver(); return new AsyncResolver();
} }
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
std::unique_ptr<webrtc::AsyncDnsResolverInterface> std::unique_ptr<webrtc::AsyncDnsResolverInterface>
BasicPacketSocketFactory::CreateAsyncDnsResolver() { BasicPacketSocketFactory::CreateAsyncDnsResolver() {
return std::make_unique<webrtc::WrappingAsyncDnsResolver>( return std::make_unique<webrtc::WrappingAsyncDnsResolver>(
new AsyncResolver()); new AsyncResolver());
} }
#pragma clang diagnostic pop
int BasicPacketSocketFactory::BindSocket(Socket* socket, int BasicPacketSocketFactory::BindSocket(Socket* socket,
const SocketAddress& local_address, const SocketAddress& local_address,

View File

@ -1046,6 +1046,7 @@ rtc_library("threading") {
"//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings",
] ]
deps = [ deps = [
":async_dns_resolver",
":async_resolver_interface", ":async_resolver_interface",
":byte_order", ":byte_order",
":checks", ":checks",
@ -1061,9 +1062,11 @@ rtc_library("threading") {
":refcount", ":refcount",
":rtc_event", ":rtc_event",
":rtc_task_queue", ":rtc_task_queue",
":socket",
":socket_address", ":socket_address",
":socket_server", ":socket_server",
":timeutils", ":timeutils",
"../api:async_dns_resolver",
"../api:function_view", "../api:function_view",
"../api:location", "../api:location",
"../api:refcountedbase", "../api:refcountedbase",

View File

@ -10,6 +10,7 @@
#include "rtc_base/physical_socket_server.h" #include "rtc_base/physical_socket_server.h"
#include <cstdint> #include <cstdint>
#include <utility>
#if defined(_MSC_VER) && _MSC_VER < 1300 #if defined(_MSC_VER) && _MSC_VER < 1300
#pragma warning(disable : 4786) #pragma warning(disable : 4786)
@ -21,7 +22,6 @@
#if defined(WEBRTC_POSIX) #if defined(WEBRTC_POSIX)
#include <fcntl.h> #include <fcntl.h>
#include <string.h>
#if defined(WEBRTC_USE_EPOLL) #if defined(WEBRTC_USE_EPOLL)
// "poll" will be used to wait for the signal dispatcher. // "poll" will be used to wait for the signal dispatcher.
#include <poll.h> #include <poll.h>
@ -30,7 +30,6 @@
#endif #endif
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/select.h> #include <sys/select.h>
#include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -38,20 +37,18 @@
#include <windows.h> #include <windows.h>
#include <winsock2.h> #include <winsock2.h>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#undef SetPort #undef SetPort
#endif #endif
#include <errno.h> #include <errno.h>
#include <algorithm> #include "rtc_base/async_dns_resolver.h"
#include <map>
#include "rtc_base/arraysize.h"
#include "rtc_base/byte_order.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/event.h"
#include "rtc_base/ip_address.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
#include "rtc_base/network_monitor.h" #include "rtc_base/network_monitor.h"
#include "rtc_base/null_socket_server.h"
#include "rtc_base/synchronization/mutex.h" #include "rtc_base/synchronization/mutex.h"
#include "rtc_base/time_utils.h" #include "rtc_base/time_utils.h"
#include "system_wrappers/include/field_trial.h" #include "system_wrappers/include/field_trial.h"
@ -70,6 +67,7 @@
#if defined(WEBRTC_POSIX) #if defined(WEBRTC_POSIX)
#include <netinet/tcp.h> // for TCP_NODELAY #include <netinet/tcp.h> // for TCP_NODELAY
#define IP_MTU 14 // Until this is integrated from linux/in.h to netinet/in.h #define IP_MTU 14 // Until this is integrated from linux/in.h to netinet/in.h
typedef void* SockOptArg; typedef void* SockOptArg;
@ -252,9 +250,8 @@ int PhysicalSocket::Connect(const SocketAddress& addr) {
} }
if (addr.IsUnresolvedIP()) { if (addr.IsUnresolvedIP()) {
RTC_LOG(LS_VERBOSE) << "Resolving addr in PhysicalSocket::Connect"; RTC_LOG(LS_VERBOSE) << "Resolving addr in PhysicalSocket::Connect";
resolver_ = new AsyncResolver(); resolver_ = std::make_unique<webrtc::AsyncDnsResolver>();
resolver_->SignalDone.connect(this, &PhysicalSocket::OnResolveResult); resolver_->Start(addr, [this] { OnResolveResult(resolver_->result()); });
resolver_->Start(addr);
state_ = CS_CONNECTING; state_ = CS_CONNECTING;
return 0; return 0;
} }
@ -564,8 +561,7 @@ int PhysicalSocket::Close() {
state_ = CS_CLOSED; state_ = CS_CLOSED;
SetEnabledEvents(0); SetEnabledEvents(0);
if (resolver_) { if (resolver_) {
resolver_->Destroy(false); resolver_.reset();
resolver_ = nullptr;
} }
return err; return err;
} }
@ -589,14 +585,16 @@ int PhysicalSocket::DoSendTo(SOCKET socket,
return ::sendto(socket, buf, len, flags, dest_addr, addrlen); return ::sendto(socket, buf, len, flags, dest_addr, addrlen);
} }
void PhysicalSocket::OnResolveResult(AsyncResolverInterface* resolver) { void PhysicalSocket::OnResolveResult(
if (resolver != resolver_) { const webrtc::AsyncDnsResolverResult& result) {
return; int error = result.GetError();
}
int error = resolver_->GetError();
if (error == 0) { if (error == 0) {
error = DoConnect(resolver_->address()); SocketAddress address;
if (result.GetResolvedAddress(AF_INET, &address)) {
error = DoConnect(address);
} else {
Close();
}
} else { } else {
Close(); Close();
} }

View File

@ -11,17 +11,23 @@
#ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
#define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
#include "api/async_dns_resolver.h"
#include "api/units/time_delta.h" #include "api/units/time_delta.h"
#include "rtc_base/socket.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#if defined(WEBRTC_POSIX) #if defined(WEBRTC_POSIX)
#if defined(WEBRTC_LINUX) #if defined(WEBRTC_LINUX)
// On Linux, use epoll. // On Linux, use epoll.
#include <sys/epoll.h> #include <sys/epoll.h>
#define WEBRTC_USE_EPOLL 1 #define WEBRTC_USE_EPOLL 1
#elif defined(WEBRTC_FUCHSIA) #elif defined(WEBRTC_FUCHSIA)
// Fuchsia implements select and poll but not epoll, and testing shows that poll // Fuchsia implements select and poll but not epoll, and testing shows that poll
// is faster than select. // is faster than select.
#include <poll.h> #include <poll.h>
#define WEBRTC_USE_POLL 1 #define WEBRTC_USE_POLL 1
#else #else
// On other POSIX systems, use select by default. // On other POSIX systems, use select by default.
@ -29,7 +35,9 @@
#endif // WEBRTC_POSIX #endif // WEBRTC_POSIX
#include <array> #include <array>
#include <cstdint>
#include <memory> #include <memory>
#include <string>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
@ -218,7 +226,7 @@ class PhysicalSocket : public Socket, public sigslot::has_slots<> {
SocketAddress* out_addr, SocketAddress* out_addr,
int64_t* timestamp); int64_t* timestamp);
void OnResolveResult(AsyncResolverInterface* resolver); void OnResolveResult(const webrtc::AsyncDnsResolverResult& resolver);
void UpdateLastError(); void UpdateLastError();
void MaybeRemapSendError(); void MaybeRemapSendError();
@ -237,7 +245,7 @@ class PhysicalSocket : public Socket, public sigslot::has_slots<> {
mutable webrtc::Mutex mutex_; mutable webrtc::Mutex mutex_;
int error_ RTC_GUARDED_BY(mutex_); int error_ RTC_GUARDED_BY(mutex_);
ConnState state_; ConnState state_;
AsyncResolver* resolver_; std::unique_ptr<webrtc::AsyncDnsResolverInterface> resolver_;
#if !defined(NDEBUG) #if !defined(NDEBUG)
std::string dbg_addr_; std::string dbg_addr_;