Bug#1035573: unblock: telegram-desktop/4.6.5+ds-2, libtgowt/0~git20230105.5098730+dfsg-2
Control: tags -1 moreinfo confirmed
On 2023-05-05 19:37:56 +0300, Nicholas Guriev wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> Control: block 1032927 by -1
> Control: block 1035518 by -1
>
> Please unblock package telegram-desktop as well as libtgowt, an ancillary VoIP
> library for Telegram.
>
> [ Reason ]
> The updates fix an important issue with group calls and live streams. See
> detailed description in Bug#1032927, Bug#1035518, and in an upstream bug
> report.
>
> [ Impact ]
> The features do not work without updating libSRTP from the libsrtp2-1 package.
>
> [ Tests ]
> A manual test. See the test case in Bug#1035518.
>
> [ Risks ]
> Almost none. Telegram Desktop is leaf package, libtgowt has only one
> dependant.
>
> [ Checklist ]
> [x] all changes are documented in the d/changelog
> [x] I reviewed all changes and I approve them
> [x] attach debdiff against the packages in testing
>
> [ Other info ]
> The libtgowt package carries a static library and needs to be build before
> telegram-desktop, or the update will not have effect.
>
> unblock telegram-desktop/4.6.5+ds-2
> unblock libtgowt/0~git20230105.5098730+dfsg-2
Please go ahead with the uploads. risc64 is not a release architecture
though, so I'd appreciate if adding that patch could be postponed to
trixie.
Remove the moreinfo tag once the packages are available in unstable.
Cheers
> diffstat for telegram-desktop-4.6.5+ds telegram-desktop-4.6.5+ds
>
> changelog | 9
> patches/Always-use-std-to_string-to-serialize-ints.patch | 232 +++++++++++++++
> patches/series | 1
> 3 files changed, 242 insertions(+)
>
> diff -Nru telegram-desktop-4.6.5+ds/debian/changelog telegram-desktop-4.6.5+ds/debian/changelog
> --- telegram-desktop-4.6.5+ds/debian/changelog 2023-02-27 17:58:07.000000000 +0300
> +++ telegram-desktop-4.6.5+ds/debian/changelog 2023-05-05 12:01:43.000000000 +0300
> @@ -1,3 +1,12 @@
> +telegram-desktop (4.6.5+ds-2) unstable; urgency=medium
> +
> + * Rebuild against libtgowt-dev (>= 0~git20230105.5098730+dfsg-2). This
> + closes: #1032953, #1035518.
> + * New Always-use-std-to_string-to-serialize-ints.patch fixes an assert
> + violation in video chats (also known as group calls).
> +
> + -- Nicholas Guriev <guriev-ns@ya.ru> Fri, 05 May 2023 12:01:43 +0300
> +
> telegram-desktop (4.6.5+ds-1) unstable; urgency=medium
>
> * New upstream release.
> diff -Nru telegram-desktop-4.6.5+ds/debian/patches/Always-use-std-to_string-to-serialize-ints.patch telegram-desktop-4.6.5+ds/debian/patches/Always-use-std-to_string-to-serialize-ints.patch
> --- telegram-desktop-4.6.5+ds/debian/patches/Always-use-std-to_string-to-serialize-ints.patch 1970-01-01 03:00:00.000000000 +0300
> +++ telegram-desktop-4.6.5+ds/debian/patches/Always-use-std-to_string-to-serialize-ints.patch 2023-05-04 12:44:16.000000000 +0300
> @@ -0,0 +1,232 @@
> +Description: Always use std::to_string to serialize ints
> +Origin: https://github.com/TelegramMessenger/tgcalls/commit/fecf542a74b0eb2c15ec7820d16653c57f4db27e
> + https://github.com/TelegramMessenger/tgcalls/commit/012f7a75ba7e20e1790203d02aedf573e3551d2f
> +Author: John Preston <johnprestonmail@gmail.com>
> +Acked-By: Nicholas Guriev <guriev-ns@ya.ru>
> +Last-Update: Thu, 04 May 2023 12:44:16 +0300
> +
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/group/GroupInstanceCustomImpl.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/group/GroupInstanceCustomImpl.cpp
> +@@ -102,15 +102,11 @@ static int stringToInt(std::string const &string) {
> + }
> +
> + static std::string intToString(int value) {
> +- std::ostringstream stringStream;
> +- stringStream << value;
> +- return stringStream.str();
> ++ return std::to_string(value);
> + }
> +
> + static std::string uint32ToString(uint32_t value) {
> +- std::ostringstream stringStream;
> +- stringStream << value;
> +- return stringStream.str();
> ++ return std::to_string(value);
> + }
> +
> + static uint32_t stringToUInt32(std::string const &string) {
> +@@ -129,6 +125,7 @@ static uint16_t stringToUInt16(std::string const &string) {
> +
> + static std::string formatTimestampMillis(int64_t timestamp) {
> + std::ostringstream stringStream;
> ++ stringStream.imbue(std::locale::classic());
> + stringStream << std::fixed << std::setprecision(3) << (double)timestamp / 1000.0;
> + return stringStream.str();
> + }
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2/ContentNegotiation.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2/ContentNegotiation.cpp
> +@@ -187,11 +187,7 @@ cricket::ContentInfo createInactiveContentInfo(std::string const &contentId) {
> + }
> +
> + std::string contentIdBySsrc(uint32_t ssrc) {
> +- std::ostringstream contentIdString;
> +-
> +- contentIdString << ssrc;
> +-
> +- return contentIdString.str();
> ++ return std::to_string(ssrc);
> + }
> +
> + }
> +@@ -639,11 +635,10 @@ void ContentNegotiationContext::setAnswer(std::unique_ptr<ContentNegotiationCont
> + }
> +
> + std::string ContentNegotiationContext::takeNextOutgoingChannelId() {
> +- std::ostringstream result;
> +- result << "m" << _nextOutgoingChannelId;
> ++ const auto result = "m" + std::to_string(_nextOutgoingChannelId);
> + _nextOutgoingChannelId++;
> +-
> +- return result.str();
> ++
> ++ return result;
> + }
> +
> + std::unique_ptr<ContentNegotiationContext::CoordinatedState> ContentNegotiationContext::coordinatedState() const {
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2/InstanceV2Impl.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2/InstanceV2Impl.cpp
> +@@ -136,13 +136,12 @@ public:
> + audioOptions.noise_suppression = true;
> + }
> +
> +- std::ostringstream contentId;
> +- contentId << _ssrc;
> ++ const auto contentId = std::to_string(_ssrc);
> +
> + std::vector<std::string> streamIds;
> +- streamIds.push_back(contentId.str());
> ++ streamIds.push_back(contentId);
> +
> +- _outgoingAudioChannel = _channelManager->CreateVoiceChannel(call, cricket::MediaConfig(), contentId.str(), false, NativeNetworkingImpl::getDefaulCryptoOptions(), audioOptions);
> ++ _outgoingAudioChannel = _channelManager->CreateVoiceChannel(call, cricket::MediaConfig(), contentId, false, NativeNetworkingImpl::getDefaulCryptoOptions(), audioOptions);
> + _threads->getNetworkThread()->BlockingCall([&]() {
> + _outgoingAudioChannel->SetRtpTransport(rtpTransport);
> + });
> +@@ -272,12 +271,9 @@ public:
> + audioOptions.audio_jitter_buffer_fast_accelerate = true;
> + audioOptions.audio_jitter_buffer_min_delay_ms = 50;
> +
> +- std::ostringstream contentId;
> +- contentId << _ssrc;
> ++ const auto streamId = std::to_string(_ssrc);
> +
> +- std::string streamId = contentId.str();
> +-
> +- _audioChannel = _channelManager->CreateVoiceChannel(call, cricket::MediaConfig(), contentId.str(), false, NativeNetworkingImpl::getDefaulCryptoOptions(), audioOptions);
> ++ _audioChannel = _channelManager->CreateVoiceChannel(call, cricket::MediaConfig(), streamId, false, NativeNetworkingImpl::getDefaulCryptoOptions(), audioOptions);
> + _threads->getNetworkThread()->BlockingCall([&]() {
> + _audioChannel->SetRtpTransport(rtpTransport);
> + });
> +@@ -401,10 +397,7 @@ public:
> + cricket::VideoOptions videoOptions;
> + videoOptions.is_screencast = isScreencast;
> +
> +- std::ostringstream contentId;
> +- contentId << mediaContent.ssrc;
> +-
> +- _outgoingVideoChannel = _channelManager->CreateVideoChannel(call, cricket::MediaConfig(), contentId.str(), false, NativeNetworkingImpl::getDefaulCryptoOptions(), videoOptions, videoBitrateAllocatorFactory);
> ++ _outgoingVideoChannel = _channelManager->CreateVideoChannel(call, cricket::MediaConfig(), std::to_string(mediaContent.ssrc), false, NativeNetworkingImpl::getDefaulCryptoOptions(), videoOptions, videoBitrateAllocatorFactory);
> + _threads->getNetworkThread()->BlockingCall([&]() {
> + _outgoingVideoChannel->SetRtpTransport(rtpTransport);
> + });
> +@@ -702,10 +695,9 @@ public:
> +
> + _videoBitrateAllocatorFactory = webrtc::CreateBuiltinVideoBitrateAllocatorFactory();
> +
> +- std::ostringstream contentId;
> +- contentId << mediaContent.ssrc;
> ++ const auto contentId = std::to_string(mediaContent.ssrc);
> +
> +- _videoChannel = _channelManager->CreateVideoChannel(call, cricket::MediaConfig(), contentId.str(), false, NativeNetworkingImpl::getDefaulCryptoOptions(), cricket::VideoOptions(), _videoBitrateAllocatorFactory.get());
> ++ _videoChannel = _channelManager->CreateVideoChannel(call, cricket::MediaConfig(), contentId, false, NativeNetworkingImpl::getDefaulCryptoOptions(), cricket::VideoOptions(), _videoBitrateAllocatorFactory.get());
> + _threads->getNetworkThread()->BlockingCall([&]() {
> + _videoChannel->SetRtpTransport(rtpTransport);
> + });
> +@@ -750,7 +742,7 @@ public:
> + videoRecvStreamParams.ssrcs = allSsrcs;
> +
> + videoRecvStreamParams.cname = "cname";
> +- videoRecvStreamParams.set_stream_ids({ contentId.str() });
> ++ videoRecvStreamParams.set_stream_ids({ contentId });
> +
> + auto incomingVideoDescription = std::make_unique<cricket::VideoContentDescription>();
> + for (const auto &rtpExtension : mediaContent.rtpExtensions) {
> +@@ -1978,14 +1970,10 @@ public:
> + for (const auto &record : _networkStateLogRecords) {
> + json11::Json::object jsonRecord;
> +
> +- std::ostringstream timestampString;
> +-
> + if (baseTimestamp == 0) {
> + baseTimestamp = record.timestamp;
> + }
> +- timestampString << (record.timestamp - baseTimestamp);
> +-
> +- jsonRecord.insert(std::make_pair("t", json11::Json(timestampString.str())));
> ++ jsonRecord.insert(std::make_pair("t", json11::Json(std::to_string(record.timestamp - baseTimestamp))));
> + jsonRecord.insert(std::make_pair("c", json11::Json(record.record.isConnected ? 1 : 0)));
> + if (record.record.route) {
> + jsonRecord.insert(std::make_pair("local", json11::Json(record.record.route->localDescription)));
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2/InstanceV2ReferenceImpl.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2/InstanceV2ReferenceImpl.cpp
> +@@ -653,10 +653,8 @@ public:
> + if (server.isTurn) {
> + webrtc::PeerConnectionInterface::IceServer mappedServer;
> +
> +- std::ostringstream uri;
> +- uri << "turn:" << address.HostAsURIString() << ":" << server.port;
> +-
> +- mappedServer.urls.push_back(uri.str());
> ++ mappedServer.urls.push_back(
> ++ "turn:" + address.HostAsURIString() + ":" + std::to_string(server.port));
> + mappedServer.username = server.login;
> + mappedServer.password = server.password;
> +
> +@@ -664,10 +662,8 @@ public:
> + } else {
> + webrtc::PeerConnectionInterface::IceServer mappedServer;
> +
> +- std::ostringstream uri;
> +- uri << "stun:" << address.HostAsURIString() << ":" << server.port;
> +-
> +- mappedServer.urls.push_back(uri.str());
> ++ mappedServer.urls.push_back(
> ++ "stun:" + address.HostAsURIString() + ":" + std::to_string(server.port));
> +
> + peerConnectionConfiguration.servers.push_back(mappedServer);
> + }
> +@@ -1455,14 +1451,10 @@ public:
> + for (const auto &record : _networkStateLogRecords) {
> + json11::Json::object jsonRecord;
> +
> +- std::ostringstream timestampString;
> +-
> + if (baseTimestamp == 0) {
> + baseTimestamp = record.timestamp;
> + }
> +- timestampString << (record.timestamp - baseTimestamp);
> +-
> +- jsonRecord.insert(std::make_pair("t", json11::Json(timestampString.str())));
> ++ jsonRecord.insert(std::make_pair("t", json11::Json(std::to_string(record.timestamp - baseTimestamp))));
> + jsonRecord.insert(std::make_pair("c", json11::Json(record.record.isConnected ? 1 : 0)));
> + if (record.record.route) {
> + jsonRecord.insert(std::make_pair("local", json11::Json(record.record.route->localDescription)));
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2/Signaling.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2/Signaling.cpp
> +@@ -11,9 +11,7 @@ namespace tgcalls {
> + namespace signaling {
> +
> + static std::string uint32ToString(uint32_t value) {
> +- std::ostringstream stringStream;
> +- stringStream << value;
> +- return stringStream.str();
> ++ return std::to_string(value);
> + }
> +
> + static uint32_t stringToUInt32(std::string const &string) {
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2_4_0_0/InstanceV2_4_0_0Impl.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2_4_0_0/InstanceV2_4_0_0Impl.cpp
> +@@ -57,9 +57,7 @@ namespace tgcalls {
> + namespace {
> +
> + static std::string intToString(int value) {
> +- std::ostringstream stringStream;
> +- stringStream << value;
> +- return stringStream.str();
> ++ return std::to_string(value);
> + }
> +
> + static VideoCaptureInterfaceObject *GetVideoCaptureAssumingSameThread(VideoCaptureInterface *videoCapture) {
> +--- a/Telegram/ThirdParty/tgcalls/tgcalls/v2_4_0_0/Signaling_4_0_0.cpp
> ++++ b/Telegram/ThirdParty/tgcalls/tgcalls/v2_4_0_0/Signaling_4_0_0.cpp
> +@@ -10,9 +10,7 @@ namespace tgcalls {
> + namespace signaling_4_0_0 {
> +
> + static std::string uint32ToString(uint32_t value) {
> +- std::ostringstream stringStream;
> +- stringStream << value;
> +- return stringStream.str();
> ++ return std::to_string(value);
> + }
> +
> + static uint32_t stringToUInt32(std::string const &string) {
> diff -Nru telegram-desktop-4.6.5+ds/debian/patches/series telegram-desktop-4.6.5+ds/debian/patches/series
> --- telegram-desktop-4.6.5+ds/debian/patches/series 2023-02-27 10:59:16.000000000 +0300
> +++ telegram-desktop-4.6.5+ds/debian/patches/series 2023-05-04 12:44:16.000000000 +0300
> @@ -13,3 +13,4 @@
> Backport-GLib.patch
> Backport-KCoreAddons.patch
> Backport-Wayland-protocols.patch
> +Always-use-std-to_string-to-serialize-ints.patch
> diffstat for libtgowt-0~git20230105.5098730+dfsg libtgowt-0~git20230105.5098730+dfsg
>
> changelog | 9 ++
> control | 1
> patches/Ignore-sanitize-attr.patch | 44 +++++++++++++
> patches/Unbundle-libSRTP.patch | 124 +++++++++++++++++++++++++++++++++++++
> patches/series | 2
> 5 files changed, 180 insertions(+)
>
> diff -Nru libtgowt-0~git20230105.5098730+dfsg/debian/changelog libtgowt-0~git20230105.5098730+dfsg/debian/changelog
> --- libtgowt-0~git20230105.5098730+dfsg/debian/changelog 2023-01-10 23:20:23.000000000 +0300
> +++ libtgowt-0~git20230105.5098730+dfsg/debian/changelog 2023-05-05 11:54:32.000000000 +0300
> @@ -1,3 +1,12 @@
> +libtgowt (0~git20230105.5098730+dfsg-2) unstable; urgency=medium
> +
> + * New Unbundle-libSRTP.patch.
> + - Link against the updated library from the libsrtp2-dev package which
> + already has a fix of OpenSSL 3.0.0 incompatibility.
> + * Bring back Ignore-sanitize-attr.patch to fix build for RISC-V 64bit.
> +
> + -- Nicholas Guriev <guriev-ns@ya.ru> Fri, 05 May 2023 11:54:32 +0300
> +
> libtgowt (0~git20230105.5098730+dfsg-1) unstable; urgency=medium
>
> * Update to the latest upstream commit.
> diff -Nru libtgowt-0~git20230105.5098730+dfsg/debian/control libtgowt-0~git20230105.5098730+dfsg/debian/control
> --- libtgowt-0~git20230105.5098730+dfsg/debian/control 2023-01-10 22:45:35.000000000 +0300
> +++ libtgowt-0~git20230105.5098730+dfsg/debian/control 2023-05-04 16:21:09.000000000 +0300
> @@ -20,6 +20,7 @@
> libpipewire-0.3-dev,
> libprotobuf-dev,
> libpulse-dev,
> + libsrtp2-dev,
> libssl-dev,
> libswresample-dev,
> libswscale-dev,
> diff -Nru libtgowt-0~git20230105.5098730+dfsg/debian/patches/Ignore-sanitize-attr.patch libtgowt-0~git20230105.5098730+dfsg/debian/patches/Ignore-sanitize-attr.patch
> --- libtgowt-0~git20230105.5098730+dfsg/debian/patches/Ignore-sanitize-attr.patch 1970-01-01 03:00:00.000000000 +0300
> +++ libtgowt-0~git20230105.5098730+dfsg/debian/patches/Ignore-sanitize-attr.patch 2023-05-04 20:11:56.000000000 +0300
> @@ -0,0 +1,44 @@
> +Description: Do not put the no_sanitize attribute near generated declarations.
> + -fsanitize=cfi-icall is supported only by Clang for x86 and x86_64. That is not
> + our case. Exclude compiler_specific.h that requires hard-coded build_config.h.
> + .
> + This way we avoid the header blocking the build on RISC-V 64bit and other
> + platforms.
> +Author: Nicholas Guriev <guriev-ns@ya.ru>
> +Last-Update: Thu, 04 May 2023 20:11:56 +0300
> +
> +--- a/src/tools/generate_stubs/generate_stubs.py
> ++++ b/src/tools/generate_stubs/generate_stubs.py
> +@@ -92,7 +92,6 @@
> + # arg_list: The arguments used to call the stub function.
> + STUB_FUNCTION_DEFINITION = (
> + """extern %(return_type)s %(name)s(%(params)s) __attribute__((weak));
> +-DISABLE_CFI_ICALL
> + %(return_type)s %(export)s %(name)s(%(params)s) {
> + %(return_prefix)s%(name)s_ptr(%(arg_list)s);
> + }""")
> +@@ -111,7 +110,6 @@
> + # argument.
> + VARIADIC_STUB_FUNCTION_DEFINITION = (
> + """extern %(return_type)s %(name)s(%(params)s) __attribute__((weak));
> +-DISABLE_CFI_ICALL
> + %(return_type)s %(export)s %(name)s(%(params)s) {
> + va_list args___;
> + va_start(args___, %(last_named_arg)s);
> +@@ -133,7 +131,6 @@
> + # argument.
> + VOID_VARIADIC_STUB_FUNCTION_DEFINITION = (
> + """extern void %(name)s(%(params)s) __attribute__((weak));
> +-DISABLE_CFI_ICALL
> + void %(export)s %(name)s(%(params)s) {
> + va_list args___;
> + va_start(args___, %(last_named_arg)s);
> +@@ -182,8 +179,6 @@
> +
> + #include <map>
> + #include <vector>
> +-
> +-#include "base/compiler_specific.h"
> + """
> +
> + # The start and end templates for the enum definitions used by the Umbrella
> diff -Nru libtgowt-0~git20230105.5098730+dfsg/debian/patches/series libtgowt-0~git20230105.5098730+dfsg/debian/patches/series
> --- libtgowt-0~git20230105.5098730+dfsg/debian/patches/series 2023-01-10 22:51:02.000000000 +0300
> +++ libtgowt-0~git20230105.5098730+dfsg/debian/patches/series 2023-05-04 20:11:56.000000000 +0300
> @@ -1,6 +1,8 @@
> Better-denormal-check.patch
> Convert-endianness.patch
> Fix-libabsl-include.patch
> +Ignore-sanitize-attr.patch
> Packaged-PipeWire.patch
> Skip-RNNoise.patch
> +Unbundle-libSRTP.patch
> Backport-to-stable-libvpx.patch
> diff -Nru libtgowt-0~git20230105.5098730+dfsg/debian/patches/Unbundle-libSRTP.patch libtgowt-0~git20230105.5098730+dfsg/debian/patches/Unbundle-libSRTP.patch
> --- libtgowt-0~git20230105.5098730+dfsg/debian/patches/Unbundle-libSRTP.patch 1970-01-01 03:00:00.000000000 +0300
> +++ libtgowt-0~git20230105.5098730+dfsg/debian/patches/Unbundle-libSRTP.patch 2023-05-04 16:21:09.000000000 +0300
> @@ -0,0 +1,124 @@
> +Description: Avoid private symbols and link against system-wide libSRTP
> + The package no longer uses outdated bundled copy of the library. The change
> + fixes incompatibility with OpenSSL 3.0.0 or later.
> + .
> + The excluded code in SrtpSession looks unreachable from the call integration
> + in Telegram Desktop. Though, I can't 100% confirm this.
> +Author: Nicholas Guriev <guriev-ns@ya.ru>
> +Forwarded: https://github.com/desktop-app/tg_owt/pull/123
> +Last-Update: Thu, 04 May 2023 16:21:09 +0300
> +
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -2658,6 +2658,9 @@ if (TG_OWT_USE_PROTOBUF)
> + list(APPEND export_targets proto)
> + endif()
> +
> ++if (LIBSRTP_FOUND)
> ++ target_compile_definitions(tg_owt PRIVATE HAVE_LIBSRTP)
> ++endif()
> + if (NOT absl_FOUND)
> + include(cmake/libabsl.cmake)
> + list(APPEND export_targets libabsl)
> +--- a/cmake/libsrtp.cmake
> ++++ b/cmake/libsrtp.cmake
> +@@ -1,3 +1,16 @@
> ++find_package(PkgConfig REQUIRED)
> ++pkg_check_modules(LIBSRTP libsrtp2)
> ++
> ++if (LIBSRTP_FOUND)
> ++ add_library(libsrtp INTERFACE EXCLUDE_FROM_ALL)
> ++ add_library(tg_owt::libsrtp ALIAS libsrtp)
> ++
> ++ target_include_directories(libsrtp INTERFACE ${LIBSRTP_INCLUDE_DIRS} ${LIBSRTP_CFLAGS_OTHER})
> ++ target_link_libraries(libsrtp INTERFACE ${LIBSRTP_LINK_LIBRARIES} ${LIBSRTP_LDFLAGS_OTHER})
> ++
> ++ return()
> ++endif()
> ++
> + add_library(libsrtp OBJECT EXCLUDE_FROM_ALL)
> + init_target(libsrtp)
> + add_library(tg_owt::libsrtp ALIAS libsrtp)
> +--- a/src/pc/external_hmac.cc
> ++++ b/src/pc/external_hmac.cc
> +@@ -15,7 +15,6 @@
> +
> + #include "rtc_base/logging.h"
> + #include "rtc_base/zero_memory.h"
> +-#include "third_party/libsrtp/include/srtp.h"
> +
> + // Begin test case 0 */
> + static const uint8_t kExternalHmacTestCase0Key[20] = {
> +--- a/src/pc/external_hmac.h
> ++++ b/src/pc/external_hmac.h
> +@@ -30,9 +30,12 @@
> +
> + #include <stdint.h>
> +
> +-#include "third_party/libsrtp/crypto/include/crypto_types.h"
> +-#include "third_party/libsrtp/include/srtp.h"
> +-#include "third_party/libsrtp/include/srtp_priv.h"
> ++#ifdef HAVE_LIBSRTP
> ++# include <srtp2/auth.h>
> ++# include <srtp2/srtp.h>
> ++#else
> ++# include "srtp_priv.h"
> ++#endif
> +
> + #define EXTERNAL_HMAC_SHA1 SRTP_HMAC_SHA1 + 1
> + #define HMAC_KEY_LENGTH 20
> +--- a/src/pc/srtp_session.cc
> ++++ b/src/pc/srtp_session.cc
> +@@ -30,8 +30,12 @@
> + #include "rtc_base/thread_annotations.h"
> + #include "rtc_base/time_utils.h"
> + #include "system_wrappers/include/metrics.h"
> +-#include "third_party/libsrtp/include/srtp.h"
> +-#include "third_party/libsrtp/include/srtp_priv.h"
> ++
> ++#ifdef HAVE_LIBSRTP
> ++# include <srtp2/srtp.h>
> ++#else
> ++# include "srtp_priv.h"
> ++#endif
> +
> + namespace cricket {
> +
> +@@ -290,6 +294,7 @@ bool SrtpSession::UnprotectRtcp(void* p,
> + bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) {
> + RTC_DCHECK(thread_checker_.IsCurrent());
> + RTC_DCHECK(IsExternalAuthActive());
> ++#ifndef HAVE_LIBSRTP
> + if (!IsExternalAuthActive()) {
> + return false;
> + }
> +@@ -313,6 +318,10 @@ bool SrtpSession::GetRtpAuthParams(uint8
> + *key_len = external_hmac->key_length;
> + *tag_len = rtp_auth_tag_len_;
> + return true;
> ++#else
> ++ RTC_LOG_F(LS_WARNING) << "unavailable";
> ++ return false;
> ++#endif
> + }
> +
> + int SrtpSession::GetSrtpOverhead() const {
> +@@ -336,6 +345,7 @@ bool SrtpSession::GetSendStreamPacketInd
> + int in_len,
> + int64_t* index) {
> + RTC_DCHECK(thread_checker_.IsCurrent());
> ++#ifndef HAVE_LIBSRTP
> + srtp_hdr_t* hdr = reinterpret_cast<srtp_hdr_t*>(p);
> + srtp_stream_ctx_t* stream = srtp_get_stream(session_, hdr->ssrc);
> + if (!stream) {
> +@@ -346,6 +356,10 @@ bool SrtpSession::GetSendStreamPacketInd
> + *index = static_cast<int64_t>(rtc::NetworkToHost64(
> + srtp_rdbx_get_packet_index(&stream->rtp_rdbx) << 16));
> + return true;
> ++#else
> ++ RTC_LOG_F(LS_WARNING) << "unavailable";
> ++ return false;
> ++#endif
> + }
> +
> + bool SrtpSession::DoSetKey(int type,
--
Sebastian Ramacher
Reply to: