# 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",
  ]
}

config("rtc_p2p_inherited_config") {
  defines = [ "FEATURE_ENABLE_VOICEMAIL" ]
}

rtc_static_library("rtc_p2p") {
  visibility = [ "*" ]
  sources = [
    "base/asyncstuntcpsocket.cc",
    "base/asyncstuntcpsocket.h",
    "base/basicpacketsocketfactory.cc",
    "base/basicpacketsocketfactory.h",
    "base/candidatepairinterface.h",
    "base/common.h",
    "base/dtlstransport.cc",
    "base/dtlstransport.h",
    "base/dtlstransportinternal.cc",
    "base/dtlstransportinternal.h",
    "base/icetransportinternal.cc",
    "base/icetransportinternal.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/relayport.cc",
    "base/relayport.h",
    "base/session.cc",
    "base/session.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/transportinfo.h",
    "base/turnport.cc",
    "base/turnport.h",
    "base/udpport.h",
    "base/udptransport.cc",
    "base/udptransport.h",
    "client/basicportallocator.cc",
    "client/basicportallocator.h",
    "client/relayportfactoryinterface.h",
    "client/turnportfactory.cc",
    "client/turnportfactory.h",
  ]

  defines = []

  deps = [
    "../api:libjingle_peerconnection_api",
    "../api:optional",
    "../api:ortc_api",
    "../rtc_base:checks",
    "../rtc_base:rtc_base",
    "../rtc_base:stringutils",
    "../system_wrappers:field_trial_api",
  ]

  public_configs = [ ":rtc_p2p_inherited_config" ]

  if (build_with_chromium) {
    if (is_nacl) {
      deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
    }
  } else {
    sources += [
      "base/relayserver.cc",
      "base/relayserver.h",
      "base/stunserver.cc",
      "base/stunserver.h",
      "base/turnserver.cc",
      "base/turnserver.h",
    ]
    defines += [
      "FEATURE_ENABLE_VOICEMAIL",
      "FEATURE_ENABLE_PSTN",
    ]
  }
}

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/mockicetransport.h",
      "base/testrelayserver.h",
      "base/teststunserver.cc",
      "base/teststunserver.h",
      "base/testturncustomizer.h",
      "base/testturnserver.h",
    ]
    deps = [
      ":rtc_p2p",
      "../api:libjingle_peerconnection_api",
      "../api:ortc_api",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../test:test_support",
    ]
  }

  rtc_source_set("rtc_p2p_unittests") {
    testonly = true

    sources = [
      "base/asyncstuntcpsocket_unittest.cc",
      "base/dtlstransport_unittest.cc",
      "base/p2ptransportchannel_unittest.cc",
      "base/packetlossestimator_unittest.cc",
      "base/port_unittest.cc",
      "base/portallocator_unittest.cc",
      "base/pseudotcp_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",
      "base/udptransport_unittest.cc",
      "client/basicportallocator_unittest.cc",
    ]
    deps = [
      ":p2p_test_utils",
      ":rtc_p2p",
      "../api:fakemetricsobserver",
      "../api:ortc_api",
      "../rtc_base:checks",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../rtc_base:stringutils",
      "../test:test_support",
      "//testing/gtest",
    ]
    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" ]
    }
    defines = [ "GTEST_RELATIVE_PATH" ]
  }
}

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

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

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:rtc_base",
      "../rtc_base:rtc_base_tests_utils",
      "//testing/gtest",
    ]
    defines = [ "GTEST_RELATIVE_PATH" ]
  }
}
