Add SteamWebRTC CMake based build scripts.

- Add CMake based WebRTC build scripts (Minimalized for ICE transport).
- Add Abseil-cpp dependency for WebRTC.
- Update travis script to testing steamwebrtc build step.
- Add option to build steamwebrtc as static library.
- Update IceSession for Turn server configuration.
- Add ws2_32, crypt32 dependencies for static OpenSSL library link.
- Update WebRTC's rtc_base/system/arch.h for ppc64le, s390x build.
- Add HAVE_STRCPY_S definition for check strcpy_s
This commit is contained in:
ZCube
2020-07-06 21:28:36 +09:00
parent 4c71718263
commit 06342cfd42
12 changed files with 1022 additions and 44 deletions
+6
View File
@@ -69,6 +69,12 @@ fi
cmake_configure build-cmake ${CMAKE_ARGS[@]} -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake_build build-cmake
# Build binaries with webrtc
if [[ $BUILD_WEBRTC -ne 0 ]]; then
cmake_configure build-cmake-webrtc ${CMAKE_ARGS[@]} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_STEAMWEBRTC=ON -DSTEAMWEBRTC_USE_STATIC_LIBS=OFF ..
cmake_build build-cmake-webrtc
fi
# Build binaries with reference ed25519/curve25519
cmake_configure build-cmake-ref ${CMAKE_ARGS[@]} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CRYPTO25519=Reference ..
cmake_build build-cmake-ref
+2
View File
@@ -16,6 +16,8 @@ PACKAGES=(
cmake
meson
pkgconf
git
linux-headers
)
PACKAGES+=(protobuf-dev)
+1
View File
@@ -11,6 +11,7 @@ PACKAGES=(
clang
cmake
meson
git
)
PACKAGES+=(protobuf)
+2
View File
@@ -14,6 +14,8 @@ PACKAGES=(
cmake
meson
pkgconf-pkg-config
git
make
)
PACKAGES+=(protobuf-compiler protobuf-devel)
+1 -1
View File
@@ -10,7 +10,7 @@ apt-get update
apt-get install -y locales
locale-gen en_US.UTF-8
PACKAGES=(build-essential pkg-config ccache cmake meson clang)
PACKAGES=(build-essential pkg-config ccache cmake meson clang git)
PACKAGES+=(libprotobuf-dev protobuf-compiler)
PACKAGES+=(libssl-dev)
+8
View File
@@ -28,6 +28,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
)
endif()
option(USE_STEAMWEBRTC "Build with a Webrtc library" OFF)
option(STEAMWEBRTC_USE_STATIC_LIBS "Build with a Webrtc as static library" OFF)
option(Protobuf_USE_STATIC_LIBS "Build with a static Protobuf library" OFF)
option(LIGHT_TESTS "Use smaller/shorter tests for simple integration testing (e.g. Travis)" OFF)
option(GAMENETWORKINGSOCKETS_BUILD_EXAMPLES "Build the included example chat program" ON)
@@ -95,6 +97,9 @@ if (USE_CRYPTO25519 STREQUAL "OpenSSL" OR USE_CRYPTO STREQUAL "OpenSSL")
cmake_push_check_state()
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES OpenSSL::Crypto)
if(WIN32 AND OPENSSL_USE_STATIC_LIBS)
list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32 crypt32)
endif()
check_symbol_exists(EVP_MD_CTX_free openssl/evp.h OPENSSL_NEW_ENOUGH)
if (NOT OPENSSL_NEW_ENOUGH)
message(FATAL_ERROR "Cannot find EVP_MD_CTX_free in OpenSSL headers/libs for the target architecture. Check that you're using OpenSSL 1.1.0 or later.")
@@ -102,6 +107,9 @@ if (USE_CRYPTO25519 STREQUAL "OpenSSL" OR USE_CRYPTO STREQUAL "OpenSSL")
cmake_pop_check_state()
cmake_push_check_state()
set(CMAKE_REQUIRED_LIBRARIES OpenSSL::Crypto)
if(WIN32 AND OPENSSL_USE_STATIC_LIBS)
list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32 crypt32)
endif()
if(USE_CRYPTO25519 STREQUAL "OpenSSL")
check_symbol_exists(EVP_PKEY_get_raw_public_key openssl/evp.h OPENSSL_HAS_25519_RAW)
endif()
+22
View File
@@ -86,6 +86,10 @@ if(USE_CRYPTO25519 STREQUAL "Reference")
)
endif()
if(USE_STEAMWEBRTC)
add_subdirectory(external/steamwebrtc)
endif(USE_STEAMWEBRTC)
set(C99_FEATURES
c_restrict
c_function_prototypes)
@@ -165,10 +169,22 @@ macro(gamenetworkingsockets_common GNS_TARGET)
Threads::Threads
)
if(USE_STEAMWEBRTC AND STEAMWEBRTC_USE_STATIC_LIBS)
target_compile_definitions(${GNS_TARGET} PRIVATE
STEAMWEBRTC_USE_STATIC_LIBS
)
target_link_libraries(${GNS_TARGET} PUBLIC
steamwebrtc
)
endif()
if(USE_CRYPTO STREQUAL "OpenSSL" OR USE_CRYPTO25519 STREQUAL "OpenSSL")
target_link_libraries(${GNS_TARGET} PUBLIC
OpenSSL::Crypto
)
if(WIN32 AND OPENSSL_USE_STATIC_LIBS)
list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32 crypt32)
endif()
endif()
if(USE_CRYPTO STREQUAL "libsodium" OR USE_CRYPTO25519 STREQUAL "libsodium")
@@ -218,8 +234,14 @@ macro(gamenetworkingsockets_common GNS_TARGET)
endif()
if(CMAKE_SYSTEM_NAME MATCHES Linux)
if(USE_STEAMWEBRTC AND NOT STEAMWEBRTC_USE_STATIC_LIBS)
target_link_libraries(${GNS_TARGET} PRIVATE dl)
endif()
target_compile_definitions(${GNS_TARGET} PUBLIC POSIX LINUX)
elseif(CMAKE_SYSTEM_NAME MATCHES Darwin)
if(USE_STEAMWEBRTC AND NOT STEAMWEBRTC_USE_STATIC_LIBS)
target_link_libraries(${GNS_TARGET} PRIVATE dl)
endif()
target_compile_definitions(${GNS_TARGET} PUBLIC POSIX OSX)
elseif(CMAKE_SYSTEM_NAME MATCHES Windows)
target_compile_definitions(${GNS_TARGET} PUBLIC WIN32)
+850
View File
@@ -0,0 +1,850 @@
include(FetchContent)
include(TestBigEndian)
include(CheckSymbolExists)
find_package(OpenSSL REQUIRED)
find_package(Protobuf REQUIRED)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
FetchContent_Declare(
abseil
GIT_REPOSITORY https://github.com/abseil/abseil-cpp
GIT_TAG lts_2020_02_25 #refs/remotes/branch-heads/4180
)
FetchContent_GetProperties(abseil)
if(NOT abseil_POPULATED)
FetchContent_Populate(abseil)
endif()
add_subdirectory(${abseil_SOURCE_DIR} ${abseil_BINARY_DIR})
FetchContent_Declare(
webrtc
GIT_REPOSITORY https://webrtc.googlesource.com/src
GIT_TAG 30a3e787948dd6cdd541773101d664b85eb332a6 #refs/remotes/branch-heads/4180
)
FetchContent_GetProperties(webrtc)
if(NOT webrtc_POPULATED)
FetchContent_Populate(webrtc)
endif()
include (CheckTypeSize)
CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P)
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
# endian and cpu detect : for ppc64le and s390x, else
if(IS_BIG_ENDIAN)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
FILE(WRITE ${webrtc_SOURCE_DIR}/rtc_base/system/arch.h
"#pragma once\n#define WEBRTC_ARCH_BIG_ENDIAN\n#define WEBRTC_ARCH_64_BITS\n"
)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
FILE(WRITE ${webrtc_SOURCE_DIR}/rtc_base/system/arch.h
"#pragma once\n#define WEBRTC_ARCH_BIG_ENDIAN\n#define WEBRTC_ARCH_32_BITS\n"
)
endif()
else()
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
FILE(WRITE ${webrtc_SOURCE_DIR}/rtc_base/system/arch.h
"#pragma once\n#define WEBRTC_ARCH_LITTLE_ENDIAN\n#define WEBRTC_ARCH_64_BITS\n"
)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
FILE(WRITE ${webrtc_SOURCE_DIR}/rtc_base/system/arch.h
"#pragma once\n#define WEBRTC_ARCH_LITTLE_ENDIAN\n#define WEBRTC_ARCH_32_BITS\n"
)
endif()
endif()
if(WIN32)
add_definitions(
-DWEBRTC_WIN
-DNOMINMAX
-DWIN32_LEAN_AND_MEAN
-D_WINSOCKAPI_
)
else(WIN32)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined ")
add_definitions(
-DWEBRTC_POSIX
-DWEBRTC_LINUX
)
endif(WIN32)
add_library(webrtc-lite STATIC
${webrtc_SOURCE_DIR}/api/adaptation/resource.cc
${webrtc_SOURCE_DIR}/api/adaptation/resource.h
${webrtc_SOURCE_DIR}/api/array_view.h
${webrtc_SOURCE_DIR}/api/async_resolver_factory.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_codec_pair_id.cc
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_codec_pair_id.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_decoder_factory.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_decoder.cc
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_decoder.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_encoder_factory.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_encoder.cc
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_encoder.h
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_format.cc
${webrtc_SOURCE_DIR}/api/audio_codecs/audio_format.h
${webrtc_SOURCE_DIR}/api/audio_options.cc
${webrtc_SOURCE_DIR}/api/audio_options.h
${webrtc_SOURCE_DIR}/api/audio/audio_frame.cc
${webrtc_SOURCE_DIR}/api/audio/audio_frame.h
${webrtc_SOURCE_DIR}/api/audio/audio_mixer.h
${webrtc_SOURCE_DIR}/api/audio/channel_layout.cc
${webrtc_SOURCE_DIR}/api/audio/channel_layout.h
${webrtc_SOURCE_DIR}/api/audio/echo_canceller3_config.cc
${webrtc_SOURCE_DIR}/api/audio/echo_canceller3_config.h
${webrtc_SOURCE_DIR}/api/audio/echo_control.h
${webrtc_SOURCE_DIR}/api/call/audio_sink.h
${webrtc_SOURCE_DIR}/api/call/bitrate_allocation.h
${webrtc_SOURCE_DIR}/api/call/transport.cc
${webrtc_SOURCE_DIR}/api/call/transport.h
${webrtc_SOURCE_DIR}/api/candidate.cc
${webrtc_SOURCE_DIR}/api/candidate.h
${webrtc_SOURCE_DIR}/api/crypto_params.h
${webrtc_SOURCE_DIR}/api/crypto/crypto_options.cc
${webrtc_SOURCE_DIR}/api/crypto/crypto_options.h
${webrtc_SOURCE_DIR}/api/crypto/frame_decryptor_interface.h
${webrtc_SOURCE_DIR}/api/crypto/frame_encryptor_interface.h
${webrtc_SOURCE_DIR}/api/dtls_transport_interface.cc
${webrtc_SOURCE_DIR}/api/dtls_transport_interface.h
${webrtc_SOURCE_DIR}/api/dtmf_sender_interface.h
${webrtc_SOURCE_DIR}/api/fec_controller_override.h
${webrtc_SOURCE_DIR}/api/fec_controller.h
${webrtc_SOURCE_DIR}/api/frame_transformer_interface.h
${webrtc_SOURCE_DIR}/api/function_view.h
${webrtc_SOURCE_DIR}/api/ice_transport_interface.h
${webrtc_SOURCE_DIR}/api/jsep_ice_candidate.cc
${webrtc_SOURCE_DIR}/api/jsep_ice_candidate.cc
${webrtc_SOURCE_DIR}/api/jsep_ice_candidate.h
${webrtc_SOURCE_DIR}/api/jsep_session_description.h
${webrtc_SOURCE_DIR}/api/jsep.cc
${webrtc_SOURCE_DIR}/api/jsep.h
${webrtc_SOURCE_DIR}/api/media_stream_interface.cc
${webrtc_SOURCE_DIR}/api/media_stream_interface.h
${webrtc_SOURCE_DIR}/api/media_types.cc
${webrtc_SOURCE_DIR}/api/media_types.h
${webrtc_SOURCE_DIR}/api/neteq/neteq_factory.h
${webrtc_SOURCE_DIR}/api/neteq/neteq.cc
${webrtc_SOURCE_DIR}/api/neteq/neteq.h
${webrtc_SOURCE_DIR}/api/network_state_predictor.h
${webrtc_SOURCE_DIR}/api/packet_socket_factory.h
${webrtc_SOURCE_DIR}/api/priority.h
${webrtc_SOURCE_DIR}/api/proxy.cc
${webrtc_SOURCE_DIR}/api/proxy.h
${webrtc_SOURCE_DIR}/api/ref_counted_base.h
${webrtc_SOURCE_DIR}/api/rtc_error.cc
${webrtc_SOURCE_DIR}/api/rtc_error.h
${webrtc_SOURCE_DIR}/api/rtc_event_log_output.h
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log_factory_interface.h
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log_factory.cc
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log_factory.cc
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log_factory.h
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log.cc
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event_log.h
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event.cc
${webrtc_SOURCE_DIR}/api/rtc_event_log/rtc_event.h
${webrtc_SOURCE_DIR}/api/rtp_headers.cc
${webrtc_SOURCE_DIR}/api/rtp_headers.h
${webrtc_SOURCE_DIR}/api/rtp_packet_info.cc
${webrtc_SOURCE_DIR}/api/rtp_packet_info.h
${webrtc_SOURCE_DIR}/api/rtp_packet_infos.h
${webrtc_SOURCE_DIR}/api/rtp_parameters.cc
${webrtc_SOURCE_DIR}/api/rtp_parameters.h
${webrtc_SOURCE_DIR}/api/rtp_receiver_interface.cc
${webrtc_SOURCE_DIR}/api/rtp_receiver_interface.h
${webrtc_SOURCE_DIR}/api/rtp_sender_interface.cc
${webrtc_SOURCE_DIR}/api/rtp_sender_interface.h
${webrtc_SOURCE_DIR}/api/rtp_transceiver_direction.h
${webrtc_SOURCE_DIR}/api/rtp_transceiver_interface.cc
${webrtc_SOURCE_DIR}/api/rtp_transceiver_interface.h
${webrtc_SOURCE_DIR}/api/scoped_refptr.h
${webrtc_SOURCE_DIR}/api/task_queue/default_task_queue_factory.h
${webrtc_SOURCE_DIR}/api/task_queue/queued_task.h
${webrtc_SOURCE_DIR}/api/task_queue/task_queue_base.cc
${webrtc_SOURCE_DIR}/api/task_queue/task_queue_base.h
${webrtc_SOURCE_DIR}/api/task_queue/task_queue_factory.h
${webrtc_SOURCE_DIR}/api/transport/bitrate_settings.cc
${webrtc_SOURCE_DIR}/api/transport/bitrate_settings.h
${webrtc_SOURCE_DIR}/api/transport/data_channel_transport_interface.h
${webrtc_SOURCE_DIR}/api/transport/enums.h
${webrtc_SOURCE_DIR}/api/transport/network_control.h
${webrtc_SOURCE_DIR}/api/transport/network_types.cc
${webrtc_SOURCE_DIR}/api/transport/network_types.h
${webrtc_SOURCE_DIR}/api/transport/rtp/dependency_descriptor.cc
${webrtc_SOURCE_DIR}/api/transport/rtp/dependency_descriptor.h
${webrtc_SOURCE_DIR}/api/transport/rtp/rtp_source.h
${webrtc_SOURCE_DIR}/api/transport/stun.cc
${webrtc_SOURCE_DIR}/api/transport/stun.h
${webrtc_SOURCE_DIR}/api/transport/webrtc_key_value_config.h
${webrtc_SOURCE_DIR}/api/turn_customizer.h
${webrtc_SOURCE_DIR}/api/units/data_rate.cc
${webrtc_SOURCE_DIR}/api/units/data_rate.h
${webrtc_SOURCE_DIR}/api/units/data_size.cc
${webrtc_SOURCE_DIR}/api/units/data_size.h
${webrtc_SOURCE_DIR}/api/units/frequency.cc
${webrtc_SOURCE_DIR}/api/units/frequency.h
${webrtc_SOURCE_DIR}/api/units/time_delta.cc
${webrtc_SOURCE_DIR}/api/units/time_delta.h
${webrtc_SOURCE_DIR}/api/units/timestamp.cc
${webrtc_SOURCE_DIR}/api/units/timestamp.h
${webrtc_SOURCE_DIR}/api/video_codecs/sdp_video_format.cc
${webrtc_SOURCE_DIR}/api/video_codecs/sdp_video_format.h
${webrtc_SOURCE_DIR}/api/video_codecs/video_codec.cc
${webrtc_SOURCE_DIR}/api/video_codecs/video_codec.h
${webrtc_SOURCE_DIR}/api/video_codecs/video_decoder.cc
${webrtc_SOURCE_DIR}/api/video_codecs/video_decoder.h
${webrtc_SOURCE_DIR}/api/video_codecs/video_encoder_config.cc
${webrtc_SOURCE_DIR}/api/video_codecs/video_encoder_config.h
${webrtc_SOURCE_DIR}/api/video_codecs/video_encoder_factory.h
${webrtc_SOURCE_DIR}/api/video_codecs/video_encoder.cc
${webrtc_SOURCE_DIR}/api/video_codecs/video_encoder.h
${webrtc_SOURCE_DIR}/api/video/color_space.cc
${webrtc_SOURCE_DIR}/api/video/color_space.h
${webrtc_SOURCE_DIR}/api/video/encoded_frame.cc
${webrtc_SOURCE_DIR}/api/video/encoded_frame.h
${webrtc_SOURCE_DIR}/api/video/encoded_image.cc
${webrtc_SOURCE_DIR}/api/video/encoded_image.h
${webrtc_SOURCE_DIR}/api/video/hdr_metadata.cc
${webrtc_SOURCE_DIR}/api/video/hdr_metadata.h
${webrtc_SOURCE_DIR}/api/video/recordable_encoded_frame.h
${webrtc_SOURCE_DIR}/api/video/video_bitrate_allocation.cc
${webrtc_SOURCE_DIR}/api/video/video_bitrate_allocation.h
${webrtc_SOURCE_DIR}/api/video/video_bitrate_allocator_factory.h
${webrtc_SOURCE_DIR}/api/video/video_bitrate_allocator.cc
${webrtc_SOURCE_DIR}/api/video/video_bitrate_allocator.h
${webrtc_SOURCE_DIR}/api/video/video_codec_constants.h
${webrtc_SOURCE_DIR}/api/video/video_codec_type.h
${webrtc_SOURCE_DIR}/api/video/video_content_type.cc
${webrtc_SOURCE_DIR}/api/video/video_content_type.h
${webrtc_SOURCE_DIR}/api/video/video_frame_buffer.cc
${webrtc_SOURCE_DIR}/api/video/video_frame_buffer.h
${webrtc_SOURCE_DIR}/api/video/video_frame_metadata.cc
${webrtc_SOURCE_DIR}/api/video/video_frame_metadata.h
${webrtc_SOURCE_DIR}/api/video/video_frame_type.h
${webrtc_SOURCE_DIR}/api/video/video_frame.cc
${webrtc_SOURCE_DIR}/api/video/video_frame.h
${webrtc_SOURCE_DIR}/api/video/video_rotation.h
${webrtc_SOURCE_DIR}/api/video/video_sink_interface.h
${webrtc_SOURCE_DIR}/api/video/video_source_interface.cc
${webrtc_SOURCE_DIR}/api/video/video_source_interface.h
${webrtc_SOURCE_DIR}/api/video/video_stream_encoder_settings.h
${webrtc_SOURCE_DIR}/api/video/video_timing.cc
${webrtc_SOURCE_DIR}/api/video/video_timing.h
${webrtc_SOURCE_DIR}/call/audio_receive_stream.cc
${webrtc_SOURCE_DIR}/call/audio_receive_stream.h
#${webrtc_SOURCE_DIR}/call/audio_send_stream.cc
#${webrtc_SOURCE_DIR}/call/audio_send_stream.h
${webrtc_SOURCE_DIR}/call/audio_sender.h
${webrtc_SOURCE_DIR}/call/audio_state.cc
${webrtc_SOURCE_DIR}/call/audio_state.h
#${webrtc_SOURCE_DIR}/call/call_config.cc
#${webrtc_SOURCE_DIR}/call/call_config.h
#${webrtc_SOURCE_DIR}/call/call.cc
#${webrtc_SOURCE_DIR}/call/call.h
${webrtc_SOURCE_DIR}/call/flexfec_receive_stream.cc
${webrtc_SOURCE_DIR}/call/flexfec_receive_stream.h
${webrtc_SOURCE_DIR}/call/packet_receiver.h
${webrtc_SOURCE_DIR}/call/rtp_config.cc
${webrtc_SOURCE_DIR}/call/rtp_config.h
${webrtc_SOURCE_DIR}/call/rtp_demuxer.cc
${webrtc_SOURCE_DIR}/call/rtp_demuxer.h
${webrtc_SOURCE_DIR}/call/rtp_packet_sink_interface.h
${webrtc_SOURCE_DIR}/call/rtp_rtcp_demuxer_helper.cc
${webrtc_SOURCE_DIR}/call/rtp_rtcp_demuxer_helper.h
${webrtc_SOURCE_DIR}/call/rtp_transport_controller_send_interface.h
${webrtc_SOURCE_DIR}/call/ssrc_binding_observer.h
${webrtc_SOURCE_DIR}/call/video_receive_stream.cc
${webrtc_SOURCE_DIR}/call/video_receive_stream.h
${webrtc_SOURCE_DIR}/call/video_send_stream.cc
${webrtc_SOURCE_DIR}/call/video_send_stream.h
${webrtc_SOURCE_DIR}/common_types.h
${webrtc_SOURCE_DIR}/common_video/generic_frame_descriptor/generic_frame_info.cc
${webrtc_SOURCE_DIR}/common_video/generic_frame_descriptor/generic_frame_info.h
${webrtc_SOURCE_DIR}/common_video/include/quality_limitation_reason.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_dtls_transport_state.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_dtls_transport_state.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_dtls_writable_state.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_dtls_writable_state.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_ice_candidate_pair.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/ice_logger.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/ice_logger.h
${webrtc_SOURCE_DIR}/media/base/codec.cc
${webrtc_SOURCE_DIR}/media/base/codec.h
${webrtc_SOURCE_DIR}/media/base/delayable.h
${webrtc_SOURCE_DIR}/media/base/h264_profile_level_id.cc
${webrtc_SOURCE_DIR}/media/base/h264_profile_level_id.h
${webrtc_SOURCE_DIR}/media/base/media_channel.cc
${webrtc_SOURCE_DIR}/media/base/media_channel.h
${webrtc_SOURCE_DIR}/media/base/media_config.h
${webrtc_SOURCE_DIR}/media/base/media_constants.cc
${webrtc_SOURCE_DIR}/media/base/media_constants.h
${webrtc_SOURCE_DIR}/media/base/media_engine.cc
${webrtc_SOURCE_DIR}/media/base/media_engine.h
${webrtc_SOURCE_DIR}/media/base/rid_description.cc
${webrtc_SOURCE_DIR}/media/base/rid_description.cc
${webrtc_SOURCE_DIR}/media/base/rid_description.h
${webrtc_SOURCE_DIR}/media/base/rtp_utils.cc
${webrtc_SOURCE_DIR}/media/base/rtp_utils.h
${webrtc_SOURCE_DIR}/media/base/stream_params.cc
${webrtc_SOURCE_DIR}/media/base/stream_params.h
${webrtc_SOURCE_DIR}/media/base/turn_utils.cc
${webrtc_SOURCE_DIR}/media/base/turn_utils.cc
${webrtc_SOURCE_DIR}/media/base/turn_utils.h
${webrtc_SOURCE_DIR}/media/base/video_common.cc
${webrtc_SOURCE_DIR}/media/base/video_common.h
${webrtc_SOURCE_DIR}/media/base/vp9_profile.cc
${webrtc_SOURCE_DIR}/media/base/vp9_profile.h
${webrtc_SOURCE_DIR}/modules/audio_device/include/audio_device_defines.h
${webrtc_SOURCE_DIR}/modules/audio_device/include/audio_device.h
${webrtc_SOURCE_DIR}/modules/audio_processing/include/audio_processing_statistics.cc
${webrtc_SOURCE_DIR}/modules/audio_processing/include/audio_processing_statistics.h
${webrtc_SOURCE_DIR}/modules/audio_processing/include/audio_processing.cc
${webrtc_SOURCE_DIR}/modules/audio_processing/include/audio_processing.h
${webrtc_SOURCE_DIR}/modules/audio_processing/include/config.cc
${webrtc_SOURCE_DIR}/modules/audio_processing/include/config.h
${webrtc_SOURCE_DIR}/modules/include/module_common_types.cc
${webrtc_SOURCE_DIR}/modules/include/module_common_types.h
${webrtc_SOURCE_DIR}/modules/include/module_fec_types.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/report_block_data.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/report_block_data.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/rtcp_statistics.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/rtp_header_extension_map.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/rtp_packet_sender.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/include/rtp_rtcp_defines.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/byte_io.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/app.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/app.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/common_header.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/common_header.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/remote_estimate.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtcp_packet/remote_estimate.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_dependency_descriptor_writer.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_dependency_descriptor_reader.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_dependency_descriptor_extension.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_dependency_descriptor_extension.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_generic_frame_descriptor.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_header_extension_map.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_header_extensions.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_header_extensions.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet_received.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet_received.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet_to_send.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet_to_send.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_packet.h
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_video_header.cc
${webrtc_SOURCE_DIR}/modules/rtp_rtcp/source/rtp_video_header.h
${webrtc_SOURCE_DIR}/modules/utility/include/process_thread.h
${webrtc_SOURCE_DIR}/modules/video_coding/codecs/h264/include/h264_globals.h
${webrtc_SOURCE_DIR}/modules/video_coding/codecs/interface/common_constants.h
${webrtc_SOURCE_DIR}/modules/video_coding/codecs/vp8/include/vp8_globals.h
${webrtc_SOURCE_DIR}/modules/video_coding/codecs/vp9/include/vp9_globals.h
${webrtc_SOURCE_DIR}/modules/video_coding/encoded_frame.cc
${webrtc_SOURCE_DIR}/modules/video_coding/encoded_frame.h
${webrtc_SOURCE_DIR}/modules/video_coding/include/video_codec_interface.cc
${webrtc_SOURCE_DIR}/modules/video_coding/include/video_codec_interface.h
${webrtc_SOURCE_DIR}/modules/video_coding/include/video_coding_defines.h
${webrtc_SOURCE_DIR}/modules/video_coding/include/video_error_codes.h
${webrtc_SOURCE_DIR}/p2p/base/async_stun_tcp_socket.cc
${webrtc_SOURCE_DIR}/p2p/base/async_stun_tcp_socket.h
${webrtc_SOURCE_DIR}/p2p/base/basic_ice_controller.cc
${webrtc_SOURCE_DIR}/p2p/base/basic_ice_controller.h
${webrtc_SOURCE_DIR}/p2p/base/basic_packet_socket_factory.cc
${webrtc_SOURCE_DIR}/p2p/base/basic_packet_socket_factory.cc
${webrtc_SOURCE_DIR}/p2p/base/basic_packet_socket_factory.h
${webrtc_SOURCE_DIR}/p2p/base/candidate_pair_interface.h
${webrtc_SOURCE_DIR}/p2p/base/connection_info.cc
${webrtc_SOURCE_DIR}/p2p/base/connection_info.h
${webrtc_SOURCE_DIR}/p2p/base/connection.cc
${webrtc_SOURCE_DIR}/p2p/base/connection.h
${webrtc_SOURCE_DIR}/p2p/base/dtls_transport_internal.cc
${webrtc_SOURCE_DIR}/p2p/base/dtls_transport_internal.h
${webrtc_SOURCE_DIR}/p2p/base/dtls_transport.cc
${webrtc_SOURCE_DIR}/p2p/base/dtls_transport.h
${webrtc_SOURCE_DIR}/p2p/base/ice_controller_factory_interface.h
${webrtc_SOURCE_DIR}/p2p/base/ice_controller_interface.cc
${webrtc_SOURCE_DIR}/p2p/base/ice_controller_interface.h
${webrtc_SOURCE_DIR}/p2p/base/ice_credentials_iterator.cc
${webrtc_SOURCE_DIR}/p2p/base/ice_credentials_iterator.h
${webrtc_SOURCE_DIR}/p2p/base/ice_transport_internal.cc
${webrtc_SOURCE_DIR}/p2p/base/ice_transport_internal.h
${webrtc_SOURCE_DIR}/p2p/base/p2p_constants.cc
${webrtc_SOURCE_DIR}/p2p/base/p2p_constants.h
${webrtc_SOURCE_DIR}/p2p/base/p2p_transport_channel_ice_field_trials.h
${webrtc_SOURCE_DIR}/p2p/base/p2p_transport_channel.cc
${webrtc_SOURCE_DIR}/p2p/base/p2p_transport_channel.cc
${webrtc_SOURCE_DIR}/p2p/base/p2p_transport_channel.h
${webrtc_SOURCE_DIR}/p2p/base/packet_transport_internal.cc
${webrtc_SOURCE_DIR}/p2p/base/packet_transport_internal.h
${webrtc_SOURCE_DIR}/p2p/base/port_allocator.cc
${webrtc_SOURCE_DIR}/p2p/base/port_allocator.h
${webrtc_SOURCE_DIR}/p2p/base/port_interface.cc
${webrtc_SOURCE_DIR}/p2p/base/port_interface.h
${webrtc_SOURCE_DIR}/p2p/base/port.cc
${webrtc_SOURCE_DIR}/p2p/base/port.h
${webrtc_SOURCE_DIR}/p2p/base/regathering_controller.cc
${webrtc_SOURCE_DIR}/p2p/base/regathering_controller.h
${webrtc_SOURCE_DIR}/p2p/base/stun_port.cc
${webrtc_SOURCE_DIR}/p2p/base/stun_port.h
${webrtc_SOURCE_DIR}/p2p/base/stun_request.cc
${webrtc_SOURCE_DIR}/p2p/base/stun_request.h
${webrtc_SOURCE_DIR}/p2p/base/tcp_port.cc
${webrtc_SOURCE_DIR}/p2p/base/tcp_port.h
${webrtc_SOURCE_DIR}/p2p/base/transport_description_factory.cc
${webrtc_SOURCE_DIR}/p2p/base/transport_description_factory.h
${webrtc_SOURCE_DIR}/p2p/base/transport_description.cc
${webrtc_SOURCE_DIR}/p2p/base/transport_description.h
${webrtc_SOURCE_DIR}/p2p/base/transport_info.h
${webrtc_SOURCE_DIR}/p2p/base/turn_port.cc
${webrtc_SOURCE_DIR}/p2p/base/turn_port.h
${webrtc_SOURCE_DIR}/p2p/base/udp_port.h
${webrtc_SOURCE_DIR}/p2p/client/basic_port_allocator.cc
${webrtc_SOURCE_DIR}/p2p/client/basic_port_allocator.cc
${webrtc_SOURCE_DIR}/p2p/client/basic_port_allocator.h
${webrtc_SOURCE_DIR}/p2p/client/relay_port_factory_interface.h
${webrtc_SOURCE_DIR}/p2p/client/turn_port_factory.cc
${webrtc_SOURCE_DIR}/p2p/client/turn_port_factory.h
${webrtc_SOURCE_DIR}/pc/channel_interface.h
${webrtc_SOURCE_DIR}/pc/channel_manager.cc
${webrtc_SOURCE_DIR}/pc/channel_manager.cc
${webrtc_SOURCE_DIR}/pc/channel_manager.h
${webrtc_SOURCE_DIR}/pc/channel.cc
${webrtc_SOURCE_DIR}/pc/channel.h
${webrtc_SOURCE_DIR}/pc/composite_data_channel_transport.cc
${webrtc_SOURCE_DIR}/pc/composite_data_channel_transport.h
${webrtc_SOURCE_DIR}/pc/composite_rtp_transport.cc
${webrtc_SOURCE_DIR}/pc/composite_rtp_transport.h
${webrtc_SOURCE_DIR}/pc/dtls_transport.cc
${webrtc_SOURCE_DIR}/pc/dtls_transport.h
${webrtc_SOURCE_DIR}/pc/ice_transport.cc
${webrtc_SOURCE_DIR}/pc/ice_transport.h
${webrtc_SOURCE_DIR}/pc/jsep_ice_candidate.cc
${webrtc_SOURCE_DIR}/pc/jsep_session_description.cc
#${webrtc_SOURCE_DIR}/pc/jsep_transport.cc
#${webrtc_SOURCE_DIR}/pc/jsep_transport.h
${webrtc_SOURCE_DIR}/pc/media_protocol_names.cc
${webrtc_SOURCE_DIR}/pc/media_protocol_names.h
${webrtc_SOURCE_DIR}/pc/media_session.cc
${webrtc_SOURCE_DIR}/pc/media_session.h
${webrtc_SOURCE_DIR}/pc/rtp_media_utils.cc
${webrtc_SOURCE_DIR}/pc/rtp_media_utils.h
${webrtc_SOURCE_DIR}/pc/rtp_transport_internal.h
${webrtc_SOURCE_DIR}/pc/rtp_transport.cc
${webrtc_SOURCE_DIR}/pc/rtp_transport.h
#${webrtc_SOURCE_DIR}/pc/sctp_data_channel_transport.cc
#${webrtc_SOURCE_DIR}/pc/sctp_data_channel_transport.h
${webrtc_SOURCE_DIR}/pc/sdp_serializer.cc
${webrtc_SOURCE_DIR}/pc/sdp_serializer.h
${webrtc_SOURCE_DIR}/pc/session_description.cc
${webrtc_SOURCE_DIR}/pc/session_description.h
${webrtc_SOURCE_DIR}/pc/simulcast_description.cc
${webrtc_SOURCE_DIR}/pc/simulcast_description.h
${webrtc_SOURCE_DIR}/pc/transport_stats.cc
${webrtc_SOURCE_DIR}/pc/transport_stats.h
${webrtc_SOURCE_DIR}/pc/used_ids.h
${webrtc_SOURCE_DIR}/pc/webrtc_sdp.cc
${webrtc_SOURCE_DIR}/pc/webrtc_sdp.h
${webrtc_SOURCE_DIR}/rtc_base/arraysize.h
${webrtc_SOURCE_DIR}/rtc_base/async_invoker_inl.h
${webrtc_SOURCE_DIR}/rtc_base/async_invoker.cc
${webrtc_SOURCE_DIR}/rtc_base/async_invoker.h
${webrtc_SOURCE_DIR}/rtc_base/async_packet_socket.cc
${webrtc_SOURCE_DIR}/rtc_base/async_packet_socket.h
${webrtc_SOURCE_DIR}/rtc_base/async_resolver_interface.cc
${webrtc_SOURCE_DIR}/rtc_base/async_resolver_interface.h
${webrtc_SOURCE_DIR}/rtc_base/async_socket.cc
${webrtc_SOURCE_DIR}/rtc_base/async_socket.h
${webrtc_SOURCE_DIR}/rtc_base/async_tcp_socket.cc
${webrtc_SOURCE_DIR}/rtc_base/async_tcp_socket.h
${webrtc_SOURCE_DIR}/rtc_base/async_udp_socket.cc
${webrtc_SOURCE_DIR}/rtc_base/async_udp_socket.h
${webrtc_SOURCE_DIR}/rtc_base/atomic_ops.h
${webrtc_SOURCE_DIR}/rtc_base/bind.h
${webrtc_SOURCE_DIR}/rtc_base/bit_buffer.cc
${webrtc_SOURCE_DIR}/rtc_base/buffer_queue.cc
${webrtc_SOURCE_DIR}/rtc_base/buffer_queue.h
${webrtc_SOURCE_DIR}/rtc_base/buffer.h
${webrtc_SOURCE_DIR}/rtc_base/byte_buffer.cc
${webrtc_SOURCE_DIR}/rtc_base/byte_buffer.h
${webrtc_SOURCE_DIR}/rtc_base/byte_order.h
${webrtc_SOURCE_DIR}/rtc_base/callback.h
${webrtc_SOURCE_DIR}/rtc_base/checks.cc
${webrtc_SOURCE_DIR}/rtc_base/checks.h
${webrtc_SOURCE_DIR}/rtc_base/constructor_magic.h
${webrtc_SOURCE_DIR}/rtc_base/copy_on_write_buffer.cc
${webrtc_SOURCE_DIR}/rtc_base/copy_on_write_buffer.h
${webrtc_SOURCE_DIR}/rtc_base/crc32.cc
${webrtc_SOURCE_DIR}/rtc_base/crc32.h
${webrtc_SOURCE_DIR}/rtc_base/critical_section.cc
${webrtc_SOURCE_DIR}/rtc_base/critical_section.h
${webrtc_SOURCE_DIR}/rtc_base/crypt_string.cc
${webrtc_SOURCE_DIR}/rtc_base/crypt_string.h
${webrtc_SOURCE_DIR}/rtc_base/deprecated/signal_thread.cc
${webrtc_SOURCE_DIR}/rtc_base/deprecated/signal_thread.h
${webrtc_SOURCE_DIR}/rtc_base/deprecation.h
${webrtc_SOURCE_DIR}/rtc_base/dscp.h
${webrtc_SOURCE_DIR}/rtc_base/event_tracer.cc
${webrtc_SOURCE_DIR}/rtc_base/event_tracer.cc
${webrtc_SOURCE_DIR}/rtc_base/event_tracer.h
${webrtc_SOURCE_DIR}/rtc_base/event.cc
${webrtc_SOURCE_DIR}/rtc_base/event.h
${webrtc_SOURCE_DIR}/rtc_base/experiments/field_trial_parser.cc
${webrtc_SOURCE_DIR}/rtc_base/experiments/field_trial_parser.h
${webrtc_SOURCE_DIR}/rtc_base/experiments/field_trial_units.cc
${webrtc_SOURCE_DIR}/rtc_base/experiments/field_trial_units.h
${webrtc_SOURCE_DIR}/rtc_base/experiments/struct_parameters_parser.cc
${webrtc_SOURCE_DIR}/rtc_base/experiments/struct_parameters_parser.h
${webrtc_SOURCE_DIR}/rtc_base/helpers.cc
${webrtc_SOURCE_DIR}/rtc_base/helpers.h
${webrtc_SOURCE_DIR}/rtc_base/http_common.cc
${webrtc_SOURCE_DIR}/rtc_base/http_common.cc
${webrtc_SOURCE_DIR}/rtc_base/http_common.h
${webrtc_SOURCE_DIR}/rtc_base/ip_address.cc
${webrtc_SOURCE_DIR}/rtc_base/ip_address.h
${webrtc_SOURCE_DIR}/rtc_base/location.cc
${webrtc_SOURCE_DIR}/rtc_base/location.h
${webrtc_SOURCE_DIR}/rtc_base/logging.cc
${webrtc_SOURCE_DIR}/rtc_base/logging.h
${webrtc_SOURCE_DIR}/rtc_base/mdns_responder_interface.h
${webrtc_SOURCE_DIR}/rtc_base/message_digest.cc
${webrtc_SOURCE_DIR}/rtc_base/message_digest.h
${webrtc_SOURCE_DIR}/rtc_base/message_handler.cc
${webrtc_SOURCE_DIR}/rtc_base/message_handler.h
${webrtc_SOURCE_DIR}/rtc_base/net_helper.cc
${webrtc_SOURCE_DIR}/rtc_base/net_helper.h
${webrtc_SOURCE_DIR}/rtc_base/net_helpers.cc
${webrtc_SOURCE_DIR}/rtc_base/net_helpers.h
${webrtc_SOURCE_DIR}/rtc_base/network_constants.cc
${webrtc_SOURCE_DIR}/rtc_base/network_constants.h
${webrtc_SOURCE_DIR}/rtc_base/network_monitor.cc
${webrtc_SOURCE_DIR}/rtc_base/network_monitor.h
${webrtc_SOURCE_DIR}/rtc_base/network_route.cc
${webrtc_SOURCE_DIR}/rtc_base/network_route.h
${webrtc_SOURCE_DIR}/rtc_base/network.cc
${webrtc_SOURCE_DIR}/rtc_base/network.h
${webrtc_SOURCE_DIR}/rtc_base/network/sent_packet.cc
${webrtc_SOURCE_DIR}/rtc_base/network/sent_packet.h
${webrtc_SOURCE_DIR}/rtc_base/null_socket_server.cc
${webrtc_SOURCE_DIR}/rtc_base/null_socket_server.h
${webrtc_SOURCE_DIR}/rtc_base/numerics/event_based_exponential_moving_average.cc
${webrtc_SOURCE_DIR}/rtc_base/numerics/event_based_exponential_moving_average.h
${webrtc_SOURCE_DIR}/rtc_base/numerics/safe_compare.h
${webrtc_SOURCE_DIR}/rtc_base/numerics/safe_conversions_impl.h
${webrtc_SOURCE_DIR}/rtc_base/numerics/safe_conversions.h
${webrtc_SOURCE_DIR}/rtc_base/numerics/safe_minmax.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_adapter.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_adapter.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_certificate.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_certificate.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_digest.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_digest.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_identity.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_identity.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_session_cache.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_session_cache.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_stream_adapter.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_stream_adapter.h
${webrtc_SOURCE_DIR}/rtc_base/openssl_utility.cc
${webrtc_SOURCE_DIR}/rtc_base/openssl_utility.h
${webrtc_SOURCE_DIR}/rtc_base/openssl.h
${webrtc_SOURCE_DIR}/rtc_base/physical_socket_server.cc
${webrtc_SOURCE_DIR}/rtc_base/physical_socket_server.h
${webrtc_SOURCE_DIR}/rtc_base/platform_thread_types.cc
${webrtc_SOURCE_DIR}/rtc_base/platform_thread_types.h
${webrtc_SOURCE_DIR}/rtc_base/platform_thread.cc
${webrtc_SOURCE_DIR}/rtc_base/platform_thread.cc
${webrtc_SOURCE_DIR}/rtc_base/platform_thread.h
${webrtc_SOURCE_DIR}/rtc_base/proxy_info.cc
${webrtc_SOURCE_DIR}/rtc_base/proxy_info.h
${webrtc_SOURCE_DIR}/rtc_base/rate_tracker.cc
${webrtc_SOURCE_DIR}/rtc_base/rate_tracker.h
${webrtc_SOURCE_DIR}/rtc_base/ref_count.h
${webrtc_SOURCE_DIR}/rtc_base/ref_counted_object.h
${webrtc_SOURCE_DIR}/rtc_base/ref_counter.h
${webrtc_SOURCE_DIR}/rtc_base/rtc_certificate.cc
${webrtc_SOURCE_DIR}/rtc_base/rtc_certificate.h
${webrtc_SOURCE_DIR}/rtc_base/sanitizer.h
${webrtc_SOURCE_DIR}/rtc_base/signal_thread.h
${webrtc_SOURCE_DIR}/rtc_base/socket_adapters.cc
${webrtc_SOURCE_DIR}/rtc_base/socket_adapters.h
${webrtc_SOURCE_DIR}/rtc_base/socket_address.cc
${webrtc_SOURCE_DIR}/rtc_base/socket_address.h
${webrtc_SOURCE_DIR}/rtc_base/socket_factory.h
${webrtc_SOURCE_DIR}/rtc_base/socket_server.h
${webrtc_SOURCE_DIR}/rtc_base/socket.cc
${webrtc_SOURCE_DIR}/rtc_base/socket.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_adapter.cc
${webrtc_SOURCE_DIR}/rtc_base/ssl_adapter.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_certificate.cc
${webrtc_SOURCE_DIR}/rtc_base/ssl_certificate.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_fingerprint.cc
${webrtc_SOURCE_DIR}/rtc_base/ssl_fingerprint.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_identity.cc
${webrtc_SOURCE_DIR}/rtc_base/ssl_identity.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_roots.h
${webrtc_SOURCE_DIR}/rtc_base/ssl_stream_adapter.cc
${webrtc_SOURCE_DIR}/rtc_base/ssl_stream_adapter.h
${webrtc_SOURCE_DIR}/rtc_base/stream.cc
${webrtc_SOURCE_DIR}/rtc_base/stream.h
${webrtc_SOURCE_DIR}/rtc_base/string_encode.cc
${webrtc_SOURCE_DIR}/rtc_base/string_encode.h
${webrtc_SOURCE_DIR}/rtc_base/string_to_number.cc
${webrtc_SOURCE_DIR}/rtc_base/string_to_number.h
${webrtc_SOURCE_DIR}/rtc_base/string_utils.cc
${webrtc_SOURCE_DIR}/rtc_base/string_utils.h
${webrtc_SOURCE_DIR}/rtc_base/stringize_macros.h
${webrtc_SOURCE_DIR}/rtc_base/strings/string_builder.cc
${webrtc_SOURCE_DIR}/rtc_base/strings/string_builder.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/mutex_critical_section.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/mutex.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/mutex.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_wrapper.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_wrapper.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/sequence_checker.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/sequence_checker.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/yield_policy.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/yield_policy.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/yield_policy.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/yield.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/yield.h
${webrtc_SOURCE_DIR}/rtc_base/system/arch.h
${webrtc_SOURCE_DIR}/rtc_base/system/file_wrapper.cc
${webrtc_SOURCE_DIR}/rtc_base/system/file_wrapper.h
${webrtc_SOURCE_DIR}/rtc_base/system/inline.h
${webrtc_SOURCE_DIR}/rtc_base/system/rtc_export.h
${webrtc_SOURCE_DIR}/rtc_base/system/unused.h
${webrtc_SOURCE_DIR}/rtc_base/system/warn_current_thread_is_deadlocked.h
${webrtc_SOURCE_DIR}/rtc_base/task_queue.cc
${webrtc_SOURCE_DIR}/rtc_base/task_queue.h
${webrtc_SOURCE_DIR}/rtc_base/task_utils/pending_task_safety_flag.cc
${webrtc_SOURCE_DIR}/rtc_base/task_utils/pending_task_safety_flag.h
${webrtc_SOURCE_DIR}/rtc_base/task_utils/to_queued_task.h
${webrtc_SOURCE_DIR}/rtc_base/third_party/base64/base64.cc
${webrtc_SOURCE_DIR}/rtc_base/third_party/base64/base64.h
${webrtc_SOURCE_DIR}/rtc_base/third_party/sigslot/sigslot.cc
${webrtc_SOURCE_DIR}/rtc_base/third_party/sigslot/sigslot.h
${webrtc_SOURCE_DIR}/rtc_base/thread_annotations.h
${webrtc_SOURCE_DIR}/rtc_base/thread_checker.h
${webrtc_SOURCE_DIR}/rtc_base/thread_message.h
${webrtc_SOURCE_DIR}/rtc_base/thread.cc
${webrtc_SOURCE_DIR}/rtc_base/thread.h
${webrtc_SOURCE_DIR}/rtc_base/time_utils.cc
${webrtc_SOURCE_DIR}/rtc_base/time_utils.h
${webrtc_SOURCE_DIR}/rtc_base/trace_event.h
${webrtc_SOURCE_DIR}/rtc_base/type_traits.h
${webrtc_SOURCE_DIR}/rtc_base/unique_id_generator.cc
${webrtc_SOURCE_DIR}/rtc_base/unique_id_generator.h
${webrtc_SOURCE_DIR}/rtc_base/units/unit_base.h
${webrtc_SOURCE_DIR}/rtc_base/weak_ptr.cc
${webrtc_SOURCE_DIR}/rtc_base/weak_ptr.h
${webrtc_SOURCE_DIR}/rtc_base/zero_memory.cc
${webrtc_SOURCE_DIR}/rtc_base/zero_memory.h
${webrtc_SOURCE_DIR}/system_wrappers/include/clock.h
${webrtc_SOURCE_DIR}/system_wrappers/include/field_trial.h
${webrtc_SOURCE_DIR}/system_wrappers/include/metrics.h
${webrtc_SOURCE_DIR}/system_wrappers/include/ntp_time.h
${webrtc_SOURCE_DIR}/system_wrappers/source/clock.cc
${webrtc_SOURCE_DIR}/system_wrappers/source/field_trial.cc
${webrtc_SOURCE_DIR}/system_wrappers/source/metrics.cc
)
if(WIN32)
target_sources(webrtc-lite PRIVATE
${webrtc_SOURCE_DIR}/api/task_queue/default_task_queue_factory_stdlib.cc
${webrtc_SOURCE_DIR}/rtc_base/task_queue_stdlib.cc
${webrtc_SOURCE_DIR}/rtc_base/task_queue_stdlib.h
${webrtc_SOURCE_DIR}/rtc_base/win32.cc
${webrtc_SOURCE_DIR}/rtc_base/win32.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_win.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_win.h
)
FILE(WRITE ${webrtc_SOURCE_DIR}/base/third_party/libevent/event.h
"#pragma once\n#include <event.h>\n"
)
target_link_libraries(webrtc-lite
ws2_32
crypt32
winmm
Secur32
Iphlpapi
)
else(WIN32)
target_sources(webrtc-lite PRIVATE
${webrtc_SOURCE_DIR}/api/task_queue/default_task_queue_factory_stdlib.cc
${webrtc_SOURCE_DIR}/rtc_base/task_queue_stdlib.cc
${webrtc_SOURCE_DIR}/rtc_base/task_queue_stdlib.h
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_posix.cc
${webrtc_SOURCE_DIR}/rtc_base/synchronization/rw_lock_posix.h
${webrtc_SOURCE_DIR}/rtc_base/ifaddrs_converter.cc
)
target_link_libraries(webrtc-lite
pthread
)
endif(WIN32)
protobuf_generate_cpp(WEBRTC_LITE_PROTO_SRCS WEBRTC_LITE_PROTO_HDRS
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log.proto
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log2.proto
)
target_compile_definitions(webrtc-lite PUBLIC WEBRTC_ENABLE_RTC_EVENT_LOG)
target_sources(webrtc-lite PRIVATE
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log.proto
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log2.proto
${WEBRTC_LITE_PROTO_SRCS} ${WEBRTC_LITE_PROTO_HDRS}
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/blob_encoding.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/blob_encoding.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/delta_encoding.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/delta_encoding.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/var_int.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/var_int.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_common.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_common.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log_impl.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log_impl.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.h
${webrtc_SOURCE_DIR}/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc
)
file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${webrtc_SOURCE_DIR})
file(WRITE "${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log.pb.h"
"#pragma once\n#include \"steamwebrtc/rtc_event_log.pb.h\"\n"
)
file(WRITE "${webrtc_SOURCE_DIR}/logging/rtc_event_log/rtc_event_log2.pb.h"
"#pragma once\n#include \"steamwebrtc/rtc_event_log2.pb.h\"\n"
)
#file(COPY "${CMAKE_CURRENT_BINARY_DIR}/rtc_event_log.pb.h" DESTINATION "${webrtc_SOURCE_DIR}/logging/rtc_event_log")
#file(COPY "${CMAKE_CURRENT_BINARY_DIR}/rtc_event_log2.pb.h" DESTINATION "${webrtc_SOURCE_DIR}/logging/rtc_event_log")
set_source_files_properties(${WEBRTC_LITE_PROTO_SRCS} ${WEBRTC_LITE_PROTO_HDRS} PROPERTIES GENERATED TRUE)
# webrtc can't build as shared library.
#target_compile_definitions(webrtc-lite PUBLIC WEBRTC_ENABLE_SYMBOL_EXPORT)
#target_compile_definitions(webrtc-lite PRIVATE WEBRTC_LIBRARY_IMPL)
target_link_directories(webrtc-lite PUBLIC
${CONAN_ABSEIL_ROOT}/lib
)
target_include_directories(webrtc-lite PUBLIC
${webrtc_SOURCE_DIR}
${webrtc_BUILD_DIR}
${Protobuf_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}/..
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(webrtc-lite
#protobuf::libprotobuf
${PROTOBUF_LIBRARIES}
OpenSSL::Crypto
OpenSSL::SSL
absl_time_zone
absl_time
absl_throw_delegate
absl_synchronization
absl_symbolize
absl_strings_internal
absl_strings
absl_str_format_internal
absl_status
absl_stacktrace
absl_spinlock_wait
absl_scoped_set_env
absl_raw_logging_internal
absl_raw_hash_set
absl_random_seed_sequences
absl_random_seed_gen_exception
absl_random_internal_seed_material
absl_random_internal_randen_slow
absl_random_internal_randen_hwaes_impl
absl_random_internal_randen_hwaes
absl_random_internal_randen
absl_random_internal_pool_urbg
absl_random_internal_distribution_test_util
absl_random_distributions
absl_periodic_sampler
absl_malloc_internal
absl_log_severity
absl_leak_check_disable
absl_leak_check
absl_int128
absl_hashtablez_sampler
absl_hash
absl_graphcycles_internal
absl_flags_usage_internal
absl_flags_usage
absl_flags_registry
absl_flags_program_name
absl_flags_parse
absl_flags_marshalling
absl_flags_internal
absl_flags_config
absl_flags
absl_failure_signal_handler
absl_exponential_biased
absl_examine_stack
absl_dynamic_annotations
absl_demangle_internal
absl_debugging_internal
absl_cord
absl_civil_time
absl_city
absl_base
absl_bad_variant_access
absl_bad_optional_access
absl_bad_any_cast_impl
)
set_target_properties(webrtc-lite PROPERTIES
CXX_STANDARD 14
)
set_property(TARGET webrtc-lite PROPERTY POSITION_INDEPENDENT_CODE ON)
include_directories(
${webrtc_SOURCE_DIR}/include/webrtc
)
set(STEAMWEBRTC_BUILD_TYPE SHARED)
if(STEAMWEBRTC_USE_STATIC_LIBS)
set(STEAMWEBRTC_BUILD_TYPE STATIC)
endif()
add_library(steamwebrtc ${STEAMWEBRTC_BUILD_TYPE}
"ice_session.h"
"steamwebrtc_internal.h"
"ice_session.cpp"
)
target_link_libraries(steamwebrtc
webrtc-lite
)
set_target_properties(steamwebrtc PROPERTIES
CXX_STANDARD 14
)
check_symbol_exists(strcpy_s "string.h" HAVE_STRCPY_S)
if(HAVE_STRCPY_S)
target_compile_definitions(steamwebrtc PRIVATE HAVE_STRCPY_S=1)
endif()
set_property(TARGET steamwebrtc PROPERTY POSITION_INDEPENDENT_CODE ON)
+64 -31
View File
@@ -3,31 +3,28 @@
#include "steamwebrtc_internal.h"
#include <mutex>
#include <string.h>
#include "rtc_base.h"
#include <string>
#include <absl/types/optional.h>
#include <absl/memory/memory.h>
#include <api/task_queue/default_task_queue_factory.h>
#include <api/task_queue/task_queue_factory.h>
#include <api/async_resolver_factory.h>
#include <api/turn_customizer.h>
#include <rtc_base/network_route.h>
#include <api/rtc_event_log/rtc_event_log_factory.h>
#include <rtc_base/bind.h>
#include <rtc_base/flags.h>
#ifdef WEBRTC_ANDROID
#include <rtc_base/physical_socket_server.h>
#include <rtc_base/ssl_adapter.h>
#else
#include <rtc_base/physicalsocketserver.h>
#include <rtc_base/ssladapter.h>
#endif
#include <api/jsep.h>
#include <logging/rtc_event_log/rtc_event_log_factory.h>
#ifdef WEBRTC_ANDROID
#include <p2p/base/p2p_transport_channel.h>
#include <p2p/base/basic_packet_socket_factory.h>
#include <p2p/client/basic_port_allocator.h>
#else
#include <p2p/base/p2ptransportchannel.h>
#include <p2p/base/basicpacketsocketfactory.h>
#include <p2p/client/basicportallocator.h>
#endif
#include <pc/webrtcsdp.h>
#include <pc/webrtc_sdp.h>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
@@ -41,18 +38,11 @@
#define strncasecmp _strnicmp
#endif
#ifdef WEBRTC_ANDROID
namespace rtc
{
typedef int64_t PacketTime;
}
#endif
extern "C"
{
extern void (*g_fnWriteEvent_setsockopt)( int slevel, int sopt, int value );
extern void (*g_fnWriteEvent_send)( int length );
extern void (*g_fnWriteEvent_sendto)( void *addr, int length );
static void (*g_fnWriteEvent_setsockopt)( int slevel, int sopt, int value ) = nullptr;
static void (*g_fnWriteEvent_send)( int length ) = nullptr;
static void (*g_fnWriteEvent_sendto)( void *addr, int length ) = nullptr;
}
extern "C"
@@ -103,6 +93,7 @@ private:
bool m_bShuttingDown = false;
IICESessionDelegate *m_pDelegate = nullptr;
std::unique_ptr<cricket::P2PTransportChannel> ice_transport_;
std::unique_ptr<webrtc::TaskQueueFactory> task_queue_factory;
std::unique_ptr<webrtc::RtcEventLogFactoryInterface> event_log_factory_;
std::unique_ptr<webrtc::RtcEventLog> event_log_;
std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;
@@ -120,7 +111,7 @@ private:
rtc::PacketTransportInternal* transport,
const char* data,
size_t size,
const rtc::PacketTime& packet_time,
const int64_t& packet_time,
int flags);
void OnSentPacket(rtc::PacketTransportInternal* transport, const rtc::SentPacket& sent_packet);
void OnReadyToSend(rtc::PacketTransportInternal* transport);
@@ -157,7 +148,8 @@ rtc::PhysicalSocketServer *CICESession::s_pSocketServer = nullptr;
// Constructor
//-----------------------------------------------------------------------------
CICESession::CICESession( IICESessionDelegate *pDelegate ) :
m_pDelegate( pDelegate )
m_pDelegate( pDelegate ),
task_queue_factory(webrtc::CreateDefaultTaskQueueFactory())
{
s_mutex.lock();
if ( ++s_nInstaneCount == 1 )
@@ -226,7 +218,7 @@ bool CICESession::BInitializeOnSocketThread( const ICESessionConfig &cfg )
m_nAllowedCandidateTypes = cfg.m_nCandidateTypes;
event_log_factory_ = webrtc::CreateRtcEventLogFactory();
event_log_factory_ = absl::make_unique<webrtc::RtcEventLogFactory>(task_queue_factory.get());
// Uhhhhhhh
auto encoding_type = webrtc::RtcEventLog::EncodingType::Legacy;
@@ -234,7 +226,7 @@ bool CICESession::BInitializeOnSocketThread( const ICESessionConfig &cfg )
// encoding_type = RtcEventLog::EncodingType::NewFormat;
event_log_ = event_log_factory_
? event_log_factory_->CreateRtcEventLog(encoding_type)
: absl::make_unique<webrtc::RtcEventLogNullImpl>();
: absl::make_unique<webrtc::RtcEventLogNull>();
default_network_manager_.reset(new rtc::BasicNetworkManager());
default_socket_factory_.reset(
@@ -301,7 +293,44 @@ bool CICESession::BInitializeOnSocketThread( const ICESessionConfig &cfg )
std::vector<cricket::RelayServerConfig> turn_servers;
if ( cfg.m_nCandidateTypes & (k_EICECandidate_Any_Reflexive|k_EICECandidate_Any_Relay) )
{
// FIXME list of turn servers here
candidate_filter |= cricket::CF_REFLEXIVE | cricket::CF_RELAY;
for ( int i = 0 ; i < cfg.m_nTurnServers ; ++i )
{
const ICESessionConfig::TurnServer *pTurn = &cfg.m_pTurnServers[i];
if ( !pTurn || !pTurn->m_pszHost || !pTurn->m_pszPwd || !pTurn->m_pszUsername ) {
continue;
}
const char *pszTurn = pTurn->m_pszHost;
// Skip "turn:" prefix, if present
if ( strncasecmp( pszTurn, "turn:", 5 ) == 0 )
pszTurn += 5;
rtc::SocketAddress address;
if ( !address.FromString( std::string( pszTurn ) ) )
{
m_pDelegate->Log( IICESessionDelegate::k_ELogPriorityError, "Invalid Turn server address '%s'\n", pszTurn );
return false;
}
if ( address.port() == 0 )
address.SetPort( 3478 ); // default STUN port
switch( pTurn->m_protocolType ) {
case k_EProtocolTypeUDP:
case k_EProtocolTypeTCP:
case k_EProtocolTypeSSLTCP:
case k_EProtocolTypeTLS:
default:
m_pDelegate->Log( IICESessionDelegate::k_ELogPriorityError, "Invalid Turn server protocol type '%d'\n", (int) pTurn->m_protocolType );
return false;
}
cricket::RelayServerConfig turn(address.hostname(), address.port(),
pTurn->m_pszUsername, pTurn->m_pszPwd, (cricket::ProtocolType) pTurn->m_protocolType);
turn_servers.push_back( turn );
}
}
port_allocator_->set_flags(port_allocator_flags_);
@@ -559,7 +588,11 @@ bool CICESession::GetRoute( EICECandidateType &eLocalCandidate, EICECandidateTyp
eLocalCandidate = GetICECandidateType( conn->local_candidate() );
eRemoteCandidate = GetICECandidateType( conn->remote_candidate() );
std::string remote_addr = conn->remote_candidate().address().ToString();
#ifdef HAVE_STRCPY_S
strcpy_s( szRemoteAddress, sizeof(CandidateAddressString), remote_addr.c_str() );
#else
strncpy( szRemoteAddress, remote_addr.c_str(), std::min(sizeof(CandidateAddressString) -1, remote_addr.size()) );
#endif
return eLocalCandidate != k_EICECandidate_Invalid && eRemoteCandidate != k_EICECandidate_Invalid && szRemoteAddress[0] != '\0';
}
@@ -612,7 +645,7 @@ void CICESession::OnReadPacket(
rtc::PacketTransportInternal* transport,
const char* data,
size_t size,
const rtc::PacketTime& packet_time,
const int64_t& packet_time,
int flags
) {
m_pDelegate->OnData( data, size );
+8
View File
@@ -40,6 +40,13 @@ enum EICECandidateType : int
k_EICECandidate_IPv6_Reflexive = 0x800,
};
enum EProtocolType {
k_EProtocolTypeUDP,
k_EProtocolTypeTCP,
k_EProtocolTypeSSLTCP, // Pseudo-TLS.
k_EProtocolTypeTLS,
};
constexpr int k_EICECandidate_Any_Relay = k_EICECandidate_IPv4_Relay | k_EICECandidate_IPv6_Relay;
constexpr int k_EICECandidate_Any_HostPrivate = k_EICECandidate_IPv4_HostPrivate | k_EICECandidate_IPv6_HostPrivate_Unsupported;
constexpr int k_EICECandidate_Any_HostPublic = k_EICECandidate_IPv4_HostPublic | k_EICECandidate_IPv6_HostPublic;
@@ -122,6 +129,7 @@ struct ICESessionConfig
const char *m_pszHost = nullptr;
const char *m_pszUsername = nullptr;
const char *m_pszPwd = nullptr;
const EProtocolType m_protocolType = k_EProtocolTypeUDP;
};
EICERole m_eRole = k_EICERole_Unknown;
+25 -6
View File
@@ -1,13 +1,32 @@
//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
#pragma once
#if defined(_WIN32)
# define STEAMWEBRTC_DECLSPEC __declspec(dllexport)
# else
# if defined(__GNUC__) && __GNUC__ >= 4
# define STEAMWEBRTC_DECLSPEC __attribute__ ((visibility("default")))
#if defined(STEAMWEBRTC_USE_STATIC_LIBS)
# define STEAMWEBRTC_DECLSPEC
#else
# if defined(_WIN32)
# define STEAMWEBRTC_DECLSPEC __declspec(dllexport)
# else
# define STEAMWEBRTC_DECLSPEC
# if defined(__GNUC__) && __GNUC__ >= 4
# define STEAMWEBRTC_DECLSPEC __attribute__ ((visibility("default")))
# else
# define STEAMWEBRTC_DECLSPEC
# endif
# endif
#endif
#ifdef WIN32
# define WEBRTC_WIN 1
#elif __linux__
# define WEBRTC_LINUX 1
# define WEBRTC_POSIX 1
#elif __APPLE__
# include "TargetConditionals.h"
# if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR
# define WEBRTC_MAC 1
# elif TARGET_OS_IPHONE
# define WEBRTC_MAC 1
# else
# define WEBRTC_MAC 1
# endif
#endif
@@ -443,6 +443,9 @@ void CSteamNetworkConnectionP2P::CheckInitICE()
return;
}
#ifdef STEAMWEBRTC_USE_STATIC_LIBS
g_SteamNetworkingSockets_CreateICESessionFunc = (CreateICESession_t)CreateWebRTCICESession;
#else
// No ICE factory?
if ( !g_SteamNetworkingSockets_CreateICESessionFunc )
{
@@ -454,18 +457,41 @@ void CSteamNetworkConnectionP2P::CheckInitICE()
tried = true;
SteamDatagramTransportLock::SetLongLockWarningThresholdMS( "LoadICEDll", 500 );
#if defined( _WIN32 )
HMODULE h = ::LoadLibraryA( "steamwebrtc.dll" );
if ( h != NULL )
{
g_SteamNetworkingSockets_CreateICESessionFunc = (CreateICESession_t)::GetProcAddress( h, "CreateWebRTCICESession" );
}
//#elif defined( OSX ) || defined( IOS ) || defined( TVOS )
// pszModule = "libsteamwebrtc.dylib";
//#elif defined( LINUX ) || defined( ANDROID )
// pszModule = "libsteamwebrtc.so";
//#else
// #error Need steamwebrtc for this platform
#elif defined( OSX ) || defined( IOS ) || defined( TVOS )
const char* pszModule = "libsteamwebrtc.dylib";
void* h = dlopen(pszModule, RTLD_LAZY);
if ( h != NULL )
{
g_SteamNetworkingSockets_CreateICESessionFunc = (CreateICESession_t)dlsym( h, "CreateWebRTCICESession" );
}
if ( h == NULL )
{
SteamNetworkingErrMsg errMsg;
V_sprintf_safe( errMsg, "ICE not enabled. Failed to open shared object : %s", dlerror() );
ICEFailed( k_nICECloseCode_Local_NotCompiled, errMsg );
}
#elif defined( LINUX ) || defined( ANDROID )
const char* pszModule = "libsteamwebrtc.dylib";
void* h = dlopen(pszModule, RTLD_LAZY);
if ( h != NULL )
{
g_SteamNetworkingSockets_CreateICESessionFunc = (CreateICESession_t)dlsym( h, "CreateWebRTCICESession" );
}
if ( h == NULL )
{
SteamNetworkingErrMsg errMsg;
V_sprintf_safe( errMsg, "ICE not enabled. Failed to open shared object : %s", dlerror() );
ICEFailed( k_nICECloseCode_Local_NotCompiled, errMsg );
}
#else
#error Need steamwebrtc for this platform
#endif
}
#endif
@@ -475,6 +501,7 @@ void CSteamNetworkConnectionP2P::CheckInitICE()
return;
}
}
#endif
SteamNetworkingMicroseconds usecNow = SteamNetworkingSockets_GetLocalTimestamp();