diff --git a/api/BUILD.gn b/api/BUILD.gn index f02c5fd434..3c73d516bb 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -52,6 +52,7 @@ if (!build_with_chromium) { "../pc:peerconnection", "../rtc_base", "../rtc_base:rtc_base_approved", + "../rtc_base:threading", "audio:audio_mixer_api", "audio_codecs:audio_codecs_api", "task_queue:default_task_queue_factory", @@ -174,6 +175,7 @@ rtc_library("libjingle_peerconnection_api") { ":rtp_parameters", ":rtp_transceiver_direction", ":scoped_refptr", + "../rtc_base:network_constants", "adaptation:resource_adaptation_api", "audio:audio_mixer_api", "audio_codecs:audio_codecs_api", @@ -204,7 +206,10 @@ rtc_library("libjingle_peerconnection_api") { "../rtc_base", "../rtc_base:checks", "../rtc_base:deprecation", + "../rtc_base:ip_address", "../rtc_base:rtc_base_approved", + "../rtc_base:socket_address", + "../rtc_base:threading", "../rtc_base/system:rtc_export", ] absl_deps = [ @@ -248,6 +253,7 @@ rtc_source_set("packet_socket_factory") { "packet_socket_factory.h", ] deps = [ + "../rtc_base:async_resolver_interface", "../rtc_base:rtc_base", "../rtc_base/system:rtc_export", ] @@ -383,6 +389,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { ":video_quality_analyzer_api", "../media:rtc_media_base", "../rtc_base:rtc_base", + "../rtc_base:threading", "rtc_event_log", "task_queue", "transport:network_control", @@ -600,6 +607,8 @@ rtc_source_set("network_emulation_manager_api") { ":time_controller", "../call:simulated_network", "../rtc_base", + "../rtc_base:network_constants", + "../rtc_base:threading", "test/network_emulation", "units:data_rate", "units:data_size", @@ -617,6 +626,7 @@ rtc_source_set("time_controller") { deps = [ "../modules/utility", "../rtc_base", + "../rtc_base:threading", "../rtc_base/synchronization:yield_policy", "../system_wrappers", "task_queue", @@ -670,6 +680,7 @@ rtc_library("ice_transport_factory") { ":scoped_refptr", "../p2p:rtc_p2p", "../rtc_base", + "../rtc_base:threading", "../rtc_base/system:rtc_export", "rtc_event_log:rtc_event_log", ] diff --git a/api/test/network_emulation/BUILD.gn b/api/test/network_emulation/BUILD.gn index 58cd27d45e..a8044d7230 100644 --- a/api/test/network_emulation/BUILD.gn +++ b/api/test/network_emulation/BUILD.gn @@ -21,7 +21,9 @@ rtc_library("network_emulation") { "../..:array_view", "../../../rtc_base", "../../../rtc_base:checks", + "../../../rtc_base:ip_address", "../../../rtc_base:rtc_base_approved", + "../../../rtc_base:socket_address", "../../numerics", "../../task_queue", "../../units:data_rate", diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn index 7bcda8b4a7..7d23adc37a 100644 --- a/api/transport/BUILD.gn +++ b/api/transport/BUILD.gn @@ -108,8 +108,10 @@ rtc_source_set("stun_types") { deps = [ "../../api:array_view", "../../rtc_base:checks", + "../../rtc_base:ip_address", "../../rtc_base:rtc_base", "../../rtc_base:rtc_base_approved", + "../../rtc_base:socket_address", ] absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] } @@ -147,6 +149,7 @@ if (rtc_include_tests) { ":stun_types", "../../rtc_base", "../../rtc_base:rtc_base_approved", + "../../rtc_base:socket_address", "../../test:test_support", "//testing/gtest", ] diff --git a/audio/BUILD.gn b/audio/BUILD.gn index 6901e33673..1fea09c209 100644 --- a/audio/BUILD.gn +++ b/audio/BUILD.gn @@ -90,6 +90,7 @@ rtc_library("audio") { "../rtc_base:rtc_base_approved", "../rtc_base:rtc_task_queue", "../rtc_base:safe_minmax", + "../rtc_base:threading", "../rtc_base/experiments:field_trial_parser", "../rtc_base/synchronization:mutex", "../rtc_base/synchronization:sequence_checker", diff --git a/call/BUILD.gn b/call/BUILD.gn index cef43f4c3d..7730382b22 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -504,6 +504,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_approved", "../rtc_base:task_queue_for_test", "../rtc_base:task_queue_for_test", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", "../rtc_base/task_utils:repeating_task", "../system_wrappers", diff --git a/examples/BUILD.gn b/examples/BUILD.gn index c2678962d7..a08ab465d1 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -686,6 +686,8 @@ if (is_linux || is_chromeos || is_win) { "../p2p:rtc_p2p", "../pc:video_track_source", "../rtc_base:checks", + "../rtc_base:net_helpers", + "../rtc_base:threading", "../rtc_base/third_party/sigslot", "../system_wrappers:field_trial", "../test:field_trial", @@ -777,7 +779,11 @@ if (is_linux || is_chromeos || is_win) { "../p2p:rtc_p2p", "../pc:rtc_pc", "../rtc_base", + "../rtc_base:ip_address", "../rtc_base:rtc_base_approved", + "../rtc_base:socket_address", + "../rtc_base:socket_server", + "../rtc_base:threading", ] } rtc_executable("stunserver") { @@ -789,6 +795,9 @@ if (is_linux || is_chromeos || is_win) { "../pc:rtc_pc", "../rtc_base", "../rtc_base:rtc_base_approved", + "../rtc_base:socket_address", + "../rtc_base:socket_server", + "../rtc_base:threading", ] } } @@ -912,6 +921,8 @@ if (!build_with_chromium) { "../rtc_base", "../rtc_base:checks", "../rtc_base:rtc_base_approved", + "../rtc_base:socket_address", + "../rtc_base:threading", "//third_party/abseil-cpp/absl/flags:flag", "//third_party/abseil-cpp/absl/flags:parse", ] diff --git a/examples/androidvoip/BUILD.gn b/examples/androidvoip/BUILD.gn index 649e601519..31b20d3872 100644 --- a/examples/androidvoip/BUILD.gn +++ b/examples/androidvoip/BUILD.gn @@ -56,6 +56,9 @@ if (is_android) { deps = [ ":generated_jni", + "../../rtc_base:socket_address", + "../../rtc_base:socket_server", + "../../rtc_base:threading", "//api:transport_api", "//api/audio_codecs:audio_codecs_api", "//api/audio_codecs:builtin_audio_decoder_factory", diff --git a/logging/BUILD.gn b/logging/BUILD.gn index 8eb5631919..9fccf5c116 100644 --- a/logging/BUILD.gn +++ b/logging/BUILD.gn @@ -288,6 +288,7 @@ rtc_library("fake_rtc_event_log") { "../api/rtc_event_log", "../rtc_base", "../rtc_base:checks", + "../rtc_base:threading", ] } diff --git a/media/BUILD.gn b/media/BUILD.gn index db5028f93f..b253a61252 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -113,6 +113,7 @@ rtc_library("rtc_media_base") { "../rtc_base:rtc_base_approved", "../rtc_base:rtc_task_queue", "../rtc_base:sanitizer", + "../rtc_base:socket", "../rtc_base:stringutils", "../rtc_base/synchronization:mutex", "../rtc_base/synchronization:sequence_checker", @@ -323,6 +324,7 @@ rtc_library("rtc_audio_video") { "../rtc_base:ignore_wundef", "../rtc_base:rtc_task_queue", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base/experiments:field_trial_parser", "../rtc_base/experiments:min_video_bitrate_experiment", "../rtc_base/experiments:normalize_simulcast_size_experiment", @@ -410,6 +412,7 @@ rtc_library("rtc_data") { "../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", @@ -486,6 +489,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_approved", "../rtc_base:rtc_task_queue", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", "../rtc_base/third_party/sigslot", "../test:test_support", @@ -595,6 +599,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_task_queue", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base/experiments:min_video_bitrate_experiment", "../rtc_base/synchronization:mutex", "../rtc_base/third_party/sigslot", diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index dbb1882de2..f2f28a7bd6 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -367,6 +367,7 @@ if (rtc_include_tests) { "../../rtc_base:rtc_base_tests_utils", "../../rtc_base:safe_minmax", "../../rtc_base:task_queue_for_test", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/system:arch", "../../rtc_base/system:file_wrapper", diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index b706c6b202..2373b9fb3c 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -189,6 +189,7 @@ rtc_library("video_coding") { "../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_numerics", "../../rtc_base:rtc_task_queue", + "../../rtc_base:threading", "../../rtc_base/experiments:alr_experiment", "../../rtc_base/experiments:field_trial_parser", "../../rtc_base/experiments:jitter_upper_bound_experiment", diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn index d4330ef94a..5838f31089 100644 --- a/p2p/BUILD.gn +++ b/p2p/BUILD.gn @@ -96,8 +96,17 @@ rtc_library("rtc_p2p") { "../api/transport:stun_types", "../logging:ice_log", "../rtc_base", + "../rtc_base:async_resolver_interface", + "../rtc_base:async_socket", "../rtc_base:checks", + "../rtc_base:ip_address", + "../rtc_base:net_helpers", + "../rtc_base:network_constants", "../rtc_base:rtc_numerics", + "../rtc_base:socket", + "../rtc_base:socket_address", + "../rtc_base:socket_server", + "../rtc_base:threading", "../rtc_base/experiments:field_trial_parser", "../rtc_base/synchronization:sequence_checker", "../rtc_base/system:no_unique_address", @@ -148,6 +157,8 @@ if (rtc_include_tests) { deps = [ ":rtc_p2p", "../rtc_base", + "../rtc_base:net_helpers", + "../rtc_base:threading", ] } @@ -173,9 +184,14 @@ if (rtc_include_tests) { "../api/crypto:options", "../api/transport:stun_types", "../rtc_base", + "../rtc_base:async_resolver_interface", + "../rtc_base:async_socket", "../rtc_base:gunit_helpers", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_tests_utils", + "../rtc_base:socket_address", + "../rtc_base:socket_server", + "../rtc_base:threading", "../rtc_base/third_party/sigslot", "../test:test_support", ] @@ -221,11 +237,18 @@ if (rtc_include_tests) { "../api/transport:stun_types", "../api/units:time_delta", "../rtc_base", + "../rtc_base:async_socket", "../rtc_base:checks", "../rtc_base:gunit_helpers", + "../rtc_base:ip_address", + "../rtc_base:net_helpers", + "../rtc_base:network_constants", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_tests_utils", + "../rtc_base:socket", + "../rtc_base:socket_address", "../rtc_base:testclient", + "../rtc_base:threading", "../rtc_base/network:sent_packet", "../rtc_base/third_party/sigslot", "../system_wrappers:metrics", @@ -256,6 +279,8 @@ rtc_library("p2p_server_utils") { "../rtc_base", "../rtc_base:checks", "../rtc_base:rtc_base_tests_utils", + "../rtc_base:socket_address", + "../rtc_base:threading", "../rtc_base/third_party/sigslot", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ] @@ -273,7 +298,11 @@ rtc_library("libstunprober") { "../api:packet_socket_factory", "../api/transport:stun_types", "../rtc_base", + "../rtc_base:async_resolver_interface", "../rtc_base:checks", + "../rtc_base:ip_address", + "../rtc_base:socket_address", + "../rtc_base:threading", "../rtc_base/system:rtc_export", ] } @@ -290,6 +319,7 @@ if (rtc_include_tests) { "../rtc_base", "../rtc_base:checks", "../rtc_base:gunit_helpers", + "../rtc_base:ip_address", "../rtc_base:rtc_base_tests_utils", "../test:test_support", "//testing/gtest", diff --git a/p2p/base/basic_async_resolver_factory.cc b/p2p/base/basic_async_resolver_factory.cc index 9d8266eaf9..027358b515 100644 --- a/p2p/base/basic_async_resolver_factory.cc +++ b/p2p/base/basic_async_resolver_factory.cc @@ -10,7 +10,7 @@ #include "p2p/base/basic_async_resolver_factory.h" -#include "rtc_base/net_helpers.h" +#include "rtc_base/async_resolver.h" namespace webrtc { diff --git a/p2p/base/basic_packet_socket_factory.cc b/p2p/base/basic_packet_socket_factory.cc index ebc11bbcf7..232e58b546 100644 --- a/p2p/base/basic_packet_socket_factory.cc +++ b/p2p/base/basic_packet_socket_factory.cc @@ -15,6 +15,7 @@ #include #include "p2p/base/async_stun_tcp_socket.h" +#include "rtc_base/async_resolver.h" #include "rtc_base/async_tcp_socket.h" #include "rtc_base/async_udp_socket.h" #include "rtc_base/checks.h" diff --git a/p2p/base/stun_port.cc b/p2p/base/stun_port.cc index 4e1a1f6a97..7a76af5fa1 100644 --- a/p2p/base/stun_port.cc +++ b/p2p/base/stun_port.cc @@ -17,11 +17,11 @@ #include "p2p/base/connection.h" #include "p2p/base/p2p_constants.h" #include "p2p/base/port_allocator.h" +#include "rtc_base/async_resolver_interface.h" #include "rtc_base/checks.h" #include "rtc_base/helpers.h" #include "rtc_base/ip_address.h" #include "rtc_base/logging.h" -#include "rtc_base/net_helpers.h" #include "rtc_base/strings/string_builder.h" namespace cricket { diff --git a/p2p/base/turn_port.h b/p2p/base/turn_port.h index a9ec434194..6f9caaf795 100644 --- a/p2p/base/turn_port.h +++ b/p2p/base/turn_port.h @@ -25,6 +25,7 @@ #include "p2p/client/basic_port_allocator.h" #include "rtc_base/async_invoker.h" #include "rtc_base/async_packet_socket.h" +#include "rtc_base/async_resolver_interface.h" #include "rtc_base/ssl_certificate.h" namespace webrtc { diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 143ce25c74..9e296b5c3a 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -114,7 +114,9 @@ rtc_library("rtc_pc_base") { "../rtc_base:checks", "../rtc_base:deprecation", "../rtc_base:rtc_task_queue", + "../rtc_base:socket_address", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", "../rtc_base/synchronization:sequence_checker", "../rtc_base/system:file_wrapper", @@ -277,9 +279,13 @@ rtc_library("peerconnection") { "../rtc_base:callback_list", "../rtc_base:checks", "../rtc_base:deprecation", + "../rtc_base:ip_address", + "../rtc_base:network_constants", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_operations_chain", "../rtc_base:safe_minmax", + "../rtc_base:socket_address", + "../rtc_base:threading", "../rtc_base:weak_ptr", "../rtc_base/experiments:field_trial_parser", "../rtc_base/network:sent_packet", @@ -324,6 +330,7 @@ rtc_library("connection_context") { "../p2p:rtc_p2p", "../rtc_base", "../rtc_base:checks", + "../rtc_base:threading", ] } @@ -338,6 +345,7 @@ rtc_library("peer_connection_message_handler") { "../api:media_stream_interface", "../api:rtc_error", "../rtc_base", + "../rtc_base:threading", "../rtc_base/synchronization:sequence_checker", ] } @@ -400,6 +408,7 @@ rtc_library("rtp_transmission_manager") { "../media:rtc_media_base", "../rtc_base", "../rtc_base:checks", + "../rtc_base:threading", "../rtc_base/third_party/sigslot", ] absl_deps = [ @@ -436,6 +445,7 @@ rtc_library("rtp_receiver") { "../rtc_base:logging", "../rtc_base:rtc_base", "../rtc_base:rtc_base_approved", + "../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -466,6 +476,7 @@ rtc_library("audio_rtp_receiver") { "../rtc_base", "../rtc_base:checks", "../rtc_base:refcount", + "../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -498,6 +509,7 @@ rtc_library("video_rtp_receiver") { "../rtc_base", "../rtc_base:checks", "../rtc_base:rtc_base_approved", + "../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -548,6 +560,7 @@ rtc_library("video_track") { "../rtc_base:checks", "../rtc_base:refcount", "../rtc_base:rtc_base_approved", + "../rtc_base:threading", ] } @@ -593,6 +606,7 @@ rtc_library("jitter_buffer_delay") { "../rtc_base:checks", "../rtc_base:refcount", "../rtc_base:safe_minmax", + "../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -617,6 +631,7 @@ rtc_library("remote_audio_source") { "../rtc_base:rtc_base_approved", "../rtc_base:safe_conversions", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", ] absl_deps = [ @@ -680,6 +695,7 @@ rtc_library("dtmf_sender") { "../api:libjingle_peerconnection_api", "../rtc_base:checks", "../rtc_base:rtc_base", + "../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -803,6 +819,7 @@ if (rtc_include_tests) { "../rtc_base:gunit_helpers", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_tests_utils", + "../rtc_base:threading", "../rtc_base/third_party/sigslot", "../system_wrappers:metrics", "../test:field_trial", @@ -851,6 +868,8 @@ if (rtc_include_tests) { "../rtc_base:checks", "../rtc_base:gunit_helpers", "../rtc_base:rtc_base_tests_utils", + "../rtc_base:socket_address", + "../rtc_base:threading", "../system_wrappers", "../test:perf_test", "../test:test_support", @@ -951,6 +970,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_base_approved", "../rtc_base:rtc_task_queue", "../rtc_base:task_queue_for_test", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", "../rtc_base/synchronization:sequence_checker", "../rtc_base/task_utils:repeating_task", @@ -1066,8 +1086,11 @@ if (rtc_include_tests) { "../p2p:fake_port_allocator", "../rtc_base:checks", "../rtc_base:gunit_helpers", + "../rtc_base:ip_address", "../rtc_base:rtc_base_tests_utils", "../rtc_base:rtc_json", + "../rtc_base:socket_address", + "../rtc_base:threading", "../rtc_base/synchronization:mutex", "../rtc_base/third_party/base64", "../rtc_base/third_party/sigslot", diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 34485047ca..184c298999 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -15,7 +15,7 @@ if (is_android) { import("//build/config/android/rules.gni") } -config("rtc_base_chromium_config") { +config("threading_chromium_config") { defines = [ "NO_MAIN_THREAD_WRAPPING" ] } @@ -666,139 +666,220 @@ rtc_library("rtc_json") { } rtc_source_set("async_resolver") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # async_resolver source files (see - # https://webrtc-review.googlesource.com/c/src/+/196903). - sources = [ "async_resolver.h" ] + # TODO(bugs.webrtc.org/9987): Remove when downstream clients have + # been redirected on //rtc_base:threading. + sources = [] } -rtc_source_set("net_helpers") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "net_helpers.cc", - # "net_helpers.h", - # ] +rtc_library("net_helpers") { + sources = [ + "net_helpers.cc", + "net_helpers.h", + ] + deps = [] + if (is_android) { + deps += [ ":ifaddrs_android" ] + } + if (is_win) { + deps += [ ":win32" ] + } } -rtc_source_set("async_resolver_interface") { +rtc_library("async_resolver_interface") { visibility = [ "*" ] - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "async_resolver_interface.cc", - # "async_resolver_interface.h", - # ] + sources = [ + "async_resolver_interface.cc", + "async_resolver_interface.h", + ] + deps = [ + ":socket_address", + "system:rtc_export", + "third_party/sigslot", + ] } -rtc_source_set("ip_address") { +rtc_library("ip_address") { visibility = [ "*" ] - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "ip_address.cc", - # "ip_address.h", - # ] + sources = [ + "ip_address.cc", + "ip_address.h", + ] + deps = [ + ":net_helpers", + ":rtc_base_approved", + ":stringutils", + "system:rtc_export", + ] + if (is_win) { + deps += [ ":win32" ] + } } -rtc_source_set("socket_address") { +rtc_library("socket_address") { visibility = [ "*" ] - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "socket_address.cc", - # "socket_address.h", - # ] + sources = [ + "socket_address.cc", + "socket_address.h", + ] + deps = [ + ":checks", + ":ip_address", + ":logging", + ":net_helpers", + ":rtc_base_approved", + ":safe_conversions", + ":stringutils", + "system:rtc_export", + ] + if (is_win) { + deps += [ ":win32" ] + } } -rtc_source_set("null_socket_server") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "null_socket_server.cc", - # "null_socket_server.h", - # ] +rtc_library("null_socket_server") { + sources = [ + "null_socket_server.cc", + "null_socket_server.h", + ] + deps = [ + ":async_socket", + ":checks", + ":rtc_event", + ":socket", + ":socket_server", + "system:rtc_export", + ] } rtc_source_set("socket_server") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "socket_server.h", - # ] + sources = [ "socket_server.h" ] + deps = [ ":socket_factory" ] } -rtc_source_set("threading") { +rtc_library("threading") { visibility = [ "*" ] - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "asyncresolver.cc", - # "asyncresolver.h", - # "defaultsocketserver.cc", - # "defaultsocketserver.h", - # "message_handler.cc", - # "message_handler.h", - # "network_monitor.cc", - # "network_monitor.h", - # "network_monitor_factory.cc", - # "network_monitor_factory.h", - # "physical_socket_server.cc", - # "physical_socket_server.h", - # "signal_thread.cc", - # "signal_thread.h", - # "thread.cc", - # "thread.h", - # ] + + if (build_with_chromium) { + public_configs = [ ":threading_chromium_config" ] + } + + sources = [ + "async_resolver.cc", + "async_resolver.h", + "internal/default_socket_server.cc", + "internal/default_socket_server.h", + "message_handler.cc", + "message_handler.h", + "network_monitor.cc", + "network_monitor.h", + "network_monitor_factory.cc", + "network_monitor_factory.h", + "physical_socket_server.cc", + "physical_socket_server.h", + + # "signal_thread.cc", + # "signal_thread.h", + "thread.cc", + "thread.h", + "thread_message.h", + ] + absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ] + deps = [ + ":async_resolver_interface", + ":atomicops", + ":checks", + ":criticalsection", + ":ip_address", + ":logging", + ":macromagic", + ":network_constants", + ":null_socket_server", + ":platform_thread_types", + ":rtc_base_approved", + ":rtc_event", + ":rtc_task_queue", + ":socket_address", + ":socket_server", + ":timeutils", + "../api:function_view", + "../api:scoped_refptr", + "../api/task_queue", + "synchronization:sequence_checker", + "system:no_unique_address", + "system:rtc_export", + "task_utils:pending_task_safety_flag", + "task_utils:to_queued_task", + "third_party/sigslot", + ] + if (is_android) { + deps += [ ":ifaddrs_android" ] + } + if (is_win) { + deps += [ ":win32" ] + } + if (is_mac || is_ios) { + deps += [ "system:cocoa_threading" ] + } } rtc_source_set("socket_factory") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "socket_factory.h", - # ] + sources = [ "socket_factory.h" ] + deps = [ + ":async_socket", + ":socket", + ] } -rtc_source_set("async_socket") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "async_socket.cc", - # "async_socket.h", - # ] +rtc_library("async_socket") { + sources = [ + "async_socket.cc", + "async_socket.h", + ] + deps = [ + ":checks", + ":socket", + ":socket_address", + "third_party/sigslot", + ] } -rtc_source_set("socket") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "socket.cc", - # "socket.h", - # ] +rtc_library("socket") { + sources = [ + "socket.cc", + "socket.h", + ] + deps = [ + ":macromagic", + ":socket_address", + ] + if (is_win) { + deps += [ ":win32" ] + } } rtc_source_set("network_constants") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "network_constants.h", - # ] + sources = [ + "network_constants.cc", + "network_constants.h", + ] + deps = [ ":checks" ] } if (is_android) { - rtc_source_set("ifaddrs_android") { - # TODO(bugs.webrtc.org/9987): This build target will soon contain - # the following files: - # sources = [ - # "ifaddrs_android.cc", - # "ifaddrs_android.h", - # ] + rtc_library("ifaddrs_android") { + sources = [ + "ifaddrs_android.cc", + "ifaddrs_android.h", + ] + libs = [ + "log", + "GLESv2", + ] } } if (is_win) { - rtc_source_set("win32") { + rtc_library("win32") { sources = [ "win32.cc", "win32.h", @@ -829,10 +910,20 @@ rtc_library("rtc_base") { libs = [] defines = [] deps = [ + ":async_resolver_interface", + ":async_socket", ":checks", ":deprecation", + ":ip_address", + ":network_constants", + ":null_socket_server", ":rtc_task_queue", + ":socket", + ":socket_address", + ":socket_factory", + ":socket_server", ":stringutils", + ":threading", "../api:array_view", "../api:function_view", "../api:scoped_refptr", @@ -868,10 +959,6 @@ rtc_library("rtc_base") { "async_invoker_inl.h", "async_packet_socket.cc", "async_packet_socket.h", - "async_resolver_interface.cc", - "async_resolver_interface.h", - "async_socket.cc", - "async_socket.h", "async_tcp_socket.cc", "async_tcp_socket.h", "async_udp_socket.cc", @@ -891,30 +978,16 @@ rtc_library("rtc_base") { "helpers.h", "http_common.cc", "http_common.h", - "ip_address.cc", - "ip_address.h", "keep_ref_until_done.h", "mdns_responder_interface.h", "message_digest.cc", "message_digest.h", - "message_handler.cc", - "message_handler.h", "net_helper.cc", "net_helper.h", - "net_helpers.cc", - "net_helpers.h", "network.cc", "network.h", - "network_constants.cc", - "network_constants.h", - "network_monitor.cc", - "network_monitor.h", - "network_monitor_factory.cc", - "network_monitor_factory.h", "network_route.cc", "network_route.h", - "null_socket_server.cc", - "null_socket_server.h", "openssl.h", "openssl_adapter.cc", "openssl_adapter.h", @@ -928,8 +1001,6 @@ rtc_library("rtc_base") { "openssl_stream_adapter.h", "openssl_utility.cc", "openssl_utility.h", - "physical_socket_server.cc", - "physical_socket_server.h", "proxy_info.cc", "proxy_info.h", "rtc_certificate.cc", @@ -938,16 +1009,10 @@ rtc_library("rtc_base") { "rtc_certificate_generator.h", "signal_thread.h", "sigslot_repeater.h", - "socket.cc", - "socket.h", "socket_adapters.cc", "socket_adapters.h", - "socket_address.cc", - "socket_address.h", "socket_address_pair.cc", "socket_address_pair.h", - "socket_factory.h", - "socket_server.h", "ssl_adapter.cc", "ssl_adapter.h", "ssl_certificate.cc", @@ -960,9 +1025,6 @@ rtc_library("rtc_base") { "ssl_stream_adapter.h", "stream.cc", "stream.h", - "thread.cc", - "thread.h", - "thread_message.h", "unique_id_generator.cc", "unique_id_generator.h", ] @@ -986,7 +1048,6 @@ rtc_library("rtc_base") { if (build_with_chromium) { include_dirs = [ "../../boringssl/src/include" ] - public_configs += [ ":rtc_base_chromium_config" ] } else { sources += [ "callback.h", @@ -1016,20 +1077,11 @@ rtc_library("rtc_base") { } if (is_android) { - sources += [ - "ifaddrs_android.cc", - "ifaddrs_android.h", - ] - - libs += [ - "log", - "GLESv2", - ] + deps += [ ":ifaddrs_android" ] } if (is_ios || is_mac) { sources += [ "mac_ifaddrs_converter.cc" ] - deps += [ "system:cocoa_threading" ] } if (is_linux || is_chromeos) { @@ -1084,6 +1136,7 @@ rtc_library("gunit_helpers") { ":rtc_base", ":rtc_base_tests_utils", ":stringutils", + ":threading", "../test:test_support", ] absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] @@ -1100,6 +1153,7 @@ rtc_library("testclient") { ":gunit_helpers", ":rtc_base", ":rtc_base_tests_utils", + ":threading", ":timeutils", "synchronization:mutex", ] @@ -1158,8 +1212,15 @@ rtc_library("rtc_base_tests_utils") { "virtual_socket_server.h", ] deps = [ + ":async_socket", ":checks", + ":ip_address", ":rtc_base", + ":socket", + ":socket_address", + ":socket_factory", + ":socket_server", + ":threading", "../api/units:time_delta", "../api/units:timestamp", "memory:fifo_buffer", @@ -1227,11 +1288,19 @@ if (rtc_include_tests) { "socket_unittest.h", ] deps = [ + ":async_socket", ":checks", ":gunit_helpers", + ":ip_address", + ":net_helpers", + ":null_socket_server", ":rtc_base", ":rtc_base_tests_utils", + ":socket", + ":socket_address", + ":socket_server", ":testclient", + ":threading", "../system_wrappers", "../test:fileutils", "../test:test_main", @@ -1295,10 +1364,13 @@ if (rtc_include_tests) { sources += [ "win/windows_version_unittest.cc" ] } deps = [ + ":async_socket", ":bounded_inline_vector", ":checks", ":divide_round", ":gunit_helpers", + ":ip_address", + ":null_socket_server", ":rate_limiter", ":rtc_base", ":rtc_base_approved", @@ -1308,8 +1380,12 @@ if (rtc_include_tests) { ":safe_compare", ":safe_minmax", ":sanitizer", + ":socket", + ":socket_address", + ":socket_server", ":stringutils", ":testclient", + ":threading", "../api:array_view", "../api:scoped_refptr", "../api/numerics", @@ -1356,6 +1432,7 @@ if (rtc_include_tests) { ":rtc_base_approved", ":rtc_event", ":rtc_operations_chain", + ":threading", "../test:test_support", ] } @@ -1437,11 +1514,19 @@ if (rtc_include_tests) { "unique_id_generator_unittest.cc", ] deps = [ + ":async_socket", ":checks", ":gunit_helpers", + ":ip_address", + ":net_helpers", + ":null_socket_server", ":rtc_base_tests_utils", + ":socket_address", + ":socket_factory", + ":socket_server", ":stringutils", ":testclient", + ":threading", "../api:array_view", "../api/task_queue", "../api/task_queue:task_queue_test", diff --git a/rtc_base/async_resolver.cc b/rtc_base/async_resolver.cc new file mode 100644 index 0000000000..198b4984e5 --- /dev/null +++ b/rtc_base/async_resolver.cc @@ -0,0 +1,169 @@ +/* + * Copyright 2008 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 "rtc_base/async_resolver.h" + +#include +#include + +#if defined(WEBRTC_WIN) +#include +#include + +#include "rtc_base/win32.h" +#endif +#if defined(WEBRTC_POSIX) && !defined(__native_client__) +#if defined(WEBRTC_ANDROID) +#include "rtc_base/ifaddrs_android.h" +#else +#include +#endif +#endif // defined(WEBRTC_POSIX) && !defined(__native_client__) + +#include "api/task_queue/task_queue_base.h" +#include "rtc_base/ip_address.h" +#include "rtc_base/logging.h" +#include "rtc_base/task_queue.h" +#include "rtc_base/task_utils/to_queued_task.h" +#include "rtc_base/third_party/sigslot/sigslot.h" // for signal_with_thread... + +namespace rtc { + +int ResolveHostname(const std::string& hostname, + int family, + std::vector* addresses) { +#ifdef __native_client__ + RTC_NOTREACHED(); + RTC_LOG(LS_WARNING) << "ResolveHostname() is not implemented for NaCl"; + return -1; +#else // __native_client__ + if (!addresses) { + return -1; + } + addresses->clear(); + struct addrinfo* result = nullptr; + struct addrinfo hints = {0}; + hints.ai_family = family; + // |family| here will almost always be AF_UNSPEC, because |family| comes from + // AsyncResolver::addr_.family(), which comes from a SocketAddress constructed + // with a hostname. When a SocketAddress is constructed with a hostname, its + // family is AF_UNSPEC. However, if someday in the future we construct + // a SocketAddress with both a hostname and a family other than AF_UNSPEC, + // then it would be possible to get a specific family value here. + + // The behavior of AF_UNSPEC is roughly "get both ipv4 and ipv6", as + // documented by the various operating systems: + // Linux: http://man7.org/linux/man-pages/man3/getaddrinfo.3.html + // Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ + // ms738520(v=vs.85).aspx + // Mac: https://developer.apple.com/legacy/library/documentation/Darwin/ + // Reference/ManPages/man3/getaddrinfo.3.html + // Android (source code, not documentation): + // https://android.googlesource.com/platform/bionic/+/ + // 7e0bfb511e85834d7c6cb9631206b62f82701d60/libc/netbsd/net/getaddrinfo.c#1657 + hints.ai_flags = AI_ADDRCONFIG; + int ret = getaddrinfo(hostname.c_str(), nullptr, &hints, &result); + if (ret != 0) { + return ret; + } + struct addrinfo* cursor = result; + for (; cursor; cursor = cursor->ai_next) { + if (family == AF_UNSPEC || cursor->ai_family == family) { + IPAddress ip; + if (IPFromAddrInfo(cursor, &ip)) { + addresses->push_back(ip); + } + } + } + freeaddrinfo(result); + return 0; +#endif // !__native_client__ +} + +AsyncResolver::AsyncResolver() : error_(-1) {} + +AsyncResolver::~AsyncResolver() { + RTC_DCHECK_RUN_ON(&sequence_checker_); +} + +void AsyncResolver::Start(const SocketAddress& addr) { + RTC_DCHECK_RUN_ON(&sequence_checker_); + RTC_DCHECK(!destroy_called_); + addr_ = addr; + webrtc::TaskQueueBase* current_task_queue = webrtc::TaskQueueBase::Current(); + popup_thread_ = Thread::Create(); + popup_thread_->Start(); + popup_thread_->PostTask(webrtc::ToQueuedTask( + [this, flag = safety_.flag(), addr, current_task_queue] { + std::vector addresses; + int error = + ResolveHostname(addr.hostname().c_str(), addr.family(), &addresses); + current_task_queue->PostTask(webrtc::ToQueuedTask( + std::move(flag), [this, error, addresses = std::move(addresses)] { + RTC_DCHECK_RUN_ON(&sequence_checker_); + ResolveDone(std::move(addresses), error); + })); + })); +} + +bool AsyncResolver::GetResolvedAddress(int family, SocketAddress* addr) const { + RTC_DCHECK_RUN_ON(&sequence_checker_); + RTC_DCHECK(!destroy_called_); + if (error_ != 0 || addresses_.empty()) + return false; + + *addr = addr_; + for (size_t i = 0; i < addresses_.size(); ++i) { + if (family == addresses_[i].family()) { + addr->SetResolvedIP(addresses_[i]); + return true; + } + } + return false; +} + +int AsyncResolver::GetError() const { + RTC_DCHECK_RUN_ON(&sequence_checker_); + RTC_DCHECK(!destroy_called_); + return error_; +} + +void AsyncResolver::Destroy(bool wait) { + // Some callers have trouble guaranteeing that Destroy is called on the + // sequence guarded by |sequence_checker_|. + // RTC_DCHECK_RUN_ON(&sequence_checker_); + RTC_DCHECK(!destroy_called_); + destroy_called_ = true; + MaybeSelfDestruct(); +} + +const std::vector& AsyncResolver::addresses() const { + RTC_DCHECK_RUN_ON(&sequence_checker_); + RTC_DCHECK(!destroy_called_); + return addresses_; +} + +void AsyncResolver::ResolveDone(std::vector addresses, int error) { + addresses_ = addresses; + error_ = error; + recursion_check_ = true; + SignalDone(this); + MaybeSelfDestruct(); +} + +void AsyncResolver::MaybeSelfDestruct() { + if (!recursion_check_) { + delete this; + } else { + recursion_check_ = false; + } +} + +} // namespace rtc diff --git a/rtc_base/async_resolver.h b/rtc_base/async_resolver.h index 3c3ad82870..c05377aed6 100644 --- a/rtc_base/async_resolver.h +++ b/rtc_base/async_resolver.h @@ -11,7 +11,62 @@ #ifndef RTC_BASE_ASYNC_RESOLVER_H_ #define RTC_BASE_ASYNC_RESOLVER_H_ -// Placeholder header for the refactoring in: -// https://webrtc-review.googlesource.com/c/src/+/196903 +#if defined(WEBRTC_POSIX) +#include +#elif WEBRTC_WIN +#include // NOLINT +#endif + +#include +#include + +#include "rtc_base/async_resolver_interface.h" +#include "rtc_base/ip_address.h" +#include "rtc_base/socket_address.h" +#include "rtc_base/synchronization/sequence_checker.h" +#include "rtc_base/system/no_unique_address.h" +#include "rtc_base/system/rtc_export.h" +#include "rtc_base/task_utils/pending_task_safety_flag.h" +#include "rtc_base/thread.h" +#include "rtc_base/thread_annotations.h" + +namespace rtc { + +// AsyncResolver will perform async DNS resolution, signaling the result on +// the SignalDone from AsyncResolverInterface when the operation completes. +// +// This class is thread-compatible, and all methods and destruction needs to +// happen from the same rtc::Thread, except for Destroy which is allowed to +// happen on another context provided it's not happening concurrently to another +// public API call, and is the last access to the object. +class RTC_EXPORT AsyncResolver : public AsyncResolverInterface { + public: + AsyncResolver(); + ~AsyncResolver() override; + + void Start(const SocketAddress& addr) override; + bool GetResolvedAddress(int family, SocketAddress* addr) const override; + int GetError() const override; + void Destroy(bool wait) override; + + const std::vector& addresses() const; + + private: + void ResolveDone(std::vector addresses, int error) + RTC_EXCLUSIVE_LOCKS_REQUIRED(sequence_checker_); + void MaybeSelfDestruct(); + + SocketAddress addr_ RTC_GUARDED_BY(sequence_checker_); + std::vector addresses_ RTC_GUARDED_BY(sequence_checker_); + int error_ RTC_GUARDED_BY(sequence_checker_); + webrtc::ScopedTaskSafety safety_ RTC_GUARDED_BY(sequence_checker_); + std::unique_ptr popup_thread_ RTC_GUARDED_BY(sequence_checker_); + bool recursion_check_ = + false; // Protects against SignalDone calling into Destroy. + bool destroy_called_ = false; + RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker sequence_checker_; +}; + +} // namespace rtc #endif // RTC_BASE_ASYNC_RESOLVER_H_ diff --git a/rtc_base/internal/default_socket_server.cc b/rtc_base/internal/default_socket_server.cc new file mode 100644 index 0000000000..5632b989fc --- /dev/null +++ b/rtc_base/internal/default_socket_server.cc @@ -0,0 +1,33 @@ +/* + * Copyright 2020 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 "rtc_base/internal/default_socket_server.h" + +#include + +#include "rtc_base/socket_server.h" + +#if defined(__native_client__) +#include "rtc_base/null_socket_server.h" +#else +#include "rtc_base/physical_socket_server.h" +#endif + +namespace rtc { + +std::unique_ptr CreateDefaultSocketServer() { +#if defined(__native_client__) + return std::unique_ptr(new rtc::NullSocketServer); +#else + return std::unique_ptr(new rtc::PhysicalSocketServer); +#endif +} + +} // namespace rtc diff --git a/rtc_base/internal/default_socket_server.h b/rtc_base/internal/default_socket_server.h new file mode 100644 index 0000000000..5b3489f613 --- /dev/null +++ b/rtc_base/internal/default_socket_server.h @@ -0,0 +1,24 @@ +/* + * Copyright 2020 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. + */ + +#ifndef RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_ +#define RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_ + +#include + +#include "rtc_base/socket_server.h" + +namespace rtc { + +std::unique_ptr CreateDefaultSocketServer(); + +} // namespace rtc + +#endif // RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_ diff --git a/rtc_base/ip_address.cc b/rtc_base/ip_address.cc index 9dd534c2b5..9f1df58255 100644 --- a/rtc_base/ip_address.cc +++ b/rtc_base/ip_address.cc @@ -20,8 +20,9 @@ #include #endif -#include "rtc_base/byte_order.h" #include "rtc_base/ip_address.h" + +#include "rtc_base/byte_order.h" #include "rtc_base/net_helpers.h" #include "rtc_base/string_utils.h" diff --git a/rtc_base/memory/BUILD.gn b/rtc_base/memory/BUILD.gn index 838fbc68d4..8fbb549165 100644 --- a/rtc_base/memory/BUILD.gn +++ b/rtc_base/memory/BUILD.gn @@ -36,6 +36,7 @@ rtc_library("fifo_buffer") { ] deps = [ "..:rtc_base", + "..:threading", "../synchronization:mutex", "../task_utils:pending_task_safety_flag", "../task_utils:to_queued_task", diff --git a/rtc_base/net_helpers.cc b/rtc_base/net_helpers.cc index c6685e2a65..e51a51a257 100644 --- a/rtc_base/net_helpers.cc +++ b/rtc_base/net_helpers.cc @@ -10,6 +10,8 @@ #include "rtc_base/net_helpers.h" +#include + #if defined(WEBRTC_WIN) #include #include @@ -17,6 +19,7 @@ #include "rtc_base/win32.h" #endif #if defined(WEBRTC_POSIX) && !defined(__native_client__) +#include #if defined(WEBRTC_ANDROID) #include "rtc_base/ifaddrs_android.h" #else @@ -24,145 +27,8 @@ #endif #endif // defined(WEBRTC_POSIX) && !defined(__native_client__) -#include "api/task_queue/task_queue_base.h" -#include "rtc_base/logging.h" -#include "rtc_base/signal_thread.h" -#include "rtc_base/task_queue.h" -#include "rtc_base/task_utils/to_queued_task.h" -#include "rtc_base/third_party/sigslot/sigslot.h" // for signal_with_thread... - namespace rtc { -int ResolveHostname(const std::string& hostname, - int family, - std::vector* addresses) { -#ifdef __native_client__ - RTC_NOTREACHED(); - RTC_LOG(LS_WARNING) << "ResolveHostname() is not implemented for NaCl"; - return -1; -#else // __native_client__ - if (!addresses) { - return -1; - } - addresses->clear(); - struct addrinfo* result = nullptr; - struct addrinfo hints = {0}; - hints.ai_family = family; - // |family| here will almost always be AF_UNSPEC, because |family| comes from - // AsyncResolver::addr_.family(), which comes from a SocketAddress constructed - // with a hostname. When a SocketAddress is constructed with a hostname, its - // family is AF_UNSPEC. However, if someday in the future we construct - // a SocketAddress with both a hostname and a family other than AF_UNSPEC, - // then it would be possible to get a specific family value here. - - // The behavior of AF_UNSPEC is roughly "get both ipv4 and ipv6", as - // documented by the various operating systems: - // Linux: http://man7.org/linux/man-pages/man3/getaddrinfo.3.html - // Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ - // ms738520(v=vs.85).aspx - // Mac: https://developer.apple.com/legacy/library/documentation/Darwin/ - // Reference/ManPages/man3/getaddrinfo.3.html - // Android (source code, not documentation): - // https://android.googlesource.com/platform/bionic/+/ - // 7e0bfb511e85834d7c6cb9631206b62f82701d60/libc/netbsd/net/getaddrinfo.c#1657 - hints.ai_flags = AI_ADDRCONFIG; - int ret = getaddrinfo(hostname.c_str(), nullptr, &hints, &result); - if (ret != 0) { - return ret; - } - struct addrinfo* cursor = result; - for (; cursor; cursor = cursor->ai_next) { - if (family == AF_UNSPEC || cursor->ai_family == family) { - IPAddress ip; - if (IPFromAddrInfo(cursor, &ip)) { - addresses->push_back(ip); - } - } - } - freeaddrinfo(result); - return 0; -#endif // !__native_client__ -} - -AsyncResolver::AsyncResolver() : error_(-1) {} - -AsyncResolver::~AsyncResolver() { - RTC_DCHECK_RUN_ON(&sequence_checker_); -} - -void AsyncResolver::Start(const SocketAddress& addr) { - RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK(!destroy_called_); - addr_ = addr; - webrtc::TaskQueueBase* current_task_queue = webrtc::TaskQueueBase::Current(); - popup_thread_ = Thread::Create(); - popup_thread_->Start(); - popup_thread_->PostTask(webrtc::ToQueuedTask( - [this, flag = safety_.flag(), addr, current_task_queue] { - std::vector addresses; - int error = - ResolveHostname(addr.hostname().c_str(), addr.family(), &addresses); - current_task_queue->PostTask(webrtc::ToQueuedTask( - std::move(flag), [this, error, addresses = std::move(addresses)] { - RTC_DCHECK_RUN_ON(&sequence_checker_); - ResolveDone(std::move(addresses), error); - })); - })); -} - -bool AsyncResolver::GetResolvedAddress(int family, SocketAddress* addr) const { - RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK(!destroy_called_); - if (error_ != 0 || addresses_.empty()) - return false; - - *addr = addr_; - for (size_t i = 0; i < addresses_.size(); ++i) { - if (family == addresses_[i].family()) { - addr->SetResolvedIP(addresses_[i]); - return true; - } - } - return false; -} - -int AsyncResolver::GetError() const { - RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK(!destroy_called_); - return error_; -} - -void AsyncResolver::Destroy(bool wait) { - // Some callers have trouble guaranteeing that Destroy is called on the - // sequence guarded by |sequence_checker_|. - // RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK(!destroy_called_); - destroy_called_ = true; - MaybeSelfDestruct(); -} - -const std::vector& AsyncResolver::addresses() const { - RTC_DCHECK_RUN_ON(&sequence_checker_); - RTC_DCHECK(!destroy_called_); - return addresses_; -} - -void AsyncResolver::ResolveDone(std::vector addresses, int error) { - addresses_ = addresses; - error_ = error; - recursion_check_ = true; - SignalDone(this); - MaybeSelfDestruct(); -} - -void AsyncResolver::MaybeSelfDestruct() { - if (!recursion_check_) { - delete this; - } else { - recursion_check_ = false; - } -} - const char* inet_ntop(int af, const void* src, char* dst, socklen_t size) { #if defined(WEBRTC_WIN) return win32_inet_ntop(af, src, dst, size); diff --git a/rtc_base/net_helpers.h b/rtc_base/net_helpers.h index 172a222456..4ed84786b3 100644 --- a/rtc_base/net_helpers.h +++ b/rtc_base/net_helpers.h @@ -15,57 +15,12 @@ #include #elif WEBRTC_WIN #include // NOLINT + +#include "rtc_base/win32.h" #endif -#include - -#include "rtc_base/async_resolver_interface.h" -#include "rtc_base/ip_address.h" -#include "rtc_base/socket_address.h" -#include "rtc_base/synchronization/sequence_checker.h" -#include "rtc_base/system/no_unique_address.h" -#include "rtc_base/system/rtc_export.h" -#include "rtc_base/task_utils/pending_task_safety_flag.h" -#include "rtc_base/thread.h" -#include "rtc_base/thread_annotations.h" - namespace rtc { -// AsyncResolver will perform async DNS resolution, signaling the result on -// the SignalDone from AsyncResolverInterface when the operation completes. -// -// This class is thread-compatible, and all methods and destruction needs to -// happen from the same rtc::Thread, except for Destroy which is allowed to -// happen on another context provided it's not happening concurrently to another -// public API call, and is the last access to the object. -class RTC_EXPORT AsyncResolver : public AsyncResolverInterface { - public: - AsyncResolver(); - ~AsyncResolver() override; - - void Start(const SocketAddress& addr) override; - bool GetResolvedAddress(int family, SocketAddress* addr) const override; - int GetError() const override; - void Destroy(bool wait) override; - - const std::vector& addresses() const; - - private: - void ResolveDone(std::vector addresses, int error) - RTC_EXCLUSIVE_LOCKS_REQUIRED(sequence_checker_); - void MaybeSelfDestruct(); - - SocketAddress addr_ RTC_GUARDED_BY(sequence_checker_); - std::vector addresses_ RTC_GUARDED_BY(sequence_checker_); - int error_ RTC_GUARDED_BY(sequence_checker_); - webrtc::ScopedTaskSafety safety_ RTC_GUARDED_BY(sequence_checker_); - std::unique_ptr popup_thread_ RTC_GUARDED_BY(sequence_checker_); - bool recursion_check_ = - false; // Protects against SignalDone calling into Destroy. - bool destroy_called_ = false; - RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker sequence_checker_; -}; - // rtc namespaced wrappers for inet_ntop and inet_pton so we can avoid // the windows-native versions of these. const char* inet_ntop(int af, const void* src, char* dst, socklen_t size); @@ -73,6 +28,7 @@ int inet_pton(int af, const char* src, void* dst); bool HasIPv4Enabled(); bool HasIPv6Enabled(); + } // namespace rtc #endif // RTC_BASE_NET_HELPERS_H_ diff --git a/rtc_base/physical_socket_server.cc b/rtc_base/physical_socket_server.cc index 3cb7c2008c..adf3fab507 100644 --- a/rtc_base/physical_socket_server.cc +++ b/rtc_base/physical_socket_server.cc @@ -119,14 +119,6 @@ class ScopedSetTrue { namespace rtc { -std::unique_ptr SocketServer::CreateDefault() { -#if defined(__native_client__) - return std::unique_ptr(new rtc::NullSocketServer); -#else - return std::unique_ptr(new rtc::PhysicalSocketServer); -#endif -} - PhysicalSocket::PhysicalSocket(PhysicalSocketServer* ss, SOCKET s) : ss_(ss), s_(s), diff --git a/rtc_base/physical_socket_server.h b/rtc_base/physical_socket_server.h index cc21a67b1a..5a09aacc9b 100644 --- a/rtc_base/physical_socket_server.h +++ b/rtc_base/physical_socket_server.h @@ -21,8 +21,9 @@ #include #include +#include "rtc_base/async_resolver.h" +#include "rtc_base/async_resolver_interface.h" #include "rtc_base/deprecated/recursive_critical_section.h" -#include "rtc_base/net_helpers.h" #include "rtc_base/socket_server.h" #include "rtc_base/system/rtc_export.h" #include "rtc_base/thread_annotations.h" diff --git a/rtc_base/physical_socket_server_unittest.cc b/rtc_base/physical_socket_server_unittest.cc index 648f39701a..3762762f85 100644 --- a/rtc_base/physical_socket_server_unittest.cc +++ b/rtc_base/physical_socket_server_unittest.cc @@ -18,6 +18,7 @@ #include "rtc_base/gunit.h" #include "rtc_base/ip_address.h" #include "rtc_base/logging.h" +#include "rtc_base/net_helpers.h" #include "rtc_base/network_monitor.h" #include "rtc_base/socket_unittest.h" #include "rtc_base/test_utils.h" diff --git a/rtc_base/synchronization/BUILD.gn b/rtc_base/synchronization/BUILD.gn index 618e224a5d..16922af748 100644 --- a/rtc_base/synchronization/BUILD.gn +++ b/rtc_base/synchronization/BUILD.gn @@ -88,6 +88,7 @@ if (rtc_include_tests) { "..:macromagic", "..:rtc_base", "..:rtc_event", + "..:threading", "../../test:test_support", "//third_party/google_benchmark", ] diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc index 32449020c5..1045398b4c 100644 --- a/rtc_base/thread.cc +++ b/rtc_base/thread.cc @@ -33,6 +33,7 @@ #include "rtc_base/checks.h" #include "rtc_base/deprecated/recursive_critical_section.h" #include "rtc_base/event.h" +#include "rtc_base/internal/default_socket_server.h" #include "rtc_base/logging.h" #include "rtc_base/null_socket_server.h" #include "rtc_base/synchronization/sequence_checker.h" @@ -257,7 +258,7 @@ Thread* Thread::Current() { #ifndef NO_MAIN_THREAD_WRAPPING // Only autowrap the thread which instantiated the ThreadManager. if (!thread && manager->IsMainThread()) { - thread = new Thread(SocketServer::CreateDefault()); + thread = new Thread(CreateDefaultSocketServer()); thread->WrapCurrentWithThreadManager(manager, true); } #endif @@ -326,7 +327,7 @@ void rtc::ThreadManager::ChangeCurrentThreadForTest(rtc::Thread* thread) { Thread* ThreadManager::WrapCurrentThread() { Thread* result = CurrentThread(); if (nullptr == result) { - result = new Thread(SocketServer::CreateDefault()); + result = new Thread(CreateDefaultSocketServer()); result->WrapCurrentWithThreadManager(this, true); } return result; @@ -696,7 +697,7 @@ bool Thread::IsCurrent() const { } std::unique_ptr Thread::CreateWithSocketServer() { - return std::unique_ptr(new Thread(SocketServer::CreateDefault())); + return std::unique_ptr(new Thread(CreateDefaultSocketServer())); } std::unique_ptr Thread::Create() { @@ -1137,7 +1138,7 @@ MessageHandler* Thread::GetPostTaskMessageHandler() { } AutoThread::AutoThread() - : Thread(SocketServer::CreateDefault(), /*do_init=*/false) { + : Thread(CreateDefaultSocketServer(), /*do_init=*/false) { if (!ThreadManager::Instance()->CurrentThread()) { // DoInit registers with ThreadManager. Do that only if we intend to // be rtc::Thread::Current(), otherwise ProcessAllMessageQueuesInternal will diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc index 51321985ed..705e268c70 100644 --- a/rtc_base/thread_unittest.cc +++ b/rtc_base/thread_unittest.cc @@ -19,6 +19,7 @@ #include "rtc_base/atomic_ops.h" #include "rtc_base/event.h" #include "rtc_base/gunit.h" +#include "rtc_base/internal/default_socket_server.h" #include "rtc_base/null_socket_server.h" #include "rtc_base/physical_socket_server.h" #include "rtc_base/socket_address.h" @@ -505,7 +506,7 @@ TEST(ThreadTest, SetNameOnSignalQueueDestroyed) { class ThreadQueueTest : public ::testing::Test, public Thread { public: - ThreadQueueTest() : Thread(SocketServer::CreateDefault(), true) {} + ThreadQueueTest() : Thread(CreateDefaultSocketServer(), true) {} bool IsLocked_Worker() { if (!CritForTest()->TryEnter()) { return true; @@ -555,7 +556,7 @@ static void DelayedPostsWithIdenticalTimesAreProcessedInFifoOrder(Thread* q) { } TEST_F(ThreadQueueTest, DelayedPostsWithIdenticalTimesAreProcessedInFifoOrder) { - Thread q(SocketServer::CreateDefault(), true); + Thread q(CreateDefaultSocketServer(), true); DelayedPostsWithIdenticalTimesAreProcessedInFifoOrder(&q); NullSocketServer nullss; diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn index 9ba498c115..1f0892b8ae 100644 --- a/rtc_tools/BUILD.gn +++ b/rtc_tools/BUILD.gn @@ -181,6 +181,7 @@ if (!is_component_build) { "../rtc_base", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_json", + "../rtc_base:threading", "../rtc_base/system:file_wrapper", "../test:fileutils", "../test:rtp_test_utils", @@ -489,6 +490,8 @@ if (rtc_include_tests) { "../common_video", "../rtc_base", "../rtc_base:checks", + "../rtc_base:null_socket_server", + "../rtc_base:threading", "../test:fileutils", "../test:test_main", "../test:test_support", diff --git a/rtc_tools/network_tester/BUILD.gn b/rtc_tools/network_tester/BUILD.gn index b270262f0d..95b5c90f9f 100644 --- a/rtc_tools/network_tester/BUILD.gn +++ b/rtc_tools/network_tester/BUILD.gn @@ -45,9 +45,12 @@ if (rtc_enable_protobuf) { "../../rtc_base", "../../rtc_base:checks", "../../rtc_base:ignore_wundef", + "../../rtc_base:ip_address", "../../rtc_base:protobuf_utils", "../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_task_queue", + "../../rtc_base:socket_address", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/synchronization:sequence_checker", "../../rtc_base/system:no_unique_address", diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 00c87ef6f9..e557ce4fef 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -236,7 +236,10 @@ if (is_ios || is_mac) { sources = [ "objc/native/src/audio/audio_session_observer.h" ] - deps = [ "../rtc_base" ] + deps = [ + "../rtc_base", + "../rtc_base:threading", + ] } rtc_library("audio_device") { @@ -265,6 +268,7 @@ if (is_ios || is_mac) { "../modules/audio_device:audio_device_generic", "../rtc_base", "../rtc_base:checks", + "../rtc_base:threading", "../system_wrappers:field_trial", "../system_wrappers:metrics", ] @@ -338,7 +342,11 @@ if (is_ios || is_mac) { sources = [ "objc/native/src/network_monitor_observer.h" ] - deps = [ "../rtc_base" ] + deps = [ + "../rtc_base", + "../rtc_base:network_constants", + "../rtc_base:threading", + ] } rtc_library("network_monitor_objc") { @@ -383,6 +391,7 @@ if (is_ios || is_mac) { "../media:rtc_media_base", "../rtc_base", "../rtc_base:checks", + "../rtc_base:threading", "//third_party/libyuv", ] @@ -973,6 +982,7 @@ if (is_ios || is_mac) { "../pc:peerconnection", "../rtc_base", "../rtc_base:checks", + "../rtc_base:network_constants", "../system_wrappers:field_trial", "../system_wrappers:metrics", ] @@ -1077,6 +1087,7 @@ if (is_ios || is_mac) { ":sdk_unittests_bundle_data", ":sdk_unittests_sources", "../rtc_base", + "../rtc_base:threading", "//test:test_support", ] ldflags = [ "-all_load" ] @@ -1096,6 +1107,7 @@ if (is_ios || is_mac) { ":framework_objc+link", ":ios_framework_bundle", "../rtc_base", + "../rtc_base:threading", "//test:test_support", ] } @@ -1500,6 +1512,7 @@ if (is_ios || is_mac) { "../api/video_codecs:video_codecs_api", "../common_video", "../rtc_base", + "../rtc_base:threading", ] if (is_ios) { deps += [ ":native_network_monitor" ] @@ -1520,6 +1533,7 @@ if (is_ios || is_mac) { ":network_monitor_objc", ":network_monitor_observer", "../rtc_base", + "../rtc_base:threading", "../rtc_base/synchronization:sequence_checker", ] } diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index ce5db777df..b7992e118c 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -559,7 +559,9 @@ if (current_os == "linux" || is_android) { "../../api:scoped_refptr", "../../rtc_base", "../../rtc_base:checks", + "../../rtc_base:ip_address", "../../rtc_base:rtc_base_approved", + "../../rtc_base:threading", "../../rtc_base/synchronization:sequence_checker", "../../system_wrappers:field_trial", "../../system_wrappers:metrics", @@ -656,6 +658,7 @@ if (current_os == "linux" || is_android) { "../../rtc_base", "../../rtc_base:checks", "../../rtc_base:rtc_task_queue", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/task_utils:to_queued_task", "//third_party/libyuv", @@ -746,6 +749,7 @@ if (current_os == "linux" || is_android) { "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_task_queue", + "../../rtc_base:threading", "../../rtc_base/system:thread_registry", "../../system_wrappers:field_trial", ] @@ -916,6 +920,7 @@ if (current_os == "linux" || is_android) { deps = [ ":base_jni", + "../../rtc_base:threading", "//rtc_base", ] } @@ -930,6 +935,7 @@ if (current_os == "linux" || is_android) { deps = [ ":base_jni", ":peerconnection_jni", + "../../rtc_base:threading", "//api:libjingle_peerconnection_api", "//api/video_codecs:video_codecs_api", "//rtc_base", @@ -968,6 +974,7 @@ if (current_os == "linux" || is_android) { ":native_api_jni", ":video_jni", ":videoframe_jni", + "../../rtc_base:threading", "//api:libjingle_peerconnection_api", "//api:media_stream_interface", "//api/video:video_frame", @@ -1471,6 +1478,7 @@ if (is_android) { "../../modules/utility", "../../pc:libjingle_peerconnection", "../../rtc_base:checks", + "../../rtc_base:ip_address", "../../rtc_base:rtc_base", "../../rtc_base/synchronization:mutex", "../../rtc_base/system:inline", diff --git a/test/BUILD.gn b/test/BUILD.gn index 0e1209fd20..a337979b67 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -145,6 +145,7 @@ if (!build_with_chromium) { "../api:scoped_refptr", "../modules/video_capture:video_capture_module", "../rtc_base", + "../rtc_base:threading", "../sdk:base_objc", "../sdk:native_api", "../sdk:native_video", @@ -415,6 +416,7 @@ if (rtc_include_tests) { "../rtc_base:checks", "../rtc_base:logging", "../rtc_base:rtc_base_approved", + "../rtc_base:threading", "../system_wrappers:field_trial", "../system_wrappers:metrics", ] @@ -865,6 +867,7 @@ rtc_library("test_common") { "../rtc_base:rtc_base", "../rtc_base:rtc_event", "../rtc_base:task_queue_for_test", + "../rtc_base:threading", "../rtc_base/task_utils:to_queued_task", "../system_wrappers", "../system_wrappers:field_trial", diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 4975f42a98..af7a4b7e7c 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -439,6 +439,7 @@ webrtc_fuzzer_test("pseudotcp_parser_fuzzer") { deps = [ "../../p2p:rtc_p2p", "../../rtc_base", + "../../rtc_base:threading", ] } diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn index e250ccbd51..ceae0c9dd2 100644 --- a/test/network/BUILD.gn +++ b/test/network/BUILD.gn @@ -52,10 +52,16 @@ rtc_library("emulated_network") { "../../call:simulated_network", "../../p2p:p2p_server_utils", "../../rtc_base", + "../../rtc_base:async_socket", + "../../rtc_base:ip_address", + "../../rtc_base:network_constants", "../../rtc_base:rtc_base_tests_utils", "../../rtc_base:rtc_task_queue", "../../rtc_base:safe_minmax", + "../../rtc_base:socket_address", + "../../rtc_base:socket_server", "../../rtc_base:task_queue_for_test", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/synchronization:sequence_checker", "../../rtc_base/task_utils:repeating_task", @@ -127,6 +133,7 @@ rtc_library("cross_traffic_unittest") { "../../call:simulated_network", "../../rtc_base", "../../rtc_base:logging", + "../../rtc_base:network_constants", "../../rtc_base:rtc_event", "../time_controller", ] diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 3901297063..8af76c3e5c 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -61,6 +61,7 @@ if (!build_with_chromium) { "../../../api/transport:webrtc_key_value_config", "../../../api/video_codecs:video_codecs_api", "../../../rtc_base", + "../../../rtc_base:threading", ] } @@ -328,6 +329,7 @@ if (!build_with_chromium) { "../../../api/transport:network_control", "../../../api/video_codecs:video_codecs_api", "../../../rtc_base", + "../../../rtc_base:threading", ] absl_deps = [ "//third_party/abseil-cpp/absl/strings" ] } @@ -404,6 +406,7 @@ if (!build_with_chromium) { "../../../rtc_base:rtc_base_approved", "../../../rtc_base:safe_conversions", "../../../rtc_base:task_queue_for_test", + "../../../rtc_base:threading", "../../../rtc_base/synchronization:mutex", "../../../system_wrappers", "../../../system_wrappers:field_trial", @@ -697,6 +700,7 @@ if (!build_with_chromium) { "../../../api/units:data_size", "../../../api/units:timestamp", "../../../rtc_base", + "../../../rtc_base:ip_address", "../../../rtc_base:rtc_event", "../../../rtc_base:stringutils", "../../../rtc_base/synchronization:mutex", diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn index 70a7471591..2034c9ad99 100644 --- a/test/peer_scenario/BUILD.gn +++ b/test/peer_scenario/BUILD.gn @@ -48,6 +48,7 @@ if (rtc_include_tests) { "../../pc:pc_test_utils", "../../pc:rtc_pc_base", "../../rtc_base", + "../../rtc_base:null_socket_server", "../../rtc_base:stringutils", "../logging:log_writer", "../network:emulated_network", diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn index ede93c68ff..a6e3ed9dd2 100644 --- a/test/scenario/BUILD.gn +++ b/test/scenario/BUILD.gn @@ -132,7 +132,9 @@ if (rtc_include_tests) { "../../rtc_base:rtc_stats_counters", "../../rtc_base:rtc_task_queue", "../../rtc_base:safe_minmax", + "../../rtc_base:socket_address", "../../rtc_base:task_queue_for_test", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/synchronization:sequence_checker", "../../rtc_base/task_utils:repeating_task", diff --git a/test/time_controller/BUILD.gn b/test/time_controller/BUILD.gn index c9fffe6853..ee49445175 100644 --- a/test/time_controller/BUILD.gn +++ b/test/time_controller/BUILD.gn @@ -35,6 +35,7 @@ rtc_library("time_controller") { "../../modules/utility:utility", "../../rtc_base", "../../rtc_base:checks", + "../../rtc_base:null_socket_server", "../../rtc_base:rtc_base_tests_utils", "../../rtc_base:rtc_event", "../../rtc_base/synchronization:mutex", @@ -62,6 +63,7 @@ if (rtc_include_tests) { "../../rtc_base", "../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_task_queue", + "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/task_utils:repeating_task", "../../rtc_base/task_utils:to_queued_task", diff --git a/video/BUILD.gn b/video/BUILD.gn index f3e5817a84..acd1616ee3 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -120,6 +120,7 @@ rtc_library("video") { "../rtc_base:rtc_numerics", "../rtc_base:rtc_task_queue", "../rtc_base:stringutils", + "../rtc_base:threading", "../rtc_base:weak_ptr", "../rtc_base/experiments:alr_experiment", "../rtc_base/experiments:field_trial_parser", @@ -668,6 +669,7 @@ if (rtc_include_tests) { "../rtc_base:rtc_numerics", "../rtc_base:rtc_task_queue", "../rtc_base:task_queue_for_test", + "../rtc_base:threading", "../rtc_base/experiments:alr_experiment", "../rtc_base/synchronization:mutex", "../rtc_base/synchronization:sequence_checker",