1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/platform/p2p/host_address_request.h"
#include <optional>
#include <utility>
#include "base/feature_list.h"
#include "base/location.h"
#include "components/webrtc/net_address_utils.h"
#include "net/base/address_family.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
P2PAsyncAddressResolver::P2PAsyncAddressResolver(
P2PSocketDispatcher* dispatcher)
: dispatcher_(dispatcher), state_(kStateCreated) {}
P2PAsyncAddressResolver::~P2PAsyncAddressResolver() {
DCHECK(state_ == kStateCreated || state_ == kStateFinished);
}
void P2PAsyncAddressResolver::Start(const webrtc::SocketAddress& host_name,
std::optional<int> address_family,
DoneCallback done_callback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK_EQ(kStateCreated, state_);
DCHECK(dispatcher_);
state_ = kStateSent;
done_callback_ = std::move(done_callback);
bool enable_mdns = base::FeatureList::IsEnabled(
blink::features::kWebRtcHideLocalIpsWithMdns);
auto callback = WTF::BindOnce(&P2PAsyncAddressResolver::OnResponse,
scoped_refptr<P2PAsyncAddressResolver>(this));
std::optional<net::AddressFamily> family = std::nullopt;
if (address_family.has_value()) {
family = net::ToAddressFamily(*address_family);
}
dispatcher_->GetP2PSocketManager()->GetHostAddress(
String(host_name.hostname().data()), family, enable_mdns,
std::move(callback));
dispatcher_ = nullptr;
}
void P2PAsyncAddressResolver::Cancel() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (state_ != kStateFinished)
state_ = kStateFinished;
done_callback_.Reset();
}
void P2PAsyncAddressResolver::OnResponse(
const Vector<net::IPAddress>& addresses) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (state_ == kStateSent) {
state_ = kStateFinished;
std::move(done_callback_).Run(addresses);
}
}
} // namespace blink
|