1 /* 2 * Copyright 2018 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef P2P_BASE_BASIC_ASYNC_RESOLVER_FACTORY_H_ 12 #define P2P_BASE_BASIC_ASYNC_RESOLVER_FACTORY_H_ 13 14 #include <functional> 15 #include <memory> 16 #include <utility> 17 18 #include "api/async_dns_resolver.h" 19 #include "api/async_resolver_factory.h" 20 #include "rtc_base/async_resolver_interface.h" 21 22 namespace webrtc { 23 24 class BasicAsyncResolverFactory final : public AsyncResolverFactory { 25 public: 26 rtc::AsyncResolverInterface* Create() override; 27 }; 28 29 // This class wraps a factory using the older webrtc::AsyncResolverFactory API, 30 // and produces webrtc::AsyncDnsResolver objects that contain an 31 // rtc::AsyncResolver object. 32 class WrappingAsyncDnsResolverFactory final 33 : public AsyncDnsResolverFactoryInterface { 34 public: WrappingAsyncDnsResolverFactory(std::unique_ptr<AsyncResolverFactory> wrapped_factory)35 explicit WrappingAsyncDnsResolverFactory( 36 std::unique_ptr<AsyncResolverFactory> wrapped_factory) 37 : owned_factory_(std::move(wrapped_factory)), 38 wrapped_factory_(owned_factory_.get()) {} 39 WrappingAsyncDnsResolverFactory(AsyncResolverFactory * non_owned_factory)40 explicit WrappingAsyncDnsResolverFactory( 41 AsyncResolverFactory* non_owned_factory) 42 : wrapped_factory_(non_owned_factory) {} 43 44 std::unique_ptr<webrtc::AsyncDnsResolverInterface> CreateAndResolve( 45 const rtc::SocketAddress& addr, 46 std::function<void()> callback) override; 47 48 std::unique_ptr<webrtc::AsyncDnsResolverInterface> CreateAndResolve( 49 const rtc::SocketAddress& addr, 50 int family, 51 std::function<void()> callback) override; 52 53 std::unique_ptr<webrtc::AsyncDnsResolverInterface> Create() override; 54 55 private: 56 const std::unique_ptr<AsyncResolverFactory> owned_factory_; 57 AsyncResolverFactory* const wrapped_factory_; 58 }; 59 60 } // namespace webrtc 61 62 #endif // P2P_BASE_BASIC_ASYNC_RESOLVER_FACTORY_H_ 63