# Copyright (c) 2016 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.

import("../webrtc.gni")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

group("pc") {
  deps = [ ":rtc_pc" ]
}

config("rtc_pc_config") {
  defines = []
  if (rtc_enable_sctp) {
    defines += [ "HAVE_SCTP" ]
  }
}

rtc_library("rtc_pc_base") {
  visibility = [ "*" ]
  defines = []
  sources = [
    "channel.cc",
    "channel.h",
    "channel_interface.h",
    "channel_manager.cc",
    "channel_manager.h",
    "composite_data_channel_transport.cc",
    "composite_data_channel_transport.h",
    "composite_rtp_transport.cc",
    "composite_rtp_transport.h",
    "dtls_srtp_transport.cc",
    "dtls_srtp_transport.h",
    "dtls_transport.cc",
    "dtls_transport.h",
    "external_hmac.cc",
    "external_hmac.h",
    "ice_transport.cc",
    "ice_transport.h",
    "jsep_transport.cc",
    "jsep_transport.h",
    "jsep_transport_controller.cc",
    "jsep_transport_controller.h",
    "media_session.cc",
    "media_session.h",
    "rtcp_mux_filter.cc",
    "rtcp_mux_filter.h",
    "rtp_media_utils.cc",
    "rtp_media_utils.h",
    "rtp_transport.cc",
    "rtp_transport.h",
    "rtp_transport_internal.h",
    "sctp_data_channel_transport.cc",
    "sctp_data_channel_transport.h",
    "sctp_transport.cc",
    "sctp_transport.h",
    "sctp_utils.cc",
    "sctp_utils.h",
    "session_description.cc",
    "session_description.h",
    "simulcast_description.cc",
    "simulcast_description.h",
    "srtp_filter.cc",
    "srtp_filter.h",
    "srtp_session.cc",
    "srtp_session.h",
    "srtp_transport.cc",
    "srtp_transport.h",
    "transport_stats.cc",
    "transport_stats.h",
    "used_ids.h",
  ]

  deps = [
    ":media_protocol_names",
    "../api:array_view",
    "../api:audio_options_api",
    "../api:call_api",
    "../api:function_view",
    "../api:ice_transport_factory",
    "../api:libjingle_peerconnection_api",
    "../api:priority",
    "../api:rtc_error",
    "../api:rtp_headers",
    "../api:rtp_parameters",
    "../api:rtp_parameters",
    "../api:scoped_refptr",
    "../api/crypto:options",
    "../api/rtc_event_log",
    "../api/transport:datagram_transport_interface",
    "../api/video:builtin_video_bitrate_allocator_factory",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../call:call_interfaces",
    "../call:rtp_interfaces",
    "../call:rtp_receiver",
    "../common_video",
    "../common_video:common_video",
    "../logging:ice_log",
    "../media:rtc_data",
    "../media:rtc_h264_profile_id",
    "../media:rtc_media_base",
    "../media:rtc_media_config",
    "../modules/rtp_rtcp:rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../p2p:rtc_p2p",
    "../rtc_base",
    "../rtc_base:checks",
    "../rtc_base:deprecation",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:stringutils",
    "../rtc_base/synchronization:mutex",
    "../rtc_base/system:file_wrapper",
    "../rtc_base/system:rtc_export",
    "../rtc_base/third_party/base64",
    "../rtc_base/third_party/sigslot",
    "../system_wrappers:field_trial",
    "../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/types:optional",
  ]

  if (rtc_build_libsrtp) {
    deps += [ "//third_party/libsrtp" ]
  }

  public_configs = [ ":rtc_pc_config" ]
}

rtc_source_set("rtc_pc") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
  deps = [
    ":rtc_pc_base",
    "../media:rtc_audio_video",
  ]
}

rtc_library("media_protocol_names") {
  sources = [
    "media_protocol_names.cc",
    "media_protocol_names.h",
  ]
}

