# 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")

group("p2p") {
  public_deps = [
    ":libstunprober",
    ":rtc_p2p",
  ]
}

rtc_static_library("rtc_p2p") {
  visibility = [ "*" ]
  sources = [
    "base/asyncstuntcpsocket.cc",
    "base/asyncstuntcpsocket.h",
    "base/basicasyncresolverfactory.cc",
    "base/basicasyncresolverfactory.h",
    "base/basicpacketsocketfactory.cc",
    "base/basicpacketsocketfactory.h",
    "base/candidatepairinterface.h",
    "base/dtlstransport.cc",
    "base/dtlstransport.h",
    "base/dtlstransportinternal.cc",
    "base/dtlstransportinternal.h",
    "base/icecredentialsiterator.cc",
    "base/icecredentialsiterator.h",
    "base/icetransportinternal.cc",
    "base/icetransportinternal.h",
    "base/mdns_message.cc",
    "base/mdns_message.h",
    "base/p2pconstants.cc",
    "base/p2pconstants.h",
    "base/p2ptransportchannel.cc",
    "base/p2ptransportchannel.h",
    "base/packetlossestimator.cc",
    "base/packetlossestimator.h",
    "base/packetsocketfactory.cc",
    "base/packetsocketfactory.h",
    "base/packettransportinterface.h",
    "base/packettransportinternal.cc",
    "base/packettransportinternal.h",
    "base/port.cc",
    "base/port.h",
    "base/portallocator.cc",
    "base/portallocator.h",
    "base/portinterface.cc",
    "base/portinterface.h",
    "base/pseudotcp.cc",
    "base/pseudotcp.h",
    "base/regatheringcontroller.cc",
    "base/regatheringcontroller.h",
    "base/relayport.cc",
    "base/relayport.h",
    "base/stun.cc",
    "base/stun.h",
    "base/stunport.cc",
    "base/stunport.h",
    "base/stunrequest.cc",
    "base/stunrequest.h",
    "base/tcpport.cc",
    "base/tcpport.h",
    "base/transport.h",
    "base/transportdescription.cc",
    "base/transportdescription.h",
    "base/transportdescriptionfactory.cc",
    "base/transportdescriptionfactory.h",
    "base/transportfactoryinterface.h",
    "base/transportinfo.h",
    "base/turnport.cc",
    "base/turnport.h",
    "base/udpport.h",
    "client/basicportallocator.cc",
    "client/basicportallocator.h",
    "client/relayportfactoryinterface.h",
    "client/turnportfactory.cc",
    "client/turnportfactory.h",
  ]

  deps = [
    "../api:libjingle_peerconnection_api",
    "../api:ortc_api",
    "../api/transport:enums",
    "../logging:ice_log",
    "../logging:rtc_event_log_api",
    "../rtc_base:checks",
    "../rtc_base:rtc_base",
    "../rtc_base:safe_minmax",
    "../rtc_base:weak_ptr",
    "../rtc_base/network:sent_packet",
    "../rtc_base/system:rtc_export",
    "../rtc_base/third_party/base64",
    "../rtc_base/third_party/sigslot",
    "../system_wrappers:field_trial",
    "../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  if (build_with_chromium) {
    if (is_nacl) {
      deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
    }
  }
}

if (rtc_include_tests) {
  rtc_source_set("p2p_test_utils") {
    testonly = true
    sources = [
      "base/fakecandidatepair.h",
      "base/fakedtlstransport.h",
      "base/fakeicetransport.h",
      "base/fakepackettransport.h",
      "base/fakeportallocator.h",
      "base/mockasyncresolver.h",
      "base/mockicetransport.h",
      "base/testrelayserver.h",
      "base/teststunserver.cc",
      "base/teststunserver.h",
      "base/testturncustomizer.h",
      "base/testturnserver.h",
    ]
    deps = [
      ":p2p_server_utils",
      ":rtc_p2p",
      "../api:libjingle_peerconnection_api",
      "../api:ortc_api",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../rtc_base/third_party/sigslot",
      "../test:test_support",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }

  rtc_source_set("rtc_p2p_unittests") {
    testonly = true

    sources = [
      "base/asyncstuntcpsocket_unittest.cc",
      "base/basicasyncresolverfactory_unittest.cc",
      "base/dtlstransport_unittest.cc",
      "base/icecredentialsiterator_unittest.cc",
      "base/mdns_message_unittest.cc",
      "base/p2ptransportchannel_unittest.cc",
      "base/packetlossestimator_unittest.cc",
      "base/port_unittest.cc",
      "base/portallocator_unittest.cc",
      "base/pseudotcp_unittest.cc",
      "base/regatheringcontroller_unittest.cc",
      "base/relayport_unittest.cc",
      "base/relayserver_unittest.cc",
      "base/stun_unittest.cc",
      "base/stunport_unittest.cc",
      "base/stunrequest_unittest.cc",
      "base/stunserver_unittest.cc",
      "base/tcpport_unittest.cc",
      "base/transportdescriptionfactory_unittest.cc",
      "base/turnport_unittest.cc",
      "base/turnserver_unittest.cc",
      "client/basicportallocator_unittest.cc",
    ]
    deps = [
      ":p2p_server_utils",
      ":p2p_test_utils",
      ":rtc_p2p",
      "../api:libjingle_peerconnection_api",
      "../api:ortc_api",
      "../api/units:time_delta",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../rtc_base:testclient",
      "../rtc_base/network:sent_packet",
      "../rtc_base/third_party/sigslot:sigslot",
      "../system_wrappers:metrics",
      "../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
}

rtc_source_set("p2p_server_utils") {
  testonly = true
  sources = [
    "base/relayserver.cc",
    "base/relayserver.h",
    "base/stunserver.cc",
    "base/stunserver.h",
    "base/turnserver.cc",
    "base/turnserver.h",
  ]
  deps = [
    ":rtc_p2p",
    "../rtc_base:checks",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_tests_utils",
    "../rtc_base/third_party/sigslot",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_static_library("libstunprober") {
  visibility = [ "*" ]
  sources = [
    "stunprober/stunprober.cc",
    "stunprober/stunprober.h",
  ]

  deps = [
    ":rtc_p2p",
    "..:webrtc_common",
    "../rtc_base:checks",
    "../rtc_base:rtc_base",
    "../rtc_base/system:rtc_export",
  ]
}

if (rtc_include_tests) {
  rtc_source_set("libstunprober_unittests") {
    testonly = true

    sources = [
      "stunprober/stunprober_unittest.cc",
    ]
    deps = [
      ":libstunprober",
      ":p2p_test_utils",
      ":rtc_p2p",
      "../rtc_base:checks",
      "../rtc_base:gunit_helpers",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_tests_utils",
      "../test:test_support",
      "//testing/gtest",
    ]
  }
}
