# Copyright (c) 2018 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")

rtc_library("bitrate_settings") {
  visibility = [ "*" ]
  sources = [
    "bitrate_settings.cc",
    "bitrate_settings.h",
  ]
  deps = [ "../../rtc_base/system:rtc_export" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("bandwidth_estimation_settings") {
  visibility = [ "*" ]
  sources = [ "bandwidth_estimation_settings.h" ]
  deps = [ "../../rtc_base/system:rtc_export" ]
}

rtc_source_set("enums") {
  visibility = [ "*" ]
  sources = [ "enums.h" ]
}

rtc_library("network_control") {
  visibility = [ "*" ]
  sources = [
    "network_control.h",
    "network_types.cc",
    "network_types.h",
  ]

  deps = [
    "../../api:field_trials_view",
    "../environment",
    "../rtc_event_log",
    "../units:data_rate",
    "../units:data_size",
    "../units:time_delta",
    "../units:timestamp",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("field_trial_based_config") {
  visibility = [ "*" ]
  sources = [
    "field_trial_based_config.cc",
    "field_trial_based_config.h",
  ]
  deps = [
    "../../api:field_trials_registry",
    "../../rtc_base/system:rtc_export",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_source_set("datagram_transport_interface") {
  visibility = [ "*" ]
  sources = [ "data_channel_transport_interface.h" ]
  deps = [
    "..:array_view",
    "..:rtc_error",
    "../../rtc_base:copy_on_write_buffer",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("goog_cc") {
  visibility = [ "*" ]
  sources = [
    "goog_cc_factory.cc",
    "goog_cc_factory.h",
  ]
  deps = [
    ":network_control",
    "..:network_state_predictor_api",
    "../../api/units:time_delta",
    "../../modules/congestion_controller/goog_cc",
  ]
}

rtc_source_set("sctp_transport_factory_interface") {
  visibility = [ "*" ]
  sources = [ "sctp_transport_factory_interface.h" ]
  deps = [ "../../api/environment" ]
}

rtc_source_set("stun_types") {
  visibility = [ "*" ]
  sources = [
    "stun.cc",
    "stun.h",
  ]

  deps = [
    "../../api:array_view",
    "../../rtc_base:byte_buffer",
    "../../rtc_base:byte_order",
    "../../rtc_base:checks",
    "../../rtc_base:crc32",
    "../../rtc_base:ip_address",
    "../../rtc_base:logging",
    "../../rtc_base:socket_address",
    "../../rtc_base:ssl",
    "../../system_wrappers:metrics",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

if (rtc_include_tests) {
  rtc_source_set("test_feedback_generator_interface") {
    testonly = true
    sources = [ "test/feedback_generator_interface.h" ]
    visibility = [ "*" ]
    deps = [
      ":network_control",
      "..:simulated_network_api",
    ]
  }
  rtc_library("test_feedback_generator") {
    testonly = true
    sources = [
      "test/create_feedback_generator.cc",
      "test/create_feedback_generator.h",
    ]
    visibility = [ "*" ]
    deps = [
      ":network_control",
      ":test_feedback_generator_interface",
      "../../test/network:feedback_generator",
    ]
  }
}

if (rtc_include_tests) {
  rtc_source_set("stun_unittest") {
    visibility = [ "*" ]
    testonly = true
    sources = [ "stun_unittest.cc" ]
    deps = [
      ":stun_types",
      "../../rtc_base:byte_buffer",
      "../../rtc_base:byte_order",
      "../../rtc_base:macromagic",
      "../../rtc_base:socket_address",
      "../../system_wrappers:metrics",
      "../../test:test_support",
      "//testing/gtest",
    ]
  }
}

if (rtc_include_tests) {
  rtc_source_set("mock_network_control") {
    visibility = [ "*" ]
    testonly = true
    sources = [ "test/mock_network_control.h" ]
    deps = [
      ":network_control",
      "../../test:test_support",
    ]
  }
}
