From 616d4785646d04214cd4d62aae53a84b1afb4935 Mon Sep 17 00:00:00 2001 From: atraczyk <andreastraczyk@gmail.com> Date: Fri, 9 Feb 2018 14:25:41 -0500 Subject: [PATCH] build: update visual studio project and fix some build issues - adds rfc6062 patch for pjsip 2.5.5 for uwp - updates files built by the vs project (adds some related to file transfer, removes those that are deprecated) - corrects native build problems - simplifies project layout - links the minimal client with libdl(temp fix) Change-Id: Ib82b0470f568cb79dc1f4353cb5a5ef20de93033 --- MSVC/ring-daemon.vcxproj | 253 +++-- MSVC/ring-daemon.vcxproj.filters | 1051 ++++++++++---------- bin/Makefile.am | 2 +- contrib/build_all_uwp.bat | 9 - contrib/src/pjproject/fetch_and_patch.bat | 1 + contrib/src/pjproject/pj_uwp_rfc6062.patch | 907 +++++++++++++++++ src/peer_connection.cpp | 4 +- 7 files changed, 1554 insertions(+), 673 deletions(-) create mode 100644 contrib/src/pjproject/pj_uwp_rfc6062.patch diff --git a/MSVC/ring-daemon.vcxproj b/MSVC/ring-daemon.vcxproj index beffd2867a..aa789f3f79 100644 --- a/MSVC/ring-daemon.vcxproj +++ b/MSVC/ring-daemon.vcxproj @@ -533,6 +533,116 @@ <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration> </Lib> </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\src\account.cpp" /> + <ClCompile Include="..\src\account_factory.cpp" /> + <ClCompile Include="..\src\archiver.cpp" /> + <ClCompile Include="..\src\base64.cpp" /> + <ClCompile Include="..\src\buildinfo.cpp" /> + <ClCompile Include="..\src\call.cpp" /> + <ClCompile Include="..\src\call_factory.cpp" /> + <ClCompile Include="..\src\client\callmanager.cpp" /> + <ClCompile Include="..\src\client\configurationmanager.cpp" /> + <ClCompile Include="..\src\client\datatransfer.cpp" /> + <ClCompile Include="..\src\client\presencemanager.cpp" /> + <ClCompile Include="..\src\client\ring_signal.cpp" /> + <ClCompile Include="..\src\client\videomanager.cpp" /> + <ClCompile Include="..\src\conference.cpp" /> + <ClCompile Include="..\src\config\yamlparser.cpp" /> + <ClCompile Include="..\src\data_transfer.cpp" /> + <ClCompile Include="..\src\dlfcn.c" /> + <ClCompile Include="..\src\fileutils.cpp" /> + <ClCompile Include="..\src\ftp_server.cpp" /> + <ClCompile Include="..\src\hooks\urlhook.cpp" /> + <ClCompile Include="..\src\ice_transport.cpp" /> + <ClCompile Include="..\src\im\instant_messaging.cpp" /> + <ClCompile Include="..\src\im\message_engine.cpp" /> + <ClCompile Include="..\src\ip_utils.cpp" /> + <ClCompile Include="..\src\logger.cpp" /> + <ClCompile Include="..\src\manager.cpp" /> + <ClCompile Include="..\src\media\audio\audiobuffer.cpp" /> + <ClCompile Include="..\src\media\audio\audiolayer.cpp" /> + <ClCompile Include="..\src\media\audio\audioloop.cpp" /> + <ClCompile Include="..\src\media\audio\audiorecord.cpp" /> + <ClCompile Include="..\src\media\audio\audiorecorder.cpp" /> + <ClCompile Include="..\src\media\audio\audio_rtp_session.cpp" /> + <ClCompile Include="..\src\media\audio\dcblocker.cpp" /> + <ClCompile Include="..\src\media\audio\dsp.cpp" /> + <ClCompile Include="..\src\media\audio\portaudio\portaudiolayer.cpp" /> + <ClCompile Include="..\src\media\audio\resampler.cpp" /> + <ClCompile Include="..\src\media\audio\ringbuffer.cpp" /> + <ClCompile Include="..\src\media\audio\ringbufferpool.cpp" /> + <ClCompile Include="..\src\media\audio\sound\audiofile.cpp" /> + <ClCompile Include="..\src\media\audio\sound\dtmf.cpp" /> + <ClCompile Include="..\src\media\audio\sound\dtmfgenerator.cpp" /> + <ClCompile Include="..\src\media\audio\sound\tone.cpp" /> + <ClCompile Include="..\src\media\audio\sound\tonelist.cpp" /> + <ClCompile Include="..\src\media\audio\tonecontrol.cpp" /> + <ClCompile Include="..\src\media\libav_utils.cpp" /> + <ClCompile Include="..\src\media\media_buffer.cpp" /> + <ClCompile Include="..\src\media\media_codec.cpp" /> + <ClCompile Include="..\src\media\media_decoder.cpp" /> + <ClCompile Include="..\src\media\media_encoder.cpp" /> + <ClCompile Include="..\src\media\media_io_handle.cpp" /> + <ClCompile Include="..\src\media\recordable.cpp" /> + <ClCompile Include="..\src\media\socket_pair.cpp" /> + <ClCompile Include="..\src\media\srtp.c" /> + <ClCompile Include="..\src\media\system_codec_container.cpp" /> + <ClCompile Include="..\src\media\video\accel.cpp"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\src\media\video\sinkclient.cpp" /> + <ClCompile Include="..\src\media\video\uwpvideo\video_device_impl.cpp" /> + <ClCompile Include="..\src\media\video\uwpvideo\video_device_monitor_impl.cpp" /> + <ClCompile Include="..\src\media\video\video_base.cpp" /> + <ClCompile Include="..\src\media\video\video_device_monitor.cpp" /> + <ClCompile Include="..\src\media\video\video_input.cpp" /> + <ClCompile Include="..\src\media\video\video_mixer.cpp" /> + <ClCompile Include="..\src\media\video\video_receive_thread.cpp" /> + <ClCompile Include="..\src\media\video\video_rtp_session.cpp" /> + <ClCompile Include="..\src\media\video\video_scaler.cpp" /> + <ClCompile Include="..\src\media\video\video_sender.cpp" /> + <ClCompile Include="..\src\peer_connection.cpp" /> + <ClCompile Include="..\src\preferences.cpp" /> + <ClCompile Include="..\src\ringdht\accountarchive.cpp" /> + <ClCompile Include="..\src\ringdht\eth\libdevcore\Common.cpp" /> + <ClCompile Include="..\src\ringdht\eth\libdevcore\CommonData.cpp" /> + <ClCompile Include="..\src\ringdht\eth\libdevcore\FixedHash.cpp" /> + <ClCompile Include="..\src\ringdht\eth\libdevcore\SHA3.cpp" /> + <ClCompile Include="..\src\ringdht\eth\libdevcrypto\Common.cpp" /> + <ClCompile Include="..\src\ringdht\namedirectory.cpp" /> + <ClCompile Include="..\src\ringdht\p2p.cpp" /> + <ClCompile Include="..\src\ringdht\ringaccount.cpp" /> + <ClCompile Include="..\src\ringdht\sips_transport_ice.cpp" /> + <ClCompile Include="..\src\ring_api.cpp" /> + <ClCompile Include="..\src\security\certstore.cpp" /> + <ClCompile Include="..\src\security\diffie-hellman.cpp" /> + <ClCompile Include="..\src\security\memory.cpp" /> + <ClCompile Include="..\src\security\tlsvalidator.cpp" /> + <ClCompile Include="..\src\security\tls_session.cpp" /> + <ClCompile Include="..\src\sip\pattern.cpp" /> + <ClCompile Include="..\src\sip\pres_sub_client.cpp" /> + <ClCompile Include="..\src\sip\pres_sub_server.cpp" /> + <ClCompile Include="..\src\sip\sdes_negotiator.cpp" /> + <ClCompile Include="..\src\sip\sdp.cpp" /> + <ClCompile Include="..\src\sip\sipaccount.cpp" /> + <ClCompile Include="..\src\sip\sipaccountbase.cpp" /> + <ClCompile Include="..\src\sip\sipcall.cpp" /> + <ClCompile Include="..\src\sip\sippresence.cpp" /> + <ClCompile Include="..\src\sip\siptransport.cpp" /> + <ClCompile Include="..\src\sip\sipvoiplink.cpp" /> + <ClCompile Include="..\src\sip\sip_utils.cpp" /> + <ClCompile Include="..\src\smartools.cpp" /> + <ClCompile Include="..\src\string_utils.cpp" /> + <ClCompile Include="..\src\threadloop.cpp" /> + <ClCompile Include="..\src\thread_pool.cpp" /> + <ClCompile Include="..\src\turn_transport.cpp" /> + <ClCompile Include="..\src\upnp\upnp_context.cpp" /> + <ClCompile Include="..\src\upnp\upnp_control.cpp" /> + <ClCompile Include="..\src\upnp\upnp_igd.cpp" /> + <ClCompile Include="..\src\utf8_utils.cpp" /> + <ClCompile Include="..\src\winsyslog.c" /> + </ItemGroup> <ItemGroup> <ClInclude Include="..\src\account.h" /> <ClInclude Include="..\src\account_factory.h" /> @@ -542,28 +652,30 @@ <ClInclude Include="..\src\base64.h" /> <ClInclude Include="..\src\call.h" /> <ClInclude Include="..\src\call_factory.h" /> + <ClInclude Include="..\src\channel.h" /> <ClInclude Include="..\src\client\ring_signal.h" /> <ClInclude Include="..\src\client\videomanager.h" /> <ClInclude Include="..\src\compiler_intrinsics.h" /> <ClInclude Include="..\src\conference.h" /> <ClInclude Include="..\src\config\serializable.h" /> <ClInclude Include="..\src\config\yamlparser.h" /> - <ClInclude Include="..\src\dirent.h" /> - <ClInclude Include="..\src\dlfcn.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClInclude> + <ClInclude Include="..\src\data_transfer.h" /> + <ClInclude Include="..\src\dlfcn.h" /> <ClInclude Include="..\src\dring\account_const.h" /> <ClInclude Include="..\src\dring\callmanager_interface.h" /> <ClInclude Include="..\src\dring\call_const.h" /> <ClInclude Include="..\src\dring\configurationmanager_interface.h" /> + <ClInclude Include="..\src\dring\datatransfer_interface.h" /> <ClInclude Include="..\src\dring\dring.h" /> <ClInclude Include="..\src\dring\media_const.h" /> <ClInclude Include="..\src\dring\presencemanager_interface.h" /> + <ClInclude Include="..\src\dring\presence_const.h" /> <ClInclude Include="..\src\dring\security_const.h" /> <ClInclude Include="..\src\dring\videomanager_interface.h" /> <ClInclude Include="..\src\enumclass_utils.h" /> <ClInclude Include="..\src\fileutils.h" /> + <ClInclude Include="..\src\ftp_server.h" /> + <ClInclude Include="..\src\generic_io.h" /> <ClInclude Include="..\src\hooks\urlhook.h" /> <ClInclude Include="..\src\ice_socket.h" /> <ClInclude Include="..\src\ice_transport.h" /> @@ -591,6 +703,7 @@ <ClInclude Include="..\src\media\audio\sound\tone.h" /> <ClInclude Include="..\src\media\audio\sound\tonelist.h" /> <ClInclude Include="..\src\media\audio\tonecontrol.h" /> + <ClInclude Include="..\src\media\decoder_finder.h" /> <ClInclude Include="..\src\media\libav_deps.h" /> <ClInclude Include="..\src\media\libav_utils.h" /> <ClInclude Include="..\src\media\media_buffer.h" /> @@ -604,6 +717,9 @@ <ClInclude Include="..\src\media\socket_pair.h" /> <ClInclude Include="..\src\media\srtp.h" /> <ClInclude Include="..\src\media\system_codec_container.h" /> + <ClInclude Include="..\src\media\video\accel.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">true</ExcludedFromBuild> + </ClInclude> <ClInclude Include="..\src\media\video\shm_header.h" /> <ClInclude Include="..\src\media\video\sinkclient.h" /> <ClInclude Include="..\src\media\video\video_base.h" /> @@ -616,14 +732,7 @@ <ClInclude Include="..\src\media\video\video_scaler.h" /> <ClInclude Include="..\src\media\video\video_sender.h" /> <ClInclude Include="..\src\noncopyable.h" /> - <ClInclude Include="..\src\plugin_loader.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\src\plugin_manager.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClInclude> + <ClInclude Include="..\src\peer_connection.h" /> <ClInclude Include="..\src\preferences.h" /> <ClInclude Include="..\src\rational.h" /> <ClInclude Include="..\src\registration_states.h" /> @@ -637,10 +746,10 @@ <ClInclude Include="..\src\ringdht\eth\libdevcore\vector_ref.h" /> <ClInclude Include="..\src\ringdht\eth\libdevcrypto\Common.h" /> <ClInclude Include="..\src\ringdht\namedirectory.h" /> + <ClInclude Include="..\src\ringdht\p2p.h" /> <ClInclude Include="..\src\ringdht\ringaccount.h" /> <ClInclude Include="..\src\ringdht\ringcontact.h" /> <ClInclude Include="..\src\ringdht\sips_transport_ice.h" /> - <ClInclude Include="..\src\ring_plugin.h" /> <ClInclude Include="..\src\ring_types.h" /> <ClInclude Include="..\src\rw_mutex.h" /> <ClInclude Include="..\src\security\certstore.h" /> @@ -664,126 +773,16 @@ <ClInclude Include="..\src\string_utils.h" /> <ClInclude Include="..\src\threadloop.h" /> <ClInclude Include="..\src\thread_pool.h" /> + <ClInclude Include="..\src\turn_transport.h" /> <ClInclude Include="..\src\upnp\upnp_context.h" /> <ClInclude Include="..\src\upnp\upnp_control.h" /> <ClInclude Include="..\src\upnp\upnp_igd.h" /> <ClInclude Include="..\src\utf8_utils.h" /> + <ClInclude Include="..\src\windirent.h" /> <ClInclude Include="..\src\winsyslog.h" /> - <ClInclude Include="config.h" /> - <ClInclude Include="sys_time.h" /> - <ClInclude Include="unistd.h" /> </ItemGroup> <ItemGroup> - <ClCompile Include="..\src\account.cpp" /> - <ClCompile Include="..\src\account_factory.cpp" /> - <ClCompile Include="..\src\archiver.cpp" /> - <ClCompile Include="..\src\base64.cpp" /> - <ClCompile Include="..\src\buildinfo.cpp" /> - <ClCompile Include="..\src\call.cpp" /> - <ClCompile Include="..\src\call_factory.cpp" /> - <ClCompile Include="..\src\client\callmanager.cpp" /> - <ClCompile Include="..\src\client\configurationmanager.cpp" /> - <ClCompile Include="..\src\client\presencemanager.cpp" /> - <ClCompile Include="..\src\client\ring_signal.cpp" /> - <ClCompile Include="..\src\client\videomanager.cpp" /> - <ClCompile Include="..\src\conference.cpp" /> - <ClCompile Include="..\src\config\yamlparser.cpp" /> - <ClCompile Include="..\src\dlfcn.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\src\fileutils.cpp" /> - <ClCompile Include="..\src\hooks\urlhook.cpp" /> - <ClCompile Include="..\src\ice_transport.cpp" /> - <ClCompile Include="..\src\im\instant_messaging.cpp" /> - <ClCompile Include="..\src\im\message_engine.cpp" /> - <ClCompile Include="..\src\ip_utils.cpp" /> - <ClCompile Include="..\src\logger.cpp" /> - <ClCompile Include="..\src\manager.cpp" /> - <ClCompile Include="..\src\media\audio\audiobuffer.cpp" /> - <ClCompile Include="..\src\media\audio\audiolayer.cpp" /> - <ClCompile Include="..\src\media\audio\audioloop.cpp" /> - <ClCompile Include="..\src\media\audio\audiorecord.cpp" /> - <ClCompile Include="..\src\media\audio\audiorecorder.cpp" /> - <ClCompile Include="..\src\media\audio\audio_rtp_session.cpp" /> - <ClCompile Include="..\src\media\audio\dcblocker.cpp" /> - <ClCompile Include="..\src\media\audio\dsp.cpp" /> - <ClCompile Include="..\src\media\audio\portaudio\portaudiolayer.cpp" /> - <ClCompile Include="..\src\media\audio\resampler.cpp" /> - <ClCompile Include="..\src\media\audio\ringbuffer.cpp" /> - <ClCompile Include="..\src\media\audio\ringbufferpool.cpp" /> - <ClCompile Include="..\src\media\audio\sound\audiofile.cpp" /> - <ClCompile Include="..\src\media\audio\sound\dtmf.cpp" /> - <ClCompile Include="..\src\media\audio\sound\dtmfgenerator.cpp" /> - <ClCompile Include="..\src\media\audio\sound\tone.cpp" /> - <ClCompile Include="..\src\media\audio\sound\tonelist.cpp" /> - <ClCompile Include="..\src\media\audio\tonecontrol.cpp" /> - <ClCompile Include="..\src\media\libav_utils.cpp" /> - <ClCompile Include="..\src\media\media_buffer.cpp" /> - <ClCompile Include="..\src\media\media_codec.cpp" /> - <ClCompile Include="..\src\media\media_decoder.cpp" /> - <ClCompile Include="..\src\media\media_encoder.cpp" /> - <ClCompile Include="..\src\media\media_io_handle.cpp" /> - <ClCompile Include="..\src\media\recordable.cpp" /> - <ClCompile Include="..\src\media\socket_pair.cpp" /> - <ClCompile Include="..\src\media\srtp.c" /> - <ClCompile Include="..\src\media\system_codec_container.cpp" /> - <ClCompile Include="..\src\media\video\sinkclient.cpp" /> - <ClCompile Include="..\src\media\video\uwpvideo\video_device_impl.cpp" /> - <ClCompile Include="..\src\media\video\uwpvideo\video_device_monitor_impl.cpp" /> - <ClCompile Include="..\src\media\video\video_base.cpp" /> - <ClCompile Include="..\src\media\video\video_device_monitor.cpp" /> - <ClCompile Include="..\src\media\video\video_input.cpp" /> - <ClCompile Include="..\src\media\video\video_mixer.cpp" /> - <ClCompile Include="..\src\media\video\video_receive_thread.cpp" /> - <ClCompile Include="..\src\media\video\video_rtp_session.cpp" /> - <ClCompile Include="..\src\media\video\video_scaler.cpp" /> - <ClCompile Include="..\src\media\video\video_sender.cpp" /> - <ClCompile Include="..\src\plugin_loader_dl.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\src\plugin_manager.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLib|x64'">false</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='w32lib|x64'">false</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\src\preferences.cpp" /> - <ClCompile Include="..\src\ringdht\accountarchive.cpp" /> - <ClCompile Include="..\src\ringdht\eth\libdevcore\Common.cpp" /> - <ClCompile Include="..\src\ringdht\eth\libdevcore\CommonData.cpp" /> - <ClCompile Include="..\src\ringdht\eth\libdevcore\FixedHash.cpp" /> - <ClCompile Include="..\src\ringdht\eth\libdevcore\SHA3.cpp" /> - <ClCompile Include="..\src\ringdht\eth\libdevcrypto\Common.cpp" /> - <ClCompile Include="..\src\ringdht\namedirectory.cpp" /> - <ClCompile Include="..\src\ringdht\ringaccount.cpp" /> - <ClCompile Include="..\src\ringdht\sips_transport_ice.cpp" /> - <ClCompile Include="..\src\ring_api.cpp" /> - <ClCompile Include="..\src\security\certstore.cpp" /> - <ClCompile Include="..\src\security\diffie-hellman.cpp" /> - <ClCompile Include="..\src\security\memory.cpp" /> - <ClCompile Include="..\src\security\tlsvalidator.cpp" /> - <ClCompile Include="..\src\security\tls_session.cpp" /> - <ClCompile Include="..\src\sip\pattern.cpp" /> - <ClCompile Include="..\src\sip\pres_sub_client.cpp" /> - <ClCompile Include="..\src\sip\pres_sub_server.cpp" /> - <ClCompile Include="..\src\sip\sdes_negotiator.cpp" /> - <ClCompile Include="..\src\sip\sdp.cpp" /> - <ClCompile Include="..\src\sip\sipaccount.cpp" /> - <ClCompile Include="..\src\sip\sipaccountbase.cpp" /> - <ClCompile Include="..\src\sip\sipcall.cpp" /> - <ClCompile Include="..\src\sip\sippresence.cpp" /> - <ClCompile Include="..\src\sip\siptransport.cpp" /> - <ClCompile Include="..\src\sip\sipvoiplink.cpp" /> - <ClCompile Include="..\src\sip\sip_utils.cpp" /> - <ClCompile Include="..\src\smartools.cpp" /> - <ClCompile Include="..\src\string_utils.cpp" /> - <ClCompile Include="..\src\threadloop.cpp" /> - <ClCompile Include="..\src\thread_pool.cpp" /> - <ClCompile Include="..\src\upnp\upnp_context.cpp" /> - <ClCompile Include="..\src\upnp\upnp_control.cpp" /> - <ClCompile Include="..\src\upnp\upnp_igd.cpp" /> - <ClCompile Include="..\src\utf8_utils.cpp" /> - <ClCompile Include="..\src\winsyslog.c" /> + <None Include="..\src\ringdht\eth\libdevcore\Makefile.am" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/MSVC/ring-daemon.vcxproj.filters b/MSVC/ring-daemon.vcxproj.filters index f1741d3f35..dc467b64a8 100644 --- a/MSVC/ring-daemon.vcxproj.filters +++ b/MSVC/ring-daemon.vcxproj.filters @@ -1,51 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <Filter Include="Header Files"> - <UniqueIdentifier>{f736d6c2-8f80-4157-89a4-4d08a50c8d08}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\client"> - <UniqueIdentifier>{67e7684e-f8ef-4874-abec-f3418e7c1f1f}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\config"> - <UniqueIdentifier>{13b91865-0ca1-4d2f-a3d3-5b79b0ff31f5}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\dring"> - <UniqueIdentifier>{98145e0c-2c23-47fc-8f64-4a38feaf3601}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\hooks"> - <UniqueIdentifier>{b438ed7e-41d8-4b88-a2b3-551fe66915a0}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\im"> - <UniqueIdentifier>{eaf1e622-510d-4b77-97c5-88cef96ac97d}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\media"> - <UniqueIdentifier>{303dc61e-fe87-4fe8-99e9-79a11ce3d13b}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\media\audio"> - <UniqueIdentifier>{6baf2769-c547-4afc-b51b-e853493d688c}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\media\audio\sound"> - <UniqueIdentifier>{661b0aa7-98ea-4b22-a3c1-5bb4d88472d0}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\media\audio\portaudio"> - <UniqueIdentifier>{97250dbc-5ee0-4195-8b9a-f0abefea57af}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\media\video"> - <UniqueIdentifier>{250d421b-dc17-448b-a691-41b1c17e0b43}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\ringdht"> - <UniqueIdentifier>{6661a3cb-975d-4b0f-b4ea-2e987f122fdb}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\security"> - <UniqueIdentifier>{cb9596a1-62a9-42c8-9e1a-1e2ff3919fa2}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sip"> - <UniqueIdentifier>{0a742ba2-c5f4-4ccf-a32a-fcf4b2fe842e}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\upnp"> - <UniqueIdentifier>{72c623e2-31b4-4673-9a0a-0fdd84b9cf16}</UniqueIdentifier> - </Filter> <Filter Include="Source Files"> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> @@ -89,9 +44,6 @@ <Filter Include="Source Files\upnp"> <UniqueIdentifier>{4dc7f6c7-24a7-4741-a626-0fa5dbaa4461}</UniqueIdentifier> </Filter> - <Filter Include="Header Files\media\video\uwpvideo"> - <UniqueIdentifier>{52e3514f-c7d8-45d9-a75f-a82e34ec8590}</UniqueIdentifier> - </Filter> <Filter Include="Source Files\media\video\uwpvideo"> <UniqueIdentifier>{13ad5c25-d522-4562-8bab-f322fdd2a243}</UniqueIdentifier> </Filter> @@ -104,484 +56,11 @@ <Filter Include="Source Files\ringdht\eth\libdevcrypto"> <UniqueIdentifier>{c9a4b0a8-0da9-41d6-bb80-3fc1d31a2986}</UniqueIdentifier> </Filter> - <Filter Include="Header Files\ringdht\eth"> - <UniqueIdentifier>{db320a5a-b2ac-4504-8c10-9a87548eaf0c}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\ringdht\eth\libdevcore"> - <UniqueIdentifier>{ddb27107-f5f8-43ad-a7c5-516214932a85}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\ringdht\eth\libdevcrypto"> - <UniqueIdentifier>{255ccb5c-fdc7-48c8-a4f7-df183608e573}</UniqueIdentifier> + <Filter Include="Source Files\dring"> + <UniqueIdentifier>{f137f8a1-8c2a-4e49-b73c-835f95507160}</UniqueIdentifier> </Filter> </ItemGroup> <ItemGroup> - <ClInclude Include="..\src\client\ring_signal.h"> - <Filter>Header Files\client</Filter> - </ClInclude> - <ClInclude Include="..\src\client\videomanager.h"> - <Filter>Header Files\client</Filter> - </ClInclude> - <ClInclude Include="..\src\config\serializable.h"> - <Filter>Header Files\config</Filter> - </ClInclude> - <ClInclude Include="..\src\config\yamlparser.h"> - <Filter>Header Files\config</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\videomanager_interface.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\security_const.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\presencemanager_interface.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\media_const.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\dring.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\configurationmanager_interface.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\callmanager_interface.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\call_const.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\dring\account_const.h"> - <Filter>Header Files\dring</Filter> - </ClInclude> - <ClInclude Include="..\src\hooks\urlhook.h"> - <Filter>Header Files\hooks</Filter> - </ClInclude> - <ClInclude Include="..\src\im\instant_messaging.h"> - <Filter>Header Files\im</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audio_rtp_session.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audiobuffer.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audiolayer.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audioloop.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audiorecord.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\audiorecorder.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\dcblocker.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\dsp.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\resampler.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\ringbuffer.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\ringbufferpool.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\tonecontrol.h"> - <Filter>Header Files\media\audio</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\sound\dtmf.h"> - <Filter>Header Files\media\audio\sound</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\sound\dtmfgenerator.h"> - <Filter>Header Files\media\audio\sound</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\sound\tone.h"> - <Filter>Header Files\media\audio\sound</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\sound\tonelist.h"> - <Filter>Header Files\media\audio\sound</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\shm_header.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\sinkclient.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_base.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_device.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_device_monitor.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_input.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_mixer.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_receive_thread.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_rtp_session.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_scaler.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\video\video_sender.h"> - <Filter>Header Files\media\video</Filter> - </ClInclude> - <ClInclude Include="..\src\media\libav_deps.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\libav_utils.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_buffer.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_codec.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_decoder.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_device.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_encoder.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\media_io_handle.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\recordable.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\rtp_session.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\socket_pair.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\srtp.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\media\system_codec_container.h"> - <Filter>Header Files\media</Filter> - </ClInclude> - <ClInclude Include="..\src\account.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\account_factory.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\account_schema.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\array_size.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\call.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\call_factory.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\conference.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="config.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\dirent.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\dlfcn.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\enumclass_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\fileutils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ice_socket.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ice_transport.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ip_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\logger.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\manager.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\map_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\noncopyable.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\preferences.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\rational.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\registration_states.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ring_plugin.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ring_types.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\rw_mutex.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\string_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\threadloop.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\utf8_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\winsyslog.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\ringaccount.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\sips_transport_ice.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\upnp\upnp_control.h"> - <Filter>Header Files\upnp</Filter> - </ClInclude> - <ClInclude Include="..\src\upnp\upnp_igd.h"> - <Filter>Header Files\upnp</Filter> - </ClInclude> - <ClInclude Include="..\src\upnp\upnp_context.h"> - <Filter>Header Files\upnp</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\pattern.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\pres_sub_client.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\pres_sub_server.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sdes_negotiator.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sdp.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sip_utils.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sipaccount.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sipaccountbase.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sipcall.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sippresence.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\siptransport.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\sip\sipvoiplink.h"> - <Filter>Header Files\sip</Filter> - </ClInclude> - <ClInclude Include="..\src\security\certstore.h"> - <Filter>Header Files\security</Filter> - </ClInclude> - <ClInclude Include="..\src\security\tls_session.h"> - <Filter>Header Files\security</Filter> - </ClInclude> - <ClInclude Include="..\src\security\tlsvalidator.h"> - <Filter>Header Files\security</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\sound\audiofile.h"> - <Filter>Header Files\media\audio\sound</Filter> - </ClInclude> - <ClInclude Include="..\src\im\message_engine.h"> - <Filter>Header Files\im</Filter> - </ClInclude> - <ClInclude Include="..\src\archiver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\media\audio\portaudio\portaudiolayer.h"> - <Filter>Header Files\media\audio\portaudio</Filter> - </ClInclude> - <ClInclude Include="unistd.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcrypto\Common.h"> - <Filter>Header Files\ringdht\eth\libdevcrypto</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\Common.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\CommonData.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\FixedHash.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\SHA3.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\vector_ref.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\thread_pool.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\base64.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\namedirectory.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\compiler_intrinsics.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="sys_time.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\plugin_loader.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\plugin_manager.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\smartools.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\src\security\memory.h"> - <Filter>Header Files\security</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\accountarchive.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\configkeys.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\ringcontact.h"> - <Filter>Header Files\ringdht</Filter> - </ClInclude> - <ClInclude Include="..\src\ringdht\eth\libdevcore\Address.h"> - <Filter>Header Files\ringdht\eth\libdevcore</Filter> - </ClInclude> - <ClInclude Include="..\src\security\diffie-hellman.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\src\preferences.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\ring_api.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\string_utils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\threadloop.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\utf8_utils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\winsyslog.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\account.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\account_factory.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\buildinfo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\call.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\call_factory.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\conference.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\dlfcn.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\fileutils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\ice_transport.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\ip_utils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\logger.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\manager.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\plugin_loader_dl.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\plugin_manager.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\src\client\configurationmanager.cpp"> - <Filter>Source Files\client</Filter> - </ClCompile> - <ClCompile Include="..\src\client\presencemanager.cpp"> - <Filter>Source Files\client</Filter> - </ClCompile> - <ClCompile Include="..\src\client\ring_signal.cpp"> - <Filter>Source Files\client</Filter> - </ClCompile> - <ClCompile Include="..\src\client\videomanager.cpp"> - <Filter>Source Files\client</Filter> - </ClCompile> - <ClCompile Include="..\src\client\callmanager.cpp"> - <Filter>Source Files\client</Filter> - </ClCompile> - <ClCompile Include="..\src\config\yamlparser.cpp"> - <Filter>Source Files\config</Filter> - </ClCompile> <ClCompile Include="..\src\hooks\urlhook.cpp"> <Filter>Source Files\hooks</Filter> </ClCompile> @@ -756,9 +235,6 @@ <ClCompile Include="..\src\media\audio\sound\audiofile.cpp"> <Filter>Source Files\media\audio\sound</Filter> </ClCompile> - <ClCompile Include="..\src\archiver.cpp"> - <Filter>Source Files</Filter> - </ClCompile> <ClCompile Include="..\src\im\message_engine.cpp"> <Filter>Source Files\im</Filter> </ClCompile> @@ -783,29 +259,534 @@ <ClCompile Include="..\src\ringdht\eth\libdevcrypto\Common.cpp"> <Filter>Source Files\ringdht\eth\libdevcrypto</Filter> </ClCompile> - <ClCompile Include="..\src\thread_pool.cpp"> + <ClCompile Include="..\src\ringdht\namedirectory.cpp"> + <Filter>Source Files\ringdht</Filter> + </ClCompile> + <ClCompile Include="..\src\security\memory.cpp"> + <Filter>Source Files\security</Filter> + </ClCompile> + <ClCompile Include="..\src\ringdht\accountarchive.cpp"> + <Filter>Source Files\ringdht</Filter> + </ClCompile> + <ClCompile Include="..\src\ringdht\eth\libdevcore\SHA3.cpp"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClCompile> + <ClCompile Include="..\src\account.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\account_factory.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\archiver.cpp"> <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="..\src\base64.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="..\src\ringdht\namedirectory.cpp"> - <Filter>Source Files\ringdht</Filter> + <ClCompile Include="..\src\buildinfo.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\call.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\call_factory.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\conference.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\data_transfer.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\dlfcn.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\fileutils.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\ftp_server.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\ice_transport.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\ip_utils.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\logger.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\manager.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\peer_connection.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\preferences.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\ring_api.cpp"> + <Filter>Source Files</Filter> </ClCompile> <ClCompile Include="..\src\smartools.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="..\src\security\memory.cpp"> - <Filter>Source Files\security</Filter> + <ClCompile Include="..\src\string_utils.cpp"> + <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="..\src\ringdht\accountarchive.cpp"> + <ClCompile Include="..\src\thread_pool.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\threadloop.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\turn_transport.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\utf8_utils.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\winsyslog.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\client\callmanager.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\client\configurationmanager.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\client\datatransfer.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\client\presencemanager.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\client\ring_signal.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\client\videomanager.cpp"> + <Filter>Source Files\client</Filter> + </ClCompile> + <ClCompile Include="..\src\config\yamlparser.cpp"> + <Filter>Source Files\config</Filter> + </ClCompile> + <ClCompile Include="..\src\ringdht\p2p.cpp"> <Filter>Source Files\ringdht</Filter> </ClCompile> - <ClCompile Include="..\src\ringdht\eth\libdevcore\SHA3.cpp"> - <Filter>Source Files\ringdht\eth\libdevcore</Filter> + <ClCompile Include="..\src\media\video\accel.cpp"> + <Filter>Source Files\media\video</Filter> </ClCompile> <ClCompile Include="..\src\security\diffie-hellman.cpp"> - <Filter>Source Files</Filter> + <Filter>Source Files\security</Filter> </ClCompile> </ItemGroup> + <ItemGroup> + <ClInclude Include="..\src\account.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\account_factory.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\account_schema.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\archiver.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\array_size.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\base64.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\call.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\call_factory.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\channel.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\compiler_intrinsics.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\conference.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\data_transfer.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\dlfcn.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\enumclass_utils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\fileutils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\ftp_server.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\generic_io.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\ice_socket.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\ice_transport.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\ip_utils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\logger.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\manager.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\map_utils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\noncopyable.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\peer_connection.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\preferences.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\rational.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\registration_states.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\ring_types.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\rw_mutex.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\smartools.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\string_utils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\thread_pool.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\threadloop.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\turn_transport.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\utf8_utils.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\windirent.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\winsyslog.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\src\client\ring_signal.h"> + <Filter>Source Files\client</Filter> + </ClInclude> + <ClInclude Include="..\src\client\videomanager.h"> + <Filter>Source Files\client</Filter> + </ClInclude> + <ClInclude Include="..\src\config\serializable.h"> + <Filter>Source Files\config</Filter> + </ClInclude> + <ClInclude Include="..\src\config\yamlparser.h"> + <Filter>Source Files\config</Filter> + </ClInclude> + <ClInclude Include="..\src\hooks\urlhook.h"> + <Filter>Source Files\hooks</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\account_const.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\call_const.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\callmanager_interface.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\configurationmanager_interface.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\datatransfer_interface.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\dring.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\media_const.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\presence_const.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\presencemanager_interface.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\security_const.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\dring\videomanager_interface.h"> + <Filter>Source Files\dring</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\Address.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\Common.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\CommonData.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\FixedHash.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\SHA3.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcore\vector_ref.h"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\eth\libdevcrypto\Common.h"> + <Filter>Source Files\ringdht\eth\libdevcrypto</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\accountarchive.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\configkeys.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\namedirectory.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\p2p.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\ringaccount.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\ringcontact.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\ringdht\sips_transport_ice.h"> + <Filter>Source Files\ringdht</Filter> + </ClInclude> + <ClInclude Include="..\src\im\instant_messaging.h"> + <Filter>Source Files\im</Filter> + </ClInclude> + <ClInclude Include="..\src\im\message_engine.h"> + <Filter>Source Files\im</Filter> + </ClInclude> + <ClInclude Include="..\src\media\decoder_finder.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\libav_deps.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\libav_utils.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_buffer.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_codec.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_decoder.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_device.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_encoder.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\media_io_handle.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\recordable.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\rtp_session.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\socket_pair.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\srtp.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\system_codec_container.h"> + <Filter>Source Files\media</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audio_rtp_session.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audiobuffer.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audiolayer.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audioloop.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audiorecord.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\audiorecorder.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\dcblocker.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\dsp.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\resampler.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\ringbuffer.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\ringbufferpool.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\tonecontrol.h"> + <Filter>Source Files\media\audio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\portaudio\portaudiolayer.h"> + <Filter>Source Files\media\audio\portaudio</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\sound\audiofile.h"> + <Filter>Source Files\media\audio\sound</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\sound\dtmf.h"> + <Filter>Source Files\media\audio\sound</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\sound\dtmfgenerator.h"> + <Filter>Source Files\media\audio\sound</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\sound\tone.h"> + <Filter>Source Files\media\audio\sound</Filter> + </ClInclude> + <ClInclude Include="..\src\media\audio\sound\tonelist.h"> + <Filter>Source Files\media\audio\sound</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\accel.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\shm_header.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\sinkclient.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_base.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_device.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_device_monitor.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_input.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_mixer.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_receive_thread.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_rtp_session.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_scaler.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\media\video\video_sender.h"> + <Filter>Source Files\media\video</Filter> + </ClInclude> + <ClInclude Include="..\src\security\certstore.h"> + <Filter>Source Files\security</Filter> + </ClInclude> + <ClInclude Include="..\src\security\diffie-hellman.h"> + <Filter>Source Files\security</Filter> + </ClInclude> + <ClInclude Include="..\src\security\memory.h"> + <Filter>Source Files\security</Filter> + </ClInclude> + <ClInclude Include="..\src\security\tls_session.h"> + <Filter>Source Files\security</Filter> + </ClInclude> + <ClInclude Include="..\src\security\tlsvalidator.h"> + <Filter>Source Files\security</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\pattern.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\pres_sub_client.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\pres_sub_server.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sdes_negotiator.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sdp.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sip_utils.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sipaccount.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sipaccountbase.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sipcall.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sippresence.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\siptransport.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\sip\sipvoiplink.h"> + <Filter>Source Files\sip</Filter> + </ClInclude> + <ClInclude Include="..\src\upnp\upnp_context.h"> + <Filter>Source Files\upnp</Filter> + </ClInclude> + <ClInclude Include="..\src\upnp\upnp_control.h"> + <Filter>Source Files\upnp</Filter> + </ClInclude> + <ClInclude Include="..\src\upnp\upnp_igd.h"> + <Filter>Source Files\upnp</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <None Include="..\src\ringdht\eth\libdevcore\Makefile.am"> + <Filter>Source Files\ringdht\eth\libdevcore</Filter> + </None> + </ItemGroup> </Project> \ No newline at end of file diff --git a/bin/Makefile.am b/bin/Makefile.am index c833d0746a..db05bc435d 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -31,7 +31,7 @@ dring_CXXFLAGS= -I$(top_srcdir)/src ${DBUSCPP_CFLAGS} \ -I$(top_srcdir)/src/dring \ -DTOP_BUILDDIR=\"$$(cd "$(top_builddir)"; pwd)\" -dring_LDADD = dbus/libclient_dbus.la ${DBUSCPP_LIBS} $(top_builddir)/src/libring.la +dring_LDADD = dbus/libclient_dbus.la ${DBUSCPP_LIBS} $(top_builddir)/src/libring.la -ldl endif if RING_NODEJS diff --git a/contrib/build_all_uwp.bat b/contrib/build_all_uwp.bat index 80203fe311..e83698f15a 100644 --- a/contrib/build_all_uwp.bat +++ b/contrib/build_all_uwp.bat @@ -30,15 +30,6 @@ build\libupnp\build\VS2015\ixml.vcxproj, ^ build\libupnp\build\VS2015\threadutil.vcxproj, ^ build\libupnp\build\VS2015\libupnp.vcxproj, ^ build\pcre\MSVC\pcre.vcxproj, ^ -build\pjproject\third_party\build\baseclasses\libbaseclasses.vcxproj, ^ -build\pjproject\third_party\build\g7221\libg7221codec.vcxproj, ^ -build\pjproject\third_party\build\gsm\libgsmcodec.vcxproj, ^ -build\pjproject\third_party\build\ilbc\libilbccodec.vcxproj, ^ -build\pjproject\third_party\build\milenage\libmilenage.vcxproj, ^ -build\pjproject\third_party\build\resample\libresample.vcxproj, ^ -build\pjproject\third_party\build\speex\libspeex.vcxproj, ^ -build\pjproject\third_party\build\srtp\libsrtp.vcxproj, ^ -build\pjproject\third_party\build\yuv\libyuv.vcxproj, ^ build\pjproject\pjlib-util\build\pjlib-util.vcxproj, ^ build\pjproject\pjmedia\build\pjmedia.vcxproj, ^ build\pjproject\pjmedia\build\pjmedia_audiodev.vcxproj, ^ diff --git a/contrib/src/pjproject/fetch_and_patch.bat b/contrib/src/pjproject/fetch_and_patch.bat index 946d2c99e0..cf966c08d7 100644 --- a/contrib/src/pjproject/fetch_and_patch.bat +++ b/contrib/src/pjproject/fetch_and_patch.bat @@ -26,5 +26,6 @@ git apply --reject --whitespace=fix %SRC%\pjproject\add_dtls_transport.patch git apply --reject --whitespace=fix %SRC%\pjproject\pj_uwp_ice_sess.patch git apply --reject --whitespace=fix %SRC%\pjproject\pj_uwp_fix_turn_fallback.patch git apply --reject --whitespace=fix %SRC%\pjproject\pj_uwp.patch +git apply --reject --whitespace=fix %SRC%\pjproject\pj_uwp_rfc6062.patch cd %SRC% \ No newline at end of file diff --git a/contrib/src/pjproject/pj_uwp_rfc6062.patch b/contrib/src/pjproject/pj_uwp_rfc6062.patch new file mode 100644 index 0000000000..50812b2dab --- /dev/null +++ b/contrib/src/pjproject/pj_uwp_rfc6062.patch @@ -0,0 +1,907 @@ +--- a/pjnath/include/pjnath/config.h ++++ b/pjnath/include/pjnath/config.h +@@ -220,6 +220,14 @@ + # define PJ_TURN_KEEP_ALIVE_SEC 15 + #endif + ++/** ++ * Maximal number of TCP data connection that a client can open/accept with ++ * peers. ++ */ ++#ifndef PJ_TURN_MAX_TCP_CNX ++# define PJ_TURN_MAX_TCP_CNX 32 ++#endif ++ + + /* ************************************************************************** + * ICE CONFIGURATION +--- a/pjnath/include/pjnath/stun_msg.h ++++ b/pjnath/include/pjnath/stun_msg.h +@@ -92,6 +92,21 @@ enum pj_stun_method_e + */ + PJ_STUN_CHANNEL_BIND_METHOD = 9, + ++ /* ++ * STUN/TURN Connect as defined by RFC 6062 ++ */ ++ PJ_STUN_CONNECT_METHOD = 10, ++ ++ /* ++ * STUN/TURN ConnectionBind as defined by RFC 6062 ++ */ ++ PJ_STUN_CONNECTION_BIND_METHOD = 11, ++ ++ /* ++ * STUN/TURN ConnectionAttempt as defined by RFC 6062 ++ */ ++ PJ_STUN_CONNECTION_ATTEMPT_METHOD = 12, ++ + /** + * All known methods. + */ +@@ -261,6 +276,16 @@ typedef enum pj_stun_msg_type + */ + PJ_STUN_DATA_INDICATION = 0x0017, + ++ /** ++ * STUN/TURN ConnectBind Request ++ */ ++ PJ_STUN_CONNECTION_BIND_REQUEST = 0x000b, ++ ++ /** ++ * TURN ConnectionAttempt indication ++ */ ++ PJ_STUN_CONNECTION_ATTEMPT_INDICATION = 0x001c, ++ + + /** + * TURN CreatePermission request +@@ -332,6 +357,7 @@ typedef enum pj_stun_attr_type + PJ_STUN_ATTR_XOR_REFLECTED_FROM = 0x0023,/**< XOR-REFLECTED-FROM */ + PJ_STUN_ATTR_PRIORITY = 0x0024,/**< PRIORITY */ + PJ_STUN_ATTR_USE_CANDIDATE = 0x0025,/**< USE-CANDIDATE */ ++ PJ_STUN_ATTR_CONNECTION_ID = 0x002a,/**< CONNECTION-ID */ + PJ_STUN_ATTR_ICMP = 0x0030,/**< ICMP (TURN) */ + + PJ_STUN_ATTR_END_MANDATORY_ATTR, +--- a/pjnath/include/pjnath/stun_session.h ++++ b/pjnath/include/pjnath/stun_session.h +@@ -751,6 +751,13 @@ PJ_DECL(void) pj_stun_msg_destroy_tdata(pj_stun_session *sess, + pj_stun_tx_data *tdata); + + ++PJ_DEF(void) pj_stun_session_get_server_cred( ++ pj_stun_session *sess, ++ pj_pool_t *pool, pj_str_t *nonce, pj_str_t *realm); ++ ++PJ_DEF(void) pj_stun_session_set_server_cred( ++ pj_stun_session *sess, const pj_str_t *nonce, pj_str_t *realm); ++ + /** + * @} + */ +--- a/pjnath/include/pjnath/turn_session.h ++++ b/pjnath/include/pjnath/turn_session.h +@@ -184,6 +184,12 @@ typedef enum pj_turn_state_t + PJ_TURN_STATE_ALLOCATING, + + /** ++ * TURN session has issued CONNECTION-BIND request and is waiting for response ++ * from the TURN server. ++ */ ++ PJ_TURN_STATE_CONNECTION_BINDING, ++ ++ /** + * TURN session has successfully allocated relay resoruce and now is + * ready to be used. + */ +@@ -298,6 +304,21 @@ typedef struct pj_turn_session_cb + pj_turn_state_t old_state, + pj_turn_state_t new_state); + ++ /** ++ * Notification when TURN session get a ConnectionAttempt indication. ++ * ++ * @param sess The TURN session. ++ * @param conn_id The connection-id to use for connection binding. ++ * @param peer_addr Peer address that tried to connect on the TURN server. ++ * @param addr_len Length of the peer address. ++ ++ */ ++ void (*on_peer_connection)(pj_turn_session *sess, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len, ++ pj_status_t status); ++ + } pj_turn_session_cb; + + +@@ -330,6 +351,15 @@ typedef struct pj_turn_alloc_param + */ + int ka_interval; + ++ /** ++ * Type of connection to from TURN server to peer. ++ * ++ * Supported values: PJ_TURN_TP_UDP (rfc 5766), PJ_TURN_TP_TLS (rfc 6062) ++ * ++ * Default is PJ_TURN_TP_UDP. ++ */ ++ pj_turn_tp_type peer_conn_type; ++ + } pj_turn_alloc_param; + + +@@ -731,6 +761,15 @@ PJ_DECL(pj_status_t) pj_turn_session_on_rx_pkt(pj_turn_session *sess, + pj_size_t pkt_len, + pj_size_t *parsed_len); + ++/** ++ * rfc6062 ++ */ ++PJ_DEF(void) pj_turn_session_get_server_cred( ++ pj_turn_session *sess, ++ pj_pool_t *pool, pj_str_t *nonce, pj_str_t *realm); ++ ++PJ_DEF(void) pj_turn_session_set_server_cred( ++ pj_turn_session *sess, const pj_str_t *nonce, pj_str_t *realm); + + /** + * @} +--- a/pjnath/include/pjnath/turn_sock.h ++++ b/pjnath/include/pjnath/turn_sock.h +@@ -98,6 +98,23 @@ typedef struct pj_turn_sock_cb + pj_turn_state_t old_state, + pj_turn_state_t new_state); + ++ /** ++ * Notification when TURN session get a ConnectionAttempt indication. ++ * ++ * @param turn_sock The TURN client transport. ++ * @param conn_id The connection-id to use for connection binding. ++ * @param peer_addr Peer address that tried to connect on the TURN server. ++ * @param addr_len Length of the peer address. ++ * @param status PJ_SUCCESS when connection is made, or any errors ++ * if the connection has failed (or if the peer has ++ * disconnected after an established connection). ++ */ ++ void (*on_peer_connection)(pj_turn_sock *turn_sock, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len, ++ pj_status_t status); ++ + } pj_turn_sock_cb; + + +@@ -446,6 +463,13 @@ PJ_DECL(pj_status_t) pj_turn_sock_bind_channel(pj_turn_sock *turn_sock, + const pj_sockaddr_t *peer, + unsigned addr_len); + ++/** ++ * RFC 6062 ++ */ ++PJ_DECL(pj_status_t) pj_turn_connect_peer(pj_turn_sock *sock, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len); + + /** + * @} +--- a/pjnath/src/pjnath/stun_msg.c ++++ b/pjnath/src/pjnath/stun_msg.c +@@ -45,6 +45,9 @@ static const char *stun_method_names[PJ_STUN_METHOD_MAX] = + "Data", /* 7 */ + "CreatePermission", /* 8 */ + "ChannelBind", /* 9 */ ++ "Connect", /* 10 */ ++ "ConnectionBind", /* 11 */ ++ "ConnectionAttempt", /* 12 */ + }; + + static struct +@@ -476,11 +479,11 @@ static struct attr_desc mandatory_attr_desc[] = + NULL + }, + { +- /* ID 0x002a is not assigned */ +- NULL, +- NULL, +- NULL, +- NULL ++ /* PJ_STUN_ATTR_CONNECTION_ID, */ ++ "CONNECTION-ID", ++ &decode_uint_attr, ++ &encode_uint_attr, ++ &clone_uint_attr + }, + { + /* ID 0x002b is not assigned */ +--- a/pjnath/src/pjnath/stun_session.c ++++ b/pjnath/src/pjnath/stun_session.c +@@ -1511,3 +1511,14 @@ on_return: + return status; + } + ++PJ_DEF(void) pj_stun_session_get_server_cred(pj_stun_session *sess, pj_pool_t *pool, pj_str_t *nonce, pj_str_t *realm) ++{ ++ pj_strdup(pool, nonce, &sess->next_nonce); ++ pj_strdup(pool, realm, &sess->server_realm); ++} ++ ++PJ_DEF(void) pj_stun_session_set_server_cred(pj_stun_session *sess, const pj_str_t *nonce, pj_str_t *realm) ++{ ++ pj_strdup(sess->pool, &sess->next_nonce, nonce); ++ pj_strdup(sess->pool, &sess->server_realm, realm); ++} +--- a/pjnath/src/pjnath/turn_session.c ++++ b/pjnath/src/pjnath/turn_session.c +@@ -42,6 +42,7 @@ static const char *state_names[] = + "Resolving", + "Resolved", + "Allocating", ++ "TcpBinding", + "Ready", + "Deallocating", + "Deallocated", +@@ -208,6 +209,7 @@ static void on_timer_event(pj_timer_heap_t *th, pj_timer_entry *e); + PJ_DEF(void) pj_turn_alloc_param_default(pj_turn_alloc_param *prm) + { + pj_bzero(prm, sizeof(*prm)); ++ prm->peer_conn_type = PJ_TURN_TP_UDP; + } + + /* +@@ -407,6 +409,11 @@ static void sess_shutdown(pj_turn_session *sess, + sess->pending_destroy = PJ_TRUE; + can_destroy = PJ_FALSE; + break; ++ case PJ_TURN_STATE_CONNECTION_BINDING: ++ /* We need to wait until connection binding complete */ ++ sess->pending_destroy = PJ_TRUE; ++ can_destroy = PJ_FALSE; ++ break; + case PJ_TURN_STATE_READY: + /* Send REFRESH with LIFETIME=0 */ + can_destroy = PJ_FALSE; +@@ -723,6 +730,10 @@ PJ_DEF(pj_status_t) pj_turn_session_alloc(pj_turn_session *sess, + PJ_ASSERT_RETURN(sess->state>PJ_TURN_STATE_NULL && + sess->state<=PJ_TURN_STATE_RESOLVED, + PJ_EINVALIDOP); ++ ++ PJ_ASSERT_RETURN(param->peer_conn_type == PJ_TURN_TP_UDP || ++ param->peer_conn_type == PJ_TURN_TP_TCP, ++ PJ_EINVAL); + + pj_grp_lock_acquire(sess->grp_lock); + +@@ -754,7 +765,7 @@ PJ_DEF(pj_status_t) pj_turn_session_alloc(pj_turn_session *sess, + /* MUST include REQUESTED-TRANSPORT attribute */ + pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, + PJ_STUN_ATTR_REQ_TRANSPORT, +- PJ_STUN_SET_RT_PROTO(PJ_TURN_TP_UDP)); ++ PJ_STUN_SET_RT_PROTO(param->peer_conn_type)); + + /* Include BANDWIDTH if requested */ + if (sess->alloc_param.bandwidth > 0) { +@@ -975,6 +986,13 @@ PJ_DEF(pj_status_t) pj_turn_session_sendto( pj_turn_session *sess, + } + } + ++ /* rfc6062: direct send if peer connection is TCP */ ++ if (sess->alloc_param.peer_conn_type == PJ_TURN_TP_TCP) { ++ status = sess->cb.on_send_pkt(sess, pkt, pkt_len, ++ addr, addr_len); ++ goto on_return; ++ } ++ + /* See if the peer is bound to a channel number */ + ch = lookup_ch_by_addr(sess, addr, pj_sockaddr_get_len(addr), + PJ_FALSE, PJ_FALSE); +@@ -1647,6 +1665,33 @@ static pj_status_t stun_on_rx_indication(pj_stun_session *stun, + + sess = (pj_turn_session*)pj_stun_session_get_user_data(stun); + ++ if (msg->hdr.type == PJ_STUN_CONNECTION_ATTEMPT_INDICATION) { ++ pj_stun_uint_attr *connection_id_attr; ++ /* Get CONNECTION-ID attribute */ ++ connection_id_attr = (pj_stun_uint_attr*) ++ pj_stun_msg_find_attr(msg, PJ_STUN_ATTR_CONNECTION_ID, 0); ++ ++ /* Get XOR-PEER-ADDRESS attribute */ ++ peer_attr = (pj_stun_xor_peer_addr_attr*) ++ pj_stun_msg_find_attr(msg, PJ_STUN_ATTR_XOR_PEER_ADDR, 0); ++ ++ /* Must have both XOR-PEER-ADDRESS and CONNECTION-ID attributes */ ++ if (!peer_attr || !connection_id_attr) { ++ PJ_LOG(4,(sess->obj_name, ++ "Received ConnectionAttempt indication with missing attributes")); ++ return PJ_EINVALIDOP; ++ } ++ ++ /* Notify application */ ++ if (sess->cb.on_peer_connection) { ++ (*sess->cb.on_peer_connection)(sess, connection_id_attr->value, ++ &peer_attr->sockaddr, ++ pj_sockaddr_get_len(&peer_attr->sockaddr), ++ PJ_SUCCESS); ++ } ++ return PJ_SUCCESS; ++ } ++ + /* Expecting Data Indication only */ + if (msg->hdr.type != PJ_STUN_DATA_INDICATION) { + PJ_LOG(4,(sess->obj_name, "Unexpected STUN %s indication", +@@ -2066,3 +2111,16 @@ on_return: + pj_grp_lock_release(sess->grp_lock); + } + ++PJ_DEF(void) pj_turn_session_get_server_cred(pj_turn_session *sess, ++ pj_pool_t *pool, pj_str_t *nonce, ++ pj_str_t *realm) ++{ ++ pj_stun_session_get_server_cred(sess->stun, pool, nonce, realm); ++} ++ ++PJ_DEF(void) pj_turn_session_set_server_cred(pj_turn_session *sess, ++ const pj_str_t *nonce, ++ pj_str_t *realm) ++{ ++ pj_stun_session_set_server_cred(sess->stun, nonce, realm); ++} +--- a/pjnath/src/pjnath/turn_sock.c ++++ b/pjnath/src/pjnath/turn_sock.c +@@ -35,9 +35,29 @@ enum + + enum { MAX_BIND_RETRY = 100 }; + ++enum { CONNECTION_USED = (1<<0), /* TCP connection slot is used or free */ ++ CONNECTION_READY = (1<<1) /* TCP connection bind and ready to use for data transfer */ ++}; + + #define INIT 0x1FFFFFFF + ++/** ++ * pj_turn_tcp_data_connection contains information on TCP connection open between ++ * the client and the turn server, conveying data from/to a specific peer. ++ * notes: part of RFC 6062 support ++ */ ++typedef struct pj_turn_tcp_data_connection ++{ ++ pj_uint32_t id; /* identity of this connection as given by the TURN server */ ++ pj_uint32_t flags; /* 0 or CONNECTION_USED */ ++ pj_sockaddr peer_addr; /* mapped address of connected peer */ ++ unsigned peer_addr_len; ++ pj_activesock_t *active_tcp_sock; /* socket between client and TURN server */ ++ pj_ioqueue_op_key_t send_key; ++ pj_stun_session *stun_sess; /* STUN session used to send ConnectBind msg */ ++ pj_turn_sock *turn_sock; /* up link */ ++} pj_turn_tcp_data_connection; ++ + struct pj_turn_sock + { + pj_pool_t *pool; +@@ -59,6 +79,11 @@ struct pj_turn_sock + pj_turn_tp_type conn_type; + pj_activesock_t *active_sock; + pj_ioqueue_op_key_t send_key; ++ ++ /* RFC 6062 */ ++ pj_stun_auth_cred cred; /* saved from control connection */ ++ pj_size_t tcp_cnx_count; /* number of elements in tcp_cnx */ ++ pj_turn_tcp_data_connection tcp_cnx[PJ_TURN_MAX_TCP_CNX]; /* peer dedicated data connections throught the TURN server */ + }; + + +@@ -82,6 +107,12 @@ static void turn_on_rx_data(pj_turn_session *sess, + static void turn_on_state(pj_turn_session *sess, + pj_turn_state_t old_state, + pj_turn_state_t new_state); ++static void turn_on_peer_connection(pj_turn_session *sess, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len, ++ pj_status_t status); ++ + + static pj_bool_t on_data_read(pj_activesock_t *asock, + void *data, +@@ -97,6 +128,26 @@ static void turn_sock_on_destroy(void *comp); + static void destroy(pj_turn_sock *turn_sock); + static void timer_cb(pj_timer_heap_t *th, pj_timer_entry *e); + ++static pj_bool_t on_peer_data_read(pj_activesock_t *asock, ++ void *data, ++ pj_size_t size, ++ pj_status_t status, ++ pj_size_t *remainder); ++static pj_bool_t on_peer_connect_complete(pj_activesock_t *asock, ++ pj_status_t status); ++static pj_status_t on_tcp_stun_send_msg(pj_stun_session *sess, ++ void *token, ++ const void *pkt, ++ pj_size_t pkt_size, ++ const pj_sockaddr_t *dst_addr, ++ unsigned addr_len); ++static void on_tcp_stun_request_complete(pj_stun_session *sess, ++ pj_status_t status, ++ void *token, ++ pj_stun_tx_data *tdata, ++ const pj_stun_msg *response, ++ const pj_sockaddr_t *src_addr, ++ unsigned src_addr_len); + + /* Init config */ + PJ_DEF(void) pj_turn_sock_cfg_default(pj_turn_sock_cfg *cfg) +@@ -193,6 +244,7 @@ PJ_DEF(pj_status_t) pj_turn_sock_create(pj_stun_config *cfg, + sess_cb.on_channel_bound = &turn_on_channel_bound; + sess_cb.on_rx_data = &turn_on_rx_data; + sess_cb.on_state = &turn_on_state; ++ sess_cb.on_peer_connection = &turn_on_peer_connection; + status = pj_turn_session_create(cfg, pool->obj_name, af, conn_type, + turn_sock->grp_lock, &sess_cb, 0, + turn_sock, &turn_sock->sess); +@@ -240,6 +292,9 @@ static void destroy(pj_turn_sock *turn_sock) + pj_turn_session_shutdown(turn_sock->sess); + if (turn_sock->active_sock) + pj_activesock_close(turn_sock->active_sock); ++ for (int i=0; i < turn_sock->tcp_cnx_count; ++i) { ++ pj_activesock_close(turn_sock->tcp_cnx[i].active_tcp_sock); ++ } + pj_grp_lock_dec_ref(turn_sock->grp_lock); + pj_grp_lock_release(turn_sock->grp_lock); + } +@@ -304,6 +359,34 @@ static void sess_fail(pj_turn_sock *turn_sock, const char *title, + } + } + ++static void peer_cnx_fail(pj_turn_tcp_data_connection *tcp_cnx, ++ const char *title, pj_status_t status) ++{ ++ pj_turn_sock *turn_sock = tcp_cnx->turn_sock; ++ ++ show_err(turn_sock, title, status); ++ if (tcp_cnx->stun_sess) { ++ pj_stun_session_destroy(tcp_cnx->stun_sess); ++ tcp_cnx->stun_sess = NULL; ++ } ++ if (tcp_cnx->active_tcp_sock) { ++ for (int i=0; i < turn_sock->tcp_cnx_count; ++i) { ++ if (&turn_sock->tcp_cnx[i] == tcp_cnx) { ++ turn_on_peer_connection(turn_sock->sess, tcp_cnx->id, ++ &tcp_cnx->peer_addr, ++ tcp_cnx->peer_addr_len, ++ PJ_EEOF); ++ pj_activesock_close(tcp_cnx->active_tcp_sock); ++ tcp_cnx->active_tcp_sock = NULL; ++ tcp_cnx->flags = 0; ++ if (i == turn_sock->tcp_cnx_count-1) ++ --turn_sock->tcp_cnx_count; ++ break; ++ } ++ } ++ } ++} ++ + /* + * Set user data. + */ +@@ -413,6 +496,9 @@ PJ_DEF(pj_status_t) pj_turn_sock_alloc(pj_turn_sock *turn_sock, + + /* Set credental */ + if (cred) { ++ // save credentials for peer/TCP connections ++ if (param->peer_conn_type == PJ_TURN_TP_TCP) ++ pj_memcpy(&turn_sock->cred, cred, sizeof(turn_sock->cred)); + status = pj_turn_session_set_credential(turn_sock->sess, cred); + if (status != PJ_SUCCESS) { + sess_fail(turn_sock, "Error setting credential", status); +@@ -670,11 +756,35 @@ static pj_status_t turn_on_send_pkt(pj_turn_session *sess, + return PJ_EINVALIDOP; + } + +- PJ_UNUSED_ARG(dst_addr); +- PJ_UNUSED_ARG(dst_addr_len); ++ /* With TCP peer connection filter by address ++ * if packet is for the server or the peer ++ */ ++ pj_activesock_t *asock = NULL; ++ pj_turn_session_info info; ++ pj_turn_session_get_info(turn_sock->sess, &info); ++ if (pj_sockaddr_cmp(&info.server, dst_addr) && ++ turn_sock->alloc_param.peer_conn_type == PJ_TURN_TP_TCP) { ++ for (int i=0; i < turn_sock->tcp_cnx_count; ++i) { ++ pj_turn_tcp_data_connection *tcp_cnx = &turn_sock->tcp_cnx[i]; ++ if ((tcp_cnx->flags & CONNECTION_READY) == 0) ++ continue; ++ if (!pj_sockaddr_cmp(&tcp_cnx->peer_addr, dst_addr)) { ++ asock = tcp_cnx->active_tcp_sock; ++ break; ++ } ++ } ++ if (!asock) { ++ status = PJ_ENOTFOUND; ++ show_err(turn_sock, "socket send()", status); ++ return status; ++ } ++ } else { ++ asock = turn_sock->active_sock; ++ } + +- status = pj_activesock_send(turn_sock->active_sock, &turn_sock->send_key, ++ status = pj_activesock_send(asock, &turn_sock->send_key, + pkt, &len, 0); ++ + if (status != PJ_SUCCESS && status != PJ_EPENDING) { + show_err(turn_sock, "socket send()", status); + } +@@ -917,4 +1027,365 @@ static void turn_on_state(pj_turn_session *sess, + } + } + ++static void turn_on_peer_connection(pj_turn_session *sess, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len, ++ pj_status_t status) ++{ ++ pj_turn_sock *turn_sock = (pj_turn_sock*) pj_turn_session_get_user_data(sess); ++ if (turn_sock == NULL || turn_sock->is_destroying) { ++ /* We've been destroyed */ ++ return; ++ } ++ ++ if (turn_sock->cb.on_peer_connection) { ++ (*turn_sock->cb.on_peer_connection)(turn_sock, conn_id, ++ peer_addr, addr_len, ++ status); ++ } ++} ++ ++PJ_DECL(pj_status_t) pj_turn_connect_peer(pj_turn_sock *turn_sock, ++ pj_uint32_t conn_id, ++ const pj_sockaddr_t *peer_addr, ++ unsigned addr_len) ++{ ++ pj_status_t status; ++ pj_turn_tcp_data_connection *new_tcp_cnx = NULL; ++ ++ for (int i=0; i < turn_sock->tcp_cnx_count; ++i) { ++ pj_turn_tcp_data_connection *tcp_cnx = &turn_sock->tcp_cnx[i]; ++ if ((tcp_cnx->flags & CONNECTION_USED) == 0) { ++ new_tcp_cnx = tcp_cnx; ++ continue; ++ } ++ if (tcp_cnx->id == conn_id) ++ // TODO: need log ++ return PJ_EINVAL; // TODO: need better error code ++ } ++ ++ if (!new_tcp_cnx) { ++ if (turn_sock->tcp_cnx_count == PJ_TURN_MAX_TCP_CNX) { ++ // TODO: need log ++ return PJ_ETOOMANY; ++ } ++ new_tcp_cnx = &turn_sock->tcp_cnx[turn_sock->tcp_cnx_count++]; ++ } ++ ++ /* Initialize this TCP connection slot */ ++ pj_bzero(new_tcp_cnx, sizeof(*new_tcp_cnx)); ++ new_tcp_cnx->id = conn_id; ++ new_tcp_cnx->flags = CONNECTION_USED; ++ new_tcp_cnx->turn_sock = turn_sock; ++ pj_sockaddr_cp(&new_tcp_cnx->peer_addr, peer_addr); ++ new_tcp_cnx->peer_addr_len = addr_len; ++ ++ pj_ioqueue_op_key_init(&new_tcp_cnx->send_key, ++ sizeof(new_tcp_cnx->send_key)); ++ ++ /* Initiate a new TCP connection on TURN server ++ * that will become the peer data connection */ ++ pj_turn_session_info info; ++ int sock_type; ++ pj_sock_t sock; ++ pj_activesock_cfg asock_cfg; ++ pj_activesock_cb asock_cb; ++ pj_sockaddr bound_addr, *cfg_bind_addr; ++ pj_uint16_t max_bind_retry; ++ ++ /* Get server address from session info */ ++ pj_turn_session_get_info(turn_sock->sess, &info); ++ ++ assert(turn_sock->conn_type == PJ_TURN_TP_TCP); ++ sock_type = pj_SOCK_STREAM(); ++ ++ /* Init socket */ ++ status = pj_sock_socket(turn_sock->af, sock_type, 0, &sock); ++ if (status != PJ_SUCCESS) { ++ pj_turn_sock_destroy(turn_sock); ++ return status; ++ } ++ ++ /* Bind socket */ ++ cfg_bind_addr = &turn_sock->setting.bound_addr; ++ max_bind_retry = MAX_BIND_RETRY; ++ if (turn_sock->setting.port_range && ++ turn_sock->setting.port_range < max_bind_retry) ++ { ++ max_bind_retry = turn_sock->setting.port_range; ++ } ++ pj_sockaddr_init(turn_sock->af, &bound_addr, NULL, 0); ++ if (cfg_bind_addr->addr.sa_family == pj_AF_INET() || ++ cfg_bind_addr->addr.sa_family == pj_AF_INET6()) ++ { ++ pj_sockaddr_cp(&bound_addr, cfg_bind_addr); ++ } ++ status = pj_sock_bind_random(sock, &bound_addr, ++ turn_sock->setting.port_range, ++ max_bind_retry); ++ if (status != PJ_SUCCESS) { ++ pj_turn_sock_destroy(turn_sock); ++ return status; ++ } ++ ++ /* Apply socket buffer size */ ++ if (turn_sock->setting.so_rcvbuf_size > 0) { ++ unsigned sobuf_size = turn_sock->setting.so_rcvbuf_size; ++ status = pj_sock_setsockopt_sobuf(sock, pj_SO_RCVBUF(), ++ PJ_TRUE, &sobuf_size); ++ if (status != PJ_SUCCESS) { ++ pj_perror(3, turn_sock->obj_name, status, ++ "Failed setting SO_RCVBUF"); ++ } else { ++ if (sobuf_size < turn_sock->setting.so_rcvbuf_size) { ++ PJ_LOG(4, (turn_sock->obj_name, ++ "Warning! Cannot set SO_RCVBUF as configured," ++ " now=%d, configured=%d", sobuf_size, ++ turn_sock->setting.so_rcvbuf_size)); ++ } else { ++ PJ_LOG(5, (turn_sock->obj_name, "SO_RCVBUF set to %d", ++ sobuf_size)); ++ } ++ } ++ } ++ if (turn_sock->setting.so_sndbuf_size > 0) { ++ unsigned sobuf_size = turn_sock->setting.so_sndbuf_size; ++ status = pj_sock_setsockopt_sobuf(sock, pj_SO_SNDBUF(), ++ PJ_TRUE, &sobuf_size); ++ if (status != PJ_SUCCESS) { ++ pj_perror(3, turn_sock->obj_name, status, ++ "Failed setting SO_SNDBUF"); ++ } else { ++ if (sobuf_size < turn_sock->setting.so_sndbuf_size) { ++ PJ_LOG(4, (turn_sock->obj_name, ++ "Warning! Cannot set SO_SNDBUF as configured," ++ " now=%d, configured=%d", sobuf_size, ++ turn_sock->setting.so_sndbuf_size)); ++ } else { ++ PJ_LOG(5, (turn_sock->obj_name, "SO_SNDBUF set to %d", ++ sobuf_size)); ++ } ++ } ++ } ++ ++ /* Create active socket */ ++ pj_activesock_cfg_default(&asock_cfg); ++ asock_cfg.grp_lock = turn_sock->grp_lock; ++ ++ pj_bzero(&asock_cb, sizeof(asock_cb)); ++ asock_cb.on_data_read = &on_peer_data_read; ++ asock_cb.on_connect_complete = &on_peer_connect_complete; ++ status = pj_activesock_create(turn_sock->pool, sock, ++ sock_type, &asock_cfg, ++ turn_sock->cfg.ioqueue, &asock_cb, ++ new_tcp_cnx, ++ &new_tcp_cnx->active_tcp_sock); ++ if (status != PJ_SUCCESS) { ++ pj_turn_sock_destroy(turn_sock); ++ return status; ++ } ++ ++ char addrtxt[PJ_INET6_ADDRSTRLEN+8]; ++ PJ_LOG(5,(turn_sock->pool->obj_name, ++ "Connecting to %s", ++ pj_sockaddr_print(&info.server, addrtxt, ++ sizeof(addrtxt), 3))); ++ ++ status = pj_activesock_start_connect(new_tcp_cnx->active_tcp_sock, ++ turn_sock->pool, ++ &info.server, ++ pj_sockaddr_get_len(&info.server)); ++ if (status == PJ_SUCCESS) { ++ on_peer_connect_complete(new_tcp_cnx->active_tcp_sock, PJ_SUCCESS); ++ } else if (status != PJ_EPENDING) { ++ pj_perror(3, turn_sock->pool->obj_name, status, ++ "Failed to connect to %s", ++ pj_sockaddr_print(&info.server, addrtxt, ++ sizeof(addrtxt), 3)); ++ pj_turn_sock_destroy(turn_sock); ++ return status; ++ } ++ ++ return PJ_SUCCESS; ++} ++ ++static pj_bool_t on_peer_data_read(pj_activesock_t *asock, ++ void *data, ++ pj_size_t size, ++ pj_status_t status, ++ pj_size_t *remainder) ++{ ++ pj_turn_tcp_data_connection *tcp_cnx; ++ pj_turn_sock *turn_sock; ++ ++ tcp_cnx = (pj_turn_tcp_data_connection*) pj_activesock_get_user_data(asock); ++ pj_assert(tcp_cnx && tcp_cnx->turn_sock); ++ turn_sock = tcp_cnx->turn_sock; ++ ++ pj_grp_lock_acquire(turn_sock->grp_lock); ++ ++ if (status != PJ_SUCCESS) { ++ peer_cnx_fail(tcp_cnx, "Peer connection closed", status); ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ *remainder = size; ++ pj_uint8_t* pkt = data; ++ while (*remainder > 0) { ++ if ((tcp_cnx->flags & CONNECTION_READY) != 0) { ++ if (turn_sock->cb.on_rx_data) ++ turn_sock->cb.on_rx_data(turn_sock, pkt, *remainder, ++ &tcp_cnx->peer_addr, ++ tcp_cnx->peer_addr_len); ++ pj_grp_lock_release(turn_sock->grp_lock); ++ *remainder = 0; ++ return PJ_TRUE; ++ } ++ ++ /* STUN session waiting for ConnectBind response */ ++ pj_size_t parsed_len; ++ unsigned options = PJ_STUN_CHECK_PACKET | PJ_STUN_NO_FINGERPRINT_CHECK; ++ status = pj_stun_session_on_rx_pkt(tcp_cnx->stun_sess, pkt, size, ++ options, NULL, &parsed_len, ++ &tcp_cnx->peer_addr, ++ tcp_cnx->peer_addr_len); ++ ++ if (status != PJ_SUCCESS) { ++ peer_cnx_fail(tcp_cnx, "Peer connection closed", status); ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ PJ_LOG(3, ("rfc6062", ++ "parsed STUN msg (read %zu byte(s) over %zu), status=%u", ++ parsed_len, size, status)); ++ ++ pkt += parsed_len; ++ *remainder -= parsed_len; ++ } ++ ++ pj_grp_lock_release(turn_sock->grp_lock); ++ ++ return PJ_TRUE; ++} ++ ++static pj_bool_t on_peer_connect_complete(pj_activesock_t *asock, ++ pj_status_t status) ++{ ++ pj_turn_tcp_data_connection *tcp_cnx; ++ pj_turn_sock *turn_sock; ++ ++ PJ_LOG(1, ("rfc6062", "peer data connection %s", status == PJ_SUCCESS ? "ready" : "failed")); ++ ++ tcp_cnx = (pj_turn_tcp_data_connection*) pj_activesock_get_user_data(asock); ++ if (!tcp_cnx) ++ return PJ_FALSE; ++ ++ turn_sock = tcp_cnx->turn_sock; ++ pj_assert(turn_sock); ++ ++ pj_grp_lock_acquire(turn_sock->grp_lock); ++ ++ PJ_LOG(3, ("rfc6062", "peer data connection %s", status == PJ_SUCCESS ? "ready" : "failed")); ++ ++ // TODO: handle failures ++ if (status != PJ_SUCCESS) { ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ /* start pending read operation */ ++ status = pj_activesock_start_read(asock, turn_sock->pool, ++ turn_sock->setting.max_pkt_size, 0); ++ if (status != PJ_SUCCESS) { ++ // TODO: error handling ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ /* Create a temporary STUN session to send the ConnectBind request */ ++ pj_stun_session_cb stun_cb; ++ pj_bzero(&stun_cb, sizeof(stun_cb)); ++ stun_cb.on_send_msg = &on_tcp_stun_send_msg; ++ stun_cb.on_request_complete = &on_tcp_stun_request_complete; ++ status = pj_stun_session_create(&turn_sock->cfg, NULL, ++ &stun_cb, PJ_FALSE, NULL, ++ &tcp_cnx->stun_sess); ++ if (status != PJ_SUCCESS) { ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ pj_stun_session_set_user_data(tcp_cnx->stun_sess, tcp_cnx); ++ ++ /* Copy credentials from control connection */ ++ pj_stun_session_set_credential(tcp_cnx->stun_sess, PJ_STUN_AUTH_LONG_TERM, &turn_sock->cred); ++ pj_str_t server_nonce, server_realm; ++ pj_turn_session_get_server_cred(turn_sock->sess, turn_sock->pool, &server_nonce, &server_realm); ++ pj_stun_session_set_server_cred(tcp_cnx->stun_sess, &server_nonce, &server_realm); ++ ++ /* Send ConnectBind request */ ++ pj_stun_tx_data *tdata; ++ status = pj_stun_session_create_req(tcp_cnx->stun_sess, PJ_STUN_CONNECTION_BIND_REQUEST, ++ PJ_STUN_MAGIC, NULL, &tdata); ++ if (status != PJ_SUCCESS) { ++ pj_stun_session_destroy(tcp_cnx->stun_sess); ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_FALSE; ++ } ++ ++ /* MUST include REQUESTED-TRANSPORT attribute */ ++ pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg, PJ_STUN_ATTR_CONNECTION_ID, tcp_cnx->id); ++ ++ PJ_LOG(3, ("rfc6062", "bind TCP connection id=%x", tcp_cnx->id)); ++ status = pj_stun_session_send_msg(tcp_cnx->stun_sess, tcp_cnx, PJ_FALSE, PJ_FALSE, ++ &tcp_cnx->peer_addr, tcp_cnx->peer_addr_len, ++ tdata); ++ if (status != PJ_SUCCESS && status != PJ_EPENDING) { ++ pj_stun_session_destroy(tcp_cnx->stun_sess); ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return status; ++ } ++ ++ pj_grp_lock_release(turn_sock->grp_lock); ++ return PJ_TRUE; ++} ++ ++static pj_status_t on_tcp_stun_send_msg(pj_stun_session *sess, ++ void *token, ++ const void *pkt, ++ pj_size_t pkt_size, ++ const pj_sockaddr_t *dst_addr, ++ unsigned addr_len) ++{ ++ pj_status_t status; ++ pj_turn_tcp_data_connection *tcp_cnx = (pj_turn_tcp_data_connection*) token; ++ pj_assert(tcp_cnx != NULL && tcp_cnx->turn_sock != NULL); ++ ++ pj_grp_lock_acquire(tcp_cnx->turn_sock->grp_lock); ++ status = pj_activesock_send(tcp_cnx->active_tcp_sock, &tcp_cnx->send_key, pkt, &pkt_size, 0); ++ pj_grp_lock_release(tcp_cnx->turn_sock->grp_lock); + ++ return status; ++} ++ ++static void on_tcp_stun_request_complete(pj_stun_session *sess, ++ pj_status_t status, ++ void *token, ++ pj_stun_tx_data *tdata, ++ const pj_stun_msg *response, ++ const pj_sockaddr_t *src_addr, ++ unsigned src_addr_len) ++{ ++ pj_turn_tcp_data_connection *tcp_cnx = (pj_turn_tcp_data_connection*) token; ++ pj_assert(tcp_cnx != NULL && tcp_cnx->turn_sock != NULL); ++ ++ pj_grp_lock_acquire(tcp_cnx->turn_sock->grp_lock); ++ pj_stun_session_destroy(tcp_cnx->stun_sess); ++ tcp_cnx->stun_sess = NULL; ++ tcp_cnx->flags |= CONNECTION_READY; ++ PJ_LOG(3, ("rfc6062", "peer data connection bind %s", status == PJ_SUCCESS ? "succeed" : "failed")); ++ pj_grp_lock_release(tcp_cnx->turn_sock->grp_lock); ++} +-- +2.10.2.windows.1 + diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index d1c0179a9e..ab9522e5af 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -44,7 +44,9 @@ #include <sys/select.h> #endif +#ifndef RING_UWP #include <sys/time.h> +#endif namespace ring { @@ -220,7 +222,7 @@ TlsTurnEndpoint::waitForData(unsigned ms_timeout, std::error_code& ec) const TcpSocketEndpoint::TcpSocketEndpoint(const IpAddr& addr) : addr_ {addr} - , sock_ {::socket(addr.getFamily(), SOCK_STREAM, 0)} + , sock_{ static_cast<int>(::socket(addr.getFamily(), SOCK_STREAM, 0)) } { if (sock_ < 0) std::system_error(errno, std::generic_category()); -- GitLab