rtc_library("peerconnection") {
  visibility = [ "*" ]
  cflags = []
  sources = [
    "audio_rtp_receiver.cc",
    "audio_rtp_receiver.h",
    "audio_track.cc",
    "audio_track.h",
    "data_channel_controller.cc",
    "data_channel_controller.h",
    "data_channel_utils.cc",
    "data_channel_utils.h",
    "dtmf_sender.cc",
    "dtmf_sender.h",
    "ice_server_parsing.cc",
    "ice_server_parsing.h",
    "jitter_buffer_delay.cc",
    "jitter_buffer_delay.h",
    "jitter_buffer_delay_interface.h",
    "jitter_buffer_delay_proxy.h",
    "jsep_ice_candidate.cc",
    "jsep_session_description.cc",
    "local_audio_source.cc",
    "local_audio_source.h",
    "media_stream.cc",
    "media_stream.h",
    "media_stream_observer.cc",
    "media_stream_observer.h",
    "media_stream_track.h",
    "peer_connection.cc",
    "peer_connection.h",
    "peer_connection_factory.cc",
    "peer_connection_factory.h",
    "peer_connection_internal.h",
    "remote_audio_source.cc",
    "remote_audio_source.h",
    "rtc_stats_collector.cc",
    "rtc_stats_collector.h",
    "rtc_stats_traversal.cc",
    "rtc_stats_traversal.h",
    "rtp_data_channel.cc",
    "rtp_data_channel.h",
    "rtp_parameters_conversion.cc",
    "rtp_parameters_conversion.h",
    "rtp_receiver.cc",
    "rtp_receiver.h",
    "rtp_sender.cc",
    "rtp_sender.h",
    "rtp_transceiver.cc",
    "rtp_transceiver.h",
    "sctp_data_channel.cc",
    "sctp_data_channel.h",
    "sdp_serializer.cc",
    "sdp_serializer.h",
    "sdp_utils.cc",
    "sdp_utils.h",
    "stats_collector.cc",
    "stats_collector.h",
    "stream_collection.h",
    "track_media_info_map.cc",
    "track_media_info_map.h",
    "video_rtp_receiver.cc",
    "video_rtp_receiver.h",
    "video_rtp_track_source.cc",
    "video_rtp_track_source.h",
    "video_track.cc",
    "video_track.h",
    "video_track_source.cc",
    "video_track_source.h",
    "webrtc_sdp.cc",
    "webrtc_sdp.h",
    "webrtc_session_description_factory.cc",
    "webrtc_session_description_factory.h",
  ]

  deps = [
    ":rtc_pc_base",
    "../api:array_view",
    "../api:audio_options_api",
    "../api:call_api",
    "../api:fec_controller_api",
    "../api:frame_transformer_interface",
    "../api:ice_transport_factory",
    "../api:libjingle_peerconnection_api",
    "../api:media_stream_interface",
    "../api:network_state_predictor_api",
    "../api:priority",
    "../api:rtc_error",
    "../api:rtc_event_log_output_file",
    "../api:rtc_stats_api",
    "../api:rtp_parameters",
    "../api:scoped_refptr",
    "../api/crypto:frame_decryptor_interface",
    "../api/rtc_event_log",
    "../api/task_queue",
    "../api/transport:datagram_transport_interface",
    "../api/transport:field_trial_based_config",
    "../api/units:data_rate",
    "../api/video:builtin_video_bitrate_allocator_factory",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:video_codecs_api",
    "../call:call_interfaces",
    "../common_video",
    "../logging:ice_log",
    "../media:rtc_data",
    "../media:rtc_media_base",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../p2p:rtc_p2p",
    "../rtc_base",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:rtc_operations_chain",
    "../rtc_base:safe_minmax",
    "../rtc_base:weak_ptr",
    "../rtc_base/experiments:field_trial_parser",
    "../rtc_base/synchronization:mutex",
    "../rtc_base/system:file_wrapper",
    "../rtc_base/system:rtc_export",
    "../rtc_base/third_party/base64",
    "../rtc_base/third_party/sigslot",
    "../stats",
    "../system_wrappers",
    "../system_wrappers:field_trial",
    "../system_wrappers:metrics",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("libjingle_peerconnection") {
  visibility = [ "*" ]
  deps = [
    ":peerconnection",
    "../api:libjingle_peerconnection_api",
  ]
}

if (rtc_include_tests) {
  rtc_test("rtc_pc_unittests") {
    testonly = true

    sources = [
      "channel_manager_unittest.cc",
      "channel_unittest.cc",
      "composite_rtp_transport_test.cc",
      "dtls_srtp_transport_unittest.cc",
      "dtls_transport_unittest.cc",
      "ice_transport_unittest.cc",
      "jsep_transport_controller_unittest.cc",
      "jsep_transport_unittest.cc",
      "media_session_unittest.cc",
      "rtcp_mux_filter_unittest.cc",
      "rtp_transport_unittest.cc",
      "sctp_transport_unittest.cc",
      "session_description_unittest.cc",
      "srtp_filter_unittest.cc",
      "srtp_session_unittest.cc",
      "srtp_transport_unittest.cc",
      "test/rtp_transport_test_util.h",
      "test/srtp_test_util.h",
      "used_ids_unittest.cc",
      "video_rtp_receiver_unittest.cc",
    ]

    include_dirs = [ "//third_party/libsrtp/srtp" ]

    if (is_win) {
      libs = [ "strmiids.lib" ]
    }

    deps = [
      ":libjingle_peerconnection",
      ":pc_test_utils",
      ":peerconnection",
      ":rtc_pc",
      ":rtc_pc_base",
      "../api:array_view",
      "../api:audio_options_api",
      "../api:ice_transport_factory",
      "../api:libjingle_peerconnection_api",
      "../api:rtc_error",
      "../api:rtp_headers",
      "../api:rtp_parameters",
      "../api/video:builtin_video_bitrate_allocator_factory",
      "../api/video/test:mock_recordable_encoded_frame",
      "../call:rtp_interfaces",
      "../call:rtp_receiver",
      "../media:rtc_data",
      "../media:rtc_media_base",
      "../media:rtc_media_tests_utils",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../p2p:fake_ice_transport",
      "../p2p:fake_port_allocator",
      "../p2p:p2p_test_utils",
      "../p2p:rtc_p2p",
      "../rtc_base",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../rtc_base/third_party/sigslot",
      "../system_wrappers:metrics",
      "../test:test_main",
      "../test:test_support",
      "//third_party/abseil-cpp/absl/algorithm:container",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/strings",
    ]

    if (rtc_build_libsrtp) {
      deps += [ "//third_party/libsrtp" ]
    }

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
    }
  }

  rtc_library("peerconnection_perf_tests") {
    testonly = true
    sources = [ "peer_connection_rampup_tests.cc" ]
    deps = [
      ":pc_test_utils",
      ":peerconnection_wrapper",
      "../api:audio_options_api",
      "../api:create_peerconnection_factory",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api:rtc_stats_api",
      "../api:scoped_refptr",
      "../api/audio:audio_mixer_api",
      "../api/audio_codecs:audio_codecs_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../api/video_codecs:builtin_video_decoder_factory",
      "../api/video_codecs:builtin_video_encoder_factory",
      "../api/video_codecs:video_codecs_api",
      "../media:rtc_media_tests_utils",
      "../modules/audio_device:audio_device_api",
      "../modules/audio_processing:api",
      "../p2p:p2p_test_utils",
      "../p2p:rtc_p2p",
      "../pc:peerconnection",
      "../rtc_base",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base_tests_utils",
      "../system_wrappers",
      "../test:perf_test",
      "../test:test_support",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }

  rtc_library("peerconnection_wrapper") {
    testonly = true
    sources = [
      "peer_connection_wrapper.cc",
      "peer_connection_wrapper.h",
    ]
    deps = [
      ":pc_test_utils",
      "../api:function_view",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api:rtc_error",
      "../api:rtc_stats_api",
      "../api:rtp_parameters",
      "../api:scoped_refptr",
      "../pc:peerconnection",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base_approved",
      "../test:test_support",
    ]
  }

  rtc_library("pc_test_utils") {
    testonly = true
    sources = [
      "test/fake_audio_capture_module.cc",
      "test/fake_audio_capture_module.h",
      "test/fake_data_channel_provider.h",
      "test/fake_peer_connection_base.h",
      "test/fake_peer_connection_for_stats.h",
      "test/fake_periodic_video_source.h",
      "test/fake_periodic_video_track_source.h",
      "test/fake_rtc_certificate_generator.h",
      "test/fake_sctp_transport.h",
      "test/fake_video_track_renderer.h",
      "test/fake_video_track_source.h",
      "test/frame_generator_capturer_video_track_source.h",
      "test/mock_channel_interface.h",
      "test/mock_data_channel.h",
      "test/mock_delayable.h",
      "test/mock_peer_connection_observers.h",
      "test/mock_rtp_receiver_internal.h",
      "test/mock_rtp_sender_internal.h",
      "test/peer_connection_test_wrapper.cc",
      "test/peer_connection_test_wrapper.h",
      "test/rtc_stats_obtainer.h",
      "test/test_sdp_strings.h",
    ]

    deps = [
      ":libjingle_peerconnection",
      ":peerconnection",
      ":rtc_pc_base",
      "../api:audio_options_api",
      "../api:create_frame_generator",
      "../api:create_peerconnection_factory",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api:rtc_error",
      "../api:rtc_stats_api",
      "../api:scoped_refptr",
      "../api/audio:audio_mixer_api",
      "../api/audio_codecs:audio_codecs_api",
      "../api/task_queue",
      "../api/task_queue:default_task_queue_factory",
      "../api/video:builtin_video_bitrate_allocator_factory",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../api/video_codecs:builtin_video_decoder_factory",
      "../api/video_codecs:builtin_video_encoder_factory",
      "../api/video_codecs:video_codecs_api",
      "../call:call_interfaces",
      "../media:rtc_data",
      "../media:rtc_media",
      "../media:rtc_media_base",
      "../media:rtc_media_tests_utils",
      "../modules/audio_device",
      "../modules/audio_processing",
      "../modules/audio_processing:api",
      "../p2p:fake_port_allocator",
      "../p2p:p2p_test_utils",
      "../p2p:rtc_p2p",
      "../rtc_base",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_task_queue",
      "../rtc_base:task_queue_for_test",
      "../rtc_base/synchronization:mutex",
      "../rtc_base/synchronization:sequence_checker",
      "../rtc_base/task_utils:repeating_task",
      "../rtc_base/third_party/sigslot",
      "../test:test_support",
      "../test:video_test_common",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }

  rtc_test("peerconnection_unittests") {
    testonly = true
    sources = [
      "data_channel_unittest.cc",
      "dtmf_sender_unittest.cc",
      "ice_server_parsing_unittest.cc",
      "jitter_buffer_delay_unittest.cc",
      "jsep_session_description_unittest.cc",
      "local_audio_source_unittest.cc",
      "media_stream_unittest.cc",
      "peer_connection_adaptation_integrationtest.cc",
      "peer_connection_bundle_unittest.cc",
      "peer_connection_crypto_unittest.cc",
      "peer_connection_data_channel_unittest.cc",
      "peer_connection_end_to_end_unittest.cc",
      "peer_connection_factory_unittest.cc",
      "peer_connection_header_extension_unittest.cc",
      "peer_connection_histogram_unittest.cc",
      "peer_connection_ice_unittest.cc",
      "peer_connection_integrationtest.cc",
      "peer_connection_interface_unittest.cc",
      "peer_connection_jsep_unittest.cc",
      "peer_connection_media_unittest.cc",
      "peer_connection_rtp_unittest.cc",
      "peer_connection_signaling_unittest.cc",
      "peer_connection_simulcast_unittest.cc",
      "peer_connection_wrapper.cc",
      "peer_connection_wrapper.h",
      "proxy_unittest.cc",
      "rtc_stats_collector_unittest.cc",
      "rtc_stats_integrationtest.cc",
      "rtc_stats_traversal_unittest.cc",
      "rtp_media_utils_unittest.cc",
      "rtp_parameters_conversion_unittest.cc",
      "rtp_sender_receiver_unittest.cc",
      "rtp_transceiver_unittest.cc",
      "sctp_utils_unittest.cc",
      "sdp_serializer_unittest.cc",
      "stats_collector_unittest.cc",
      "test/fake_audio_capture_module_unittest.cc",
      "test/test_sdp_strings.h",
      "track_media_info_map_unittest.cc",
      "video_rtp_track_source_unittest.cc",
      "video_track_unittest.cc",
      "webrtc_sdp_unittest.cc",
    ]

    if (rtc_enable_sctp) {
      defines = [ "HAVE_SCTP" ]
    }

    deps = [
      ":peerconnection",
      ":rtc_pc_base",
      "../api:array_view",
      "../api:audio_options_api",
      "../api:create_peerconnection_factory",
      "../api:fake_frame_decryptor",
      "../api:fake_frame_encryptor",
      "../api:function_view",
      "../api:libjingle_logging_api",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api:mock_rtp",
      "../api:rtc_error",
      "../api:scoped_refptr",
      "../api/audio:audio_mixer_api",
      "../api/crypto:frame_decryptor_interface",
      "../api/crypto:frame_encryptor_interface",
      "../api/crypto:options",
      "../api/rtc_event_log",
      "../api/rtc_event_log:rtc_event_log_factory",
      "../api/task_queue:default_task_queue_factory",
      "../api/transport/rtp:rtp_source",
      "../api/units:time_delta",
      "../api/video:builtin_video_bitrate_allocator_factory",
      "../call/adaptation:resource_adaptation_test_utilities",
      "../logging:fake_rtc_event_log",
      "../media:rtc_media_config",
      "../media:rtc_media_engine_defaults",
      "../modules/audio_device:audio_device_api",
      "../modules/audio_processing:audio_processing_statistics",
      "../modules/audio_processing:audioproc_test_utils",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../p2p:fake_ice_transport",
      "../p2p:fake_port_allocator",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base_tests_utils",
      "../rtc_base:rtc_json",
      "../rtc_base/synchronization:mutex",
      "../rtc_base/third_party/base64",
      "../rtc_base/third_party/sigslot",
      "../system_wrappers:metrics",
      "../test:field_trial",
      "../test:fileutils",
      "../test:rtp_test_utils",
      "./scenario_tests:pc_scenario_tests",
      "//third_party/abseil-cpp/absl/algorithm:container",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
    if (is_android) {
      deps += [ ":android_black_magic" ]
    }

    deps += [
      ":libjingle_peerconnection",
      ":pc_test_utils",
      "../api:callfactory_api",
      "../api:rtc_event_log_output_file",
      "../api:rtc_stats_api",
      "../api:rtp_parameters",
      "../api/audio_codecs:audio_codecs_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../api/audio_codecs:opus_audio_decoder_factory",
      "../api/audio_codecs:opus_audio_encoder_factory",
      "../api/audio_codecs/L16:audio_decoder_L16",
      "../api/audio_codecs/L16:audio_encoder_L16",
      "../api/video_codecs:builtin_video_decoder_factory",
      "../api/video_codecs:builtin_video_encoder_factory",
      "../api/video_codecs:video_codecs_api",
      "../call:call_interfaces",
      "../media:rtc_audio_video",
      "../media:rtc_data",  # TODO(phoglund): AFAIK only used for one sctp
                            # constant.
      "../media:rtc_media_base",
      "../media:rtc_media_tests_utils",
      "../modules/audio_processing",
      "../modules/audio_processing:api",
      "../modules/utility",
      "../p2p:p2p_test_utils",
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_task_queue",
      "../rtc_base:safe_conversions",
      "../test:audio_codec_mocks",
      "../test:test_main",
      "../test:test_support",
    ]

    if (is_android) {
      deps += [
        "//testing/android/native_test:native_test_support",

        # We need to depend on this one directly, or classloads will fail for
        # the voice engine BuildInfo, for instance.
        "../sdk/android:libjingle_peerconnection_java",
      ]

      shard_timeout = 900
    }
  }

  if (is_android) {
    rtc_library("android_black_magic") {
      # The android code uses hacky includes to chromium-base and the ssl code;
      # having this in a separate target enables us to keep the peerconnection
      # unit tests clean.
      check_includes = false
      testonly = true
      sources = [
        "test/android_test_initializer.cc",
        "test/android_test_initializer.h",
      ]
      deps = [
        "../sdk/android:libjingle_peerconnection_jni",
        "//testing/android/native_test:native_test_support",
      ]
    }
  }
}
