jami-daemon issueshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues2023-09-21T10:03:10Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/896plugin-store: cannot install plugin in windows2023-09-21T10:03:10ZAline Gondim Santosplugin-store: cannot install plugin in windows Jami.exe!gnutls_x509_trust_list_add_cas(gnutls_x509_trust_list_st * list, gnutls_x509_crt_int * const * clist, unsigned int clist_size, unsigned int flags) Line 286 C
[External Code]
Jami.exe!jami::JamiPluginManager::checkPluginC... Jami.exe!gnutls_x509_trust_list_add_cas(gnutls_x509_trust_list_st * list, gnutls_x509_crt_int * const * clist, unsigned int clist_size, unsigned int flags) Line 286 C
[External Code]
Jami.exe!jami::JamiPluginManager::checkPluginCertificateValidity(dht::crypto::Certificate * cert) Line 125 C++
Jami.exe!jami::JamiPluginManager::checkPluginCertificate(const std::string & jplPath, bool force) Line 211 C++
Jami.exe!jami::JamiPluginManager::installPlugin(const std::string & jplPath, bool force) Line 230 C++
Jami.exe!PluginManagerInterface::installPlugin(const QString & jplPath, bool force) Line 54 C++
Jami.exe!lrc::api::PluginModel::installPlugin(const QString & jplPath, bool force) Line 121 C++
[External Code]
Exception thrown: read access violation.
**list** was nullptr.Aline Gondim SantosAndreas TraczykAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/895windows: UT: make and run unit tests in windows2023-11-17T16:34:28ZAline Gondim Santoswindows: UT: make and run unit tests in windowshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/892When kicked out of a Swarm, conversations still appears and make it like you ...2024-01-26T12:42:50ZThomas BallasiWhen kicked out of a Swarm, conversations still appears and make it like you can still discussThis would probably require the daemon to be able to put Swarm into an "archive" state that is read-only.
This behaviour has been observed in both client-qt and client-android:
![image](/uploads/55e741ab8b9a35d575822785560b8e22/image.p...This would probably require the daemon to be able to put Swarm into an "archive" state that is read-only.
This behaviour has been observed in both client-qt and client-android:
![image](/uploads/55e741ab8b9a35d575822785560b8e22/image.png) ![image](/uploads/043cf50d9609dbb57808e4d6e7b3a065/image.png)
(for some reason my name doesn't appear in client-qt)
Sending a message returns the following error:
```
[1693497329.637|56019|conversationrepository.cpp:1715] Invalid parent path (not in members or admins
[1693497329.637|56019|conversation_module.cpp :1077] Failed to send message to conversation 9d864ebe6712f18d1790b70d8ba7b605f78e63ac
```Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/891build fails on armhf, aarch64 and i686 for version 20230619.1 due to "to_guil...2024-02-14T14:03:59ZMaxim Cournoyerbuild fails on armhf, aarch64 and i686 for version 20230619.1 due to "to_guile(long int&)" ambiguous callHi,
The native armhf-linux build of libjami has broken since the upgrade to 20230619.1:
```plaintext
libtool: compile: g++ -std=gnu++17 -DHAVE_CONFIG_H -I. -I../.. -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fvisibility=hidden -DLIBJA...Hi,
The native armhf-linux build of libjami has broken since the upgrade to 20230619.1:
```plaintext
libtool: compile: g++ -std=gnu++17 -DHAVE_CONFIG_H -I. -I../.. -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fvisibility=hidden -DLIBJAMI_BUILD -Djami_EXPORTS -DASIO_STANDALONE -DMSGPACK_NO_BOOST -I/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/src -I/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/src/config -I/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/src/media -I/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/test -I/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/src/jami -DPREFIX=\"/gnu/store/snhlmq7k9lgmjx5h24rzz69phlfxc0zy-libjami-20230619.1\" -DJAMI_DATADIR=\"/gnu/store/snhlmq7k9lgmjx5h24rzz69phlfxc0zy-libjami-20230619.1/share/jami\" -DENABLE_TRACE -DJAMI_REVISION=\"\" -DJAMI_DIRTY_REPO=\"dirty\" -DPJSIP_MAX_PKT_LEN=8000 -DPJ_AUTOCONF=1 -g -fno-omit-frame-pointer -Wall -Wextra -Wnon-virtual-dtor -Wno-deprecated -Wno-deprecated-declarations -Wno-unknown-pragmas -Wformat=2 -O0 -I../../src -I./src -I/gnu/store/da6ikq281d235hvb1cil2ls3iq80ni2m-guile-3.0.9/include/guile/3.0 -MT src/bindings/bindings.lo -MD -MP -MF src/bindings/.deps/bindings.Tpo -c src/bindings/bindings.cpp -o src/bindings/bindings.o >/dev/null 2>&1
In file included from ./src/bindings/bindings.h:27,
from src/bindings/signal.cpp:42:
./src/utils.h: In instantiation of ‘scm_unused_struct* pack_to_guile(Args ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<unsigned char, std::allocator<unsigned char> >, long int}; SCM = scm_unused_struct*]’:
./src/utils.h:147:31: required from ‘scm_unused_struct* apply_to_guile(SCM, Args ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<unsigned char, std::allocator<unsigned char> >, long int}; SCM = scm_unused_struct*]’
src/bindings/signal.cpp:83:37: required from ‘void Handler<Args>::doExecuteInGuile(Args ...) [with Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::vector<unsigned char, std::allocator<unsigned char> >&, long int}]’
src/bindings/signal.cpp:103:37: required from ‘static void* Handler<Args>::executeInGuile(void*) [with Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::vector<unsigned char, std::allocator<unsigned char> >&, long int}]’
src/bindings/signal.cpp:117:23: required from ‘void Handler<Args>::execute(Args ...) [with Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::vector<unsigned char, std::allocator<unsigned char> >&, long int}]’
src/bindings/signal.cpp:159:24: required from ‘void add_handler(std::map<std::__cxx11::basic_string<char>, std::shared_ptr<libjami::CallbackWrapperBase> >&, const char*) [with T = libjami::ConfigurationSignal::IncomingTrustRequest; Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, const std::vector<unsigned char, std::allocator<unsigned char> >&, long int}]’
src/bindings/signal.cpp:317:24: required from here
./src/utils.h:129:40: error: call of overloaded ‘to_guile(long int&)’ is ambiguous
129 | std::vector<SCM> values = {to_guile(args)...};
| ~~~~~~~~^~~~~~
./src/utils.h:28:1: note: candidate: ‘scm_unused_struct* to_guile(bool)’
28 | to_guile(bool b)
| ^~~~~~~~
./src/utils.h:40:1: note: candidate: ‘scm_unused_struct* to_guile(uint8_t)’
40 | to_guile(uint8_t x)
| ^~~~~~~~
./src/utils.h:46:1: note: candidate: ‘scm_unused_struct* to_guile(uint16_t)’
46 | to_guile(uint16_t x)
| ^~~~~~~~
./src/utils.h:52:1: note: candidate: ‘scm_unused_struct* to_guile(uint32_t)’
52 | to_guile(uint32_t x)
| ^~~~~~~~
./src/utils.h:58:1: note: candidate: ‘scm_unused_struct* to_guile(uint64_t)’
58 | to_guile(uint64_t x)
| ^~~~~~~~
./src/utils.h:64:1: note: candidate: ‘scm_unused_struct* to_guile(int8_t)’
64 | to_guile(int8_t x)
| ^~~~~~~~
./src/utils.h:70:1: note: candidate: ‘scm_unused_struct* to_guile(int16_t)’
70 | to_guile(int16_t x)
| ^~~~~~~~
./src/utils.h:76:1: note: candidate: ‘scm_unused_struct* to_guile(int32_t)’
76 | to_guile(int32_t x)
| ^~~~~~~~
./src/utils.h:82:1: note: candidate: ‘scm_unused_struct* to_guile(int64_t)’
82 | to_guile(int64_t x)
| ^~~~~~~~
./src/utils.h:88:1: note: candidate: ‘scm_unused_struct* to_guile(double)’
88 | to_guile(double x)
| ^~~~~~~~
./src/utils.h:129:22: error: could not convert ‘{<expression error>}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<scm_unused_struct*>’
129 | std::vector<SCM> values = {to_guile(args)...};
| ^~~~~~
| |
| <brace-enclosed initializer list>
make[3]: *** [Makefile:652: src/bindings/signal.lo] Error 1
make[3]: Leaving directory '/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/test/agent'
make[2]: *** [Makefile:458: all-recursive] Error 1
make[2]: Leaving directory '/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon/test'
make[1]: *** [Makefile:593: all-recursive] Error 1
make[1]: Leaving directory '/tmp/guix-build-libjami-20230619.1.drv-0/jami-20230619.1/daemon'
make: *** [Makefile:499: all] Error 2
error: in phase 'build': uncaught exception:
%exception #<&invoke-error program: "make" arguments: ("-j" "8" "V=1") exit-status: 2 term-signal: #f stop-signal: #f>
phase `build' failed after 576.2 seconds
command "make" "-j" "8" "V=1" failed with status 2
```
The full build log can be seen at: https://bordeaux.guix.gnu.org/build/1b4804ec-87df-4a7c-bd37-aab493e3bca7/loghttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/890Call-Swarm fix audio binding2023-09-14T17:39:14ZSébastien BlinCall-Swarm fix audio binding# Scenario
+ Alice hosts a call-swarm between Alice/Bob/Carla
# Expected result
+ Bob should hear carla
# Current result
+ Carla and Bob can't communicate by audio, but Alice got all audio# Scenario
+ Alice hosts a call-swarm between Alice/Bob/Carla
# Expected result
+ Bob should hear carla
# Current result
+ Carla and Bob can't communicate by audio, but Alice got all audioCapucine BerthetSébastien BlinCapucine Berthethttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/889DBUS: plugins: not saving preferences changes2023-09-06T15:40:01ZAline Gondim SantosDBUS: plugins: not saving preferences changesAline Gondim SantosAline Gondim Santoshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/888Pulse use-after-free2023-08-29T16:47:28ZSébastien BlinPulse use-after-free```
=================================================================
==926351==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c0000a6728 at pc 0x555555aa2313 bp 0x7fffefff78a0 sp 0x7fffefff7890
READ of size 8 at 0x60c0000a6...```
=================================================================
==926351==ERROR: AddressSanitizer: heap-use-after-free on address 0x60c0000a6728 at pc 0x555555aa2313 bp 0x7fffefff78a0 sp 0x7fffefff7890
READ of size 8 at 0x60c0000a6728 thread T5 (threaded-ml)
[1691760278.218|9099|accel.cpp :209 ] -- Starting decoding init for cuda with default device.
[1691760278.218|9099|accel.cpp :209 ] -- Starting decoding init for vaapi with default device.
[1691760278.221|9099|accel.cpp :185 ] Device type vaapi successfully created.
[1691760278.221|9099|accel.cpp :218 ] -- Init passed for vaapi with default device.
[AVHWFramesContext @ 0x60e002153a40] [IMGUTILS @ 0x7fffcd1e4040] Picture size 0x0 is invalid
[1691760278.221|9099|accel.cpp :344 ] Failed to initialize hardware frame context: Invalid argument (-22)
[1691760278.222|9099|accel.cpp :209 ] -- Starting decoding init for vdpau with default device.
[1691760278.222|9099|media_decoder.cpp :548 ] Using H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (h264) decoder for video
[1691760278.222|9099|media_decoder.cpp :559 ] Not using hardware decoding for h264
[New Thread 0x7fffd9388640 (LWP 926606)]
[1691760278.338|9092|media_decoder.cpp :171 ] Using format video4linux2 and resolution 960x540
#0 0x555555aa2312 in std::_Function_base::_M_empty() const /usr/include/c++/11/bits/std_function.h:247
#1 0x555555ff005e in std::function<void (bool)>::operator()(bool) const /usr/include/c++/11/bits/std_function.h:588
#2 0x5555567e6cbb in operator() media/audio/pulseaudio/audiostream.cpp:221
#3 0x5555567e6d60 in _FUN media/audio/pulseaudio/audiostream.cpp:222
#4 0x7ffff73cb76f (/lib/x86_64-linux-gnu/libpulse.so.0+0x2076f)
#5 0x7ffff66d4382 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x40382)
#6 0x7ffff66d55be in pa_pdispatch_run (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x415be)
#7 0x7ffff73bf082 (/lib/x86_64-linux-gnu/libpulse.so.0+0x14082)
#8 0x7ffff66da486 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x46486)
#9 0x7ffff66db1d7 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x471d7)
#10 0x7ffff66db599 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x47599)
#11 0x7ffff66df739 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x4b739)
#12 0x7ffff73d2a72 in pa_mainloop_dispatch (/lib/x86_64-linux-gnu/libpulse.so.0+0x27a72)
#13 0x7ffff73d30c9 in pa_mainloop_iterate (/lib/x86_64-linux-gnu/libpulse.so.0+0x280c9)
#14 0x7ffff73d316f in pa_mainloop_run (/lib/x86_64-linux-gnu/libpulse.so.0+0x2816f)
#15 0x7ffff73e337c (/lib/x86_64-linux-gnu/libpulse.so.0+0x3837c)
#16 0x7ffff66edcb2 (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x59cb2)
#17 0x7ffff6094b42 in start_thread nptl/pthread_create.c:442
#18 0x7ffff61269ff (/lib/x86_64-linux-gnu/libc.so.6+0x1269ff)
0x60c0000a6728 is located 104 bytes inside of 120-byte region [0x60c0000a66c0,0x60c0000a6738)
freed by thread T1 here:
#0 0x7ffff74b724f in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:172
#1 0x555556788eec in std::default_delete<jami::AudioStream>::operator()(jami::AudioStream*) const /usr/include/c++/11/bits/unique_ptr.h:85
#2 0x55555678aa79 in std::__uniq_ptr_impl<jami::AudioStream, std::default_delete<jami::AudioStream> >::reset(jami::AudioStream*) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x1236a79)
#3 0x555556788605 in std::unique_ptr<jami::AudioStream, std::default_delete<jami::AudioStream> >::reset(jami::AudioStream*) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x1234605)
#4 0x55555677fefc in jami::PulseLayer::stopStream(jami::AudioDeviceType) media/audio/pulseaudio/pulselayer.cpp:482
#5 0x555555b14e0b in jami::AudioDeviceGuard::~AudioDeviceGuard() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:2234
#6 0x555555b563f7 in std::default_delete<jami::AudioDeviceGuard>::operator()(jami::AudioDeviceGuard*) const /usr/include/c++/11/bits/unique_ptr.h:85
#7 0x555555b42224 in std::unique_ptr<jami::AudioDeviceGuard, std::default_delete<jami::AudioDeviceGuard> >::~unique_ptr() /usr/include/c++/11/bits/unique_ptr.h:361
#8 0x55555667cf22 in jami::AudioInput::~AudioInput() media/audio/audio_input.cpp:69
#9 0x555556498105 in void __gnu_cxx::new_allocator<jami::AudioInput>::destroy<jami::AudioInput>(jami::AudioInput*) /usr/include/c++/11/ext/new_allocator.h:168
#10 0x55555649800a in void std::allocator_traits<std::allocator<jami::AudioInput> >::destroy<jami::AudioInput>(std::allocator<jami::AudioInput>&, jami::AudioInput*) /usr/include/c++/11/bits/alloc_traits.h:535
#11 0x555556497aea in std::_Sp_counted_ptr_inplace<jami::AudioInput, std::allocator<jami::AudioInput>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/11/bits/shared_ptr_base.h:528
#12 0x555555aaea2b in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/11/bits/shared_ptr_base.h:168
#13 0x555555aa7001 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/11/bits/shared_ptr_base.h:705
#14 0x555555b3dc03 in std::__shared_ptr<jami::AudioInput, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/11/bits/shared_ptr_base.h:1154
#15 0x555556407fad in std::__shared_ptr<jami::AudioInput, (__gnu_cxx::_Lock_policy)2>::reset() /usr/include/c++/11/bits/shared_ptr_base.h:1272
#16 0x55555668eeda in jami::AudioRtpSession::stop() media/audio/audio_rtp_session.cpp:250
[1691760278.631|9092|accel.cpp :209 ] -- Starting decoding init for cuda with default device.
[1691760278.631|9092|media_decoder.cpp :548 ] Using MJPEG (Motion JPEG) (mjpeg) decoder for video
[1691760278.631|9092|media_decoder.cpp :559 ] Not using hardware decoding for mjpeg
[1691760278.635|9092|video_input.cpp :346 ] created decoder with video params : size=960X536, fps=30.000000 pix=yuvj422p
[1691760278.635|9092|sinkclient.cpp :498 ] [Sink:0x613000005b50] Started - size=960x540, mixer=No
#17 0x5555562c5dc2 in jami::SIPCall::stopAllMedia() sip/sipcall.cpp:2247
#18 0x5555562bb546 in jami::SIPCall::peerHungup() sip/sipcall.cpp:1488
#19 0x555555b12746 in jami::Manager::peerHungupCall(jami::Call&) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:1970
#20 0x5555562be19c in operator() sip/sipcall.cpp:1646
#21 0x5555562dd01b in operator() manager.h:906
#22 0x5555562ea33d in __invoke_impl<void, jami::runOnMainThread<jami::SIPCall::onClosed()::<lambda()> >(jami::SIPCall::onClosed()::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:61
#23 0x5555562e841d in __invoke_r<void, jami::runOnMainThread<jami::SIPCall::onClosed()::<lambda()> >(jami::SIPCall::onClosed()::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:111
#24 0x5555562e55a8 in _M_invoke /usr/include/c++/11/bits/std_function.h:290
#25 0x555555aa7c6f in std::function<void ()>::operator()() const /usr/include/c++/11/bits/std_function.h:590
#26 0x555555c30039 in jami::ScheduledExecutor::loop() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:145
#27 0x555555c2defb in operator() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:35
#28 0x555555c33061 in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:61
#29 0x555555c33024 in __invoke<jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:96
previously allocated by thread T1 here:
#0 0x7ffff74b61e7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x55555677e7f7 in jami::PulseLayer::createStream(std::unique_ptr<jami::AudioStream, std::default_delete<jami::AudioStream> >&, jami::AudioDeviceType, jami::PaDeviceInfos const&, bool, std::function<void (unsigned long)>&&) media/audio/pulseaudio/pulselayer.cpp:414
#2 0x55555677f7c2 in jami::PulseLayer::startStream(jami::AudioDeviceType) media/audio/pulseaudio/pulselayer.cpp:457
#3 0x555555b14b11 in jami::AudioDeviceGuard::AudioDeviceGuard(jami::Manager&, jami::AudioDeviceType) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:2225
#4 0x555555b4214b in std::_MakeUniq<jami::AudioDeviceGuard>::__single_object std::make_unique<jami::AudioDeviceGuard, jami::Manager&, jami::AudioDeviceType&>(jami::Manager&, jami::AudioDeviceType&) /usr/include/c++/11/bits/unique_ptr.h:962
#5 0x555555b34049 in jami::Manager::startAudioStream(jami::AudioDeviceType) manager.h:149
#6 0x55555667e85c in jami::AudioInput::initDevice(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) media/audio/audio_input.cpp:189
#7 0x555556680e9e in jami::AudioInput::switchInput(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) media/audio/audio_input.cpp:312
#8 0x55555668cce1 in jami::AudioRtpSession::startSender() media/audio/audio_rtp_session.cpp:101
#9 0x55555668e8a1 in jami::AudioRtpSession::start(std::unique_ptr<dhtnet::IceSocket, std::default_delete<dhtnet::IceSocket> >, std::unique_ptr<dhtnet::IceSocket, std::default_delete<dhtnet::IceSocket> >) media/audio/audio_rtp_session.cpp:220
#10 0x5555562c4d05 in jami::SIPCall::startAllMedia() sip/sipcall.cpp:2173
#11 0x5555562cbcb0 in jami::SIPCall::onIceNegoSucceed() sip/sipcall.cpp:2748
#12 0x5555562d6406 in operator() sip/sipcall.cpp:3388
#13 0x5555562e0b13 in operator() manager.h:906
#14 0x5555562eaba1 in __invoke_impl<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()> >(jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:61
#15 0x5555562e91cd in __invoke_r<void, jami::runOnMainThread<jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()> >(jami::SIPCall::initIceMediaTransport(bool, std::optional<dhtnet::IceTransportOptions>)::<lambda(bool)>::<lambda()>&&, char const*, uint32_t)::<lambda()>&> /usr/include/c++/11/bits/invoke.h:111
#16 0x5555562e6a6d in _M_invoke /usr/include/c++/11/bits/std_function.h:290
#17 0x555555aa7c6f in std::function<void ()>::operator()() const /usr/include/c++/11/bits/std_function.h:590
#18 0x555555c30039 in jami::ScheduledExecutor::loop() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:145
#19 0x555555c2defb in operator() /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:35
#20 0x555555c33061 in __invoke_impl<void, jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:61
#21 0x555555c33024 in __invoke<jami::ScheduledExecutor::ScheduledExecutor(const string&)::<lambda()> > /usr/include/c++/11/bits/invoke.h:96
#22 0x555555c32fd1 in _M_invoke<0> /usr/include/c++/11/bits/std_thread.h:259
#23 0x555555c32fa5 in operator() /usr/include/c++/11/bits/std_thread.h:266
#24 0x555555c32f89 in _M_run /usr/include/c++/11/bits/std_thread.h:211
#25 0x7ffff64dc252 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xdc252)
Thread T5 (threaded-ml) created by T0 here:
[1691760278.666|9092|media_recorder.cpp :277 ] [Recorder: 0x6160010e3690] Recorder input #1: v:local
[New Thread 0x7fffce1ea640 (LWP 926607)]
#0 0x7ffff7458685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff66edd63 in pa_thread_new (/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so+0x59d63)
Thread T1 created by T0 here:
#0 0x7ffff7458685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
#1 0x7ffff64dc328 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xdc328)
#2 0x555555c2e28b in jami::ScheduledExecutor::ScheduledExecutor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/sblin/Projects/jami-project/client-qt/daemon/src/scheduled_executor.cpp:30
#3 0x555555afe37e in jami::Manager::ManagerPimpl::ManagerPimpl(jami::Manager&) /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:460
#4 0x555555b026ee in jami::Manager::Manager() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:738
#5 0x555555b024f1 in jami::Manager::instance() /home/sblin/Projects/jami-project/client-qt/daemon/src/manager.cpp:715
#6 0x555555c2b537 in libjami::init(libjami::InitFlag) /home/sblin/Projects/jami-project/client-qt/daemon/src/ring_api.cpp:69
#7 0x555555aa534c in jami::test::IceMediaCandExchangeTest::IceMediaCandExchangeTest() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x55134c)
#8 0x555555acba5d in CppUnit::ConcretTestFixtureFactory<jami::test::IceMediaCandExchangeTest>::makeFixture() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x577a5d)
#9 0x555555aa866f in CppUnit::TestSuiteBuilderContext<jami::test::IceMediaCandExchangeTest>::makeFixture() const (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x55466f)
#10 0x555555aa5dd3 in jami::test::IceMediaCandExchangeTest::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&) (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x551dd3)
#11 0x555555aa62c2 in jami::test::IceMediaCandExchangeTest::suite() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x5522c2)
#12 0x555555acba32 in CppUnit::TestSuiteFactory<jami::test::IceMediaCandExchangeTest>::makeTest() (/home/sblin/Projects/jami-project/client-qt/daemon/test/unitTest/ut_ice_media_cand_exchange+0x577a32)
#13 0x7ffff7f8172e in CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) (/lib/x86_64-linux-gnu/libcppunit-1.15.so.1+0x2772e)
SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/11/bits/std_function.h:247 in std::_Function_base::_M_empty() const
Shadow bytes around the buggy address:
0x0c188000cc90: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c188000cca0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
0x0c188000ccb0: fd fd fd fd fd fd fd fa fa fa fa fa fa fa fa fa
0x0c188000ccc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
0x0c188000ccd0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0x0c188000cce0: fd fd fd fd fd[fd]fd fa fa fa fa fa fa fa fa fa
0x0c188000ccf0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c188000cd00: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
0x0c188000cd10: 00 00 00 00 00 00 05 fa fa fa fa fa fa fa fa fa
0x0c188000cd20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fa
0x0c188000cd30: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==926351==ABORTING
[Thread 0x7fffce1ea640 (LWP 926607) exited]
[Thread 0x7fffd9388640 (LWP 926606) exited]
[Thread 0x7fffcf1ec640 (LWP 926605) exited]
[Thread 0x7fffcd1e8640 (LWP 926603) exited]
[Thread 0x7fffcd9e9640 (LWP 926602) exited]
[Thread 0x7fffcf9ed640 (LWP 926598) exited]
[Thread 0x7fffd01ee640 (LWP 926597) exited]
[Thread 0x7fffd09ef640 (LWP 926596) exited]
[Thread 0x7fffd31f4640 (LWP 926592) exited]
[Thread 0x7fffda38a640 (LWP 926591) exited]
[Thread 0x7ffface46640 (LWP 926582) exited]
[Thread 0x7fffac62f640 (LWP 926581) exited]
[Thread 0x7fffd19f1640 (LWP 926448) exited]
[Thread 0x7fffd21f2640 (LWP 926447) exited]
[Thread 0x7fffd39f5640 (LWP 926444) exited]
[Thread 0x7fffd41f6640 (LWP 926443) exited]
[Thread 0x7fffd49f7640 (LWP 926441) exited]
[Thread 0x7fffd51f8640 (LWP 926440) exited]
[Thread 0x7fffd59f9640 (LWP 926439) exited]
[Thread 0x7fffd7348640 (LWP 926438) exited]
[Thread 0x7fffd9b89640 (LWP 926403) exited]
[Thread 0x7fffd6b31640 (LWP 926402) exited]
[Thread 0x7fffd8b87640 (LWP 926374) exited]
[Thread 0x7fffdab8b640 (LWP 926369) exited]
[Thread 0x7fffdb38c640 (LWP 926368) exited]
[Thread 0x7fffdbb8d640 (LWP 926367) exited]
[Thread 0x7fffdc38e640 (LWP 926366) exited]
[Thread 0x7fffdcff5640 (LWP 926365) exited]
[Thread 0x7fffdd7f6640 (LWP 926364) exited]
[Thread 0x7fffddff7640 (LWP 926363) exited]
[Thread 0x7fffde7f8640 (LWP 926362) exited]
[Thread 0x7fffdeff9640 (LWP 926361) exited]
[Thread 0x7fffefffb640 (LWP 926359) exited]
[Thread 0x7ffff07fc640 (LWP 926358) exited]
[Thread 0x7ffff0ffd640 (LWP 926357) exited]
[Thread 0x7ffff17fe640 (LWP 926356) exited]
[Thread 0x7ffff1fff640 (LWP 926354) exited]
[Thread 0x7ffff58064c0 (LWP 926351) exited]
[Thread 0x7fffdf7fa640 (LWP 926604) exited]
[New process 926351]
[Inferior 1 (process 926351) exited with code 01]
(gdb)
```
In
```cpp
auto* op = pa_context_get_source_info_by_name(
context,
name,
[](pa_context* /*c*/, const pa_source_info* i, int /*eol*/, void* userdata) {
AudioStream* thisPtr = (AudioStream*) userdata;
// this whole closure gets called twice by pulse for some reason
// the 2nd time, i is invalid
if (!i) {
// JAMI_ERR("[audiostream] source info not found for %s", realName);
return;
}
// string compare
bool usingEchoCancel = std::string_view(i->driver) == "module-echo-cancel.c";
JAMI_WARN("[audiostream] capture stream using pulse echo cancel module? %s (%s)",
usingEchoCancel ? "yes" : "no",
i->name);
if (!thisPtr) {
JAMI_ERR("[audiostream] AudioStream pointer became invalid during "
"pa_source_info_cb_t callback!");
return;
}
thisPtr->echoCancelCb(usingEchoCancel);
},
this);
```
destruction may occurs between:
```cpp
if (!thisPtr) {
JAMI_ERR("[audiostream] AudioStream pointer became invalid during "
"pa_source_info_cb_t callback!");
return;
}
// HERE
thisPtr->echoCancelCb(usingEchoCancel);
```https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/887no video and audio in android - iOS call2023-12-27T17:50:47ZKateryna Kostiukno video and audio in android - iOS callWhen android and iOS are on LTE, there is no media in the call when the client that receives the call has TURN disabled.When android and iOS are on LTE, there is no media in the call when the client that receives the call has TURN disabled.Kateryna KostiukKateryna Kostiukhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/886Blocking contact does not work if you re-enable your own account after changi...2024-01-29T21:44:28ZElysBlocking contact does not work if you re-enable your own account after changing "allow calls from unknown contacts"Steps to reproduce (always using Jami accounts):
You have two contacts: Person A (uses desktop and useraccount1); Person B (uses Android and useraccount2)
* Person A has Person B in the contact list (and the other direction: Person B h...Steps to reproduce (always using Jami accounts):
You have two contacts: Person A (uses desktop and useraccount1); Person B (uses Android and useraccount2)
* Person A has Person B in the contact list (and the other direction: Person B has Person A in the contact list)
* Now Person A blocks Person B (settings "allow calls from unknown contacts" enabled)
* Person B can't make a call (B -\> A) anymore
HOWEVER:
* Now Person A disables "allow calls from unknown contacts" and after a few seconds also disables her own account
* Now Person A enables her own account and after a few second ENABLES "allow calls from unknown contacts"
* Now Person B makes a call (B -\> A)
* Suddenly Person A will receive the call and the blocked Person A is shown many times under "blocked contacts"
* Person A will view the chatview but Person B will never be shown in the contact list
* Person B can make a call anytime and Person A will receive it - receiving text messages doesn't work? - However the other direction is not possible: If Person A wants to make a video or audio call nothing will happen - the option for sending text messages isn't even shown.
---
If now Person A goes to settings and wants to DISABLE "allow calls from unknown contacts" Jami will crash ((also/only) after a sucessful call?)
* Jami on desktop crashes
* open Jami on desktop again
* Make a call Android -\> Desktop
* Android will show "ringing" although you'll never receive any call?Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/885Cannot create swarm with " " as display name2023-08-11T22:29:22ZLéo Banno-CloutierCannot create swarm with " " as display nameSteps to reproduce:
- Set display name to " "
- Create a swarm
Expected: Create a swarm
Actual: See image
![image](/uploads/7fdd42e9f16c2eda948563dad7559091/image.png)
Seems like the git repo cannot be initialized with a name such as...Steps to reproduce:
- Set display name to " "
- Create a swarm
Expected: Create a swarm
Actual: See image
![image](/uploads/7fdd42e9f16c2eda948563dad7559091/image.png)
Seems like the git repo cannot be initialized with a name such as " ", at line 541 of `src/jamidht/conversationrepository.cpp`
Logs:
```
[1691438791.935|36468|conversationrepository.cpp:510 ] Initial files added in ~/.local/share/jami/9b5b175723e24974/conversations/14991692706426679693/
[1691438791.935|36468|conversationrepository.cpp:541 ] Unable to create a commit signature.
[1691438791.935|36468|conversationrepository.cpp:2587] Couldn't create initial commit in ~/.local/share/jami/9b5b175723e24974/conversations/14991692706426679693
[1691438792.000|36485|message_engine.cpp :174 ] [message 8353015570259340] Message sent: success
[1691438792.000|36485|message_engine.cpp :191 ] [message 8353015570259340] Status changed to SENT
[1691438792.000|36498|message_engine.cpp :346 ] [Account 4904fceb49ead11e] saved 3 messages to ~/.cache/jami/4904fceb49ead11e/messages
[1691438792.400|36468|conversation_module.cpp :1560] [Account 9b5b175723e24974] Error while generating a conversation Couldn't create repository
[1691438792.400|36468|conversation_module.cpp :2222] Conversation doesn't exist
[1691438792.400|36468|conversation_module.cpp :2437] Conversation not found
```Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/884Verification failed with manually created plugin2023-08-07T14:22:44ZLéo Banno-CloutierVerification failed with manually created pluginSteps to reproduce:
1. Compile your own Jami plugin.
2. Click the "Install manually" button on Jami and try installing the plugin.
Expected: The plugin should be installed
Actual: Since the plugin store patch, every plugin installed on...Steps to reproduce:
1. Compile your own Jami plugin.
2. Click the "Install manually" button on Jami and try installing the plugin.
Expected: The plugin should be installed
Actual: Since the plugin store patch, every plugin installed on Jami have to contain a valid certificate, but this check should be disabled on manually installed plugins, to make it easier to develop and share small plugins without having the need to make it certified by Savoir-faire Linux.https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/883complete C ABI for plugins (then Python/JS)2023-11-20T14:09:49ZLéo Banno-Cloutiercomplete C ABI for plugins (then Python/JS)I tried writing a Jami plugin in Rust, and so far, the plugin starts as expected, however I have a hard time invoking services such as `getPluginPreferences` and `getPluginAccPreferences`.
`invokeService` takes `(const JAMI_PluginAPI* a...I tried writing a Jami plugin in Rust, and so far, the plugin starts as expected, however I have a hard time invoking services such as `getPluginPreferences` and `getPluginAccPreferences`.
`invokeService` takes `(const JAMI_PluginAPI* api, const char* name, void* data)` as parameters, and the `void *` data variable gets casted to c++ types, such as `std::string` and `std::map`, which makes the ABI not completely C compatible. I was able to make `getPluginDataPath` work by changing `static_cast<std::string>` to `static_cast<char*>`, and I'll see how far I can go without too much hassle.Léo Banno-CloutierLéo Banno-Cloutierhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/882pjsip CVE2023-09-07T18:50:01Zlinsuipjsip CVEhttps://github.com/pjsip/pjproject/security/advisories/GHSA-q9cp-8wcq-7pfr
I have applied it for NixOS jami package. https://github.com/NixOS/nixpkgs/pull/246057https://github.com/pjsip/pjproject/security/advisories/GHSA-q9cp-8wcq-7pfr
I have applied it for NixOS jami package. https://github.com/NixOS/nixpkgs/pull/246057https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/879Crash (desktop client) if two peers make a call at the same time2023-07-26T18:58:38ZElysCrash (desktop client) if two peers make a call at the same timeusing the newest beta version of Jami
Windows 10 (device 1, username 1) <-> Android (device 2, username 2)
always possible to reproduce
Steps to reproduce:
- Launch Jami (all devices)
- Now make a video call Android -> Windows 10
- (B...using the newest beta version of Jami
Windows 10 (device 1, username 1) <-> Android (device 2, username 2)
always possible to reproduce
Steps to reproduce:
- Launch Jami (all devices)
- Now make a video call Android -> Windows 10
- (BEFORE the Windows 10 user will receive the call) After that immediately make a video call Windows 10 -> Android
- Jami on Android will receive the call
- After that - the desktop client crashes
Not sure what will happen if you try to reproduce the other directionhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/878CPU rapidly increased during video call when video muted on another side2023-09-08T15:24:55ZKateryna KostiukCPU rapidly increased during video call when video muted on another sidesteps to reproduce:
- Start a video call between A and B.
- Monitor CPU usage on A.
- Mute video on B.
- On A, CPU usage increases and stays high.steps to reproduce:
- Start a video call between A and B.
- Monitor CPU usage on A.
- Mute video on B.
- On A, CPU usage increases and stays high.Adrien BéraudSébastien BlinAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/877Incompatible with fmt >= 102023-09-07T18:50:23ZDavid RungeIncompatible with fmt >= 10Hi! We're currently attempting rebuilds against fmt 10 on Arch Linux (https://archlinux.org/todo/fmt-1000/).
Unfortunately, jami-daemon is not yet compatible and building it I run into:
```
[22/157] Compiling C++ object src/libjami.so....Hi! We're currently attempting rebuilds against fmt 10 on Arch Linux (https://archlinux.org/todo/fmt-1000/).
Unfortunately, jami-daemon is not yet compatible and building it I run into:
```
[22/157] Compiling C++ object src/libjami.so.13.7.0.p/connectivity_security_tls_session.cpp.o
FAILED: src/libjami.so.13.7.0.p/connectivity_security_tls_session.cpp.o
c++ -Isrc/libjami.so.13.7.0.p -Isrc -I../jami-daemon/src -I. -I../jami-daemon -I../jami-daemon/src/jami -I../jami-daemon/src/media -I../jami-daemon/src/jamidht/eth -I/usr/include/p11-kit-1 -I/build/jami-daemon/src/jami-daemon/contrib/x86_64-pc-linux-gnu/include -I/usr/include/upnp -I/usr/include/webrtc_audio_processin
g -flto=auto -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -std=gnu++17 -DHAVE_CONFIG_H -DLIBJAMI_BUILD -Djami_EXPORTS -DASIO_STANDALONE -DMSGPACK_NO_BOOST -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protect
ion -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/build/jami-daemon/src=/usr/src/debug/jami-daemon -flto=auto -fpermissive -fPIC -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD -DWEBRTC_POSIX -D_REENTRANT -DPJ_AUTOCONF=1 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -pthread -MD -MQ src/libjami.so.13.7.0.p/conne
ctivity_security_tls_session.cpp.o -MF src/libjami.so.13.7.0.p/connectivity_security_tls_session.cpp.o.d -o src/libjami.so.13.7.0.p/connectivity_security_tls_session.cpp.o -c ../jami-daemon/src/connectivity/security/tls_session.cpp
In file included from ../jami-daemon/src/manager.h:38,
from ../jami-daemon/src/connectivity/security/tls_session.cpp:32:
../jami-daemon/src/scheduled_executor.h:108: warning: ignoring ‘#pragma GCC pop’ [-Wunknown-pragmas]
108 | #pragma GCC pop
|
../jami-daemon/src/scheduled_executor.h:158: warning: ignoring ‘#pragma GCC pop’ [-Wunknown-pragmas]
158 | #pragma GCC pop
|
In file included from ../jami-daemon/src/logger.h:27,
from ../jami-daemon/src/connectivity/security/tls_session.cpp:29:
/usr/include/fmt/core.h: In instantiation of ‘constexpr decltype (ctx.begin()) fmt::v10::detail::parse_format_specs(ParseContext&) [with T = gnutls_credentials_type_t; ParseContext = compile_parse_context<char>; decltype (ctx.begin()) = const char*]’:
/usr/include/fmt/core.h:2620:22: required from ‘constexpr fmt::v10::detail::format_string_checker<Char, Args>::format_string_checker(fmt::v10::basic_string_view<Char>) [with Char = char; Args = {gnutls_credentials_type_t}]’
/usr/include/fmt/core.h:2670:56: required from ‘void fmt::v10::detail::check_format_string(S) [with Args = {gnutls_credentials_type_t&}; S = jami::tls::TlsSession::TlsSessionImpl::handleStateHandshake(jami::tls::TlsSessionState)::<lambda()>::FMT_COMPILE_STRING; typename std::enable_if<is_compile_string<S>::value, in
t>::type <anonymous> = 0]’
/usr/include/fmt/core.h:2772:41: required from ‘fmt::v10::basic_format_string<Char, Args>::basic_format_string(const S&) [with S = jami::tls::TlsSession::TlsSessionImpl::handleStateHandshake(jami::tls::TlsSessionState)::<lambda()>::FMT_COMPILE_STRING; typename std::enable_if<std::is_convertible<const S&, fmt::v10::b
asic_string_view<Char> >::value, int>::type <anonymous> = 0; Char = char; Args = {gnutls_credentials_type_t&}]’
../jami-daemon/src/logger.h:173:51: required from ‘void jami::log::error(const char*, int, S&&, Args&& ...) [with S = jami::tls::TlsSession::TlsSessionImpl::handleStateHandshake(jami::tls::TlsSessionState)::<lambda()>::FMT_COMPILE_STRING; Args = {gnutls_credentials_type_t&}]’
../jami-daemon/src/connectivity/security/tls_session.cpp:1226:9: required from here
/usr/include/fmt/core.h:2561:10: error: use of deleted function ‘fmt::v10::formatter<T, Char, Enable>::formatter() [with T = gnutls_credentials_type_t; Char = char; Enable = void]’
2561 | return formatter<mapped_type, char_type>().parse(ctx);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/fmt/core.h:792:3: note: declared here
792 | formatter() = delete;
| ^~~~~~~~~
/usr/include/fmt/core.h: In instantiation of ‘constexpr fmt::v10::detail::value<Context> fmt::v10::detail::make_value(T&&) [with Context = fmt::v10::basic_format_context<fmt::v10::appender, char>; T = gnutls_credentials_type_t&]’:
/usr/include/fmt/core.h:1711:29: required from ‘constexpr fmt::v10::detail::value<Context> fmt::v10::detail::make_arg(T&&) [with bool IS_PACKED = true; Context = fmt::v10::basic_format_context<fmt::v10::appender, char>; type <anonymous> = fmt::v10::detail::type::custom_type; T = gnutls_credentials_type_t&; typename
std::enable_if<IS_PACKED, int>::type <anonymous> = 0]’
/usr/include/fmt/core.h:1827:77: required from ‘constexpr fmt::v10::format_arg_store<Context, Args>::format_arg_store(T&& ...) [with T = {gnutls_credentials_type_t&}; Context = fmt::v10::basic_format_context<fmt::v10::appender, char>; Args = {gnutls_credentials_type_t}]’
/usr/include/fmt/core.h:1844:31: required from ‘constexpr fmt::v10::format_arg_store<Context, typename std::remove_cv<typename std::remove_reference<T>::type>::type ...> fmt::v10::make_format_args(T&& ...) [with Context = basic_format_context<appender, char>; T = {gnutls_credentials_type_t&}]’
/usr/include/fmt/core.h:2817:44: required from ‘std::string fmt::v10::format(format_string<T ...>, T&& ...) [with T = {gnutls_credentials_type_t&}; std::string = std::__cxx11::basic_string<char>; format_string<T ...> = basic_format_string<char, gnutls_credentials_type_t&>]’
../jami-daemon/src/logger.h:173:51: required from ‘void jami::log::error(const char*, int, S&&, Args&& ...) [with S = jami::tls::TlsSession::TlsSessionImpl::handleStateHandshake(jami::tls::TlsSessionState)::<lambda()>::FMT_COMPILE_STRING; Args = {gnutls_credentials_type_t&}]’
../jami-daemon/src/connectivity/security/tls_session.cpp:1226:9: required from here
/usr/include/fmt/core.h:1691:7: error: static assertion failed: Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#udt
1691 | formattable,
| ^~~~~~~~~~~
/usr/include/fmt/core.h:1691:7: note: ‘formattable’ evaluates to false
```
An update to current fmt would be much appreciated. Thanks!https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/876Incompatible with libgit2 1.7.02023-07-21T14:26:03ZDavid RungeIncompatible with libgit2 1.7.0Hi! I'm currently trying to rebuild this project against libgit2 1.7.0 on Arch Linux.
I'm building from https://git.jami.net/savoirfairelinux/jami-daemon/-/commit/0ec1d2e35301d5d420606288f804b376d1fd6be5 since [there are no releases](ht...Hi! I'm currently trying to rebuild this project against libgit2 1.7.0 on Arch Linux.
I'm building from https://git.jami.net/savoirfairelinux/jami-daemon/-/commit/0ec1d2e35301d5d420606288f804b376d1fd6be5 since [there are no releases](https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/124) (:sob:) and some time after that this project fails to build against opendht 2.5.5 (which we package), due to [updating the vendored opendht to a prerelease version](https://git.jami.net/savoirfairelinux/jami-daemon/-/commit/12288b33c7f6f360892bff0a5cc6aaedc4721103) (:sob:).
I see many instances of:
```
/usr/include/git2/sys/transport.h:116:17: error: ‘git_oidarray’ has not been declared
116 | git_oidarray *out,
| ^~~~~~~~~~~~
```
Full build log:
[jami-daemon-20230620-1-x86_64-build.log](/uploads/4432f30e6342f4a7229db6706b6d5222/jami-daemon-20230620-1-x86_64-build.log)
FWIW: You are currently vendoring [libgit2 1.1.0](https://github.com/libgit2/libgit2/releases/tag/v1.1.0) in [jami-20230619.1](https://dl.jami.net/release/tarballs/jami-20230619.1.tar.gz) which is from 2020. I am not really sure if this version is affected by [CVE-2023-22742](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22742), but either way it would be very good to see an update to this library, as it currently blocks our rebuild of libgit2https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/875Video starts automatically when creating a conference by adding a participant2023-07-31T12:51:48ZAlexander Lussier-CullenVideo starts automatically when creating a conference by adding a participantPlease specify the following:
- Jami version: jami-client-android@8c707034cf7dfaba5eb788f9d5b45c06888e0d96
- Device model: Emulator (Android1) & Samsung A14 (Android2)
- Android version: 9 (Android1) & 13 (Android2)
## Steps to r...Please specify the following:
- Jami version: jami-client-android@8c707034cf7dfaba5eb788f9d5b45c06888e0d96
- Device model: Emulator (Android1) & Samsung A14 (Android2)
- Android version: 9 (Android1) & 13 (Android2)
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Start an audio call from Android1 -> QT
2. Add a participant of Android2
3. Android2 starts their camera
- Actual result: Android1 now has their camera started and shared
- Expected result: Android1 doesn't have their camera started and sharedAlexander Lussier-CullenAlexander Lussier-Cullenhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/874Unit test - mock camera to allow to use video in unit tests2023-07-17T12:11:22ZSébastien BlinUnit test - mock camera to allow to use video in unit testsFor now we don't check the video from the unit tests as there is generally no camera on the build machinesFor now we don't check the video from the unit tests as there is generally no camera on the build machineshttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/873Starting video doesn't work2023-07-31T12:49:11ZAlexander Lussier-CullenStarting video doesn't work- Jami version: jami-client-android@48be2a8b11273c84dff7e858148c2b197b51f615
- Device model: Moto G Fast
- Android version: 11
## Steps to reproduce
- Steps:
1. Start video call from QT -> Android
2. Answer call with au...- Jami version: jami-client-android@48be2a8b11273c84dff7e858148c2b197b51f615
- Device model: Moto G Fast
- Android version: 11
## Steps to reproduce
- Steps:
1. Start video call from QT -> Android
2. Answer call with audio only on Android
3. Turn on the camera on Android
- Actual result: The QT client receives no video and the Android client preview is blacked out.
- Expected result: The QT client receives video and the Android client preview shows the camera feed.
## Additional information
* Even with my fixes made for screensharing, this can be reproduce by doing the same with a screenshare instead of the camera.
* Simply cycling the camera after the first time fails makes it workAlexander Lussier-CullenAlexander Lussier-Cullen