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
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,
Attachment:
signature.asc
Description: This is a digitally signed message part.