Refactor a lot of the p2p:rtc_p2p target

This CL splits many of the source files in p2p:rtc_p2p into individual
compile targets.

One target - connection_and_port - was left with multiple source files
because it was too tangled to detangle at once.

Bug: webrtc:15796
Change-Id: I607417e5945306ef64335f40a0ae50f0d15dee6f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335881
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41611}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 0652552..cb23ea3 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -334,6 +334,7 @@
     ":sequence_checker",
     ":turn_customizer",
     "../call:rtp_interfaces",
+    "../p2p:connection_and_port",
     "../p2p:rtc_p2p",
     "../pc:media_factory",
     "../rtc_base:copy_on_write_buffer",
@@ -935,6 +936,10 @@
     ":make_ref_counted",
     ":packet_socket_factory",
     ":scoped_refptr",
+    "../p2p:connection_and_port",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:p2p_transport_channel",
     "../p2p:rtc_p2p",
     "../rtc_base:threading",
     "../rtc_base/system:rtc_export",
diff --git a/api/test/pclf/BUILD.gn b/api/test/pclf/BUILD.gn
index 4f62984..6d1d2be 100644
--- a/api/test/pclf/BUILD.gn
+++ b/api/test/pclf/BUILD.gn
@@ -74,6 +74,7 @@
     "../../../api/transport:network_control",
     "../../../api/video_codecs:video_codecs_api",
     "../../../modules/audio_processing:api",
+    "../../../p2p:connection_and_port",
     "../../../p2p:rtc_p2p",
     "../../../rtc_base:network",
     "../../../rtc_base:rtc_certificate_generator",
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 4ace29b..991f9d8 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -702,6 +702,7 @@
       "../api/video_codecs:video_codecs_api",
       "../media:media_channel",
       "../media:rtc_media_base",
+      "../p2p:connection_and_port",
       "../p2p:rtc_p2p",
       "../pc:video_track_source",
       "../rtc_base:async_dns_resolver",
