diff --git a/media/BUILD.gn b/media/BUILD.gn index af59b59015..eedf96f45f 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -392,59 +392,73 @@ rtc_library("rtc_media_engine_defaults") { ] } -rtc_library("rtc_data") { - defines = [ - # "SCTP_DEBUG" # Uncomment for SCTP debugging. - ] +rtc_source_set("rtc_data_sctp_transport_internal") { + sources = [ "sctp/sctp_transport_internal.h" ] deps = [ - ":rtc_media_base", - "../api:call_api", - "../api:sequence_checker", - "../api:transport_api", + "../media:rtc_media_base", "../p2p:rtc_p2p", - "../rtc_base", "../rtc_base:rtc_base_approved", "../rtc_base:threading", - "../rtc_base/synchronization:mutex", - "../rtc_base/task_utils:pending_task_safety_flag", - "../rtc_base/task_utils:to_queued_task", "../rtc_base/third_party/sigslot", - "../system_wrappers", - ] - absl_deps = [ - "//third_party/abseil-cpp/absl/algorithm:container", - "//third_party/abseil-cpp/absl/base:core_headers", - "//third_party/abseil-cpp/absl/types:optional", ] +} - if (rtc_enable_sctp) { +if (rtc_build_usrsctp) { + rtc_library("rtc_data_usrsctp_transport") { + defines = [ + # "SCTP_DEBUG" # Uncomment for SCTP debugging. + ] sources = [ - "sctp/sctp_transport_factory.cc", - "sctp/sctp_transport_factory.h", - "sctp/sctp_transport_internal.h", "sctp/usrsctp_transport.cc", "sctp/usrsctp_transport.h", ] - } else { - # libtool on mac does not like empty targets. - sources = [ "sctp/noop.cc" ] - } - - if (rtc_enable_sctp && rtc_build_usrsctp) { - deps += [ - "../api/transport:sctp_transport_factory_interface", + deps = [ + ":rtc_data_sctp_transport_internal", + "../media:rtc_media_base", + "../p2p:rtc_p2p", + "../rtc_base", + "../rtc_base:rtc_base_approved", + "../rtc_base:threading", + "../rtc_base/synchronization:mutex", + "../rtc_base/task_utils:pending_task_safety_flag", + "../rtc_base/task_utils:to_queued_task", + "../rtc_base/third_party/sigslot:sigslot", "//third_party/usrsctp", ] + absl_deps = [ + "//third_party/abseil-cpp/absl/algorithm:container", + "//third_party/abseil-cpp/absl/types:optional", + ] + } +} + +rtc_library("rtc_data_sctp_transport_factory") { + defines = [] + sources = [ + "sctp/sctp_transport_factory.cc", + "sctp/sctp_transport_factory.h", + ] + deps = [ + ":rtc_data_sctp_transport_internal", + "../api/transport:sctp_transport_factory_interface", + "../rtc_base:threading", + "../rtc_base/system:unused", + ] + + if (rtc_enable_sctp) { + assert(rtc_build_usrsctp, "An SCTP backend is required to enable SCTP") + } + + if (rtc_build_usrsctp) { + defines += [ "WEBRTC_HAVE_USRSCTP" ] + deps += [ ":rtc_data_usrsctp_transport" ] } } rtc_source_set("rtc_media") { visibility = [ "*" ] allow_poison = [ "audio_codecs" ] # TODO(bugs.webrtc.org/8396): Remove. - deps = [ - ":rtc_audio_video", - ":rtc_data", - ] + deps = [ ":rtc_audio_video" ] } if (rtc_include_tests) { @@ -537,7 +551,6 @@ if (rtc_include_tests) { defines = [] deps = [ ":rtc_audio_video", - ":rtc_data", ":rtc_encoder_simulcast_proxy", ":rtc_internal_video_codecs", ":rtc_media", @@ -641,15 +654,18 @@ if (rtc_include_tests) { sources += [ "engine/webrtc_voice_engine_unittest.cc" ] } - if (rtc_enable_sctp) { + if (rtc_build_usrsctp) { sources += [ "sctp/usrsctp_transport_reliability_unittest.cc", "sctp/usrsctp_transport_unittest.cc", ] deps += [ + ":rtc_data_sctp_transport_internal", + ":rtc_data_usrsctp_transport", "../rtc_base:rtc_event", "../rtc_base/task_utils:pending_task_safety_flag", "../rtc_base/task_utils:to_queued_task", + "//third_party/usrsctp", ] } @@ -669,10 +685,6 @@ if (rtc_include_tests) { if (is_ios) { deps += [ ":rtc_media_unittests_bundle_data" ] } - - if (rtc_enable_sctp && rtc_build_usrsctp) { - deps += [ "//third_party/usrsctp" ] - } } } } diff --git a/media/sctp/noop.cc b/media/sctp/noop.cc deleted file mode 100644 index a3523b18b2..0000000000 --- a/media/sctp/noop.cc +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2017 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. - */ - -// This file is only needed to make ninja happy on some platforms. -// On some platforms it is not possible to link an rtc_static_library -// without any source file listed in the GN target. diff --git a/media/sctp/sctp_transport_factory.cc b/media/sctp/sctp_transport_factory.cc index dd53d04a83..40480e797a 100644 --- a/media/sctp/sctp_transport_factory.cc +++ b/media/sctp/sctp_transport_factory.cc @@ -10,16 +10,30 @@ #include "media/sctp/sctp_transport_factory.h" +#include "rtc_base/system/unused.h" + +#ifdef WEBRTC_HAVE_USRSCTP +#include "media/sctp/usrsctp_transport.h" // nogncheck +#endif + namespace cricket { SctpTransportFactory::SctpTransportFactory(rtc::Thread* network_thread) - : network_thread_(network_thread) {} + : network_thread_(network_thread) { + RTC_UNUSED(network_thread_); +} std::unique_ptr SctpTransportFactory::CreateSctpTransport( rtc::PacketTransportInternal* transport) { - return std::unique_ptr( - new UsrsctpTransport(network_thread_, transport)); + std::unique_ptr result; +#ifdef WEBRTC_HAVE_USRSCTP + if (!result) { + result = std::unique_ptr( + new UsrsctpTransport(network_thread_, transport)); + } +#endif + return result; } } // namespace cricket diff --git a/media/sctp/sctp_transport_factory.h b/media/sctp/sctp_transport_factory.h index 7fe4de03a7..4fff214129 100644 --- a/media/sctp/sctp_transport_factory.h +++ b/media/sctp/sctp_transport_factory.h @@ -14,7 +14,7 @@ #include #include "api/transport/sctp_transport_factory_interface.h" -#include "media/sctp/usrsctp_transport.h" +#include "media/sctp/sctp_transport_internal.h" #include "rtc_base/thread.h" namespace cricket { diff --git a/media/sctp/usrsctp_transport.h b/media/sctp/usrsctp_transport.h index 0241c2c562..de018b924e 100644 --- a/media/sctp/usrsctp_transport.h +++ b/media/sctp/usrsctp_transport.h @@ -21,7 +21,6 @@ #include #include "absl/types/optional.h" -#include "api/transport/sctp_transport_factory_interface.h" #include "rtc_base/buffer.h" #include "rtc_base/constructor_magic.h" #include "rtc_base/copy_on_write_buffer.h" diff --git a/pc/BUILD.gn b/pc/BUILD.gn index a61e04d8a1..2b70f5985c 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -108,7 +108,7 @@ rtc_library("rtc_pc_base") { "../common_video", "../common_video:common_video", "../logging:ice_log", - "../media:rtc_data", + "../media:rtc_data_sctp_transport_internal", "../media:rtc_h264_profile_id", "../media:rtc_media_base", "../media:rtc_media_config", @@ -281,7 +281,7 @@ rtc_library("peerconnection") { "../call:call_interfaces", "../common_video", "../logging:ice_log", - "../media:rtc_data", + "../media:rtc_data_sctp_transport_internal", "../media:rtc_media_base", "../media:rtc_media_config", "../modules/audio_processing:audio_processing_statistics", @@ -336,7 +336,7 @@ rtc_library("connection_context") { "../api/transport:field_trial_based_config", "../api/transport:sctp_transport_factory_interface", "../api/transport:webrtc_key_value_config", - "../media:rtc_data", + "../media:rtc_data_sctp_transport_factory", "../media:rtc_media_base", "../p2p:rtc_p2p", "../rtc_base", @@ -869,7 +869,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video/test:mock_recordable_encoded_frame", "../call:rtp_interfaces", "../call:rtp_receiver", - "../media:rtc_data", + "../media:rtc_data_sctp_transport_internal", "../media:rtc_media_base", "../media:rtc_media_tests_utils", "../modules/rtp_rtcp:rtp_rtcp_format", @@ -1011,10 +1011,6 @@ if (rtc_include_tests && !build_with_chromium) { "webrtc_sdp_unittest.cc", ] - if (rtc_enable_sctp) { - defines = [ "WEBRTC_HAVE_SCTP" ] - } - deps = [ ":audio_rtp_receiver", ":audio_track", @@ -1065,6 +1061,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video:video_rtp_headers", "../call/adaptation:resource_adaptation_test_utilities", "../logging:fake_rtc_event_log", + "../media:rtc_data_sctp_transport_internal", "../media:rtc_media_config", "../media:rtc_media_engine_defaults", "../modules/audio_device:audio_device_api", @@ -1118,8 +1115,6 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video_codecs:video_codecs_api", "../call:call_interfaces", "../media:rtc_audio_video", - "../media:rtc_data", # TODO(phoglund): AFAIK only used for one sctp - # constant. "../media:rtc_media_base", "../media:rtc_media_tests_utils", "../modules/audio_processing", @@ -1328,7 +1323,6 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video_codecs:builtin_video_encoder_factory", "../api/video_codecs:video_codecs_api", "../call:call_interfaces", - "../media:rtc_data", "../media:rtc_media", "../media:rtc_media_base", "../media:rtc_media_tests_utils", diff --git a/pc/connection_context.h b/pc/connection_context.h index 29ae99ab73..0c69c17a5b 100644 --- a/pc/connection_context.h +++ b/pc/connection_context.h @@ -22,7 +22,6 @@ #include "api/transport/sctp_transport_factory_interface.h" #include "api/transport/webrtc_key_value_config.h" #include "media/base/media_engine.h" -#include "media/sctp/sctp_transport_internal.h" #include "p2p/base/basic_packet_socket_factory.h" #include "pc/channel_manager.h" #include "rtc_base/checks.h" diff --git a/pc/peer_connection_factory.h b/pc/peer_connection_factory.h index 71d78309bf..d2bac7a85f 100644 --- a/pc/peer_connection_factory.h +++ b/pc/peer_connection_factory.h @@ -37,7 +37,6 @@ #include "api/transport/sctp_transport_factory_interface.h" #include "api/transport/webrtc_key_value_config.h" #include "call/call.h" -#include "media/sctp/sctp_transport_internal.h" #include "p2p/base/port_allocator.h" #include "pc/channel_manager.h" #include "pc/connection_context.h" diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 054cd36154..b27687024a 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -777,7 +777,6 @@ if (current_os == "linux" || is_android) { "../../api/video_codecs:video_codecs_api", "../../call:call_interfaces", "../../media:rtc_audio_video", - "../../media:rtc_data", "../../media:rtc_media_base", "../../modules/audio_device", "../../modules/audio_processing:api", diff --git a/test/pc/sctp/BUILD.gn b/test/pc/sctp/BUILD.gn index 93ae1bf59c..b47cff2c0f 100644 --- a/test/pc/sctp/BUILD.gn +++ b/test/pc/sctp/BUILD.gn @@ -11,5 +11,5 @@ import("../../../webrtc.gni") rtc_source_set("fake_sctp_transport") { visibility = [ "*" ] sources = [ "fake_sctp_transport.h" ] - deps = [ "../../../media:rtc_data" ] + deps = [ "../../../media:rtc_data_sctp_transport_internal" ] } diff --git a/webrtc.gni b/webrtc.gni index 6c80d721f4..574df1fb30 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -233,7 +233,6 @@ declare_args() { rtc_libvpx_build_vp9 = !build_with_mozilla rtc_build_opus = !build_with_mozilla rtc_build_ssl = !build_with_mozilla - rtc_build_usrsctp = !build_with_mozilla # Enable libevent task queues on platforms that support it. if (is_win || is_mac || is_ios || is_nacl || is_fuchsia || @@ -290,6 +289,11 @@ declare_args() { rtc_exclude_transient_suppressor = false } +declare_args() { + # Enable the usrsctp backend for DataChannels and related unittests + rtc_build_usrsctp = !build_with_mozilla && rtc_enable_sctp +} + # Make it possible to provide custom locations for some libraries (move these # up into declare_args should we need to actually use them for the GN build). rtc_libvpx_dir = "//third_party/libvpx"