| /* |
| * Copyright 2019 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "api/ice_transport_factory.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include "absl/memory/memory.h" |
| #include "p2p/base/ice_transport_internal.h" |
| #include "p2p/base/p2p_transport_channel.h" |
| #include "p2p/base/port_allocator.h" |
| #include "rtc_base/thread.h" |
| |
| namespace webrtc { |
| |
| namespace { |
| |
| // This implementation of IceTransportInterface is used in cases where |
| // the only reference to the P2PTransport will be through this class. |
| // It must be constructed, accessed and destroyed on the signaling thread. |
| class IceTransportWithTransportChannel : public IceTransportInterface { |
| public: |
| IceTransportWithTransportChannel( |
| std::unique_ptr<cricket::IceTransportInternal> internal) |
| : internal_(std::move(internal)) {} |
| |
| ~IceTransportWithTransportChannel() override { |
| RTC_DCHECK_RUN_ON(&thread_checker_); |
| } |
| |
| cricket::IceTransportInternal* internal() override { |
| RTC_DCHECK_RUN_ON(&thread_checker_); |
| return internal_.get(); |
| } |
| |
| private: |
| const rtc::ThreadChecker thread_checker_{}; |
| const std::unique_ptr<cricket::IceTransportInternal> internal_ |
| RTC_GUARDED_BY(thread_checker_); |
| }; |
| |
| } // namespace |
| |
| rtc::scoped_refptr<IceTransportInterface> CreateIceTransport( |
| cricket::PortAllocator* port_allocator) { |
| return new rtc::RefCountedObject<IceTransportWithTransportChannel>( |
| absl::make_unique<cricket::P2PTransportChannel>("", 0, port_allocator)); |
| } |
| |
| } // namespace webrtc |