@@ -809,6 +810,7 @@
     deps = [
       ":read_auth_file",
       "../p2p:p2p_server_utils",
+      "../p2p:port_interface",
       "../p2p:rtc_p2p",
       "../pc:rtc_pc",
       "../rtc_base:async_udp_socket",
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 2a9cbcb..93d104c 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -582,6 +582,7 @@
     "../api:rtc_error",
     "../api/transport:datagram_transport_interface",
     "../media:rtc_media_base",
+    "../p2p:packet_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:copy_on_write_buffer",
     "../rtc_base:threading",
@@ -606,6 +607,7 @@
       "../net/dcsctp/public:types",
       "../net/dcsctp/public:utils",
       "../net/dcsctp/timer:task_queue_timeout",
+      "../p2p:packet_transport_internal",
       "../p2p:rtc_p2p",
       "../rtc_base:checks",
       "../rtc_base:copy_on_write_buffer",
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index a663e85..140bf21 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -18,21 +18,16 @@
 rtc_library("rtc_p2p") {
   visibility = [ "*" ]
   sources = [
-    "base/active_ice_controller_factory_interface.h",
-    "base/active_ice_controller_interface.h",
-    "base/async_stun_tcp_socket.cc",
-    "base/async_stun_tcp_socket.h",
-    "base/basic_async_resolver_factory.cc",
-    "base/basic_async_resolver_factory.h",
-    "base/basic_ice_controller.cc",
-    "base/basic_ice_controller.h",
+    # TODO(bugs.webrtc.org/15769): Finish cleanup and remove.
+
+    "base/active_ice_controller_factory_interface.h",  # To be removed (Chrome)
+    "base/active_ice_controller_interface.h",  # To be removed (Internal)
+    "base/basic_ice_controller.h",  # To be removed (Chrome)
     "base/basic_packet_socket_factory.cc",
     "base/basic_packet_socket_factory.h",
-    "base/candidate_pair_interface.h",
-    "base/connection.cc",
-    "base/connection.h",
-    "base/connection_info.cc",
-    "base/connection_info.h",
+    "base/candidate_pair_interface.h",  # To be removed
+    "base/connection.h",  # To be removed
+    "base/connection_info.h",  # To be removed
     "base/default_ice_transport_factory.cc",
     "base/default_ice_transport_factory.h",
     "base/dtls_transport.cc",
@@ -40,51 +35,32 @@
     "base/dtls_transport_factory.h",
     "base/dtls_transport_internal.cc",
     "base/dtls_transport_internal.h",
-    "base/ice_agent_interface.h",
-    "base/ice_controller_factory_interface.h",
-    "base/ice_controller_interface.cc",
-    "base/ice_controller_interface.h",
-    "base/ice_credentials_iterator.cc",
-    "base/ice_credentials_iterator.h",
-    "base/ice_switch_reason.cc",
-    "base/ice_switch_reason.h",
-    "base/ice_transport_internal.cc",
-    "base/ice_transport_internal.h",
-    "base/p2p_constants.cc",
-    "base/p2p_constants.h",
-    "base/p2p_transport_channel.cc",
-    "base/p2p_transport_channel.h",
-    "base/p2p_transport_channel_ice_field_trials.h",
-    "base/packet_transport_internal.cc",
-    "base/packet_transport_internal.h",
-    "base/port.cc",
-    "base/port.h",
-    "base/port_allocator.cc",
-    "base/port_allocator.h",
-    "base/port_interface.cc",
-    "base/port_interface.h",
+    "base/ice_agent_interface.h",  # To be removed (Chrome)
+    "base/ice_controller_interface.h",  # To be removed (Chrome)
+    "base/ice_credentials_iterator.h",  # To be removed
+    "base/ice_switch_reason.h",  # To be removed (Chrome)
+    "base/ice_transport_internal.h",  # To be removed
+    "base/p2p_constants.h",  # To be removed
+    "base/p2p_transport_channel.h",  # To be removed (Chrome)
+    "base/p2p_transport_channel_ice_field_trials.h",  # To be removed
+    "base/packet_transport_internal.h",  # To be removed
+    "base/port.h",  # To be removed (Chrome)
+    "base/port_allocator.h",  # To be removed (Chrome)
+    "base/port_interface.h",  # To be removed
     "base/pseudo_tcp.cc",
     "base/pseudo_tcp.h",
-    "base/regathering_controller.cc",
-    "base/regathering_controller.h",
-    "base/stun_dictionary.cc",
-    "base/stun_dictionary.h",
+    "base/stun_dictionary.h",  # To be removed
     "base/stun_port.cc",
     "base/stun_port.h",
-    "base/stun_request.cc",
-    "base/stun_request.h",
     "base/tcp_port.cc",
     "base/tcp_port.h",
-    "base/transport_description.cc",
-    "base/transport_description.h",
+    "base/transport_description.h",  # To be removed
     "base/transport_description_factory.cc",
     "base/transport_description_factory.h",
     "base/transport_info.h",
     "base/turn_port.cc",
     "base/turn_port.h",
     "base/udp_port.h",
-    "base/wrapping_active_ice_controller.cc",
-    "base/wrapping_active_ice_controller.h",
     "client/basic_port_allocator.cc",
     "client/basic_port_allocator.h",
     "client/relay_port_factory_interface.h",
@@ -93,6 +69,29 @@
   ]
 
   deps = [
+    ":active_ice_controller_factory_interface",
+    ":async_stun_tcp_socket",
+    ":basic_async_resolver_factory",
+    ":basic_ice_controller",
+    ":candidate_pair_interface",
+    ":connection_and_port",
+    ":connection_info",
+    ":ice_agent_interface",
+    ":ice_controller_factory_interface",
+    ":ice_controller_interface",
+    ":ice_credentials_iterator",
+    ":ice_switch_reason",
+    ":ice_transport_internal",
+    ":p2p_constants",
+    ":p2p_transport_channel",
+    ":p2p_transport_channel_ice_field_trials",
+    ":packet_transport_internal",
+    ":port_interface",
+    ":regathering_controller",
+    ":stun_dictionary",
+    ":stun_request",
+    ":transport_description",
+    ":wrapping_active_ice_controller",
     "../api:array_view",
     "../api:async_dns_resolver",
     "../api:candidate",
@@ -176,13 +175,446 @@
   ]
 }
 
+rtc_source_set("active_ice_controller_factory_interface") {
+  sources = [ "base/active_ice_controller_factory_interface.h" ]
+  deps = [
+    ":active_ice_controller_interface",
+    ":ice_agent_interface",
+    ":ice_controller_factory_interface",
+  ]
+}
+
+rtc_source_set("active_ice_controller_interface") {
+  sources = [ "base/active_ice_controller_interface.h" ]
+  deps = [
+    ":connection_and_port",
+    ":ice_switch_reason",
+    ":ice_transport_internal",
+    ":transport_description",
+    "../api:array_view",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("basic_async_resolver_factory") {
+  sources = [
+    "base/basic_async_resolver_factory.cc",
+    "base/basic_async_resolver_factory.h",
+  ]
+  deps = [
+    "../api:async_dns_resolver",
+    "../rtc_base:async_dns_resolver",
+    "../rtc_base:logging",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+}
+
+rtc_library("async_stun_tcp_socket") {
+  sources = [
+    "base/async_stun_tcp_socket.cc",
+    "base/async_stun_tcp_socket.h",
+  ]
+  deps = [
+    "../api:array_view",
+    "../api/transport:stun_types",
+    "../api/units:timestamp",
+    "../rtc_base:async_packet_socket",
+    "../rtc_base:async_tcp_socket",
+    "../rtc_base:byte_order",
+    "../rtc_base:checks",
+    "../rtc_base:socket",
+    "../rtc_base:socket_address",
+    "../rtc_base:timeutils",
+    "../rtc_base/network:received_packet",
+    "../rtc_base/network:sent_packet",
+  ]
+}
+
+rtc_library("basic_ice_controller") {
+  sources = [
+    "base/basic_ice_controller.cc",
+    "base/basic_ice_controller.h",
+  ]
+  deps = [
+    ":ice_controller_factory_interface",
+    ":ice_controller_interface",
+  ]
+}
+
+rtc_source_set("candidate_pair_interface") {
+  sources = [ "base/candidate_pair_interface.h" ]
+}
+
+# This set of files is too intertwined to break into separate
+# targets at this point.
+# TODO(bugs.webrtc.org/15796): Finish breakup
+rtc_library("connection_and_port") {
+  sources = [
+    "base/connection.cc",
+    "base/connection.h",
+    "base/port.cc",
+    "base/port.h",
+    "base/port_allocator.cc",
+    "base/port_allocator.h",
+  ]
+  deps = [
+    ":candidate_pair_interface",
+    ":connection_info",
+    ":ice_credentials_iterator",
+    ":p2p_constants",
+    ":p2p_transport_channel_ice_field_trials",
+    ":port_interface",
+    ":stun_request",
+    ":transport_description",
+    "../api:array_view",
+    "../api:candidate",
+    "../api:field_trials_view",
+    "../api:packet_socket_factory",
+    "../api:rtc_error",
+    "../api:sequence_checker",
+    "../api/task_queue",
+    "../api/transport:enums",
+    "../api/transport:field_trial_based_config",
+    "../api/transport:stun_types",
+    "../api/units:timestamp",
+    "../logging:ice_log",
+    "../rtc_base:async_packet_socket",
+    "../rtc_base:callback_list",
+    "../rtc_base:checks",
+    "../rtc_base:crc32",
+    "../rtc_base:event_tracer",
+    "../rtc_base:logging",
+    "../rtc_base:mdns_responder_interface",
+    "../rtc_base:net_helper",
+    "../rtc_base:network",
+    "../rtc_base:proxy_info",
+    "../rtc_base:rate_tracker",
+    "../rtc_base:rtc_numerics",
+    "../rtc_base:safe_minmax",
+    "../rtc_base:socket_address",
+    "../rtc_base:ssl",
+    "../rtc_base:stringutils",
+    "../rtc_base:threading",
+    "../rtc_base:weak_ptr",
+    "../rtc_base/memory:always_valid_pointer",
+    "../rtc_base/network:received_packet",
+    "../rtc_base/system:rtc_export",
+    "../rtc_base/third_party/base64",
+    "../rtc_base/third_party/sigslot",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/algorithm:container",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/memory",
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/strings:string_view",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("connection_info") {
+  sources = [
+    "base/connection_info.cc",
+    "base/connection_info.h",
+  ]
+  deps = [
+    "../api:candidate",
+    "../api/units:timestamp",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_source_set("ice_agent_interface") {
+  sources = [ "base/ice_agent_interface.h" ]
+  deps = [
+    ":connection_and_port",
+    ":ice_switch_reason",
+    "../api:array_view",
+  ]
+}
+
+rtc_library("ice_controller_interface") {
+  sources = [
+    "base/ice_controller_interface.cc",
+    "base/ice_controller_interface.h",
+  ]
+  deps = [
+    ":connection_and_port",
+    ":ice_switch_reason",
+    ":ice_transport_internal",
+    "../rtc_base:checks",
+    "../rtc_base/system:rtc_export",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_source_set("ice_controller_factory_interface") {
+  sources = [ "base/ice_controller_factory_interface.h" ]
+  deps = [
+    ":ice_controller_interface",
+    ":ice_transport_internal",
+  ]
+}
+
+rtc_library("ice_credentials_iterator") {
+  sources = [
+    "base/ice_credentials_iterator.cc",
+    "base/ice_credentials_iterator.h",
+  ]
+  deps = [
+    ":p2p_constants",
+    ":transport_description",
+    "../rtc_base:ssl",
+  ]
+}
+
+rtc_library("ice_switch_reason") {
+  sources = [
+    "base/ice_switch_reason.cc",
+    "base/ice_switch_reason.h",
+  ]
+  deps = [ "../rtc_base/system:rtc_export" ]
+}
+
+rtc_library("ice_transport_internal") {
+  sources = [
+    "base/ice_transport_internal.cc",
+    "base/ice_transport_internal.h",
+  ]
+  deps = [
+    ":connection_and_port",
+    ":p2p_constants",
+    ":packet_transport_internal",
+    ":stun_dictionary",
+    ":transport_description",
+    "../api:candidate",
+    "../api:rtc_error",
+    "../api/transport:enums",
+    "../rtc_base:network_constants",
+    "../rtc_base:timeutils",
+    "../rtc_base/system:rtc_export",
+    "../rtc_base/third_party/sigslot",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/strings:string_view",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("p2p_constants") {
+  sources = [
+    "base/p2p_constants.cc",
+    "base/p2p_constants.h",
+  ]
+  deps = [ "../rtc_base/system:rtc_export" ]
+}
+
+rtc_library("p2p_transport_channel") {
+  sources = [
+    "base/p2p_transport_channel.cc",
+    "base/p2p_transport_channel.h",
+  ]
+  deps = [
+    ":active_ice_controller_factory_interface",
+    ":basic_ice_controller",
+    ":candidate_pair_interface",
+    ":connection_and_port",
+    ":connection_info",
+    ":ice_agent_interface",
+    ":ice_controller_factory_interface",
+    ":ice_controller_interface",
+    ":ice_switch_reason",
+    ":ice_transport_internal",
+    ":p2p_constants",
+    ":p2p_transport_channel_ice_field_trials",
+    ":port_interface",
+    ":regathering_controller",
+    ":stun_dictionary",
+    ":transport_description",
+    ":wrapping_active_ice_controller",
+    "../api:array_view",
+    "../api:async_dns_resolver",
+    "../api:candidate",
+    "../api:field_trials_view",
+    "../api:ice_transport_interface",
+    "../api:rtc_error",
+    "../api:sequence_checker",
+    "../api/task_queue:pending_task_safety_flag",
+    "../api/transport:enums",
+    "../api/transport:stun_types",
+    "../api/units:time_delta",
+    "../logging:ice_log",
+    "../rtc_base:async_packet_socket",
+    "../rtc_base:checks",
+    "../rtc_base:crc32",
+    "../rtc_base:dscp",
+    "../rtc_base:event_tracer",
+    "../rtc_base:ip_address",
+    "../rtc_base:logging",
+    "../rtc_base:macromagic",
+    "../rtc_base:net_helper",
+    "../rtc_base:network",
+    "../rtc_base:network_constants",
+    "../rtc_base:network_route",
+    "../rtc_base:socket",
+    "../rtc_base:socket_address",
+    "../rtc_base:stringutils",
+    "../rtc_base:threading",
+    "../rtc_base:timeutils",
+    "../rtc_base/experiments:field_trial_parser",
+    "../rtc_base/network:sent_packet",
+    "../rtc_base/system:rtc_export",
+    "../system_wrappers:metrics",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/algorithm:container",
+    "//third_party/abseil-cpp/absl/base:core_headers",
+    "//third_party/abseil-cpp/absl/memory",
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/strings:string_view",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_source_set("p2p_transport_channel_ice_field_trials") {
+  sources = [ "base/p2p_transport_channel_ice_field_trials.h" ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("packet_transport_internal") {
+  sources = [
+    "base/packet_transport_internal.cc",
+    "base/packet_transport_internal.h",
+  ]
+  deps = [
+    ":connection_and_port",
+    "../rtc_base:async_packet_socket",
+    "../rtc_base:network_route",
+    "../rtc_base:socket",
+    "../rtc_base/system:rtc_export",
+    "../rtc_base/third_party/sigslot",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("port_interface") {
+  sources = [
+    "base/port_interface.cc",
+    "base/port_interface.h",
+  ]
+  deps = [
+    ":transport_description",
+    "../api:candidate",
+    "../rtc_base:async_packet_socket",
+    "../rtc_base:callback_list",
+    "../rtc_base:socket_address",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/strings:string_view",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("regathering_controller") {
+  sources = [
+    "base/regathering_controller.cc",
+    "base/regathering_controller.h",
+  ]
+  deps = [
+    ":connection_and_port",
+    ":ice_transport_internal",
+    "../api/task_queue:pending_task_safety_flag",
+    "../api/units:time_delta",
+    "../rtc_base:threading",
+  ]
+}
+
+rtc_library("stun_dictionary") {
+  sources = [
+    "base/stun_dictionary.cc",
+    "base/stun_dictionary.h",
+  ]
+  deps = [
+    "../api:rtc_error",
+    "../api/transport:stun_types",
+    "../rtc_base:logging",
+  ]
+}
+
+rtc_library("stun_request") {
+  sources = [
+    "base/stun_request.cc",
+    "base/stun_request.h",
+  ]
+  deps = [
+    "../api/task_queue",
+    "../api/task_queue:pending_task_safety_flag",
+    "../api/transport:stun_types",
+    "../api/units:time_delta",
+    "../rtc_base:checks",
+    "../rtc_base:logging",
+    "../rtc_base:ssl",
+    "../rtc_base:stringutils",
+    "../rtc_base:timeutils",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+}
+
+rtc_library("transport_description") {
+  sources = [
+    "base/transport_description.cc",
+    "base/transport_description.h",
+  ]
+  deps = [
+    ":p2p_constants",
+    "../api:rtc_error",
+    "../rtc_base:logging",
+    "../rtc_base:macromagic",
+    "../rtc_base:ssl",
+    "../rtc_base:stringutils",
+    "../rtc_base/system:rtc_export",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/algorithm:container",
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/strings:string_view",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("wrapping_active_ice_controller") {
+  sources = [
+    "base/wrapping_active_ice_controller.cc",
+    "base/wrapping_active_ice_controller.h",
+  ]
+  deps = [
+    ":active_ice_controller_interface",
+    ":basic_ice_controller",
+    ":connection_and_port",
+    ":ice_agent_interface",
+    ":ice_controller_factory_interface",
+    ":ice_controller_interface",
+    ":ice_switch_reason",
+    ":ice_transport_internal",
+    ":transport_description",
+    "../api:sequence_checker",
+    "../api/task_queue:pending_task_safety_flag",
+    "../api/units:time_delta",
+    "../rtc_base:logging",
+    "../rtc_base:macromagic",
+    "../rtc_base:threading",
+    "../rtc_base:timeutils",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
 if (rtc_include_tests) {
   rtc_library("fake_ice_transport") {
     testonly = true
     visibility = [ "*" ]
     sources = [ "base/fake_ice_transport.h" ]
     deps = [
-      ":rtc_p2p",
+      ":ice_transport_internal",
       "../api:ice_transport_interface",
       "../api:libjingle_peerconnection_api",
       "../api/task_queue:pending_task_safety_flag",
@@ -202,6 +634,7 @@
     visibility = [ "*" ]
     sources = [ "base/fake_port_allocator.h" ]
     deps = [
+      ":connection_and_port",
       ":rtc_p2p",
       "../rtc_base:net_helpers",
       "../rtc_base:net_test_helpers",
@@ -228,10 +661,20 @@
       "base/test_turn_server.h",
     ]
     deps = [
+      ":active_ice_controller_factory_interface",
+      ":active_ice_controller_interface",
+      ":connection_and_port",
       ":fake_ice_transport",
       ":fake_port_allocator",
+      ":ice_agent_interface",
+      ":ice_controller_factory_interface",
+      ":ice_controller_interface",
+      ":ice_switch_reason",
+      ":ice_transport_internal",
       ":p2p_server_utils",
+      ":packet_transport_internal",
       ":rtc_p2p",
+      ":transport_description",
       "../api:dtls_transport_interface",
       "../api:libjingle_peerconnection_api",
       "../api:mock_async_dns_resolver",
@@ -284,11 +727,27 @@
       "client/basic_port_allocator_unittest.cc",
     ]
     deps = [
+      ":active_ice_controller_factory_interface",
+      ":active_ice_controller_interface",
+      ":async_stun_tcp_socket",
+      ":basic_ice_controller",
+      ":connection_and_port",
       ":fake_ice_transport",
       ":fake_port_allocator",
+      ":ice_credentials_iterator",
+      ":ice_transport_internal",
+      ":p2p_constants",
       ":p2p_server_utils",
       ":p2p_test_utils",
+      ":p2p_transport_channel",
+      ":packet_transport_internal",
+      ":port_interface",
+      ":regathering_controller",
       ":rtc_p2p",
+      ":stun_dictionary",
+      ":stun_request",
+      ":transport_description",
+      ":wrapping_active_ice_controller",
       "../api:array_view",
       "../api:candidate",
       "../api:dtls_transport_interface",
@@ -355,7 +814,8 @@
     "base/turn_server.h",
   ]
   deps = [
-    ":rtc_p2p",
+    ":async_stun_tcp_socket",
+    ":port_interface",
     "../api:array_view",
     "../api:packet_socket_factory",
     "../api:sequence_checker",
@@ -391,7 +851,6 @@
   ]
 
   deps = [
-    ":rtc_p2p",
     "../api:array_view",
     "../api:async_dns_resolver",
     "../api:packet_socket_factory",
diff --git a/p2p/base/basic_ice_controller.h b/p2p/base/basic_ice_controller.h
index 724609d..f9f4d45 100644
--- a/p2p/base/basic_ice_controller.h
+++ b/p2p/base/basic_ice_controller.h
@@ -19,7 +19,6 @@
 
 #include "p2p/base/ice_controller_factory_interface.h"
 #include "p2p/base/ice_controller_interface.h"
-#include "p2p/base/p2p_transport_channel.h"
 
 namespace cricket {
 
diff --git a/p2p/base/p2p_constants.h b/p2p/base/p2p_constants.h
index d51ee17..3af00bb 100644
--- a/p2p/base/p2p_constants.h
+++ b/p2p/base/p2p_constants.h
@@ -95,6 +95,8 @@
 // Default value of IceConfig.stun_keepalive_interval;
 extern const int STUN_KEEPALIVE_INTERVAL;
 
+static const int MIN_PINGS_AT_WEAK_PING_INTERVAL = 3;
+
 // The following constants are used at the candidate pair level to determine the
 // state of a candidate pair.
 //
diff --git a/p2p/base/p2p_transport_channel.h b/p2p/base/p2p_transport_channel.h
index 47f37c8..6413d2d 100644
--- a/p2p/base/p2p_transport_channel.h
+++ b/p2p/base/p2p_transport_channel.h
@@ -79,8 +79,6 @@
 
 namespace cricket {
 
-static const int MIN_PINGS_AT_WEAK_PING_INTERVAL = 3;
-
 bool IceCredentialsChanged(absl::string_view old_ufrag,
                            absl::string_view old_pwd,
                            absl::string_view new_ufrag,
diff --git a/p2p/base/port.cc b/p2p/base/port.cc
index a3378fe..1289d17 100644
--- a/p2p/base/port.cc
+++ b/p2p/base/port.cc
@@ -22,8 +22,6 @@
 #include "absl/memory/memory.h"
 #include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
-#include "p2p/base/connection.h"
-#include "p2p/base/port_allocator.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/crc32.h"
 #include "rtc_base/helpers.h"
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index e351748..2edbf9d 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -134,6 +134,7 @@
     "../api:dtls_transport_interface",
     "../api:libjingle_peerconnection_api",
     "../api:rtc_error",
+    "../p2p:packet_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:buffer",
     "../rtc_base:checks",
@@ -225,7 +226,11 @@
     "../api:sequence_checker",
     "../api/transport:datagram_transport_interface",
     "../media:rtc_data_sctp_transport_internal",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:p2p_transport_channel",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:copy_on_write_buffer",
     "../rtc_base:event_tracer",
@@ -249,6 +254,7 @@
     ":session_description",
     "../api:libjingle_peerconnection_api",
     "../api:sequence_checker",
+    "../p2p:p2p_constants",
     "../p2p:rtc_p2p",
     "../rtc_base:checks",
     "../rtc_base:logging",
@@ -295,7 +301,13 @@
     "../api/transport:enums",
     "../api/transport:sctp_transport_factory_interface",
     "../media:rtc_data_sctp_transport_internal",
+    "../p2p:connection_and_port",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:p2p_transport_channel",
+    "../p2p:packet_transport_internal",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:callback_list",
     "../rtc_base:checks",
     "../rtc_base:copy_on_write_buffer",
@@ -347,7 +359,10 @@
     "../media:rtc_media_base",
     "../media:rtc_sdp_video_format_utils",
     "../media:stream_params",
+    "../p2p:ice_credentials_iterator",
+    "../p2p:p2p_constants",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:logging",
     "../rtc_base:ssl",
@@ -459,6 +474,7 @@
     "../media:rtc_media_base",
     "../media:rtp_utils",
     "../modules/rtp_rtcp:rtp_rtcp_format",
+    "../p2p:packet_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:async_packet_socket",
     "../rtc_base:checks",
@@ -484,6 +500,7 @@
   deps = [
     ":session_description",
     "../call:rtp_receiver",
+    "../p2p:ice_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:callback_list",
     "../rtc_base:network_route",
@@ -608,6 +625,7 @@
     "../media:rtc_media_base",
     "../media:rtp_utils",
     "../modules/rtp_rtcp:rtp_rtcp_format",
+    "../p2p:packet_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:async_packet_socket",
     "../rtc_base:buffer",
@@ -636,6 +654,8 @@
   deps = [
     "../api:dtls_transport_interface",
     "../api:libjingle_peerconnection_api",
+    "../p2p:connection_and_port",
+    "../p2p:ice_transport_internal",
     "../p2p:rtc_p2p",
     "../rtc_base:ssl",
   ]
@@ -693,6 +713,7 @@
     "../media:rtc_media_base",
     "../media:stream_params",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:socket_address",
     "../rtc_base:stringutils",
@@ -911,6 +932,10 @@
     "../modules/audio_device",
     "../modules/audio_processing:audio_processing_statistics",
     "../modules/rtp_rtcp:rtp_rtcp_format",
+    "../p2p:connection_and_port",
+    "../p2p:connection_info",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
     "../p2p:rtc_p2p",
     "../rtc_base:checks",
     "../rtc_base:event_tracer",
@@ -1003,7 +1028,12 @@
     "../media:rid_description",
     "../media:rtc_media_base",
     "../media:stream_params",
+    "../p2p:connection_and_port",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:p2p_transport_channel",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:event_tracer",
     "../rtc_base:logging",
@@ -1108,7 +1138,14 @@
     "../media:rtc_media_config",
     "../media:stream_params",
     "../modules/rtp_rtcp:rtp_rtcp_format",
+    "../p2p:basic_async_resolver_factory",
+    "../p2p:connection_and_port",
+    "../p2p:connection_info",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:p2p_transport_channel",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:copy_on_write_buffer",
     "../rtc_base:event_tracer",
@@ -1199,6 +1236,10 @@
     "../media:media_channel",
     "../media:rtc_media_base",
     "../modules/audio_processing:audio_processing_statistics",
+    "../p2p:connection_and_port",
+    "../p2p:connection_info",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
     "../p2p:rtc_p2p",
     "../rtc_base:checks",
     "../rtc_base:event_tracer",
@@ -1272,7 +1313,13 @@
     "../media:rtc_media_base",
     "../media:rtp_utils",
     "../media:stream_params",
+    "../p2p:candidate_pair_interface",
+    "../p2p:connection_and_port",
+    "../p2p:ice_transport_internal",
+    "../p2p:p2p_constants",
+    "../p2p:port_interface",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:ip_address",
     "../rtc_base:logging",
@@ -1307,6 +1354,7 @@
     "../api:sequence_checker",
     "../api/task_queue",
     "../p2p:rtc_p2p",
+    "../p2p:transport_description",
     "../rtc_base:checks",
     "../rtc_base:logging",
     "../rtc_base:rtc_certificate_generator",
@@ -1333,6 +1381,8 @@
   deps = [
     "../api:libjingle_peerconnection_api",
     "../api:rtc_error",
+    "../p2p:connection_and_port",
+    "../p2p:port_interface",
     "../p2p:rtc_p2p",
     "../rtc_base:checks",
     "../rtc_base:ip_address",
@@ -1395,6 +1445,7 @@
     "../call:rtp_interfaces",
     "../call:rtp_sender",
     "../media:rtc_media_base",
+    "../p2p:connection_and_port",
     "../p2p:rtc_p2p",
     "../pc:audio_track",
     "../pc:connection_context",
@@ -2025,10 +2076,15 @@
       "../media:rtc_media_base",
       "../media:rtc_media_tests_utils",
       "../modules/rtp_rtcp:rtp_rtcp_format",
+      "../p2p:candidate_pair_interface",
       "../p2p:fake_ice_transport",
       "../p2p:fake_port_allocator",
+      "../p2p:ice_transport_internal",
+      "../p2p:p2p_constants",
       "../p2p:p2p_test_utils",
+      "../p2p:packet_transport_internal",
       "../p2p:rtc_p2p",
+      "../p2p:transport_description",
       "../rtc_base:async_packet_socket",
       "../rtc_base:buffer",
       "../rtc_base:byte_order",
@@ -2110,7 +2166,9 @@
       "../media:rtc_media_tests_utils",
       "../modules/audio_device:audio_device_api",
       "../modules/audio_processing:api",
+      "../p2p:connection_and_port",
       "../p2p:p2p_test_utils",
+      "../p2p:port_interface",
       "../p2p:rtc_p2p",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
@@ -2161,8 +2219,10 @@
       "../api:libjingle_peerconnection_api",
       "../api:scoped_refptr",
       "../api/units:time_delta",
+      "../p2p:connection_and_port",
       "../p2p:p2p_server_utils",
       "../p2p:p2p_test_utils",
+      "../p2p:port_interface",
       "../p2p:rtc_p2p",
       "../rtc_base:gunit_helpers",
       "../rtc_base:logging",
@@ -2342,8 +2402,14 @@
       "../modules/audio_device:audio_device_api",
       "../modules/audio_processing:audio_processing_statistics",
       "../modules/rtp_rtcp:rtp_rtcp_format",
+      "../p2p:connection_and_port",
+      "../p2p:connection_info",
       "../p2p:fake_port_allocator",
+      "../p2p:ice_transport_internal",
+      "../p2p:p2p_constants",
       "../p2p:p2p_server_utils",
+      "../p2p:port_interface",
+      "../p2p:transport_description",
       "../rtc_base:byte_buffer",
       "../rtc_base:checks",
       "../rtc_base:copy_on_write_buffer",
@@ -2552,10 +2618,14 @@
       "../modules/audio_processing:audio_processing_statistics",
       "../modules/audio_processing:audioproc_test_utils",
       "../modules/rtp_rtcp:rtp_rtcp_format",
+      "../p2p:connection_and_port",
       "../p2p:fake_ice_transport",
       "../p2p:fake_port_allocator",
+      "../p2p:ice_transport_internal",
+      "../p2p:p2p_constants",
       "../p2p:p2p_server_utils",
       "../p2p:p2p_test_utils",
+      "../p2p:port_interface",
       "../p2p:rtc_p2p",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
@@ -2702,6 +2772,7 @@
       "../modules/audio_processing",
       "../modules/audio_processing:api",
       "../modules/rtp_rtcp:rtp_rtcp_format",
+      "../p2p:connection_and_port",
       "../p2p:fake_port_allocator",
       "../p2p:p2p_test_utils",
       "../p2p:rtc_p2p",
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 0eb7aa2..e0d3dbe 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -576,6 +576,7 @@
       "../../../media:media_constants",
       "../../../media:rid_description",
       "../../../media:rtc_media_base",
+      "../../../p2p:p2p_constants",
       "../../../p2p:rtc_p2p",
       "../../../pc:sdp_utils",
       "../../../pc:session_description",
diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn
index 18f81a5..4736f67 100644
--- a/test/peer_scenario/BUILD.gn
+++ b/test/peer_scenario/BUILD.gn
@@ -54,6 +54,7 @@
       "../../modules/audio_device:test_audio_device_module",
       "../../modules/rtp_rtcp:rtp_rtcp_format",
       "../../p2p:rtc_p2p",
+      "../../p2p:transport_description",
       "../../pc:channel",
       "../../pc:jsep_transport_controller",
       "../../pc:pc_test_utils",