Build and the call works fine from my side On 2023-08-28, Hilton Chain wrote: > From: Distopico > > * gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch: New > file. > * gnu/local.mk (dist_patch_DATA): Register it. > * gnu/packages/telegram.scm (webrtc-for-telegram-desktop): Update to > 0-389.0532942, which fixes `telegram-desktop` calls that are not working with > OpenSSL 3. > [source]: Add the patch. > : Unbundle libsrtp. > [inputs]: Add libsrtp. > > Signed-off-by: Hilton Chain > --- > gnu/local.mk | 1 + > ...or-telegram-desktop-unbundle-libsrtp.patch | 137 ++++++++++++++++++ > gnu/packages/telegram.scm | 16 +- > 3 files changed, 149 insertions(+), 5 deletions(-) > create mode 100644 gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 48187d7e64..5ab021eaed 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -2093,6 +2093,7 @@ dist_patch_DATA = \ > %D%/packages/patches/wdl-link-libs-and-fix-jnetlib.patch \ > %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \ > %D%/packages/patches/webrtc-audio-processing-big-endian.patch \ > + %D%/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch \ > %D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch \ > %D%/packages/patches/wmctrl-64-fix.patch \ > %D%/packages/patches/wmfire-update-for-new-gdk-versions.patch \ > diff --git a/gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch b/gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch > new file mode 100644 > index 0000000000..486f0b1aa5 > --- /dev/null > +++ b/gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch > @@ -0,0 +1,137 @@ > +From 62672f3756ecf218252098211d78c13369ab6d28 Mon Sep 17 00:00:00 2001 > +From: Nicholas Guriev > +Date: Thu, 4 May 2023 16:21:09 +0300 > +Subject: [PATCH] Unbundle libSRTP > + > +Avoid private symbols and link against system-wide libSRTP. The excluded code > +in SrtpSession looks unreachable from the call integration in Telegram Desktop. > +--- > + CMakeLists.txt | 3 +++ > + cmake/libsrtp.cmake | 13 +++++++++++++ > + src/pc/external_hmac.cc | 1 - > + src/pc/external_hmac.h | 9 ++++++--- > + src/pc/srtp_session.cc | 16 ++++++++++++++-- > + 5 files changed, 36 insertions(+), 6 deletions(-) > + > +diff --git a/CMakeLists.txt b/CMakeLists.txt > +index af7d24c21..66bec8fdf 100644 > +--- a/CMakeLists.txt > ++++ b/CMakeLists.txt > +@@ -2647,6 +2647,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) > + list(APPEND export_targets libabsl) > + endif() > +diff --git a/cmake/libsrtp.cmake b/cmake/libsrtp.cmake > +index 5124312d2..01f051606 100644 > +--- 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) > +diff --git a/src/pc/external_hmac.cc b/src/pc/external_hmac.cc > +index 27b5d0e5a..222f5d9ae 100644 > +--- 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] = { > +diff --git a/src/pc/external_hmac.h b/src/pc/external_hmac.h > +index c5071fc19..8fdc2f1a7 100644 > +--- a/src/pc/external_hmac.h > ++++ b/src/pc/external_hmac.h > +@@ -30,9 +30,12 @@ > + > + #include > + > +-#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 > ++# include > ++#else > ++# include "srtp_priv.h" > ++#endif > + > + #define EXTERNAL_HMAC_SHA1 SRTP_HMAC_SHA1 + 1 > + #define HMAC_KEY_LENGTH 20 > +diff --git a/src/pc/srtp_session.cc b/src/pc/srtp_session.cc > +index 7d1aaf2d6..7b5a789b0 100644 > +--- 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 > ++#else > ++# include "srtp_priv.h" > ++#endif > + > + namespace cricket { > + > +@@ -290,6 +294,9 @@ bool SrtpSession::UnprotectRtcp(void* p, int in_len, int* out_len) { > + bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) { > + RTC_DCHECK(thread_checker_.IsCurrent()); > + RTC_DCHECK(IsExternalAuthActive()); > ++#ifdef HAVE_LIBSRTP > ++ return false; > ++#else > + if (!IsExternalAuthActive()) { > + return false; > + } > +@@ -313,6 +320,7 @@ bool SrtpSession::GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len) { > + *key_len = external_hmac->key_length; > + *tag_len = rtp_auth_tag_len_; > + return true; > ++#endif > + } > + > + int SrtpSession::GetSrtpOverhead() const { > +@@ -336,6 +344,9 @@ bool SrtpSession::GetSendStreamPacketIndex(void* p, > + int in_len, > + int64_t* index) { > + RTC_DCHECK(thread_checker_.IsCurrent()); > ++#ifdef HAVE_LIBSRTP > ++ return false; > ++#else > + srtp_hdr_t* hdr = reinterpret_cast(p); > + srtp_stream_ctx_t* stream = srtp_get_stream(session_, hdr->ssrc); > + if (!stream) { > +@@ -346,6 +357,7 @@ bool SrtpSession::GetSendStreamPacketIndex(void* p, > + *index = static_cast(rtc::NetworkToHost64( > + srtp_rdbx_get_packet_index(&stream->rtp_rdbx) << 16)); > + return true; > ++#endif > + } > + > + bool SrtpSession::DoSetKey(int type, > diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm > index 88daea7d7d..4814c22b6c 100644 > --- a/gnu/packages/telegram.scm > +++ b/gnu/packages/telegram.scm > @@ -1,8 +1,9 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2021 Raghav Gururajan > -;;; Copyright © 2022 Hilton Chain > +;;; Copyright © 2022, 2023 Hilton Chain > ;;; Copyright © 2023 Saku Laesvuori > ;;; Copyright © 2023 Lu Hui > +;;; Copyright © 2023 Camilo Q.S. (Distopico) > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -266,8 +267,8 @@ (define tgcalls-for-telegram-desktop > "193m2gkvipijqbfd6a8mhg9nd63wlnshzgspk3pip57vk21l709z")))) > > (define-public webrtc-for-telegram-desktop > - (let ((commit "5098730b9eb6173f0b52068fe2555b7c1015123a") > - (revision "328")) > + (let ((commit "0532942ac6176a66ef184fb728a4cbb02958fc0b") > + (revision "389")) > (hidden-package > (package > (name "webrtc-for-telegram-desktop") > @@ -283,14 +284,18 @@ (define-public webrtc-for-telegram-desktop > (file-name > (git-file-name name version)) > (sha256 > - (base32 "1lk54zlrff59rj5k9dylsgz4sdds4728psrk8m3v9qn5y8d6z8qy")) > + (base32 "0fary99yl1ddk5zjpfy0pyb5brd268j41plcnvv9qjyf0wj9hf2k")) > + (patches > + (search-patches > + ;; https://github.com/desktop-app/tg_owt/pull/123 > + "webrtc-for-telegram-desktop-unbundle-libsrtp.patch")) > (modules '((guix build utils) > (ice-9 ftw) > (srfi srfi-1))) > (snippet > #~(begin > (let ((keep > - '("libsrtp" "rnnoise" > + '("rnnoise" > ;; Not available in Guix. > "pffft"))) > (with-directory-excursion "src/third_party" > @@ -325,6 +330,7 @@ (define-public webrtc-for-telegram-desktop > libdrm > libglvnd > libjpeg-turbo > + libsrtp > libvpx > libxcomposite > libxdamage