~ruther/guix-local

33018f8c2506a1ed0b805d595f3309b90153ac23 — Distopico 3 years ago 7db9210
gnu: webrtc-for-telegram-desktop: Update to 0-389.0532942.

* 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]<patches>: Add the patch.
<snippet>: Unbundle libsrtp.
[inputs]: Add libsrtp.

Signed-off-by: Hilton Chain <hako@ultrarare.space>
M gnu/local.mk => gnu/local.mk +1 -0
@@ 2094,6 2094,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	\

A gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch => gnu/packages/patches/webrtc-for-telegram-desktop-unbundle-libsrtp.patch +137 -0
@@ 0,0 1,137 @@
From 62672f3756ecf218252098211d78c13369ab6d28 Mon Sep 17 00:00:00 2001
From: Nicholas Guriev <nicholas@guriev.su>
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 <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
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 <srtp2/srtp.h>
+#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<srtp_hdr_t*>(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<int64_t>(rtc::NetworkToHost64(
       srtp_rdbx_get_packet_index(&stream->rtp_rdbx) << 16));
   return true;
+#endif
 }
 
 bool SrtpSession::DoSetKey(int type,

M gnu/packages/telegram.scm => gnu/packages/telegram.scm +11 -5
@@ 1,8 1,9 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
;;; Copyright © 2022, 2023 Hilton Chain <hako@ultrarare.space>
;;; Copyright © 2023 Saku Laesvuori <saku@laesvuori.fi>
;;; Copyright © 2023 Lu Hui <luhux76@gmail.com>
;;; Copyright © 2023 Camilo Q.S. (Distopico) <distopico@riseup.net>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 266,8 267,8 @@
      "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 @@
          (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 @@
              libdrm
              libglvnd
              libjpeg-turbo
              libsrtp
              libvpx
              libxcomposite
              libxdamage